Message ID | 20190901105410.23567-1-repk@triplefau.lt (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | iio: adc: meson_saradc: Fix memory allocation order | expand |
On Sun, Sep 1, 2019 at 12:45 PM Remi Pommarel <repk@triplefau.lt> wrote: > > meson_saradc's irq handler uses priv->regmap so make sure that it is > allocated before the irq get enabled. > > This also fixes crash when CONFIG_DEBUG_SHIRQ is enabled, as device > managed resources are freed in the inverted order they had been > allocated, priv->regmap was freed before the spurious fake irq that > CONFIG_DEBUG_SHIRQ adds called the handler. > Fixes: 3af109131b7eb8 ("iio: adc: meson-saradc: switch from polling to interrupt mode") > Reported-by: Elie Roudninski <xademax@gmail.com> > Signed-off-by: Remi Pommarel <repk@triplefau.lt> Reviewed-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com> thank you for fixing this! Martin
On Sun, Sep 1, 2019 at 12:29 PM Martin Blumenstingl <martin.blumenstingl@googlemail.com> wrote: > > On Sun, Sep 1, 2019 at 12:45 PM Remi Pommarel <repk@triplefau.lt> wrote: > > > > meson_saradc's irq handler uses priv->regmap so make sure that it is > > allocated before the irq get enabled. > > > > This also fixes crash when CONFIG_DEBUG_SHIRQ is enabled, as device > > managed resources are freed in the inverted order they had been > > allocated, priv->regmap was freed before the spurious fake irq that > > CONFIG_DEBUG_SHIRQ adds called the handler. > > > > Fixes: 3af109131b7eb8 ("iio: adc: meson-saradc: switch from polling to > interrupt mode") > > Reported-by: Elie Roudninski <xademax@gmail.com> > > Signed-off-by: Remi Pommarel <repk@triplefau.lt> > Reviewed-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com> > > thank you for fixing this! The patch fixed the kernel panic I had, i can now successfully boot my meson-gxl-s905x-libretech-cc boad using patched linux 5.2.11 Tested-by: Elie ROUDNINSKI <xademax@gmail.com> Elie > > > Martin
Remi Pommarel <repk@triplefau.lt> writes: > meson_saradc's irq handler uses priv->regmap so make sure that it is > allocated before the irq get enabled. > > This also fixes crash when CONFIG_DEBUG_SHIRQ is enabled, as device > managed resources are freed in the inverted order they had been > allocated, priv->regmap was freed before the spurious fake irq that > CONFIG_DEBUG_SHIRQ adds called the handler. > > Reported-by: Elie Roudninski <xademax@gmail.com> > Signed-off-by: Remi Pommarel <repk@triplefau.lt> Reviewed-by: Kevin Hilman <khilman@baylibre.com>
On Mon, 2 Sep 2019 21:40:49 +0100 Elie Roudninski <xademax@gmail.com> wrote: > On Sun, Sep 1, 2019 at 12:29 PM Martin Blumenstingl > <martin.blumenstingl@googlemail.com> wrote: > > > > On Sun, Sep 1, 2019 at 12:45 PM Remi Pommarel <repk@triplefau.lt> wrote: > > > > > > meson_saradc's irq handler uses priv->regmap so make sure that it is > > > allocated before the irq get enabled. > > > > > > This also fixes crash when CONFIG_DEBUG_SHIRQ is enabled, as device > > > managed resources are freed in the inverted order they had been > > > allocated, priv->regmap was freed before the spurious fake irq that > > > CONFIG_DEBUG_SHIRQ adds called the handler. > > > > > > > Fixes: 3af109131b7eb8 ("iio: adc: meson-saradc: switch from polling to > > interrupt mode") > > > Reported-by: Elie Roudninski <xademax@gmail.com> > > > Signed-off-by: Remi Pommarel <repk@triplefau.lt> > > Reviewed-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com> > > > > thank you for fixing this! > The patch fixed the kernel panic I had, i can now successfully boot my > meson-gxl-s905x-libretech-cc boad using patched linux 5.2.11 > > Tested-by: Elie ROUDNINSKI <xademax@gmail.com> Rather than rush through a quick pull request I'm going to hold this one until after the merge window. Applied to the fixes-togreg branch of iio.git (which is now based on staging-next). Thanks, Jonathan > > Elie > > > > > > Martin
diff --git a/drivers/iio/adc/meson_saradc.c b/drivers/iio/adc/meson_saradc.c index 7b28d045d271..7b27306330a3 100644 --- a/drivers/iio/adc/meson_saradc.c +++ b/drivers/iio/adc/meson_saradc.c @@ -1219,6 +1219,11 @@ static int meson_sar_adc_probe(struct platform_device *pdev) if (IS_ERR(base)) return PTR_ERR(base); + priv->regmap = devm_regmap_init_mmio(&pdev->dev, base, + priv->param->regmap_config); + if (IS_ERR(priv->regmap)) + return PTR_ERR(priv->regmap); + irq = irq_of_parse_and_map(pdev->dev.of_node, 0); if (!irq) return -EINVAL; @@ -1228,11 +1233,6 @@ static int meson_sar_adc_probe(struct platform_device *pdev) if (ret) return ret; - priv->regmap = devm_regmap_init_mmio(&pdev->dev, base, - priv->param->regmap_config); - if (IS_ERR(priv->regmap)) - return PTR_ERR(priv->regmap); - priv->clkin = devm_clk_get(&pdev->dev, "clkin"); if (IS_ERR(priv->clkin)) { dev_err(&pdev->dev, "failed to get clkin\n");
meson_saradc's irq handler uses priv->regmap so make sure that it is allocated before the irq get enabled. This also fixes crash when CONFIG_DEBUG_SHIRQ is enabled, as device managed resources are freed in the inverted order they had been allocated, priv->regmap was freed before the spurious fake irq that CONFIG_DEBUG_SHIRQ adds called the handler. Reported-by: Elie Roudninski <xademax@gmail.com> Signed-off-by: Remi Pommarel <repk@triplefau.lt> --- drivers/iio/adc/meson_saradc.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)