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: Christoph Hellwig <hch@lst.de> Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
Родитель
ca2ade2415
Коммит
67d98f0a83
|
@ -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);
|
||||
|
|
Загрузка…
Ссылка в новой задаче