Hi Ivan, > +static struct page *cpsw_alloc_page(struct cpsw_common *cpsw) > +{ > + struct page_pool *pool = cpsw->rx_page_pool; > + struct page *page; > + int i = 0; > + > + do { > + page = page_pool_dev_alloc_pages(pool); > + if (!page) > + return NULL; > + > + /* skip pages used by skb netstack */ I think the comment here is wrong and might confuse people. The page ref cnt is 1, which means the packet was *processed* and netstack is done with it, hence you can re-use it. If it's !=1 then you correctly unmap the buffer and decrease the ref cnt, so it will eventually be freed and not returned to the pool, right? > + if (page_ref_count(page) == 1) > + break; > + > + /* it's a pitty, but free page */ > + page_pool_recycle_direct(pool, page); > + } while (++i < descs_pool_size); > + > + return page; > +} > + /Ilias