On Tuesday, March 06, 2012 3:34 PM, Russell King wrote:
>
> Every DMA engine implementation declares a last completed dma cookie
> in their private dma channel structures.  This is pointless, and
> forces driver specific code.  Move this out into the common dma_chan
> structure.
>
> Signed-off-by: Russell King <rmk+ker...@arm.linux.org.uk>
> ---

<snip>

 drivers/dma/ep93xx_dma.c                 |    8 +++-----

<snip>

 include/linux/dmaengine.h                |    2 ++

<snip>

> diff --git a/drivers/dma/ep93xx_dma.c b/drivers/dma/ep93xx_dma.c
> index 59e7a96..bc45787 100644
> --- a/drivers/dma/ep93xx_dma.c
> +++ b/drivers/dma/ep93xx_dma.c
> @@ -122,7 +122,6 @@ struct ep93xx_dma_desc {
>   * @lock: lock protecting the fields following
>   * @flags: flags for the channel
>   * @buffer: which buffer to use next (0/1)
> - * @last_completed: last completed cookie value
>   * @active: flattened chain of descriptors currently being processed
>   * @queue: pending descriptors which are handled next
>   * @free_list: list of free descriptors which can be used
> @@ -157,7 +156,6 @@ struct ep93xx_dma_chan {
>  #define EP93XX_DMA_IS_CYCLIC         0
>  
>       int                             buffer;
> -     dma_cookie_t                    last_completed;
>       struct list_head                active;
>       struct list_head                queue;
>       struct list_head                free_list;
> @@ -703,7 +701,7 @@ static void ep93xx_dma_tasklet(unsigned long data)
>       desc = ep93xx_dma_get_active(edmac);
>       if (desc) {
>               if (desc->complete) {
> -                     edmac->last_completed = desc->txd.cookie;
> +                     edmac->chan.completed_cookie = desc->txd.cookie;
>                       list_splice_init(&edmac->active, &list);
>               }
>               callback = desc->txd.callback;
> @@ -861,7 +859,7 @@ static int ep93xx_dma_alloc_chan_resources(struct 
> dma_chan *chan)
>               goto fail_clk_disable;
>  
>       spin_lock_irq(&edmac->lock);
> -     edmac->last_completed = 1;
> +     edmac->chan.completed_cookie = 1;
>       edmac->chan.cookie = 1;
>       ret = edmac->edma->hw_setup(edmac);
>       spin_unlock_irq(&edmac->lock);
> @@ -1254,7 +1252,7 @@ static enum dma_status ep93xx_dma_tx_status(struct 
> dma_chan *chan,
>  
>       spin_lock_irqsave(&edmac->lock, flags);
>       last_used = chan->cookie;
> -     last_completed = edmac->last_completed;
> +     last_completed = chan->completed_cookie;
>       spin_unlock_irqrestore(&edmac->lock, flags);
>  
>       ret = dma_async_is_complete(cookie, last_completed, last_used);

<snip>

> diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h
> index 679b349..41d0f92 100644
> --- a/include/linux/dmaengine.h
> +++ b/include/linux/dmaengine.h
> @@ -257,6 +257,7 @@ struct dma_chan_percpu {
>   * struct dma_chan - devices supply DMA channels, clients use them
>   * @device: ptr to the dma device who supplies this channel, always !%NULL
>   * @cookie: last cookie value returned to client
> + * @completed_cookie: last completed cookie for this channel
>   * @chan_id: channel ID for sysfs
>   * @dev: class device for sysfs
>   * @device_node: used to add this to the device chan list
> @@ -268,6 +269,7 @@ struct dma_chan_percpu {
>  struct dma_chan {
>       struct dma_device *device;
>       dma_cookie_t cookie;
> +     dma_cookie_t completed_cookie;
>  
>       /* sysfs */
>       int chan_id;

For ep93xx:

Tested-by: H Hartley Sweeten <hswee...@visionengravers.com>
Acked-by: H Hartley Sweeten <hswee...@visionengravers.com>

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to