Re: [PATCH 1/1] dmaengine: hsu: speed up residue calculation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 2015-11-17 at 18:00 +0200, Andy Shevchenko wrote:
> There is no need to calculate an overall length of the descriptor
> each time we
> call for DMA transfer status. Instead we do this at descriptor
> allocation stage
> and keep the stored length for further usage.

Ping?

> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx>
> ---
>  drivers/dma/hsu/hsu.c | 17 ++++-------------
>  drivers/dma/hsu/hsu.h |  1 +
>  2 files changed, 5 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/dma/hsu/hsu.c b/drivers/dma/hsu/hsu.c
> index 823ad72..eef145e 100644
> --- a/drivers/dma/hsu/hsu.c
> +++ b/drivers/dma/hsu/hsu.c
> @@ -228,6 +228,8 @@ static struct dma_async_tx_descriptor
> *hsu_dma_prep_slave_sg(
>  	for_each_sg(sgl, sg, sg_len, i) {
>  		desc->sg[i].addr = sg_dma_address(sg);
>  		desc->sg[i].len = sg_dma_len(sg);
> +
> +		desc->length += sg_dma_len(sg);
>  	}
>  
>  	desc->nents = sg_len;
> @@ -249,21 +251,10 @@ static void hsu_dma_issue_pending(struct
> dma_chan *chan)
>  	spin_unlock_irqrestore(&hsuc->vchan.lock, flags);
>  }
>  
> -static size_t hsu_dma_desc_size(struct hsu_dma_desc *desc)
> -{
> -	size_t bytes = 0;
> -	unsigned int i;
> -
> -	for (i = desc->active; i < desc->nents; i++)
> -		bytes += desc->sg[i].len;
> -
> -	return bytes;
> -}
> -
>  static size_t hsu_dma_active_desc_size(struct hsu_dma_chan *hsuc)
>  {
>  	struct hsu_dma_desc *desc = hsuc->desc;
> -	size_t bytes = hsu_dma_desc_size(desc);
> +	size_t bytes = desc->length;
>  	int i;
>  
>  	i = desc->active % HSU_DMA_CHAN_NR_DESC;
> @@ -294,7 +285,7 @@ static enum dma_status hsu_dma_tx_status(struct
> dma_chan *chan,
>  		dma_set_residue(state, bytes);
>  		status = hsuc->desc->status;
>  	} else if (vdesc) {
> -		bytes = hsu_dma_desc_size(to_hsu_dma_desc(vdesc));
> +		bytes = to_hsu_dma_desc(vdesc)->length;
>  		dma_set_residue(state, bytes);
>  	}
>  	spin_unlock_irqrestore(&hsuc->vchan.lock, flags);
> diff --git a/drivers/dma/hsu/hsu.h b/drivers/dma/hsu/hsu.h
> index f06579c..578a8ee 100644
> --- a/drivers/dma/hsu/hsu.h
> +++ b/drivers/dma/hsu/hsu.h
> @@ -65,6 +65,7 @@ struct hsu_dma_desc {
>  	enum dma_transfer_direction direction;
>  	struct hsu_dma_sg *sg;
>  	unsigned int nents;
> +	size_t length;
>  	unsigned int active;
>  	enum dma_status status;
>  };

-- 
Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx>
Intel Finland Oy

--
To unsubscribe from this list: send the line "unsubscribe dmaengine" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Kernel]     [Linux ARM (vger)]     [Linux ARM MSM]     [Linux Omap]     [Linux Arm]     [Linux Tegra]     [Fedora ARM]     [Linux for Samsung SOC]     [eCos]     [Linux PCI]     [Linux Fastboot]     [Gcc Help]     [Git]     [DCCP]     [IETF Announce]     [Security]     [Linux MIPS]     [Yosemite Campsites]

  Powered by Linux