]> Pileus Git - ~andy/linux/blobdiff - kernel/printk.c
[CPUFREQ][8/8] acpi-cpufreq: Add support for freq feedback from hardware
[~andy/linux] / kernel / printk.c
index 65ca0688f86f1b78fafd144671a17015b2fd1525..f7d427ef50385d70db6a0222ea3c53a0d8738d03 100644 (file)
@@ -721,6 +721,7 @@ int __init add_preferred_console(char *name, int idx, char *options)
        return 0;
 }
 
+#ifndef CONFIG_DISABLE_CONSOLE_SUSPEND
 /**
  * suspend_console - suspend the console subsystem
  *
@@ -728,6 +729,7 @@ int __init add_preferred_console(char *name, int idx, char *options)
  */
 void suspend_console(void)
 {
+       printk("Suspending console(s)\n");
        acquire_console_sem();
        console_suspended = 1;
 }
@@ -737,6 +739,7 @@ void resume_console(void)
        console_suspended = 0;
        release_console_sem();
 }
+#endif /* CONFIG_DISABLE_CONSOLE_SUSPEND */
 
 /**
  * acquire_console_sem - lock the console system for exclusive use.
@@ -799,6 +802,9 @@ void release_console_sem(void)
                up(&secondary_console_sem);
                return;
        }
+
+       console_may_schedule = 0;
+
        for ( ; ; ) {
                spin_lock_irqsave(&logbuf_lock, flags);
                wake_klogd |= log_start - log_end;
@@ -812,18 +818,10 @@ void release_console_sem(void)
                local_irq_restore(flags);
        }
        console_locked = 0;
-       console_may_schedule = 0;
        up(&console_sem);
        spin_unlock_irqrestore(&logbuf_lock, flags);
-       if (wake_klogd && !oops_in_progress && waitqueue_active(&log_wait)) {
-               /*
-                * If we printk from within the lock dependency code,
-                * from within the scheduler code, then do not lock
-                * up due to self-recursion:
-                */
-               if (!lockdep_internal())
-                       wake_up_interruptible(&log_wait);
-       }
+       if (wake_klogd && !oops_in_progress && waitqueue_active(&log_wait))
+               wake_up_interruptible(&log_wait);
 }
 EXPORT_SYMBOL(release_console_sem);