lkml.org 
[lkml]   [2019]   [Nov]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 035/151] scsi: dc395x: fix dma API usage in srb_done
    Date
    From: Christoph Hellwig <hch@lst.de>

    [ Upstream commit 3a5bd7021184dec2946f2a4d7a8943f8a5713e52 ]

    We can't just transfer ownership to the CPU and then unmap, as this will
    break with swiotlb.

    Instead unmap the command and sense buffer a little earlier in the I/O
    completion handler and get rid of the pci_dma_sync_sg_for_cpu call
    entirely.

    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/scsi/dc395x.c | 7 ++-----
    1 file changed, 2 insertions(+), 5 deletions(-)

    diff --git a/drivers/scsi/dc395x.c b/drivers/scsi/dc395x.c
    index 5ee7f44cf869b..9da0ac360848f 100644
    --- a/drivers/scsi/dc395x.c
    +++ b/drivers/scsi/dc395x.c
    @@ -3450,14 +3450,12 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
    }
    }

    - if (dir != PCI_DMA_NONE && scsi_sg_count(cmd))
    - pci_dma_sync_sg_for_cpu(acb->dev, scsi_sglist(cmd),
    - scsi_sg_count(cmd), dir);
    -
    ckc_only = 0;
    /* Check Error Conditions */
    ckc_e:

    + pci_unmap_srb(acb, srb);
    +
    if (cmd->cmnd[0] == INQUIRY) {
    unsigned char *base = NULL;
    struct ScsiInqData *ptr;
    @@ -3511,7 +3509,6 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
    cmd, cmd->result);
    srb_free_insert(acb, srb);
    }
    - pci_unmap_srb(acb, srb);

    cmd->scsi_done(cmd);
    waiting_process_next(acb);
    --
    2.20.1


    \
     
     \ /
      Last update: 2019-11-27 22:42    [W:4.082 / U:0.068 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site