]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
tty: srmcons: fix retval from srmcons_init()
authorJiri Slaby (SUSE) <jirislaby@kernel.org>
Mon, 17 Mar 2025 07:00:36 +0000 (08:00 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 20 Mar 2025 15:00:51 +0000 (08:00 -0700)
The value returned from srmcons_init() was -ENODEV for over 2 decades.
But it does not matter, given device_initcall() ignores retvals.

But to be honest, return 0 in case the tty driver was registered
properly.

To do that, the condition is inverted and a short path taken in case of
error.

err_free_drv is introduced as it will be used from more places later.

Signed-off-by: Jiri Slaby (SUSE) <jirislaby@kernel.org>
Tested-by: Magnus Lindholm <linmag7@gmail.com>
Cc: Richard Henderson <richard.henderson@linaro.org>
Cc: Matt Turner <mattst88@gmail.com>
Cc: linux-alpha@vger.kernel.org
Link: https://lore.kernel.org/r/20250317070046.24386-22-jirislaby@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/alpha/kernel/srmcons.c

index 3e61073f4b3018123ec73e265546fc689e78e3db..b9cd364e814e0037cf3e5a2903158a4e762161ee 100644 (file)
@@ -196,40 +196,44 @@ static const struct tty_operations srmcons_ops = {
 static int __init
 srmcons_init(void)
 {
+       struct tty_driver *driver;
+       int err;
+
        timer_setup(&srmcons_singleton.timer, srmcons_receive_chars, 0);
-       if (srm_is_registered_console) {
-               struct tty_driver *driver;
-               int err;
-
-               driver = tty_alloc_driver(MAX_SRM_CONSOLE_DEVICES, 0);
-               if (IS_ERR(driver))
-                       return PTR_ERR(driver);
-
-               tty_port_init(&srmcons_singleton.port);
-
-               driver->driver_name = "srm";
-               driver->name = "srm";
-               driver->major = 0;      /* dynamic */
-               driver->minor_start = 0;
-               driver->type = TTY_DRIVER_TYPE_SYSTEM;
-               driver->subtype = SYSTEM_TYPE_SYSCONS;
-               driver->init_termios = tty_std_termios;
-               tty_set_operations(driver, &srmcons_ops);
-               tty_port_link_device(&srmcons_singleton.port, driver, 0);
-               err = tty_register_driver(driver);
-               if (err) {
-                       tty_driver_kref_put(driver);
-                       tty_port_destroy(&srmcons_singleton.port);
-                       return err;
-               }
-               srmcons_driver = driver;
-       }
 
-       return -ENODEV;
+       if (!srm_is_registered_console)
+               return -ENODEV;
+
+       driver = tty_alloc_driver(MAX_SRM_CONSOLE_DEVICES, 0);
+       if (IS_ERR(driver))
+               return PTR_ERR(driver);
+
+       tty_port_init(&srmcons_singleton.port);
+
+       driver->driver_name = "srm";
+       driver->name = "srm";
+       driver->major = 0;      /* dynamic */
+       driver->minor_start = 0;
+       driver->type = TTY_DRIVER_TYPE_SYSTEM;
+       driver->subtype = SYSTEM_TYPE_SYSCONS;
+       driver->init_termios = tty_std_termios;
+       tty_set_operations(driver, &srmcons_ops);
+       tty_port_link_device(&srmcons_singleton.port, driver, 0);
+       err = tty_register_driver(driver);
+       if (err)
+               goto err_free_drv;
+
+       srmcons_driver = driver;
+
+       return 0;
+err_free_drv:
+       tty_driver_kref_put(driver);
+       tty_port_destroy(&srmcons_singleton.port);
+
+       return err;
 }
 device_initcall(srmcons_init);
 
-\f
 /*
  * The console driver
  */