[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:
Saurav Kashyap 2014-02-26 04:15:10 -05:00 committed by James Bottomley
parent d68b3e019a
commit 6ac1f3b5ec
1 changed files with 8 additions and 7 deletions

View File

@ -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 */