lkml.org 
[lkml]   [2017]   [Nov]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL for-4.4 17/39] scsi: lpfc: Add missing memory barrier
    Date
    From: James Smart <james.smart@broadcom.com>

    [ Upstream commit 6b3b3bdb83b4ad51252d21bb13596db879e51850 ]

    On loosely ordered memory systems (PPC for example), the WQE elements
    were being updated in memory, but not necessarily flushed before the
    separate doorbell was written to hw which would cause hw to dma the
    WQE element. Thus, the hardware occasionally received partially
    updated WQE data.

    Add the memory barrier after updating the WQE memory.

    Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
    Signed-off-by: James Smart <james.smart@broadcom.com>
    Reviewed-by: Hannes Reinecke <hare@suse.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
    ---
    drivers/scsi/lpfc/lpfc_sli.c | 2 ++
    1 file changed, 2 insertions(+)

    diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
    index 38e90d9c2ced..abba562cf145 100644
    --- a/drivers/scsi/lpfc/lpfc_sli.c
    +++ b/drivers/scsi/lpfc/lpfc_sli.c
    @@ -118,6 +118,8 @@ lpfc_sli4_wq_put(struct lpfc_queue *q, union lpfc_wqe *wqe)
    if (q->phba->sli3_options & LPFC_SLI4_PHWQ_ENABLED)
    bf_set(wqe_wqid, &wqe->generic.wqe_com, q->queue_id);
    lpfc_sli_pcimem_bcopy(wqe, temp_wqe, q->entry_size);
    + /* ensure WQE bcopy flushed before doorbell write */
    + wmb();

    /* Update the host index before invoking device */
    host_index = q->host_index;
    --
    2.11.0
    \
     
     \ /
      Last update: 2017-11-08 22:31    [W:4.236 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site