Message ID | 20190925123928.kahpjtnikcmox7ug@beryllium.lan (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | WARN_ON_ONCE in qla2x00_status_cont_entry | expand |
On 2019-09-25 05:39, Daniel Wagner wrote: > So I after starring on the code I am not sure if the WARN_ON_ONCE is > correct. It assumes that after processing one status continuation, > there is no more work. Though it looks like there is another element > to process. Is it possible that two sense continuation are possible? According to the firmware documentation it is possible that multiple status continuations are emitted by the firmware. Do you want to submit a patch or do you prefer that I do this myself? Thanks, Bart.
On Wed, Sep 25, 2019 at 06:33:35PM -0700, Bart Van Assche wrote: > On 2019-09-25 05:39, Daniel Wagner wrote: > > So I after starring on the code I am not sure if the WARN_ON_ONCE is > > correct. It assumes that after processing one status continuation, > > there is no more work. Though it looks like there is another element > > to process. Is it possible that two sense continuation are possible? > > According to the firmware documentation it is possible that multiple > status continuations are emitted by the firmware. Do you want to submit > a patch or do you prefer that I do this myself? I just send out a patch, which removes the WARN_ON_ONCE. This solves the obvious warning but drops the consistency check. Maybe qla2x00_status_cont_entry() could return a status and the outer loop could check at the end if sp->done() has been called. But I suppose this should be done for all parsing functions not just for one.
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index 4c26630c1c3e..140f30216cae 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c @@ -2981,6 +2981,7 @@ void qla24xx_process_response_queue(struct scsi_qla_host *vha, { struct sts_entry_24xx *pkt; struct qla_hw_data *ha = vha->hw; + unsigned int cnt = 0; if (!ha->flags.fw_started) return; @@ -3014,6 +3015,7 @@ void qla24xx_process_response_queue(struct scsi_qla_host *vha, qla2x00_status_entry(vha, rsp, pkt); break; case STATUS_CONT_TYPE: + printk("qla2xxx - STATUS_CONT_TYPE %d\n", cnt++); qla2x00_status_cont_entry(rsp, (sts_cont_entry_t *)pkt); break; case VP_RPT_ID_IOCB_TYPE: