提交 67d98f0a 编写于 作者: C Christoph Hellwig 提交者: Martin K. Petersen

scsi: megaraid_mbox: remove bogus use of pci_dma_sync_sg_* APIs

The dma_map_sg / dma_unmap_sg APIs called from scsi_dma_map /
scsi_dma_unmap already transfer memory ownership to the device or cpu
respectively.  Adding additional calls to pci_dma_sync_sg_* will in fact
lead to data corruption if we end up using swiotlb for some reason.

Also remove the now pointless megaraid_mbox_sync_scb function.
Signed-off-by: NChristoph Hellwig <hch@lst.de>
Reviewed-by: NJohannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
上级 ca2ade24
......@@ -1428,12 +1428,6 @@ mbox_post_cmd(adapter_t *adapter, scb_t *scb)
adapter->outstanding_cmds++;
if (scb->dma_direction == PCI_DMA_TODEVICE)
pci_dma_sync_sg_for_device(adapter->pdev,
scsi_sglist(scb->scp),
scsi_sg_count(scb->scp),
PCI_DMA_TODEVICE);
mbox->busy = 1; // Set busy
mbox->poll = 0;
mbox->ack = 0;
......@@ -2180,31 +2174,6 @@ megaraid_isr(int irq, void *devp)
}
/**
* megaraid_mbox_sync_scb - sync kernel buffers
* @adapter : controller's soft state
* @scb : pointer to the resource packet
*
* DMA sync if required.
*/
static void
megaraid_mbox_sync_scb(adapter_t *adapter, scb_t *scb)
{
mbox_ccb_t *ccb;
ccb = (mbox_ccb_t *)scb->ccb;
if (scb->dma_direction == PCI_DMA_FROMDEVICE)
pci_dma_sync_sg_for_cpu(adapter->pdev,
scsi_sglist(scb->scp),
scsi_sg_count(scb->scp),
PCI_DMA_FROMDEVICE);
scsi_dma_unmap(scb->scp);
return;
}
/**
* megaraid_mbox_dpc - the tasklet to complete the commands from completed list
* @devp : pointer to HBA soft state
......@@ -2403,9 +2372,7 @@ megaraid_mbox_dpc(unsigned long devp)
megaraid_mbox_display_scb(adapter, scb);
}
// Free our internal resources and call the mid-layer callback
// routine
megaraid_mbox_sync_scb(adapter, scb);
scsi_dma_unmap(scp);
// remove from local clist
list_del_init(&scb->list);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册