summaryrefslogtreecommitdiff
path: root/debian/patches/upstreamme0004-kern-printf-do-not-serialize-printf-and-co.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/upstreamme0004-kern-printf-do-not-serialize-printf-and-co.patch')
-rw-r--r--debian/patches/upstreamme0004-kern-printf-do-not-serialize-printf-and-co.patch112
1 files changed, 112 insertions, 0 deletions
diff --git a/debian/patches/upstreamme0004-kern-printf-do-not-serialize-printf-and-co.patch b/debian/patches/upstreamme0004-kern-printf-do-not-serialize-printf-and-co.patch
new file mode 100644
index 0000000..367d772
--- /dev/null
+++ b/debian/patches/upstreamme0004-kern-printf-do-not-serialize-printf-and-co.patch
@@ -0,0 +1,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
+