[PATCH v3 48/57] scsi: qla2xxx: Enable lock context analysis
Bart Van Assche <[email protected]> Thu, 30 Jul 2026 15:45:31 -0700
| Newsgroups | org.kernel.vger.linux-scsi |
|---|---|
| Message-ID | <5a1ec87c1d5400aca4bd15eace2f641e0e74ec9a.1785451174.git.bvanassche@acm.org> |
Make several code blocks with conditional locking compatible with thread-safety analysis. Annotate functions that perform conditional locking with __no_context_analysis. No functionality has been changed. Signed-off-by: Bart Van Assche <[email protected]> --- drivers/scsi/qla2xxx/Makefile | 3 +++ drivers/scsi/qla2xxx/qla_nx.c | 2 ++ drivers/scsi/qla2xxx/qla_target.c | 29 ++++++++++++++++++----------- drivers/scsi/qla2xxx/qla_tmpl.c | 1 + 4 files changed, 24 insertions(+), 11 deletions(-) diff --git a/drivers/scsi/qla2xxx/Makefile b/drivers/scsi/qla2xxx/Makefile index cbc1303e761e..095657510cc3 100644 --- a/drivers/scsi/qla2xxx/Makefile +++ b/drivers/scsi/qla2xxx/Makefile @@ -1,4 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 + +CONTEXT_ANALYSIS := y + qla2xxx-y := qla_os.o qla_init.o qla_mbx.o qla_iocb.o qla_isr.o qla_gs.o \ qla_dbg.o qla_sup.o qla_attr.o qla_mid.o qla_dfs.o qla_bsg.o \ qla_nx.o qla_mr.o qla_nx2.o qla_target.o qla_tmpl.o qla_nvme.o \ diff --git a/drivers/scsi/qla2xxx/qla_nx.c b/drivers/scsi/qla2xxx/qla_nx.c index 298c060c1292..1950583c5734 100644 --- a/drivers/scsi/qla2xxx/qla_nx.c +++ b/drivers/scsi/qla2xxx/qla_nx.c @@ -431,6 +431,7 @@ static int qla82xx_crb_win_lock(struct qla_hw_data *ha) int qla82xx_wr_32(struct qla_hw_data *ha, ulong off_in, u32 data) + __context_unsafe(conditional locking) { void __iomem *off; unsigned long flags = 0; @@ -461,6 +462,7 @@ qla82xx_wr_32(struct qla_hw_data *ha, ulong off_in, u32 data) int qla82xx_rd_32(struct qla_hw_data *ha, ulong off_in) + __context_unsafe(conditional locking) { void __iomem *off; unsigned long flags = 0; diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index e47da45e93a0..687ffd4bfdce 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -383,11 +383,13 @@ static bool qlt_24xx_atio_pkt_all_vps(struct scsi_qla_host *vha, vha->vp_idx, entry->vp_index); break; } - if (!ha_locked) + if (!ha_locked) { spin_lock_irqsave(&host->hw->hardware_lock, flags); - qlt_24xx_handle_abts(host, (struct abts_recv_from_24xx *)atio); - if (!ha_locked) + qlt_24xx_handle_abts(host, (struct abts_recv_from_24xx *)atio); spin_unlock_irqrestore(&host->hw->hardware_lock, flags); + } else { + qlt_24xx_handle_abts(host, (struct abts_recv_from_24xx *)atio); + } break; } @@ -3774,6 +3776,7 @@ static int __qlt_send_term_exchange(struct qla_qpair *qpair, */ void qlt_send_term_exchange(struct qla_qpair *qpair, struct qla_tgt_cmd *cmd, struct atio_from_isp *atio, int ha_locked) + __context_unsafe(conditional locking) { struct scsi_qla_host *vha; unsigned long flags = 0; @@ -6727,11 +6730,13 @@ qlt_chk_qfull_thresh_hold(struct scsi_qla_host *vha, struct qla_qpair *qpair, if (ha->tgt.num_pend_cmds < Q_FULL_THRESH_HOLD(ha)) return 0; - if (!ha_locked) + if (!ha_locked) { spin_lock_irqsave(&ha->hardware_lock, flags); - qlt_send_busy(qpair, atio, qla_sam_status); - if (!ha_locked) + qlt_send_busy(qpair, atio, qla_sam_status); spin_unlock_irqrestore(&ha->hardware_lock, flags); + } else { + qlt_send_busy(qpair, atio, qla_sam_status); + } return 1; } @@ -6740,6 +6745,7 @@ qlt_chk_qfull_thresh_hold(struct scsi_qla_host *vha, struct qla_qpair *qpair, /* called via callback from qla2xxx */ static void qlt_24xx_atio_pkt(struct scsi_qla_host *vha, struct atio_from_isp *atio, uint8_t ha_locked) + __context_unsafe(conditional locking) { struct qla_hw_data *ha = vha->hw; struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; @@ -6766,12 +6772,13 @@ static void qlt_24xx_atio_pkt(struct scsi_qla_host *vha, "qla_target(%d): ATIO_TYPE7 " "received with UNKNOWN exchange address, " "sending QUEUE_FULL\n", vha->vp_idx); - if (!ha_locked) + if (!ha_locked) { spin_lock_irqsave(&ha->hardware_lock, flags); - qlt_send_busy(ha->base_qpair, atio, qla_sam_status); - if (!ha_locked) - spin_unlock_irqrestore(&ha->hardware_lock, - flags); + qlt_send_busy(ha->base_qpair, atio, qla_sam_status); + spin_unlock_irqrestore(&ha->hardware_lock, flags); + } else { + qlt_send_busy(ha->base_qpair, atio, qla_sam_status); + } break; } diff --git a/drivers/scsi/qla2xxx/qla_tmpl.c b/drivers/scsi/qla2xxx/qla_tmpl.c index b0a74b036cf4..f31bd7aeb8dc 100644 --- a/drivers/scsi/qla2xxx/qla_tmpl.c +++ b/drivers/scsi/qla2xxx/qla_tmpl.c @@ -1004,6 +1004,7 @@ qla27xx_fwdt_template_valid(void *p) void qla27xx_mpi_fwdump(scsi_qla_host_t *vha, int hardware_locked) + __context_unsafe(conditional locking) { ulong flags = 0;