Lines Matching refs:page_info

13 			       struct gve_rx_slot_page_info *page_info,  in gve_rx_free_buffer()  argument
19 page_ref_sub(page_info->page, page_info->pagecnt_bias - 1); in gve_rx_free_buffer()
20 gve_free_page(dev, page_info->page, dma, DMA_FROM_DEVICE); in gve_rx_free_buffer()
30 gve_rx_free_buffer(&priv->pdev->dev, &rx->data.page_info[i], in gve_rx_unfill_pages()
34 page_ref_sub(rx->data.page_info[i].page, in gve_rx_unfill_pages()
35 rx->data.page_info[i].pagecnt_bias - 1); in gve_rx_unfill_pages()
39 kvfree(rx->data.page_info); in gve_rx_unfill_pages()
40 rx->data.page_info = NULL; in gve_rx_unfill_pages()
69 static void gve_setup_rx_buffer(struct gve_rx_slot_page_info *page_info, in gve_setup_rx_buffer() argument
72 page_info->page = page; in gve_setup_rx_buffer()
73 page_info->page_offset = 0; in gve_setup_rx_buffer()
74 page_info->page_address = page_address(page); in gve_setup_rx_buffer()
78 page_info->pagecnt_bias = INT_MAX; in gve_setup_rx_buffer()
82 struct gve_rx_slot_page_info *page_info, in gve_rx_alloc_buffer() argument
93 gve_setup_rx_buffer(page_info, dma, page, &data_slot->addr); in gve_rx_alloc_buffer()
109 rx->data.page_info = kvzalloc(slots * in gve_prefill_rx_pages()
110 sizeof(*rx->data.page_info), GFP_KERNEL); in gve_prefill_rx_pages()
111 if (!rx->data.page_info) in gve_prefill_rx_pages()
117 kvfree(rx->data.page_info); in gve_prefill_rx_pages()
118 rx->data.page_info = NULL; in gve_prefill_rx_pages()
127 gve_setup_rx_buffer(&rx->data.page_info[i], addr, page, in gve_prefill_rx_pages()
131 err = gve_rx_alloc_buffer(priv, &priv->pdev->dev, &rx->data.page_info[i], in gve_prefill_rx_pages()
141 &rx->data.page_info[i], in gve_prefill_rx_pages()
300 struct gve_rx_slot_page_info *page_info, in gve_rx_add_frags() argument
304 u32 offset = page_info->page_offset + gve_rx_ctx_padding(ctx); in gve_rx_add_frags()
314 skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags, page_info->page, in gve_rx_add_frags()
320 static void gve_rx_flip_buff(struct gve_rx_slot_page_info *page_info, __be64 *slot_addr) in gve_rx_flip_buff() argument
325 page_info->page_offset ^= PAGE_SIZE / 2; in gve_rx_flip_buff()
329 static int gve_rx_can_recycle_buffer(struct gve_rx_slot_page_info *page_info) in gve_rx_can_recycle_buffer() argument
331 int pagecount = page_count(page_info->page); in gve_rx_can_recycle_buffer()
334 if (pagecount == page_info->pagecnt_bias) in gve_rx_can_recycle_buffer()
337 else if (pagecount > page_info->pagecnt_bias) in gve_rx_can_recycle_buffer()
339 WARN(pagecount < page_info->pagecnt_bias, in gve_rx_can_recycle_buffer()
346 struct gve_rx_slot_page_info *page_info, u16 len, in gve_rx_raw_addressing() argument
351 struct sk_buff *skb = gve_rx_add_frags(napi, page_info, packet_buffer_size, len, ctx); in gve_rx_raw_addressing()
360 gve_dec_pagecnt_bias(page_info); in gve_rx_raw_addressing()
367 struct gve_rx_ring *rx, struct gve_rx_slot_page_info *page_info, in gve_rx_qpl() argument
380 skb = gve_rx_add_frags(napi, page_info, rx->packet_buffer_size, len, ctx); in gve_rx_qpl()
384 gve_dec_pagecnt_bias(page_info); in gve_rx_qpl()
385 gve_rx_flip_buff(page_info, &data_slot->qpl_offset); in gve_rx_qpl()
390 skb = gve_rx_copy(netdev, napi, page_info, len, padding, ctx); in gve_rx_qpl()
410 struct gve_rx_slot_page_info *page_info; in gve_rx_ctx_init() local
444 page_info = &rx->data.page_info[idx]; in gve_rx_ctx_init()
446 recycle = gve_rx_can_recycle_buffer(page_info); in gve_rx_ctx_init()
488 struct gve_rx_slot_page_info *page_info, struct napi_struct *napi, in gve_rx_skb() argument
497 skb = gve_rx_copy(netdev, napi, page_info, len, GVE_RX_PAD, ctx); in gve_rx_skb()
507 int recycle = gve_rx_can_recycle_buffer(page_info); in gve_rx_skb()
513 page_info->can_flip = recycle; in gve_rx_skb()
514 if (page_info->can_flip) { in gve_rx_skb()
520 page_info, len, napi, in gve_rx_skb()
530 page_info, len, napi, data_slot); in gve_rx_skb()
539 struct gve_rx_slot_page_info *page_info; in gve_rx() local
563 page_info = &rx->data.page_info[(idx + 2) & rx->mask]; in gve_rx()
564 va = page_info->page_address + page_info->page_offset; in gve_rx()
566 prefetch(page_info->page); /* Kernel page struct. */ in gve_rx()
572 page_info = &rx->data.page_info[idx]; in gve_rx()
575 be64_to_cpu(data_slot->addr) - page_info->page_offset : in gve_rx()
579 skb = gve_rx_skb(priv, rx, page_info, napi, len, data_slot); in gve_rx()
654 struct gve_rx_slot_page_info *page_info; in gve_rx_refill_buffers() local
657 page_info = &rx->data.page_info[idx]; in gve_rx_refill_buffers()
658 if (page_info->can_flip) { in gve_rx_refill_buffers()
665 gve_rx_flip_buff(page_info, &data_slot->addr); in gve_rx_refill_buffers()
666 page_info->can_flip = 0; in gve_rx_refill_buffers()
675 int recycle = gve_rx_can_recycle_buffer(page_info); in gve_rx_refill_buffers()
687 gve_rx_free_buffer(dev, page_info, data_slot); in gve_rx_refill_buffers()
688 page_info->page = NULL; in gve_rx_refill_buffers()
689 if (gve_rx_alloc_buffer(priv, dev, page_info, in gve_rx_refill_buffers()