mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-01-28 12:31:17 -05:00
virtio_net: separate the logic of freeing xdp shinfo
This patch introduce a new function that releases the xdp shinfo. The subsequent patch will reuse this function. Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com> Acked-by: Jason Wang <jasowang@redhat.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
00765f8ed7
commit
bb2c1e9e75
@@ -789,6 +789,21 @@ static int virtnet_xdp_xmit(struct net_device *dev,
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void put_xdp_frags(struct xdp_buff *xdp)
|
||||
{
|
||||
struct skb_shared_info *shinfo;
|
||||
struct page *xdp_page;
|
||||
int i;
|
||||
|
||||
if (xdp_buff_has_frags(xdp)) {
|
||||
shinfo = xdp_get_shared_info_from_buff(xdp);
|
||||
for (i = 0; i < shinfo->nr_frags; i++) {
|
||||
xdp_page = skb_frag_page(&shinfo->frags[i]);
|
||||
put_page(xdp_page);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int virtnet_xdp_handler(struct bpf_prog *xdp_prog, struct xdp_buff *xdp,
|
||||
struct net_device *dev,
|
||||
unsigned int *xdp_xmit,
|
||||
@@ -1308,12 +1323,9 @@ static struct sk_buff *receive_mergeable(struct net_device *dev,
|
||||
xdp_prog = rcu_dereference(rq->xdp_prog);
|
||||
if (xdp_prog) {
|
||||
unsigned int xdp_frags_truesz = 0;
|
||||
struct skb_shared_info *shinfo;
|
||||
struct page *xdp_page;
|
||||
struct xdp_buff xdp;
|
||||
void *data;
|
||||
u32 act;
|
||||
int i;
|
||||
|
||||
data = mergeable_xdp_get_buf(vi, rq, xdp_prog, ctx, &frame_sz,
|
||||
&num_buf, &page, offset, &len, hdr);
|
||||
@@ -1343,14 +1355,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev,
|
||||
break;
|
||||
}
|
||||
err_xdp_frags:
|
||||
if (xdp_buff_has_frags(&xdp)) {
|
||||
shinfo = xdp_get_shared_info_from_buff(&xdp);
|
||||
for (i = 0; i < shinfo->nr_frags; i++) {
|
||||
xdp_page = skb_frag_page(&shinfo->frags[i]);
|
||||
put_page(xdp_page);
|
||||
}
|
||||
}
|
||||
|
||||
put_xdp_frags(&xdp);
|
||||
goto err_xdp;
|
||||
}
|
||||
rcu_read_unlock();
|
||||
|
||||
Reference in New Issue
Block a user