Guenter Roeck <linux@xxxxxxxxxxxx> 于2023年3月11日周六 00:34写道: > > On Fri, Mar 10, 2023 at 04:40:07PM +0800, Zheng Wang wrote: > > In xgene_hwmon_probe, &ctx->workq is bound with > > xgene_hwmon_evt_work. Then it will be started. > > > > If we remove the driver which will call > > xgene_hwmon_remove to make cleanup, there may > > be a unfinished work. > > > > The possiblesequence is as follows: > > > > Fix it by finishing the work before cleanup in the > > xgene_hwmon_remove > > > > CPU0 CPU1 > > > > |xgene_hwmon_evt_work > > xgene_hwmon_remove | > > kfifo_free(&ctx->async_msg_fifo);| > > | > > |kfifo_out_spinlocked > > |//use &ctx->async_msg_fifo > > Fixes: 2ca492e22cb7 ("hwmon: (xgene) Fix crash when alarm occurs before driver probe") > > Signed-off-by: Zheng Wang <zyytlz.wz@xxxxxxx> > > Applied. > Thanks for your effort. Best regards, Zheng > > > --- > > drivers/hwmon/xgene-hwmon.c | 1 + > > 1 file changed, 1 insertion(+) > > > > diff --git a/drivers/hwmon/xgene-hwmon.c b/drivers/hwmon/xgene-hwmon.c > > index 5cde837bfd09..d1abea49f01b 100644 > > --- a/drivers/hwmon/xgene-hwmon.c > > +++ b/drivers/hwmon/xgene-hwmon.c > > @@ -761,6 +761,7 @@ static int xgene_hwmon_remove(struct platform_device *pdev) > > { > > struct xgene_hwmon_dev *ctx = platform_get_drvdata(pdev); > > > > + cancel_work_sync(&ctx->workq); > > hwmon_device_unregister(ctx->hwmon_dev); > > kfifo_free(&ctx->async_msg_fifo); > > if (acpi_disabled)