summaryrefslogtreecommitdiff
path: root/debian/patches/upstreamme0004-kern-printf-do-not-serialize-printf-and-co.patch
blob: 367d772fbf10dab52aeefba870ba8b5d2970ef76 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
From c9e087748246622d824b5ab83ad8cc79b31014d1 Mon Sep 17 00:00:00 2001
From: Justus Winter <4winter@informatik.uni-hamburg.de>
Date: Sat, 18 Jul 2015 16:17:50 +0200
Subject: [PATCH gnumach 4/5] kern/printf: do not serialize printf and co

A lot of code assumes that printf is re-entrant, e.g. the pagination
code in the debugger, or any use of assert inside the console driver.

* kern/printf.c: Drop the lock serializing calls to `_doprnt'.
(printf_init): Remove function.
* kern/printf.h (printf_init): Remove declaration.
* kern/startup.c (setup_main): Remove call to `printf_init'.
---
 kern/printf.c  | 33 ---------------------------------
 kern/printf.h  |  2 --
 kern/startup.c |  2 --
 3 files changed, 37 deletions(-)

diff --git a/kern/printf.c b/kern/printf.c
index 13f2dc0..50f2362 100644
--- a/kern/printf.c
+++ b/kern/printf.c
@@ -151,21 +151,6 @@ void printnum(
 
 boolean_t	_doprnt_truncates = FALSE;
 
-/* printf could be called at _any_ point during system initialization,
-   including before printf_init() gets called from the "normal" place
-   in kern/startup.c.  */
-boolean_t	_doprnt_lock_initialized = FALSE;
-decl_simple_lock_data(,_doprnt_lock)
-
-void printf_init(void)
-{
-	if (!_doprnt_lock_initialized)
-	{
-		_doprnt_lock_initialized = TRUE;
-		simple_lock_init(&_doprnt_lock);
-	}
-}
-
 void _doprnt(
 	const char 	*fmt,
 	va_list		argp,
@@ -187,22 +172,6 @@ void _doprnt(
 	int		base;
 	char		c;
 
-	printf_init();
-
-#if 0
-	/* Make sure that we get *some* printout, no matter what */
-	simple_lock(&_doprnt_lock);
-#else
-	{
-		int i = 0;
-		while (i < 1*1024*1024) {
-			if (simple_lock_try(&_doprnt_lock))
-				break;
-			i++;
-		}
-	}
-#endif
-
 	while ((c = *fmt) != '\0') {
 	    if (c != '%') {
 		(*putc)(c, putc_arg);
@@ -522,8 +491,6 @@ void _doprnt(
 	    }
 	fmt++;
 	}
-
-	simple_unlock(&_doprnt_lock);
 }
 
 /*
diff --git a/kern/printf.h b/kern/printf.h
index 76047f0..b72640a 100644
--- a/kern/printf.h
+++ b/kern/printf.h
@@ -27,8 +27,6 @@
 #include <sys/types.h>
 #include <stdarg.h>
 
-extern void printf_init (void);
-
 extern void _doprnt (const char *fmt,
 		     va_list argp, 
 		     void (*putc)(char, vm_offset_t), 
diff --git a/kern/startup.c b/kern/startup.c
index f9f0c34..30cff5c 100644
--- a/kern/startup.c
+++ b/kern/startup.c
@@ -39,7 +39,6 @@
 #include <kern/machine.h>
 #include <kern/mach_factor.h>
 #include <kern/mach_clock.h>
-#include <kern/printf.h>
 #include <kern/processor.h>
 #include <kern/rdxtree.h>
 #include <kern/sched_prim.h>
@@ -109,7 +108,6 @@ void setup_main(void)
 #endif	/* MACH_KDB */
 
 	panic_init();
-	printf_init();
 
 	sched_init();
 	vm_mem_bootstrap();
-- 
2.1.4