lkml.org 
[lkml]   [2017]   [Apr]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH v2 12/21] scsi: hisi_sas, mvsas, gdth: Make use of the new sg_map helper function
    Very straightforward conversion of three scsi drivers.

    Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
    Cc: Achim Leubner <achim_leubner@adaptec.com>
    Cc: John Garry <john.garry@huawei.com>
    ---
    drivers/scsi/gdth.c | 9 +++++++--
    drivers/scsi/hisi_sas/hisi_sas_v1_hw.c | 14 +++++++++-----
    drivers/scsi/hisi_sas/hisi_sas_v2_hw.c | 13 +++++++++----
    drivers/scsi/mvsas/mv_sas.c | 10 +++++-----
    4 files changed, 30 insertions(+), 16 deletions(-)

    diff --git a/drivers/scsi/gdth.c b/drivers/scsi/gdth.c
    index d020a13..c70248a2 100644
    --- a/drivers/scsi/gdth.c
    +++ b/drivers/scsi/gdth.c
    @@ -2301,10 +2301,15 @@ static void gdth_copy_internal_data(gdth_ha_str *ha, Scsi_Cmnd *scp,
    return;
    }
    local_irq_save(flags);
    - address = kmap_atomic(sg_page(sl)) + sl->offset;
    + address = sg_map(sl, 0, SG_KMAP_ATOMIC);
    + if (IS_ERR(address)) {
    + scp->result = DID_ERROR << 16;
    + return;
    + }
    +
    memcpy(address, buffer, cpnow);
    flush_dcache_page(sg_page(sl));
    - kunmap_atomic(address);
    + sg_unmap(sl, address, 0, SG_KMAP_ATOMIC);
    local_irq_restore(flags);
    if (cpsum == cpcount)
    break;
    diff --git a/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c
    index fc1c1b2..b3953e3 100644
    --- a/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c
    +++ b/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c
    @@ -1381,18 +1381,22 @@ static int slot_complete_v1_hw(struct hisi_hba *hisi_hba,
    void *to;
    struct scatterlist *sg_resp = &task->smp_task.smp_resp;

    - ts->stat = SAM_STAT_GOOD;
    - to = kmap_atomic(sg_page(sg_resp));
    + to = sg_map(sg_resp, 0, SG_KMAP_ATOMIC);
    + if (IS_ERR(to)) {
    + dev_err(dev, "slot complete: error mapping memory");
    + ts->stat = SAS_SG_ERR;
    + break;
    + }

    + ts->stat = SAM_STAT_GOOD;
    dma_unmap_sg(dev, &task->smp_task.smp_resp, 1,
    DMA_FROM_DEVICE);
    dma_unmap_sg(dev, &task->smp_task.smp_req, 1,
    DMA_TO_DEVICE);
    - memcpy(to + sg_resp->offset,
    - slot->status_buffer +
    + memcpy(to, slot->status_buffer +
    sizeof(struct hisi_sas_err_record),
    sg_dma_len(sg_resp));
    - kunmap_atomic(to);
    + sg_unmap(sg_resp, to, 0, SG_KMAP_ATOMIC);
    break;
    }
    case SAS_PROTOCOL_SATA:
    diff --git a/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c
    index e241921..3e674a4 100644
    --- a/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c
    +++ b/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c
    @@ -2307,18 +2307,23 @@ slot_complete_v2_hw(struct hisi_hba *hisi_hba, struct hisi_sas_slot *slot)
    struct scatterlist *sg_resp = &task->smp_task.smp_resp;
    void *to;

    + to = sg_map(sg_resp, 0, SG_KMAP_ATOMIC);
    + if (IS_ERR(to)) {
    + dev_err(dev, "slot complete: error mapping memory");
    + ts->stat = SAS_SG_ERR;
    + break;
    + }
    +
    ts->stat = SAM_STAT_GOOD;
    - to = kmap_atomic(sg_page(sg_resp));

    dma_unmap_sg(dev, &task->smp_task.smp_resp, 1,
    DMA_FROM_DEVICE);
    dma_unmap_sg(dev, &task->smp_task.smp_req, 1,
    DMA_TO_DEVICE);
    - memcpy(to + sg_resp->offset,
    - slot->status_buffer +
    + memcpy(to, slot->status_buffer +
    sizeof(struct hisi_sas_err_record),
    sg_dma_len(sg_resp));
    - kunmap_atomic(to);
    + sg_unmap(sg_resp, to, 0, SG_KMAP_ATOMIC);
    break;
    }
    case SAS_PROTOCOL_SATA:
    diff --git a/drivers/scsi/mvsas/mv_sas.c b/drivers/scsi/mvsas/mv_sas.c
    index c7cc803..a72e0ce 100644
    --- a/drivers/scsi/mvsas/mv_sas.c
    +++ b/drivers/scsi/mvsas/mv_sas.c
    @@ -1798,11 +1798,11 @@ int mvs_slot_complete(struct mvs_info *mvi, u32 rx_desc, u32 flags)
    case SAS_PROTOCOL_SMP: {
    struct scatterlist *sg_resp = &task->smp_task.smp_resp;
    tstat->stat = SAM_STAT_GOOD;
    - to = kmap_atomic(sg_page(sg_resp));
    - memcpy(to + sg_resp->offset,
    - slot->response + sizeof(struct mvs_err_info),
    - sg_dma_len(sg_resp));
    - kunmap_atomic(to);
    + to = sg_map(sg_resp, 0, SG_KMAP_ATOMIC);
    + memcpy(to,
    + slot->response + sizeof(struct mvs_err_info),
    + sg_dma_len(sg_resp));
    + sg_unmap(sg_resp, to, 0, SG_KMAP_ATOMIC);
    break;
    }

    --
    2.1.4
    \
     
     \ /
      Last update: 2017-04-25 20:24    [W:4.246 / U:1.120 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site