[PATCH] m68knommu: fix ColdFire startup code to properly handle non 0 based ram
[pandora-kernel.git] / kernel / printk.c
index 01b58d7..5092397 100644 (file)
@@ -588,8 +588,7 @@ asmlinkage int vprintk(const char *fmt, va_list args)
                        log_level_unknown = 1;
        }
 
-       if (!cpu_online(smp_processor_id()) &&
-           system_state != SYSTEM_RUNNING) {
+       if (!cpu_online(smp_processor_id())) {
                /*
                 * Some console drivers may assume that per-cpu resources have
                 * been allocated.  So don't allow them to be called by this
@@ -876,8 +875,10 @@ void register_console(struct console * console)
                        break;
                console->flags |= CON_ENABLED;
                console->index = console_cmdline[i].index;
-               if (i == preferred_console)
+               if (i == selected_console) {
                        console->flags |= CON_CONSDEV;
+                       preferred_console = selected_console;
+               }
                break;
        }
 
@@ -897,6 +898,8 @@ void register_console(struct console * console)
        if ((console->flags & CON_CONSDEV) || console_drivers == NULL) {
                console->next = console_drivers;
                console_drivers = console;
+               if (console->next)
+                       console->next->flags &= ~CON_CONSDEV;
        } else {
                console->next = console_drivers->next;
                console_drivers->next = console;
@@ -937,10 +940,14 @@ int unregister_console(struct console * console)
        /* If last console is removed, we re-enable picking the first
         * one that gets registered. Without that, pmac early boot console
         * would prevent fbcon from taking over.
+        *
+        * If this isn't the last console and it has CON_CONSDEV set, we
+        * need to set it on the next preferred console.
         */
        if (console_drivers == NULL)
                preferred_console = selected_console;
-               
+       else if (console->flags & CON_CONSDEV)
+               console_drivers->flags |= CON_CONSDEV;
 
        release_console_sem();
        return res;