2.5.21 - console_unblank.
Hi,
in my s390 bag of patches I have another one... console_unblank can cause an endless trap loop if the console semaphore is already taken and console_unblank is called in interrupt context. To avoid the trap loop just try to take to semaphore with down_trylock and exit if its fails. Its not perfect since c->unblank() is not called in this case but way better than an endlessly looping cpu. s390/s390x are the only two architectures that still use console_unblank and for us this is acceptable. The second change in this patch is to increase the log buffer to 128K. We do print a LOT of message if cio_msg=yes is used.
blue skies,
Martin.
kernel/printk.c +10 -1
@@ -31,6 +31,8 @@#if defined(CONFIG_MULTIQUAD ) || defined(CONFIG_IA64 )#define LOG_BUF_LEN (65536) +#elif defined(CONFIG_ARCH_S390 ) +#define LOG_BUF_LEN (131072)#elif defined(CONFIG_SMP )#define LOG_BUF_LEN (32768)#else
@@ -553,7 +555,14 @@ {struct console *c; -acquire_console_sem (); +/* +* Try to get the console semaphore. If someone else owns it +* we have to return without unblanking because console_unblank +* may be called in interrupt context. +*/ +if (down_trylock (&console_sem) !=0 ) +return ; + console_may_schedule =0 ;for (c = console_drivers; c !=NULL ; c = c->next)if ((c->flags &CON_ENABLED ) && c->unblank) c->unblank ();