Skip to content

Commit 528f311

Browse files
Jiri Slaby (SUSE)gregkh
authored andcommitted
tty: srmcons: fix retval from srmcons_init()
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) <[email protected]> Tested-by: Magnus Lindholm <[email protected]> Cc: Richard Henderson <[email protected]> Cc: Matt Turner <[email protected]> Cc: [email protected] Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 794d7b2 commit 528f311

File tree

1 file changed

+33
-29
lines changed

1 file changed

+33
-29
lines changed

arch/alpha/kernel/srmcons.c

Lines changed: 33 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -196,40 +196,44 @@ static const struct tty_operations srmcons_ops = {
196196
static int __init
197197
srmcons_init(void)
198198
{
199+
struct tty_driver *driver;
200+
int err;
201+
199202
timer_setup(&srmcons_singleton.timer, srmcons_receive_chars, 0);
200-
if (srm_is_registered_console) {
201-
struct tty_driver *driver;
202-
int err;
203-
204-
driver = tty_alloc_driver(MAX_SRM_CONSOLE_DEVICES, 0);
205-
if (IS_ERR(driver))
206-
return PTR_ERR(driver);
207-
208-
tty_port_init(&srmcons_singleton.port);
209-
210-
driver->driver_name = "srm";
211-
driver->name = "srm";
212-
driver->major = 0; /* dynamic */
213-
driver->minor_start = 0;
214-
driver->type = TTY_DRIVER_TYPE_SYSTEM;
215-
driver->subtype = SYSTEM_TYPE_SYSCONS;
216-
driver->init_termios = tty_std_termios;
217-
tty_set_operations(driver, &srmcons_ops);
218-
tty_port_link_device(&srmcons_singleton.port, driver, 0);
219-
err = tty_register_driver(driver);
220-
if (err) {
221-
tty_driver_kref_put(driver);
222-
tty_port_destroy(&srmcons_singleton.port);
223-
return err;
224-
}
225-
srmcons_driver = driver;
226-
}
227203

228-
return -ENODEV;
204+
if (!srm_is_registered_console)
205+
return -ENODEV;
206+
207+
driver = tty_alloc_driver(MAX_SRM_CONSOLE_DEVICES, 0);
208+
if (IS_ERR(driver))
209+
return PTR_ERR(driver);
210+
211+
tty_port_init(&srmcons_singleton.port);
212+
213+
driver->driver_name = "srm";
214+
driver->name = "srm";
215+
driver->major = 0; /* dynamic */
216+
driver->minor_start = 0;
217+
driver->type = TTY_DRIVER_TYPE_SYSTEM;
218+
driver->subtype = SYSTEM_TYPE_SYSCONS;
219+
driver->init_termios = tty_std_termios;
220+
tty_set_operations(driver, &srmcons_ops);
221+
tty_port_link_device(&srmcons_singleton.port, driver, 0);
222+
err = tty_register_driver(driver);
223+
if (err)
224+
goto err_free_drv;
225+
226+
srmcons_driver = driver;
227+
228+
return 0;
229+
err_free_drv:
230+
tty_driver_kref_put(driver);
231+
tty_port_destroy(&srmcons_singleton.port);
232+
233+
return err;
229234
}
230235
device_initcall(srmcons_init);
231236

232-
233237
/*
234238
* The console driver
235239
*/

0 commit comments

Comments
 (0)