linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Vinod Koul <vinod.koul@intel.com>
Cc: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>,
	Geert Uytterhoeven <geert+renesas@glider.be>,
	Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>,
	sakato <ryusuke.sakato.bx@renesas.com>,
	OSD2 ML <osd2@lm.renesas.com>,
	dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] dma: rcar-dmac: use list_add() on rcar_dmac_desc_put()
Date: Mon, 09 May 2016 23:49:05 +0300	[thread overview]
Message-ID: <1529191.mKmgdgIODm@avalon> (raw)
In-Reply-To: <20160502093712.GE2274@localhost>

Hi Vinod,

On Monday 02 May 2016 15:07:12 Vinod Koul wrote:
> On Fri, Apr 22, 2016 at 01:50:04AM +0000, Kuninori Morimoto wrote:
> > From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
> > 
> > Current rcar_dmac_desc_put() is using list_add_tail() in order to
> > push used descriptor to list of free descriptors, and next DMA transfer
> > try to reuse it from this list. But because it is using *_tail(),
> > this reuse effect can't be obtained without using all of them.
> > For a longer-term solution, we should allocate hardware descriptors
> > using GFP_KERNEL instead of GFP_NOWAIT, but it is difficult today.
> > This patch uses list_add() instead of list_add_tail() for short-term
> > solution.
> 
> So how does reuse case help by not moving the descriptor to tail.
> 
> Also you are not reusing descriptor, you are reusing a descriptor memory,
> these are two different things.
> 
> Lastly how does this help? Something doesn't seem right

For each descriptor, in addition to the memory used by the descriptors 
structure itself, the driver allocates a list of chunks as well as a buffer 
for hardware descriptors. Descriptors themselves are preallocated, and 
allocation of the chunks and buffer is performed the first time the descriptor 
is used. The memory isn't freed when the transfer is completed, as the chunks 
and buffer will be needed again when the descriptor is reused internally, so 
the driver keeps the memory around.

If only a few descriptors are used concurrently, the current list_add_tail() 
implementation will result in all preallocated descriptors being used before 
going back to the first one, and will thus allocate chunks and a buffer for 
all preallocated descriptors. Using list_add() will put the complete 
descriptor at the head of the list of available descriptors, so the next 
transfer will be more likely to reuse a descriptor that already has associated 
memory instead of one that has never been used before.

> > Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
> > ---
> > 
> >  drivers/dma/sh/rcar-dmac.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/drivers/dma/sh/rcar-dmac.c b/drivers/dma/sh/rcar-dmac.c
> > index 02b86c6..616c63a 100644
> > --- a/drivers/dma/sh/rcar-dmac.c
> > +++ b/drivers/dma/sh/rcar-dmac.c
> > @@ -519,7 +519,7 @@ static void rcar_dmac_desc_put(struct rcar_dmac_chan
> > *chan,> 
> >  	spin_lock_irqsave(&chan->lock, flags);
> >  	list_splice_tail_init(&desc->chunks, &chan->desc.chunks_free);
> > 
> > -	list_add_tail(&desc->node, &chan->desc.free);
> > +	list_add(&desc->node, &chan->desc.free);
> > 
> >  	spin_unlock_irqrestore(&chan->lock, flags);
> >  
> >  }

-- 
Regards,

Laurent Pinchart

  reply	other threads:[~2016-05-09 20:48 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <redmine.journal-676557.20160325074450.6aeff6eaa5fae69d@dm.renesas.com>
     [not found] ` <8760w7xq3n.wl%kuninori.morimoto.gx@renesas.com>
     [not found]   ` <874mbrxnft.wl%kuninori.morimoto.gx@renesas.com>
     [not found]     ` <1645988.6VIRltF7C5@avalon>
2016-04-22  1:50       ` [PATCH] dma: rcar-dmac: use list_add() on rcar_dmac_desc_put() Kuninori Morimoto
2016-05-02  9:37         ` Vinod Koul
2016-05-09 20:49           ` Laurent Pinchart [this message]
2016-05-11  3:28             ` Kuninori Morimoto
2016-05-14  8:11               ` Vinod Koul
2016-05-14  7:57         ` Vinod Koul
2016-05-24  9:50           ` Laurent Pinchart
2016-05-26 15:34             ` Vinod Koul
2016-05-30  0:34               ` Kuninori Morimoto
2016-05-30  0:41       ` [PATCH v2] " Kuninori Morimoto
2016-05-30  3:42         ` Vinod Koul

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1529191.mKmgdgIODm@avalon \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=dmaengine@vger.kernel.org \
    --cc=geert+renesas@glider.be \
    --cc=kuninori.morimoto.gx@renesas.com \
    --cc=laurent.pinchart+renesas@ideasonboard.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=osd2@lm.renesas.com \
    --cc=ryusuke.sakato.bx@renesas.com \
    --cc=vinod.koul@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).