[PATCH RFC v2 4/7] mfd: ls2kbmc: Cancel the work queue on removal

From: Miao Wang via B4 Relay

Date: Tue Jul 07 2026 - 17:18:36 EST


From: Miao Wang <shankerwangmiao@xxxxxxxxx>

When the device is being removeed, the work queue should be canceled to
avoid any pending work to be executed after the device is removed.

Fixes: d952bba3fbb5 ("mfd: ls2kbmc: Add Loongson-2K BMC reset function support")
Signed-off-by: Miao Wang <shankerwangmiao@xxxxxxxxx>
---
drivers/mfd/ls2k-bmc-core.c | 8 ++++++++
1 file changed, 8 insertions(+)

diff --git a/drivers/mfd/ls2k-bmc-core.c b/drivers/mfd/ls2k-bmc-core.c
index a5465c42a77b8b7b81e3ad787d6036679c6ba6df..f87224105b3720cca97dcef089dad63fe57bc8c2 100644
--- a/drivers/mfd/ls2k-bmc-core.c
+++ b/drivers/mfd/ls2k-bmc-core.c
@@ -375,6 +375,12 @@ static void ls2k_bmc_save_pci_data(struct pci_dev *pdev, struct ls2k_bmc_ddata *
pci_read_config_dword(pdev, PCI_INTERRUPT_LINE, &ddata->bmc_pci_data.interrupt_line);
}

+static void ls2k_bmc_cancel_wq(void *data)
+{
+ struct ls2k_bmc_ddata *ddata = data;
+ (void) cancel_work_sync(&ddata->bmc_reset_work);
+}
+
static int ls2k_bmc_init(struct ls2k_bmc_ddata *ddata)
{
struct pci_dev *pdev = to_pci_dev(ddata->dev);
@@ -385,6 +391,8 @@ static int ls2k_bmc_init(struct ls2k_bmc_ddata *ddata)

INIT_WORK(&ddata->bmc_reset_work, ls2k_bmc_events_fn);

+ devm_add_action_or_reset(ddata->dev, ls2k_bmc_cancel_wq, ddata);
+
ret = devm_request_irq(&pdev->dev, pdev->irq, ls2k_bmc_interrupt,
IRQF_SHARED | IRQF_TRIGGER_FALLING, "ls2kbmc pcie", ddata);
if (ret) {

--
2.49.0