]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
scsi: qla2xxx: Use reinit_completion on mbx_intr_comp
authorTony Battersby <tonyb@cybernetics.com>
Mon, 10 Nov 2025 15:51:28 +0000 (10:51 -0500)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 12 Nov 2025 23:07:50 +0000 (18:07 -0500)
If a mailbox command completes immediately after
wait_for_completion_timeout() times out, ha->mbx_intr_comp could be left
in an inconsistent state, causing the next mailbox command not to wait
for the hardware.  Fix by reinitializing the completion before use.

Signed-off-by: Tony Battersby <tonyb@cybernetics.com>
Link: https://patch.msgid.link/11b6485e-0bfd-4784-8f99-c06a196dad94@cybernetics.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/qla2xxx/qla_mbx.c

index 32eb0ce8b170d93ad8263781b07fcb96bba4c00e..1f01576f044b8e801fb6b5a99e41e434c9d51cc3 100644 (file)
@@ -253,6 +253,7 @@ qla2x00_mailbox_command(scsi_qla_host_t *vha, mbx_cmd_t *mcp)
        /* Issue set host interrupt command to send cmd out. */
        ha->flags.mbox_int = 0;
        clear_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
+       reinit_completion(&ha->mbx_intr_comp);
 
        /* Unlock mbx registers and wait for interrupt */
        ql_dbg(ql_dbg_mbx, vha, 0x100f,
@@ -279,6 +280,7 @@ qla2x00_mailbox_command(scsi_qla_host_t *vha, mbx_cmd_t *mcp)
                            "cmd=%x Timeout.\n", command);
                        spin_lock_irqsave(&ha->hardware_lock, flags);
                        clear_bit(MBX_INTR_WAIT, &ha->mbx_cmd_flags);
+                       reinit_completion(&ha->mbx_intr_comp);
                        spin_unlock_irqrestore(&ha->hardware_lock, flags);
 
                        if (chip_reset != ha->chip_reset) {