]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
scsi: megaraid_mbox: remove bogus use of pci_dma_sync_sg_* APIs
authorChristoph Hellwig <hch@lst.de>
Thu, 11 Oct 2018 07:15:35 +0000 (09:15 +0200)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 16 Oct 2018 02:39:23 +0000 (22:39 -0400)
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>
drivers/scsi/megaraid/megaraid_mbox.c

index 2013523605c5a756a67ef67a5a1b9e8abc4f7509..89c85a5a47aff3447fb1609ab0bc48125d87333e 100644 (file)
@@ -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);