On 09. 07. 20, 15:56, Chuhong Yuan wrote: > This driver calls ioremap() in probe, but it misses calling iounmap() in > probe's error handler and remove. > Add the missed calls to fix it. > > Fixes: 47d37d6f94cc ("serial: Add auart driver for i.MX23/28") > Signed-off-by: Chuhong Yuan <hslester96@xxxxxxxxx> > --- > Changes in v2: > - Use iounmap() instead of devm_ioremap() to fix the bugs. Out of curiosity, what was wrong with devm_ioremap? I seem I cannot find the reason... > - Modify the subject and the description. > > drivers/tty/serial/mxs-auart.c | 12 ++++++++---- > 1 file changed, 8 insertions(+), 4 deletions(-) > > diff --git a/drivers/tty/serial/mxs-auart.c b/drivers/tty/serial/mxs-auart.c > index b4f835e7de23..b784323a6a7b 100644 > --- a/drivers/tty/serial/mxs-auart.c > +++ b/drivers/tty/serial/mxs-auart.c > @@ -1698,21 +1698,21 @@ static int mxs_auart_probe(struct platform_device *pdev) > irq = platform_get_irq(pdev, 0); > if (irq < 0) { > ret = irq; > - goto out_disable_clks; > + goto out_iounmap; > } > > s->port.irq = irq; > ret = devm_request_irq(&pdev->dev, irq, mxs_auart_irq_handle, 0, > dev_name(&pdev->dev), s); > if (ret) > - goto out_disable_clks; > + goto out_iounmap; > > platform_set_drvdata(pdev, s); > > ret = mxs_auart_init_gpios(s, &pdev->dev); > if (ret) { > dev_err(&pdev->dev, "Failed to initialize GPIOs.\n"); > - goto out_disable_clks; > + goto out_iounmap; > } > > /* > @@ -1720,7 +1720,7 @@ static int mxs_auart_probe(struct platform_device *pdev) > */ > ret = mxs_auart_request_gpio_irq(s); > if (ret) > - goto out_disable_clks; > + goto out_iounmap; > > auart_port[s->port.line] = s; > > @@ -1746,6 +1746,9 @@ static int mxs_auart_probe(struct platform_device *pdev) > mxs_auart_free_gpio_irq(s); > auart_port[pdev->id] = NULL; > > +out_iounmap: > + iounmap(s->port.membase); > + > out_disable_clks: > if (is_asm9260_auart(s)) { > clk_disable_unprepare(s->clk); > @@ -1761,6 +1764,7 @@ static int mxs_auart_remove(struct platform_device *pdev) > uart_remove_one_port(&auart_driver, &s->port); > auart_port[pdev->id] = NULL; > mxs_auart_free_gpio_irq(s); > + iounmap(s->port.membase); > if (is_asm9260_auart(s)) { > clk_disable_unprepare(s->clk); > clk_disable_unprepare(s->clk_ahb); > -- js suse labs