Message ID | 20081030131734.c74e614d.akpm@linux-foundation.org |
---|---|
State | New, archived |
Headers | show |
On Thu, 2008-10-30 at 13:17 -0700, ext Andrew Morton wrote: > On Wed, 22 Oct 2008 18:16:28 +0300 > Viktor Rosendahl <viktor.rosendahl@nokia.com> wrote: <clip> > > void __attribute__((weak)) bust_spinlocks(int yes) > > @@ -22,6 +23,7 @@ void __attribute__((weak)) bust_spinlocks(int yes) > > #ifdef CONFIG_VT > > unblank_screen(); > > #endif > > + console_unblank(); > > if (--oops_in_progress == 0) > > wake_up_klogd(); > > } > > That looks logical. From my reading we can now remove that > unblank_screen(), because the console_unblank() will call > vt_console_driver.unblank() for us? For some reason, we did not think about it here when the N810 kernel was fixed. It looks good to me but if you do it, then there will be a slight difference in behavior, since console_unblank() will call vt_console_driver.unblank() only if the console_sem can be acquired, otherwise it just returns without doing anything. Maybe console_unblank() should be changed to not care too much about the console_sem if an oops is in progress? best regards, Viktor
On Fri, 31 Oct 2008 15:05:28 +0200 Viktor Rosendahl <Viktor.Rosendahl@nokia.com> wrote: > On Thu, 2008-10-30 at 13:17 -0700, ext Andrew Morton wrote: > > On Wed, 22 Oct 2008 18:16:28 +0300 > > Viktor Rosendahl <viktor.rosendahl@nokia.com> wrote: > <clip> > > > void __attribute__((weak)) bust_spinlocks(int yes) > > > @@ -22,6 +23,7 @@ void __attribute__((weak)) bust_spinlocks(int yes) > > > #ifdef CONFIG_VT > > > unblank_screen(); > > > #endif > > > + console_unblank(); > > > if (--oops_in_progress == 0) > > > wake_up_klogd(); > > > } > > > > That looks logical. From my reading we can now remove that > > unblank_screen(), because the console_unblank() will call > > vt_console_driver.unblank() for us? > > For some reason, we did not think about it here when the N810 kernel was > fixed. It looks good to me but if you do it, then there will be a slight > difference in behavior, since console_unblank() will call > vt_console_driver.unblank() only if the console_sem can be acquired, > otherwise it just returns without doing anything. > > Maybe console_unblank() should be changed to not care too much about the > console_sem if an oops is in progress? > hm, yeah. Things get messy if we take an oops with console_sem held. I'll drop the cleanup patch - I don't have time to think about and test anything useful like that :(
--- a/lib/bust_spinlocks.c~oops-handling-ensure-that-any-oops-is-flushed-to-the-mtdoops-console-fix +++ a/lib/bust_spinlocks.c @@ -11,7 +11,6 @@ #include <linux/spinlock.h> #include <linux/tty.h> #include <linux/wait.h> -#include <linux/vt_kern.h> #include <linux/console.h> @@ -20,9 +19,6 @@ void __attribute__((weak)) bust_spinlock if (yes) { ++oops_in_progress; } else { -#ifdef CONFIG_VT - unblank_screen(); -#endif console_unblank(); if (--oops_in_progress == 0) wake_up_klogd();