• Russell King - ARM Linux's avatar
    dmaengine: fix cookie handling in iop-adma.c and ppc4xx/adma.c · 2a926e46
    Russell King - ARM Linux authored
    Dan Williams said:
    > > Russell King wrote:
    > > Firstly, we have DMA_MIN_COOKIE which has value 1 - so any cookies below
    > > that aren't valid.  That seems sane.
    > >
    > > We seem to have different behaviours:
    > >
    > > -       cookie = c->cookie;
    > > -       cookie++;
    > > -       if (cookie < 0)
    > > -               cookie = 1;
    > > -       c->cookie = cookie;
    > > -       tx->cookie = cookie;
    > >
    > > c->cookie here is initialized to zero, so the first cookie given out will
    > > be 1.  This is how most DMA engine drivers implement this.
    > >
    > > Then we have this:
    > >
    > >                cookie = chan->common.cookie;
    > >                cookie++;
    > >                if (cookie <= 1)
    > >                        cookie = 2;
    > >
    > >                /* initialize the completed cookie to be less than
    > >                 * the most recently used cookie
    > >                 */
    > >                chan->common.completed_cookie = cookie - 1;
    > >                chan->common.cookie = sw_desc->async_tx.cookie = cookie;
    > >
    > > Again, chan->common.cookie starts off at 0.  The first cookie given out
    > > will be 2, and 1 will never be used.  There are three drivers which
    > > implement it this way.
    > >
    > > Why is there this difference, and can these three be corrected to behave
    > > the same way as the first (and therefore the assignment of cookies
    > > consolidated?)
    >
    > Yes, they should be consolidated, and I believe they have drifted only
    > because there were no good common helpers and murphy's law took over.
    
    So lets fix this up to use the common dma_cookie_assign() helper.
    Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
    Tested-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    Acked-by: default avatarJassi Brar <jassisinghbrar@gmail.com>
    [imx-sdma.c & mxs-dma.c]
    Tested-by: default avatarShawn Guo <shawn.guo@linaro.org>
    Signed-off-by: default avatarVinod Koul <vinod.koul@linux.intel.com>
    2a926e46
iop-adma.c 48.1 KB