• D
    ioatdma: fix selection of 16 vs 8 source path · 21e96c73
    Dan Williams 提交于
    When performing continuations there are implied sources that need to be
    added to the source count. Quoting dma_set_maxpq:
    
    /* dma_maxpq - reduce maxpq in the face of continued operations
     * @dma - dma device with PQ capability
     * @flags - to check if DMA_PREP_CONTINUE and DMA_PREP_PQ_DISABLE_P are set
     *
     * When an engine does not support native continuation we need 3 extra
     * source slots to reuse P and Q with the following coefficients:
     * 1/ {00} * P : remove P from Q', but use it as a source for P'
     * 2/ {01} * Q : use Q to continue Q' calculation
     * 3/ {00} * Q : subtract Q from P' to cancel (2)
     *
     * In the case where P is disabled we only need 1 extra source:
     * 1/ {01} * Q : use Q to continue Q' calculation
     */
    
    ...fix the selection of the 16 source path to take these implied sources
    into account.
    
    Note this also kills the BUG_ON(src_cnt < 9) check in
    __ioat3_prep_pq16_lock().  Besides not accounting for implied sources
    the check is redundant given we already made the path selection.
    
    Cc: <stable@vger.kernel.org>
    Cc: Dave Jiang <dave.jiang@intel.com>
    Acked-by: NDave Jiang <dave.jiang@intel.com>
    Signed-off-by: NDan Williams <dan.j.williams@intel.com>
    21e96c73
dma_v3.c 46.9 KB