pgcache
pgcache = &rbdr->pgcache[rbdr->pgidx];
page = pgcache->page;
if (ref_count == pgcache->ref_count)
pgcache->ref_count--;
pgcache->page = page;
pgcache->dma_addr = 0;
pgcache->ref_count = 0;
if (!pgcache->ref_count) {
pgcache->ref_count = XDP_PAGE_REFCNT_REFILL;
next = &rbdr->pgcache[rbdr->pgidx];
return pgcache;
struct pgcache *pgcache = NULL;
pgcache = nicvf_alloc_page(nic, rbdr, gfp);
if (!pgcache && !nic->rb_page) {
if (pgcache)
nic->rb_page = pgcache->page;
if (rbdr->is_xdp && pgcache && pgcache->dma_addr) {
*rbuf = pgcache->dma_addr;
if (pgcache)
pgcache->dma_addr = *rbuf + XDP_PACKET_HEADROOM;
rbdr->pgcache = kzalloc_objs(*rbdr->pgcache, rbdr->pgcnt);
if (!rbdr->pgcache)
struct pgcache *pgcache;
pgcache = &rbdr->pgcache[head];
if (pgcache->page && page_ref_count(pgcache->page) != 0) {
page_ref_sub(pgcache->page,
pgcache->ref_count - 1);
put_page(pgcache->page);
static inline struct pgcache *nicvf_alloc_page(struct nicvf *nic,
struct pgcache *pgcache, *next;
struct pgcache *pgcache;