lkml.org 
[lkml]   [2018]   [Mar]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL for 4.4 038/167] async_tx: Fix DMA_PREP_FENCE usage in do_async_gen_syndrome()
    Date
    From: Anup Patel <anup.patel@broadcom.com>

    [ Upstream commit baae03a0e2497f49704628fd0aaf993cf98e1b99 ]

    The DMA_PREP_FENCE is to be used when preparing Tx descriptor if output
    of Tx descriptor is to be used by next/dependent Tx descriptor.

    The DMA_PREP_FENSE will not be set correctly in do_async_gen_syndrome()
    when calling dma->device_prep_dma_pq() under following conditions:
    1. ASYNC_TX_FENCE not set in submit->flags
    2. DMA_PREP_FENCE not set in dma_flags
    3. src_cnt (= (disks - 2)) is greater than dma_maxpq(dma, dma_flags)

    This patch fixes DMA_PREP_FENCE usage in do_async_gen_syndrome() taking
    inspiration from do_async_xor() implementation.

    Signed-off-by: Anup Patel <anup.patel@broadcom.com>
    Reviewed-by: Ray Jui <ray.jui@broadcom.com>
    Reviewed-by: Scott Branden <scott.branden@broadcom.com>
    Acked-by: Dan Williams <dan.j.williams@intel.com>
    Signed-off-by: Vinod Koul <vinod.koul@intel.com>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    ---
    crypto/async_tx/async_pq.c | 5 ++---
    1 file changed, 2 insertions(+), 3 deletions(-)

    diff --git a/crypto/async_tx/async_pq.c b/crypto/async_tx/async_pq.c
    index 84f8d4d8b6bc..09f706b7b06e 100644
    --- a/crypto/async_tx/async_pq.c
    +++ b/crypto/async_tx/async_pq.c
    @@ -62,9 +62,6 @@ do_async_gen_syndrome(struct dma_chan *chan,
    dma_addr_t dma_dest[2];
    int src_off = 0;

    - if (submit->flags & ASYNC_TX_FENCE)
    - dma_flags |= DMA_PREP_FENCE;
    -
    while (src_cnt > 0) {
    submit->flags = flags_orig;
    pq_src_cnt = min(src_cnt, dma_maxpq(dma, dma_flags));
    @@ -83,6 +80,8 @@ do_async_gen_syndrome(struct dma_chan *chan,
    if (cb_fn_orig)
    dma_flags |= DMA_PREP_INTERRUPT;
    }
    + if (submit->flags & ASYNC_TX_FENCE)
    + dma_flags |= DMA_PREP_FENCE;

    /* Drivers force forward progress in case they can not provide
    * a descriptor
    --
    2.14.1
    \
     
     \ /
      Last update: 2018-03-19 17:08    [W:4.029 / U:0.064 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site