static DEFINE_MUTEX(target_cleanup_list_lock);
 
 /*
- * Console driver for extended netconsoles.  Registered on the first use to
- * avoid unnecessarily enabling ext message formatting.
+ * Console driver for netconsoles.  Register only consoles that have
+ * an associated target of the same type.
  */
-static struct console netconsole_ext;
+static struct console netconsole_ext, netconsole;
 
 struct netconsole_target_stats  {
        u64_stats_t xmit_drop_count;
        struct u64_stats_sync syncp;
 };
 
+enum console_type {
+       CONS_BASIC = BIT(0),
+       CONS_EXTENDED = BIT(1),
+};
+
 /* Features enabled in sysdata. Contrary to userdata, this data is populated by
  * the kernel. The fields are designed as bitwise flags, allowing multiple
  * features to be set in sysdata_fields.
                if (nt->extended && !console_is_registered(&netconsole_ext))
                        register_console(&netconsole_ext);
 
+               /* User might be enabling the basic format target for the very
+                * first time, make sure the console is registered.
+                */
+               if (!nt->extended && !console_is_registered(&netconsole))
+                       register_console(&netconsole);
+
                /*
                 * Skip netpoll_parse_options() -- all the attributes are
                 * already configured via configfs. Just print them out.
 {
        int err;
        struct netconsole_target *nt, *tmp;
+       u32 console_type_needed = 0;
        unsigned int count = 0;
-       bool extended = false;
        unsigned long flags;
        char *target_config;
        char *input = config;
                        }
                        /* Dump existing printks when we register */
                        if (nt->extended) {
-                               extended = true;
+                               console_type_needed |= CONS_EXTENDED;
                                netconsole_ext.flags |= CON_PRINTBUFFER;
                        } else {
+                               console_type_needed |= CONS_BASIC;
                                netconsole.flags |= CON_PRINTBUFFER;
                        }
 
        if (err)
                goto undonotifier;
 
-       if (extended)
+       if (console_type_needed & CONS_EXTENDED)
                register_console(&netconsole_ext);
-       register_console(&netconsole);
+       if (console_type_needed & CONS_BASIC)
+               register_console(&netconsole);
        pr_info("network logging started\n");
 
        return err;
 
        if (console_is_registered(&netconsole_ext))
                unregister_console(&netconsole_ext);
-       unregister_console(&netconsole);
+       if (console_is_registered(&netconsole))
+               unregister_console(&netconsole);
        dynamic_netconsole_exit();
        unregister_netdevice_notifier(&netconsole_netdev_notifier);