scsi: qla2xxx: Fix DMA error when the DIF sg buffer crosses 4GB boundary
When SGE buffer containing DIF information crosses 4G boundary, it results in DMA error. This patch fixes this issue by calculating SGE buffer size and if it crosses 4G boundary, driver will split it into multiple SGE buffers to avoid DMA error. Signed-off-by: Giridhar Malavali <gmalavali@marvell.com> Signed-off-by: Himanshu Madhani <hmadhani@marvell.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
committed by
Martin K. Petersen
parent
7855d2ba11
commit
50b812755e
@@ -2725,6 +2725,17 @@ check_scsi_status:
|
||||
cp->device->vendor);
|
||||
break;
|
||||
|
||||
case CS_DMA:
|
||||
ql_log(ql_log_info, fcport->vha, 0x3022,
|
||||
"CS_DMA error: 0x%x-0x%x (0x%x) nexus=%ld:%d:%llu portid=%06x oxid=0x%x cdb=%10phN len=0x%x rsp_info=0x%x resid=0x%x fw_resid=0x%x sp=%p cp=%p.\n",
|
||||
comp_status, scsi_status, res, vha->host_no,
|
||||
cp->device->id, cp->device->lun, fcport->d_id.b24,
|
||||
ox_id, cp->cmnd, scsi_bufflen(cp), rsp_info_len,
|
||||
resid_len, fw_resid_len, sp, cp);
|
||||
ql_dump_buffer(ql_dbg_tgt + ql_dbg_verbose, vha, 0xe0ee,
|
||||
pkt, sizeof(*sts24));
|
||||
res = DID_ERROR << 16;
|
||||
break;
|
||||
default:
|
||||
res = DID_ERROR << 16;
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user