Messages in this thread | | | From | Andy Shevchenko <> | Date | Fri, 9 Sep 2022 18:09:01 +0300 | Subject | Re: [PATCH v3] pinctrl: ocelot: Fix interrupt controller |
| |
On Fri, Sep 9, 2022 at 5:55 PM Horatiu Vultur <horatiu.vultur@microchip.com> wrote:
Thanks for an update, my comments below.
...
> - dev_set_drvdata(dev, info->map); > + dev_set_drvdata(dev, info);
I would also change it to platform_set_drvdata() to keep symmetry with ->remove().
...
> +static int ocelot_pinctrl_remove(struct platform_device *pdev) > +{ > + struct ocelot_pinctrl *info = platform_get_drvdata(pdev);
> + destroy_workqueue(info->wq);
Is it a synchronous operation? Anyway, what does guarantee that after this no other task can schedule a new work due to unmasking an interrupt? I think you need to be sure your device is quiescent before killing that workqueue. Something like synchronize_irq() + disable_irq() or equivalent? (I don't know for sure, you need to investigate it yourself and find the best suitable way).
> + return 0; > +}
-- With Best Regards, Andy Shevchenko
| |