Message ID | 20210630133359.59275-1-m.shams@samsung.com |
---|---|
State | Superseded |
Headers | show |
Series | [v2] serial: samsung: Checks the return value of function | expand |
On 30/06/2021 15:33, Tamseel Shams wrote: > "uart_add_one_port" function call may fail and return > some error code, so adding a check for return value. > If it is returning some error code, then displaying the > result, unregistering the driver and then returning from > probe function with error code. > > Signed-off-by: Tamseel Shams <m.shams@samsung.com> > --- > Changes since v1: > 1. Added support to unregister driver on failure of "uart_add_onr_port" > function call. > 2. Commit message updated. > > drivers/tty/serial/samsung_tty.c | 11 ++++++++++- > 1 file changed, 10 insertions(+), 1 deletion(-) > > diff --git a/drivers/tty/serial/samsung_tty.c b/drivers/tty/serial/samsung_tty.c > index 9fbc61151c2e..188e2d2da201 100644 > --- a/drivers/tty/serial/samsung_tty.c > +++ b/drivers/tty/serial/samsung_tty.c > @@ -2253,7 +2253,11 @@ static int s3c24xx_serial_probe(struct platform_device *pdev) > } > > dev_dbg(&pdev->dev, "%s: adding port\n", __func__); > - uart_add_one_port(&s3c24xx_uart_drv, &ourport->port); > + ret = uart_add_one_port(&s3c24xx_uart_drv, &ourport->port); > + if (ret < 0) { > + dev_err(&pdev->dev, "Failed to add uart port, err %d\n", ret); > + goto add_port_error; > + } > platform_set_drvdata(pdev, &ourport->port); > > /* > @@ -2272,6 +2276,11 @@ static int s3c24xx_serial_probe(struct platform_device *pdev) > probe_index++; > > return 0; > + > +add_port_error: You did not unwind fully s3c24xx_serial_init_port() - clocks. > + ourport->port.mapbase = 0; > + uart_unregister_driver(&s3c24xx_uart_drv); > + return ret; > } > > static int s3c24xx_serial_remove(struct platform_device *dev) > Best regards, Krzysztof
> -----Original Message----- > From: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com> > Sent: Thursday, July 1, 2021 12:06 PM > To: Tamseel Shams <m.shams@samsung.com>; gregkh@linuxfoundation.org; > jirislaby@kernel.org > Cc: linux-arm-kernel@lists.infradead.org; linux-samsung-soc@vger.kernel.org; > linux-serial@vger.kernel.org; linux-kernel@vger.kernel.org; > alim.akhtar@samsung.com > Subject: Re: [PATCH v2] serial: samsung: Checks the return value of function > > On 30/06/2021 15:33, Tamseel Shams wrote: > > "uart_add_one_port" function call may fail and return some error code, > > so adding a check for return value. > > If it is returning some error code, then displaying the result, > > unregistering the driver and then returning from probe function with > > error code. > > > > Signed-off-by: Tamseel Shams <m.shams@samsung.com> > > --- > > Changes since v1: > > 1. Added support to unregister driver on failure of "uart_add_onr_port" > > function call. > > 2. Commit message updated. > > > > drivers/tty/serial/samsung_tty.c | 11 ++++++++++- > > 1 file changed, 10 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/tty/serial/samsung_tty.c > > b/drivers/tty/serial/samsung_tty.c > > index 9fbc61151c2e..188e2d2da201 100644 > > --- a/drivers/tty/serial/samsung_tty.c > > +++ b/drivers/tty/serial/samsung_tty.c > > @@ -2253,7 +2253,11 @@ static int s3c24xx_serial_probe(struct > platform_device *pdev) > > } > > > > dev_dbg(&pdev->dev, "%s: adding port\n", __func__); > > - uart_add_one_port(&s3c24xx_uart_drv, &ourport->port); > > + ret = uart_add_one_port(&s3c24xx_uart_drv, &ourport->port); > > + if (ret < 0) { > > + dev_err(&pdev->dev, "Failed to add uart port, err %d\n", ret); > > + goto add_port_error; > > + } > > platform_set_drvdata(pdev, &ourport->port); > > > > /* > > @@ -2272,6 +2276,11 @@ static int s3c24xx_serial_probe(struct > platform_device *pdev) > > probe_index++; > > > > return 0; > > + > > +add_port_error: > > You did not unwind fully s3c24xx_serial_init_port() - clocks. > Hi Krzysztof, Yeah, missed the unwinding of clocks. Will fix this in next version. Thanks & Regards, Tamseel Shams
diff --git a/drivers/tty/serial/samsung_tty.c b/drivers/tty/serial/samsung_tty.c index 9fbc61151c2e..188e2d2da201 100644 --- a/drivers/tty/serial/samsung_tty.c +++ b/drivers/tty/serial/samsung_tty.c @@ -2253,7 +2253,11 @@ static int s3c24xx_serial_probe(struct platform_device *pdev) } dev_dbg(&pdev->dev, "%s: adding port\n", __func__); - uart_add_one_port(&s3c24xx_uart_drv, &ourport->port); + ret = uart_add_one_port(&s3c24xx_uart_drv, &ourport->port); + if (ret < 0) { + dev_err(&pdev->dev, "Failed to add uart port, err %d\n", ret); + goto add_port_error; + } platform_set_drvdata(pdev, &ourport->port); /* @@ -2272,6 +2276,11 @@ static int s3c24xx_serial_probe(struct platform_device *pdev) probe_index++; return 0; + +add_port_error: + ourport->port.mapbase = 0; + uart_unregister_driver(&s3c24xx_uart_drv); + return ret; } static int s3c24xx_serial_remove(struct platform_device *dev)
"uart_add_one_port" function call may fail and return some error code, so adding a check for return value. If it is returning some error code, then displaying the result, unregistering the driver and then returning from probe function with error code. Signed-off-by: Tamseel Shams <m.shams@samsung.com> --- Changes since v1: 1. Added support to unregister driver on failure of "uart_add_onr_port" function call. 2. Commit message updated. drivers/tty/serial/samsung_tty.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-)