Thread (25 messages) flat view 25 messages, 7 authors, 2021-03-22

Re: [PATCH 7/7] net: page_pool: use alloc_pages_bulk in refill code path

From: Jesper Dangaard Brouer <hidden>
Date: 2021-03-15 13:40:35
Also in: linux-nfs, lkml, netdev

On Fri, 12 Mar 2021 22:05:45 +0200
Ilias Apalodimas [off-list ref] wrote:
[...]
quoted
6. return last_page
  
quoted
+       /* 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.
  
quoted
+               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

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help