[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20210315143928.5d94da8f@carbon>
Date: Mon, 15 Mar 2021 14:39:28 +0100
From: Jesper Dangaard Brouer <brouer@...hat.com>
To: Ilias Apalodimas <ilias.apalodimas@...aro.org>
Cc: Alexander Duyck <alexander.duyck@...il.com>,
Mel Gorman <mgorman@...hsingularity.net>,
Andrew Morton <akpm@...ux-foundation.org>,
Chuck Lever <chuck.lever@...cle.com>,
Christoph Hellwig <hch@...radead.org>,
Matthew Wilcox <willy@...radead.org>,
LKML <linux-kernel@...r.kernel.org>,
Linux-Net <netdev@...r.kernel.org>,
Linux-MM <linux-mm@...ck.org>,
Linux-NFS <linux-nfs@...r.kernel.org>, brouer@...hat.com
Subject: Re: [PATCH 7/7] net: page_pool: use alloc_pages_bulk in refill code
path
On Fri, 12 Mar 2021 22:05:45 +0200
Ilias Apalodimas <ilias.apalodimas@...aro.org> wrote:
> [...]
> > 6. return last_page
> >
> > > + /* Remaining pages store in alloc.cache */
> > > + list_for_each_entry_safe(page, next, &page_list, lru) {
> > > + list_del(&page->lru);
> > > + if ((pp_flags & PP_FLAG_DMA_MAP) &&
> > > + unlikely(!page_pool_dma_map(pool, page))) {
> > > + put_page(page);
> > > + continue;
> > > + }
> >
> > So if you added a last_page pointer what you could do is check for it
> > here and assign it to the alloc cache. If last_page is not set the
> > block would be skipped.
> >
> > > + if (likely(pool->alloc.count < PP_ALLOC_CACHE_SIZE)) {
> > > + pool->alloc.cache[pool->alloc.count++] = page;
> > > + pool->pages_state_hold_cnt++;
> > > + trace_page_pool_state_hold(pool, page,
> > > + pool->pages_state_hold_cnt);
> > > + } else {
> > > + put_page(page);
> >
> > If you are just calling put_page here aren't you leaking DMA mappings?
> > Wouldn't you need to potentially unmap the page before you call
> > put_page on it?
>
> Oops, I completely missed that. Alexander is right here.
Well, the put_page() case can never happen as the pool->alloc.cache[]
is known to be empty when this function is called. I do agree that the
code looks cumbersome and should free the DMA mapping, if it could
happen.
--
Best regards,
Jesper Dangaard Brouer
MSc.CS, Principal Kernel Engineer at Red Hat
LinkedIn: http://www.linkedin.com/in/brouer
Powered by blists - more mailing lists