[SCSI] qla2xxx: Avoid poisoning in the response queue for ISPFX00.
Signed-off-by: Giridhar Malavali <giridhar.malavali@qlogic.com> Signed-off-by: Saurav Kashyap <saurav.kashyap@qlogic.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
parent
d68b3e019a
commit
6ac1f3b5ec
|
@ -2821,16 +2821,22 @@ qlafx00_process_response_queue(struct scsi_qla_host *vha,
|
||||||
{
|
{
|
||||||
struct sts_entry_fx00 *pkt;
|
struct sts_entry_fx00 *pkt;
|
||||||
response_t *lptr;
|
response_t *lptr;
|
||||||
|
uint16_t lreq_q_in = 0;
|
||||||
|
uint16_t lreq_q_out = 0;
|
||||||
|
|
||||||
while (RD_REG_DWORD((void __iomem *)&(rsp->ring_ptr->signature)) !=
|
lreq_q_in = RD_REG_DWORD(rsp->rsp_q_in);
|
||||||
RESPONSE_PROCESSED) {
|
lreq_q_out = RD_REG_DWORD(rsp->rsp_q_out);
|
||||||
|
|
||||||
|
while (lreq_q_in != lreq_q_out) {
|
||||||
lptr = rsp->ring_ptr;
|
lptr = rsp->ring_ptr;
|
||||||
memcpy_fromio(rsp->rsp_pkt, (void __iomem *)lptr,
|
memcpy_fromio(rsp->rsp_pkt, (void __iomem *)lptr,
|
||||||
sizeof(rsp->rsp_pkt));
|
sizeof(rsp->rsp_pkt));
|
||||||
pkt = (struct sts_entry_fx00 *)rsp->rsp_pkt;
|
pkt = (struct sts_entry_fx00 *)rsp->rsp_pkt;
|
||||||
|
|
||||||
rsp->ring_index++;
|
rsp->ring_index++;
|
||||||
|
lreq_q_out++;
|
||||||
if (rsp->ring_index == rsp->length) {
|
if (rsp->ring_index == rsp->length) {
|
||||||
|
lreq_q_out = 0;
|
||||||
rsp->ring_index = 0;
|
rsp->ring_index = 0;
|
||||||
rsp->ring_ptr = rsp->ring;
|
rsp->ring_ptr = rsp->ring;
|
||||||
} else {
|
} else {
|
||||||
|
@ -2842,7 +2848,6 @@ qlafx00_process_response_queue(struct scsi_qla_host *vha,
|
||||||
qlafx00_error_entry(vha, rsp,
|
qlafx00_error_entry(vha, rsp,
|
||||||
(struct sts_entry_fx00 *)pkt, pkt->entry_status,
|
(struct sts_entry_fx00 *)pkt, pkt->entry_status,
|
||||||
pkt->entry_type);
|
pkt->entry_type);
|
||||||
goto next_iter;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2876,10 +2881,6 @@ qlafx00_process_response_queue(struct scsi_qla_host *vha,
|
||||||
pkt->entry_type, pkt->entry_status);
|
pkt->entry_type, pkt->entry_status);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
next_iter:
|
|
||||||
WRT_REG_DWORD((void __iomem *)&lptr->signature,
|
|
||||||
RESPONSE_PROCESSED);
|
|
||||||
wmb();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Adjust ring index */
|
/* Adjust ring index */
|
||||||
|
|
Loading…
Reference in New Issue