| From 6d608d2bcf28b604b01f7be3d5e413df5de3f6b8 Mon Sep 17 00:00:00 2001 |
| From: Mao Wenan <maowenan@huawei.com> |
| Date: Fri, 8 Mar 2019 22:08:31 +0800 |
| Subject: sc16is7xx: missing unregister/delete driver on error in |
| sc16is7xx_init() |
| |
| [ Upstream commit ac0cdb3d990108df795b676cd0d0e65ac34b2273 ] |
| |
| Add the missing uart_unregister_driver() and i2c_del_driver() before return |
| from sc16is7xx_init() in the error handling case. |
| |
| Signed-off-by: Mao Wenan <maowenan@huawei.com> |
| Reviewed-by: Vladimir Zapolskiy <vz@mleia.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Sasha Levin (Microsoft) <sashal@kernel.org> |
| --- |
| drivers/tty/serial/sc16is7xx.c | 12 ++++++++++-- |
| 1 file changed, 10 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/tty/serial/sc16is7xx.c b/drivers/tty/serial/sc16is7xx.c |
| index 47b41159a8bc..55b178c1bd65 100644 |
| --- a/drivers/tty/serial/sc16is7xx.c |
| +++ b/drivers/tty/serial/sc16is7xx.c |
| @@ -1481,7 +1481,7 @@ static int __init sc16is7xx_init(void) |
| ret = i2c_add_driver(&sc16is7xx_i2c_uart_driver); |
| if (ret < 0) { |
| pr_err("failed to init sc16is7xx i2c --> %d\n", ret); |
| - return ret; |
| + goto err_i2c; |
| } |
| #endif |
| |
| @@ -1489,10 +1489,18 @@ static int __init sc16is7xx_init(void) |
| ret = spi_register_driver(&sc16is7xx_spi_uart_driver); |
| if (ret < 0) { |
| pr_err("failed to init sc16is7xx spi --> %d\n", ret); |
| - return ret; |
| + goto err_spi; |
| } |
| #endif |
| return ret; |
| + |
| +err_spi: |
| +#ifdef CONFIG_SERIAL_SC16IS7XX_I2C |
| + i2c_del_driver(&sc16is7xx_i2c_uart_driver); |
| +#endif |
| +err_i2c: |
| + uart_unregister_driver(&sc16is7xx_uart); |
| + return ret; |
| } |
| module_init(sc16is7xx_init); |
| |
| -- |
| 2.19.1 |
| |