reg = readq(cxlds->regs.mbox + CXLDEV_MBOX_BG_CMD_STATUS_OFFSET);
        opcode = FIELD_GET(CXLDEV_MBOX_BG_CMD_COMMAND_OPCODE_MASK, reg);
        if (opcode == CXL_MBOX_OP_SANITIZE) {
+               mutex_lock(&mds->mbox_mutex);
                if (mds->security.sanitize_node)
-                       sysfs_notify_dirent(mds->security.sanitize_node);
-
-               dev_dbg(cxlds->dev, "Sanitization operation ended\n");
+                       mod_delayed_work(system_wq, &mds->security.poll_dwork, 0);
+               mutex_unlock(&mds->mbox_mutex);
        } else {
                /* short-circuit the wait in __cxl_pci_mbox_send_cmd() */
                rcuwait_wake_up(&mds->mbox_wait);
                int timeout = mds->security.poll_tmo_secs + 10;
 
                mds->security.poll_tmo_secs = min(15 * 60, timeout);
-               queue_delayed_work(system_wq, &mds->security.poll_dwork,
-                                  timeout * HZ);
+               schedule_delayed_work(&mds->security.poll_dwork, timeout * HZ);
        }
        mutex_unlock(&mds->mbox_mutex);
 }
                 * and allow userspace to poll(2) for completion.
                 */
                if (mbox_cmd->opcode == CXL_MBOX_OP_SANITIZE) {
-                       if (mds->security.poll) {
-                               /* give first timeout a second */
-                               timeout = 1;
-                               mds->security.poll_tmo_secs = timeout;
-                               queue_delayed_work(system_wq,
-                                                  &mds->security.poll_dwork,
-                                                  timeout * HZ);
-                       }
-
+                       /* give first timeout a second */
+                       timeout = 1;
+                       mds->security.poll_tmo_secs = timeout;
+                       schedule_delayed_work(&mds->security.poll_dwork,
+                                             timeout * HZ);
                        dev_dbg(dev, "Sanitization operation started\n");
                        goto success;
                }
        const int cap = readl(cxlds->regs.mbox + CXLDEV_MBOX_CAPS_OFFSET);
        struct device *dev = cxlds->dev;
        unsigned long timeout;
+       int irq, msgnum;
        u64 md_status;
+       u32 ctrl;
 
        timeout = jiffies + mbox_ready_timeout * HZ;
        do {
        dev_dbg(dev, "Mailbox payload sized %zu", mds->payload_size);
 
        rcuwait_init(&mds->mbox_wait);
+       INIT_DELAYED_WORK(&mds->security.poll_dwork, cxl_mbox_sanitize_work);
 
-       if (cap & CXLDEV_MBOX_CAP_BG_CMD_IRQ) {
-               u32 ctrl;
-               int irq, msgnum;
-               struct pci_dev *pdev = to_pci_dev(cxlds->dev);
-
-               msgnum = FIELD_GET(CXLDEV_MBOX_CAP_IRQ_MSGNUM_MASK, cap);
-               irq = pci_irq_vector(pdev, msgnum);
-               if (irq < 0)
-                       goto mbox_poll;
-
-               if (cxl_request_irq(cxlds, irq, cxl_pci_mbox_irq, NULL))
-                       goto mbox_poll;
+       /* background command interrupts are optional */
+       if (!(cap & CXLDEV_MBOX_CAP_BG_CMD_IRQ))
+               return 0;
 
-               /* enable background command mbox irq support */
-               ctrl = readl(cxlds->regs.mbox + CXLDEV_MBOX_CTRL_OFFSET);
-               ctrl |= CXLDEV_MBOX_CTRL_BG_CMD_IRQ;
-               writel(ctrl, cxlds->regs.mbox + CXLDEV_MBOX_CTRL_OFFSET);
+       msgnum = FIELD_GET(CXLDEV_MBOX_CAP_IRQ_MSGNUM_MASK, cap);
+       irq = pci_irq_vector(to_pci_dev(cxlds->dev), msgnum);
+       if (irq < 0)
+               return 0;
 
+       if (cxl_request_irq(cxlds, irq, NULL, cxl_pci_mbox_irq))
                return 0;
-       }
 
-mbox_poll:
-       mds->security.poll = true;
-       INIT_DELAYED_WORK(&mds->security.poll_dwork, cxl_mbox_sanitize_work);
+       dev_dbg(cxlds->dev, "Mailbox interrupts enabled\n");
+       /* enable background command mbox irq support */
+       ctrl = readl(cxlds->regs.mbox + CXLDEV_MBOX_CTRL_OFFSET);
+       ctrl |= CXLDEV_MBOX_CTRL_BG_CMD_IRQ;
+       writel(ctrl, cxlds->regs.mbox + CXLDEV_MBOX_CTRL_OFFSET);
 
-       dev_dbg(cxlds->dev, "Mailbox interrupts are unsupported");
        return 0;
 }