lkml.org 
[lkml]   [2013]   [Dec]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.10 073/173] ioatdma: fix sed pool selection
    Date
    3.10-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Dan Williams <dan.j.williams@intel.com>

    commit 5d48b9b5d80e3aa38a5161565398b1e48a650573 upstream.

    The array to lookup the sed pool based on the number of sources
    (pq16_idx_to_sedi) is 16 entries and expects a max source index.
    However, we pass the total source count which runs off the end of the
    array when src_cnt == 16. The minimal fix is to just pass src_cnt-1,
    but given we know the source count is > 8 we can just calculate the sed
    pool by (src_cnt - 2) >> 3.

    Cc: Dave Jiang <dave.jiang@intel.com>
    Acked-by: Dave Jiang <dave.jiang@intel.com>
    Signed-off-by: Dan Williams <dan.j.williams@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/dma/ioat/dma_v3.c | 16 +---------------
    1 file changed, 1 insertion(+), 15 deletions(-)

    --- a/drivers/dma/ioat/dma_v3.c
    +++ b/drivers/dma/ioat/dma_v3.c
    @@ -87,13 +87,6 @@ static const u8 pq_idx_to_field[] = { 1,
    static const u8 pq16_idx_to_field[] = { 1, 4, 1, 2, 3, 4, 5, 6, 7,
    0, 1, 2, 3, 4, 5, 6 };

    -/*
    - * technically sources 1 and 2 do not require SED, but the op will have
    - * at least 9 descriptors so that's irrelevant.
    - */
    -static const u8 pq16_idx_to_sed[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0,
    - 1, 1, 1, 1, 1, 1, 1 };
    -
    static void ioat3_eh(struct ioat2_dma_chan *ioat);

    static dma_addr_t xor_get_src(struct ioat_raw_descriptor *descs[2], int idx)
    @@ -135,12 +128,6 @@ static void pq_set_src(struct ioat_raw_d
    pq->coef[idx] = coef;
    }

    -static int sed_get_pq16_pool_idx(int src_cnt)
    -{
    -
    - return pq16_idx_to_sed[src_cnt];
    -}
    -
    static bool is_jf_ioat(struct pci_dev *pdev)
    {
    switch (pdev->device) {
    @@ -1212,8 +1199,7 @@ __ioat3_prep_pq16_lock(struct dma_chan *

    descs[0] = (struct ioat_raw_descriptor *) pq;

    - desc->sed = ioat3_alloc_sed(device,
    - sed_get_pq16_pool_idx(src_cnt));
    + desc->sed = ioat3_alloc_sed(device, (src_cnt-2) >> 3);
    if (!desc->sed) {
    dev_err(to_dev(chan),
    "%s: no free sed entries\n", __func__);



    \
     
     \ /
      Last update: 2013-12-03 00:21    [W:3.760 / U:1.052 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site