From: Jesper Dangaard Brouer <brouer@redhat.com>
To: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Cc: Alexander Duyck <alexander.duyck@gmail.com>,
Mel Gorman <mgorman@techsingularity.net>,
Andrew Morton <akpm@linux-foundation.org>,
Chuck Lever <chuck.lever@oracle.com>,
Christoph Hellwig <hch@infradead.org>,
Matthew Wilcox <willy@infradead.org>,
LKML <linux-kernel@vger.kernel.org>,
Linux-Net <netdev@vger.kernel.org>, Linux-MM <linux-mm@kvack.org>,
Linux-NFS <linux-nfs@vger.kernel.org>,
brouer@redhat.com
Subject: Re: [PATCH 7/7] net: page_pool: use alloc_pages_bulk in refill code path
Date: Mon, 15 Mar 2021 14:39:28 +0100 [thread overview]
Message-ID: <20210315143928.5d94da8f@carbon> (raw)
In-Reply-To: <YEvJmVrnTzKT1XAY@apalos.home>
On Fri, 12 Mar 2021 22:05:45 +0200
Ilias Apalodimas <ilias.apalodimas@linaro.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
next prev parent reply other threads:[~2021-03-15 13:40 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-12 15:43 [PATCH 0/7 v4] Introduce a bulk order-0 page allocator with two in-tree users Mel Gorman
2021-03-12 15:43 ` [PATCH 1/7] mm/page_alloc: Move gfp_allowed_mask enforcement to prepare_alloc_pages Mel Gorman
2021-03-19 16:11 ` Vlastimil Babka
2021-03-19 17:49 ` Mel Gorman
2021-03-12 15:43 ` [PATCH 2/7] mm/page_alloc: Rename alloced to allocated Mel Gorman
2021-03-19 16:22 ` Vlastimil Babka
2021-03-12 15:43 ` [PATCH 3/7] mm/page_alloc: Add a bulk page allocator Mel Gorman
2021-03-19 18:18 ` Vlastimil Babka
2021-03-22 8:30 ` Mel Gorman
2021-03-12 15:43 ` [PATCH 4/7] SUNRPC: Set rq_page_end differently Mel Gorman
2021-03-12 15:43 ` [PATCH 5/7] SUNRPC: Refresh rq_pages using a bulk page allocator Mel Gorman
2021-03-12 18:44 ` Alexander Duyck
2021-03-12 19:22 ` Chuck Lever III
2021-03-13 12:59 ` Mel Gorman
2021-03-12 15:43 ` [PATCH 6/7] net: page_pool: refactor dma_map into own function page_pool_dma_map Mel Gorman
2021-03-12 15:43 ` [PATCH 7/7] net: page_pool: use alloc_pages_bulk in refill code path Mel Gorman
2021-03-12 19:44 ` Alexander Duyck
2021-03-12 20:05 ` Ilias Apalodimas
2021-03-15 13:39 ` Jesper Dangaard Brouer [this message]
2021-03-13 13:30 ` Mel Gorman
2021-03-15 8:40 ` Jesper Dangaard Brouer
2021-03-15 19:33 ` [PATCH mel-git] Followup: Update [PATCH 7/7] in Mel's series Jesper Dangaard Brouer
2021-03-15 19:33 ` [PATCH mel-git] net: page_pool: use alloc_pages_bulk in refill code path Jesper Dangaard Brouer
2021-03-17 16:31 ` [PATCH 0/7 v4] Introduce a bulk order-0 page allocator with two in-tree users Alexander Lobakin
2021-03-17 16:38 ` Jesper Dangaard Brouer
2021-03-17 16:52 ` Alexander Lobakin
2021-03-17 17:19 ` Jesper Dangaard Brouer
2021-03-17 22:25 ` Alexander Lobakin
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=20210315143928.5d94da8f@carbon \
--to=brouer@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=alexander.duyck@gmail.com \
--cc=chuck.lever@oracle.com \
--cc=hch@infradead.org \
--cc=ilias.apalodimas@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-nfs@vger.kernel.org \
--cc=mgorman@techsingularity.net \
--cc=netdev@vger.kernel.org \
--cc=willy@infradead.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.