From: sashiko-bot@kernel.org
To: "Nilesh Javali" <njavali@marvell.com>
Cc: linux-scsi@vger.kernel.org
Subject: Re: [PATCH v4 11/56] scsi: qla2xxx: Update IO path to use 128-byte IOCBs for 29xx
Date: Tue, 14 Jul 2026 11:54:49 +0000 [thread overview]
Message-ID: <20260714115449.9FABC1F00A3A@smtp.kernel.org> (raw)
In-Reply-To: <20260714095353.289460-12-njavali@marvell.com>
Thank you for your contribution! Sashiko AI review found 5 potential issue(s) to consider:
- [High] Legacy 64-byte IOCB structures are incorrectly used on 29xx hardware for management, control, and abort paths, causing field corruption and out-of-bounds writes.
- [High] Response queue payload extraction and continuation processing loops fail to account for the 128-byte extended format on 29xx hardware, dropping data.
- [High] The driver miscalculates the required IOCB count (`req_cnt`) for standard SCSI commands on 29xx hardware, causing ring desynchronization.
- [High] Target mode I/O requests with >6 scatter-gather segments on 29xx hardware cause ring desynchronization and zero-length DMA truncation.
- [High] Open-coded legacy response ring advance in `qla27xx_copy_multiple_pkt()` incorrectly increments by 64 bytes on 29xx hardware.
--
--- Patch [11]: [PATCH v4 11/56] scsi: qla2xxx: Update IO path to use 128-byte IOCBs for 29xx ---
commit 610d3e25167b47c9d3bb68554aac42ed0e7ff0a5
Author: Anil Gurumurthy <agurumurthy@marvell.com>
scsi: qla2xxx: Update IO path to use 128-byte IOCBs for 29xx
This commit wires the 128-byte extended IOCB structures into the IO
submission, completion, and queue-management paths for the 29xx adapters.
It introduces helpers for determining ring entry sizes and advancing ring
slots while falling back to the existing 64-byte IOCBs for earlier adapters.
> diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c
> --- a/drivers/scsi/qla2xxx/qla_iocb.c
> +++ b/drivers/scsi/qla2xxx/qla_iocb.c
[ ... ]
> @@ -1620,46 +1640,84 @@ qla24xx_start_scsi(srb_t *sp)
> cmd->host_scribble = (unsigned char *)(unsigned long)handle;
> req->cnt -= req_cnt;
>
> - cmd_pkt = (struct cmd_type_7 *)req->ring_ptr;
> - cmd_pkt->handle = make_handle(req->id, handle);
> + if (IS_QLA29XX(ha)) {
[ ... ]
> + /* Build IOCB segments */
> + qla29xx_build_scsi_iocbs(sp, cmd_pkt_ext, tot_dsds, req);
> +
> + /* Set total data segment count. */
> + cmd_pkt_ext->entry_count = (uint8_t)req_cnt;
[Severity: High]
Could this miscalculate the required IOCB count for standard SCSI commands on
29xx hardware? Earlier in qla24xx_start_scsi(), req_cnt is calculated using
qla24xx_calc_iocbs(). That assumes 1 inline DSD and 5 per continuation, but
29xx extended IOCBs carry 4 inline DSDs and 10 per continuation. Writing the
oversized req_cnt to cmd_pkt_ext->entry_count might desynchronize the ring if
it doesn't match the slots built by qla29xx_build_scsi_iocbs().
[ ... ]
> diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
> --- a/drivers/scsi/qla2xxx/qla_isr.c
> +++ b/drivers/scsi/qla2xxx/qla_isr.c
[ ... ]
> @@ -287,13 +281,7 @@ int __qla_copy_purex_to_buffer(struct scsi_qla_host *vha,
> break;
> }
>
> - rsp_q->ring_index++;
> - if (rsp_q->ring_index == rsp_q->length) {
> - rsp_q->ring_index = 0;
> - rsp_q->ring_ptr = rsp_q->ring;
> - } else {
> - rsp_q->ring_ptr++;
> - }
> + qla_rsp_ring_advance(rsp_q);
> no_bytes = (pending_bytes > sizeof(new_pkt->data)) ?
> sizeof(new_pkt->data) : pending_bytes;
[Severity: High]
Does this truncate the payload extraction on 29xx hardware? The code caps the
read to sizeof(new_pkt->data) (which is 60 bytes) instead of the 124-byte
capacity of the 29xx sts_cont_entry_ext structure. Because
qla_rsp_ring_advance() moves the pointer by 128 bytes, it seems this might
permanently skip the remaining 68 bytes of data in every extended continuation
slot. A similar cap exists in qla27xx_copy_fpin_pkt() and
qla2x00_status_cont_entry().
[Severity: High]
Is there a missing update to qla27xx_copy_multiple_pkt() in this patch?
Many open-coded ring advances were replaced with qla_rsp_ring_advance()
to handle the 128-byte stride on 29xx hardware, but it appears
qla27xx_copy_multiple_pkt() still manually increments rsp_q->ring_ptr++.
Advancing by 64 bytes instead of the 29xx 128-byte stride might cause the
firmware to read zeros and drop multi-IOCB unsolicited ELS/FPIN packets.
[Severity: High]
Does this also cause field corruption on 29xx hardware for abort paths? In
qla24xx_process_abts() in drivers/scsi/qla2xxx/qla_isr.c, the 128-byte slot is
cast to the 64-byte els_entry_24xx struct for the ABTS response, which might
corrupt fields like control_flags. Similarly, legacy 64-byte structures are
still used in qla24xx_abort_iocb(), qla24xx_tm_iocb(), and qla_els_pt_iocb(),
writing vp_index to offset 51 instead of the 18 or 30 required by the 29xx
extended abort/TM IOCBs.
[ ... ]
> diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
> --- a/drivers/scsi/qla2xxx/qla_target.c
> +++ b/drivers/scsi/qla2xxx/qla_target.c
[ ... ]
> @@ -2600,11 +2596,12 @@ static void qlt_load_cont_data_segments(struct qla_tgt_prm *prm)
> {
> int cnt;
> struct dsd64 *cur_dsd;
> + struct qla_hw_data *ha = prm->cmd->qpair->hw;
>
> /* Build continuation packets */
> while (prm->seg_cnt > 0) {
> cont_a64_entry_t *cont_pkt64 =
> - (cont_a64_entry_t *)qlt_get_req_pkt(
> + (cont_a64_entry_t *)qlt_get_req_pkt(ha,
> prm->cmd->qpair->req);
>
> /*
> @@ -2614,7 +2611,7 @@ static void qlt_load_cont_data_segments(struct qla_tgt_prm *prm)
> * that.
> */
>
> - memset(cont_pkt64, 0, sizeof(*cont_pkt64));
> + memset(cont_pkt64, 0, qla_req_entry_size(ha));
[Severity: High]
Will target mode I/O requests with more than 6 scatter-gather segments cause
ring desynchronization here? The loop right below this initialization still
hardcodes QLA_TGT_DATASEGS_PER_CONT_24XX (5 DSDs) per continuation packet. On
29xx hardware, the firmware reads 10 DSDs per continuation packet from the
128-byte slot, which could lead to reading empty DSDs and terminating the
transfer early. qlt_pci_map_calc_cnt() also appears to allocate the number of
continuation packets based on 5 DSDs.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260714095353.289460-1-njavali@marvell.com?part=11
next prev parent reply other threads:[~2026-07-14 11:54 UTC|newest]
Thread overview: 96+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-14 9:52 [PATCH v4 00/56] scsi: qla2xxx: Add QLA29xx series adapter support Nilesh Javali
2026-07-14 9:52 ` [PATCH v4 01/56] scsi: qla2xxx: Add 29xx series PCI device ID support Nilesh Javali
2026-07-14 10:19 ` sashiko-bot
2026-07-14 9:52 ` [PATCH v4 02/56] scsi: qla2xxx: Add flash read/write interface for 29xx Nilesh Javali
2026-07-14 12:26 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 03/56] scsi: qla2xxx: Add NVRAM config support for 29xx adapters Nilesh Javali
2026-07-14 10:11 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 04/56] scsi: qla2xxx: Add 29xx support in queue initialisation path Nilesh Javali
2026-07-14 10:28 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 05/56] scsi: qla2xxx: Add FC operational firmware load for 29xx Nilesh Javali
2026-07-14 10:43 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 06/56] scsi: qla2xxx: Remove redundant VPD flash read in sysfs read path Nilesh Javali
2026-07-14 10:42 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 07/56] scsi: qla2xxx: Add flash block read/write BSG support for 29xx Nilesh Javali
2026-07-14 9:53 ` [PATCH v4 08/56] scsi: qla2xxx: Add BSG MPI firmware load/dump " Nilesh Javali
2026-07-14 10:59 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 09/56] scsi: qla2xxx: Add 128-byte IOCB definitions " Nilesh Javali
2026-07-14 11:09 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 10/56] scsi: qla2xxx: Add extended status continuation and marker IOCBs Nilesh Javali
2026-07-14 11:06 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 11/56] scsi: qla2xxx: Update IO path to use 128-byte IOCBs for 29xx Nilesh Javali
2026-07-14 11:54 ` sashiko-bot [this message]
2026-07-14 9:53 ` [PATCH v4 12/56] scsi: qla2xxx: Skip image-set-valid attribute " Nilesh Javali
2026-07-14 9:53 ` [PATCH v4 13/56] scsi: qla2xxx: Skip unsupported sysfs attributes " Nilesh Javali
2026-07-14 9:53 ` [PATCH v4 14/56] scsi: qla2xxx: Enable get_fw_version mailbox " Nilesh Javali
2026-07-14 12:10 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 15/56] scsi: qla2xxx: Extend execute_fw mailbox to include 29xx Nilesh Javali
2026-07-14 9:53 ` [PATCH v4 16/56] scsi: qla2xxx: Enable get_adapter_id mailbox for 29xx Nilesh Javali
2026-07-14 12:19 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 17/56] scsi: qla2xxx: Enable init_firmware " Nilesh Javali
2026-07-14 12:48 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 18/56] scsi: qla2xxx: Enable get_firmware_state " Nilesh Javali
2026-07-14 13:13 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 19/56] scsi: qla2xxx: Enable serdes, resource count and FCE trace " Nilesh Javali
2026-07-14 13:10 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 20/56] scsi: qla2xxx: Enable set_els_cmds and echo_test " Nilesh Javali
2026-07-14 9:53 ` [PATCH v4 21/56] scsi: qla2xxx: Add support for QLA29XX in data rate functions Nilesh Javali
2026-07-14 9:53 ` [PATCH v4 22/56] scsi: qla2xxx: Enable qla2x00_shutdown for 29xx Nilesh Javali
2026-07-14 13:30 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 23/56] scsi: qla2xxx: Use ring-slot helpers in __qla2x00_alloc_iocbs Nilesh Javali
2026-07-14 9:53 ` [PATCH v4 24/56] scsi: qla2xxx: Add support for QLA29XX in memory allocation Nilesh Javali
2026-07-14 9:53 ` [PATCH v4 25/56] scsi: qla2xxx: Handle sts_cont_entry_ext_t for 29xx adapters Nilesh Javali
2026-07-14 13:45 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 26/56] scsi: qla2xxx: Update handling of status entries for 29xx series Nilesh Javali
2026-07-14 14:21 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 27/56] scsi: qla2xxx: Enhance ct_entry_24xx_ext iocb handling " Nilesh Javali
2026-07-14 9:53 ` [PATCH v4 28/56] scsi: qla2xxx: Enhance purex_entry " Nilesh Javali
2026-07-14 14:45 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 29/56] scsi: qla2xxx: Update handling of ELS IOCBs " Nilesh Javali
2026-07-14 15:00 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 30/56] scsi: qla2xxx: Add size check for ELS status entry layout on 29xx Nilesh Javali
2026-07-14 14:31 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 31/56] scsi: qla2xxx: Add 29xx extended logio IOCB support Nilesh Javali
2026-07-14 14:49 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 32/56] scsi: qla2xxx: Enhance task management IOCB handling for 29xx series Nilesh Javali
2026-07-14 9:53 ` [PATCH v4 33/56] scsi: qla2xxx: Add abort command " Nilesh Javali
2026-07-14 15:18 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 34/56] scsi: qla2xxx: Enhance ABTS processing " Nilesh Javali
2026-07-14 9:53 ` [PATCH v4 35/56] scsi: qla2xxx: Update VP control IOCB handling " Nilesh Javali
2026-07-14 17:45 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 36/56] scsi: qla2xxx: Add build-time size check for VP config IOCB layout Nilesh Javali
2026-07-14 9:53 ` [PATCH v4 37/56] scsi: qla2xxx: Add size check for extended VP report ID entry Nilesh Javali
2026-07-14 15:40 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 38/56] scsi: qla2xxx: Add LS4 pass-through IOCB handling for 29xx series Nilesh Javali
2026-07-14 15:40 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 39/56] scsi: qla2xxx: Adjust feature gating in BSG paths for 29xx support Nilesh Javali
2026-07-14 15:52 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 40/56] scsi: qla2xxx: Fix queue teardown NULL dma_free and bitmap locking Nilesh Javali
2026-07-14 16:02 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 41/56] scsi: qla2xxx: Replace __le16 bitfields with scalar and accessors Nilesh Javali
2026-07-14 16:24 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 42/56] scsi: qla2xxx: Fix endianness annotations in vp_rpt_id_entry structures Nilesh Javali
2026-07-14 9:53 ` [PATCH v4 43/56] scsi: qla2xxx: Use 64-bit FPM word counters for 29xx host stats Nilesh Javali
2026-07-14 16:25 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 44/56] scsi: qla2xxx: Add 64G/128G port speed setting support Nilesh Javali
2026-07-14 16:54 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 45/56] scsi: qla2xxx: Fix 64G link speed reporting in get_data_rate Nilesh Javali
2026-07-14 9:53 ` [PATCH v4 46/56] scsi: qla2xxx: edif: Fix NULL pointer deref in RX SA delete check Nilesh Javali
2026-07-14 17:24 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 47/56] scsi: qla2xxx: Fix Name Server logout detection on FWI2 adapters Nilesh Javali
2026-07-14 9:53 ` [PATCH v4 48/56] scsi: qla2xxx: Bound VP index against VP_CTRL IOCB bitmap size Nilesh Javali
2026-07-14 17:31 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 49/56] scsi: qla2xxx: Check entry_status in qla24xx_modify_vp_config() Nilesh Javali
2026-07-14 17:54 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 50/56] scsi: qla2xxx: Hold vport reference in qla24xx_report_id_acquisition() Nilesh Javali
2026-07-14 17:54 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 51/56] scsi: qla2xxx: Initialize NVMe abort_work once at submission Nilesh Javali
2026-07-14 17:59 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 52/56] scsi: qla2xxx: Hold qpair lock when sending NVMe LS reject Nilesh Javali
2026-07-14 18:07 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 53/56] scsi: qla2xxx: Zero dport diagnostics buffer to avoid info leak Nilesh Javali
2026-07-14 9:53 ` [PATCH v4 54/56] scsi: qla2xxx: Fix BSG job leak on validate flash image error path Nilesh Javali
2026-07-14 18:13 ` sashiko-bot
2026-07-14 9:53 ` [PATCH v4 55/56] scsi: qla2xxx: Bound image count in qla2x00_update_fru_versions() Nilesh Javali
2026-07-14 9:53 ` [PATCH v4 56/56] scsi: qla2xxx: Update version to 12.00.00.2607b1 Nilesh Javali
2026-07-14 10:41 ` Hannes Reinecke
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260714115449.9FABC1F00A3A@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=njavali@marvell.com \
--cc=sashiko-reviews@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox