]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - kernel/printk.c
sis190: account for Tx errors
[linux-2.6-omap-h63xx.git] / kernel / printk.c
index c46a20a19a153f06e938d469bf760ee893b63114..bdd4ea8c3f2b67520c1a55e0ba34a0a247d350fc 100644 (file)
@@ -643,8 +643,21 @@ static int acquire_console_semaphore_for_printk(unsigned int cpu)
 {
        int retval = 0;
 
-       if (can_use_console(cpu))
-               retval = !try_acquire_console_sem();
+       if (!try_acquire_console_sem()) {
+               retval = 1;
+
+               /*
+                * If we can't use the console, we need to release
+                * the console semaphore by hand to avoid flushing
+                * the buffer. We need to hold the console semaphore
+                * in order to do this test safely.
+                */
+               if (!can_use_console(cpu)) {
+                       console_locked = 0;
+                       up(&console_sem);
+                       retval = 0;
+               }
+       }
        printk_cpu = UINT_MAX;
        spin_unlock(&logbuf_lock);
        return retval;