Thread (3 messages) 3 messages, 2 authors, 2026-03-02

Re: [PATCH net-next v9] virtio_net: add page_pool support for buffer allocation

From: Vishwanath Seshagiri <hidden>
Date: 2026-03-02 10:46:27
Also in: lkml, virtualization

On 3/2/26 3:57 PM, Michael S. Tsirkin wrote:
quoted
@@ -2666,32 +2603,25 @@ static void receive_buf(struct virtnet_info *vi, struct receive_queue *rq,
  static int add_recvbuf_small(struct virtnet_info *vi, struct receive_queue *rq,
  			     gfp_t gfp)
  {
-	char *buf;
  	unsigned int xdp_headroom = virtnet_get_headroom(vi);
  	void *ctx = (void *)(unsigned long)xdp_headroom;
-	int len = vi->hdr_len + VIRTNET_RX_PAD + GOOD_PACKET_LEN + xdp_headroom;
+	unsigned int len = vi->hdr_len + VIRTNET_RX_PAD + GOOD_PACKET_LEN + xdp_headroom;
+	char *buf;
  	int err;
  
  	len = SKB_DATA_ALIGN(len) +
  	      SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
  
-	if (unlikely(!skb_page_frag_refill(len, &rq->alloc_frag, gfp)))
-		return -ENOMEM;
-
-	buf = virtnet_rq_alloc(rq, len, gfp);
+	buf = page_pool_alloc_va(rq->page_pool, &len, gfp);
So this can increase len (for end of page accounting).
quoted
  	if (unlikely(!buf))
  		return -ENOMEM;
  
  	buf += VIRTNET_RX_PAD + xdp_headroom;
  
-	virtnet_rq_init_one_sg(rq, buf, vi->hdr_len + GOOD_PACKET_LEN);
-
-	err = virtqueue_add_inbuf_premapped(rq->vq, rq->sg, 1, buf, ctx, gfp);
-	if (err < 0) {
-		virtnet_rq_unmap(rq, buf, 0);
-		put_page(virt_to_head_page(buf));
-	}
+	err = virtnet_rq_submit(rq, buf, vi->hdr_len + GOOD_PACKET_LEN, ctx, gfp);
  
+	if (err < 0)
+		page_pool_put_page(rq->page_pool, virt_to_head_page(buf), -1, false);
  	return err;

But len is ignored in the rest of the function.
Will this not under-account truesize?


If it's intentional maybe add a comment explaining why?
It isn't intentional. I will add a separate alloc_len variable for the
page_pool_alloc_va() in v10.
quoted
  }
  
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help