search for: do_xdp_prog

Displaying 10 results from an estimated 10 matches for "do_xdp_prog".

2016 Dec 23
0
[PATCH net 9/9] virtio-net: XDP support for small buffers
...;mergeable_rx_bufs) { + struct page *page = virt_to_head_page(xdp->data); + + put_page(page); + } else /* small buffer */ + kfree_skb(data); return; // On error abort to avoid unnecessary kick } @@ -366,23 +391,26 @@ static void virtnet_xdp_xmit(struct virtnet_info *vi, static u32 do_xdp_prog(struct virtnet_info *vi, struct receive_queue *rq, struct bpf_prog *xdp_prog, - struct page *page, int offset, int len) + void *data, int len) { int hdr_padded_len; struct xdp_buff xdp; + void *buf; unsigned int qp; u32 act; - u8 *buf; - - buf = page_add...
2016 Dec 23
21
[PATCH net 0/9] several fixups for virtio-net XDP
Merry Xmas and a Happy New year to all: This series tries to fixes several issues for virtio-net XDP which could be categorized into several parts: - fix several issues during XDP linearizing - allow csumed packet to work for XDP_PASS - make EWMA rxbuf size estimation works for XDP - forbid XDP when GUEST_UFO is support - remove big packet XDP support - add XDP support or small buffer Please
2016 Dec 23
21
[PATCH net 0/9] several fixups for virtio-net XDP
Merry Xmas and a Happy New year to all: This series tries to fixes several issues for virtio-net XDP which could be categorized into several parts: - fix several issues during XDP linearizing - allow csumed packet to work for XDP_PASS - make EWMA rxbuf size estimation works for XDP - forbid XDP when GUEST_UFO is support - remove big packet XDP support - add XDP support or small buffer Please
2016 Dec 23
1
[RFC PATCH] virtio_net: XDP support for adjust_head
....1a93158 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -159,6 +159,9 @@ struct virtnet_info { /* Ethtool settings */ u8 duplex; u32 speed; + + /* Headroom allocated in RX Queue */ + unsigned int headroom; }; struct padded_vnet_hdr { @@ -392,6 +395,7 @@ static u32 do_xdp_prog(struct virtnet_info *vi, else hdr_padded_len = sizeof(struct padded_vnet_hdr); + xdp.data_hard_start = buf - vi->headroom; xdp.data = buf + hdr_padded_len; xdp.data_end = xdp.data + (len - vi->hdr_len); @@ -430,9 +434,12 @@ static struct sk_buff *receive_big(struct net_device *de...
2016 Dec 23
1
[RFC PATCH] virtio_net: XDP support for adjust_head
....1a93158 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -159,6 +159,9 @@ struct virtnet_info { /* Ethtool settings */ u8 duplex; u32 speed; + + /* Headroom allocated in RX Queue */ + unsigned int headroom; }; struct padded_vnet_hdr { @@ -392,6 +395,7 @@ static u32 do_xdp_prog(struct virtnet_info *vi, else hdr_padded_len = sizeof(struct padded_vnet_hdr); + xdp.data_hard_start = buf - vi->headroom; xdp.data = buf + hdr_padded_len; xdp.data_end = xdp.data + (len - vi->hdr_len); @@ -430,9 +434,12 @@ static struct sk_buff *receive_big(struct net_device *de...
2016 Dec 23
0
[PATCH net 2/9] virtio-net: correctly xmit linearized page on XDP_TX
..._net.c b/drivers/net/virtio_net.c index 1067253..fe4562d 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -572,7 +572,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, if (unlikely(hdr->hdr.gso_type || hdr->hdr.flags)) goto err_xdp; - act = do_xdp_prog(vi, rq, xdp_prog, page, offset, len); + act = do_xdp_prog(vi, rq, xdp_prog, xdp_page, offset, len); switch (act) { case XDP_PASS: if (unlikely(xdp_page != page)) -- 2.7.4
2016 Dec 23
0
[PATCH net 5/9] virtio-net: unbreak csumed packets for XDP_PASS
....c +++ b/drivers/net/virtio_net.c @@ -440,7 +440,7 @@ static struct sk_buff *receive_big(struct net_device *dev, struct virtio_net_hdr_mrg_rxbuf *hdr = buf; u32 act; - if (unlikely(hdr->hdr.gso_type || hdr->hdr.flags)) + if (unlikely(hdr->hdr.gso_type)) goto err_xdp; act = do_xdp_prog(vi, rq, xdp_prog, page, 0, len); switch (act) { @@ -572,7 +572,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, * the receive path after XDP is loaded. In practice I * was not able to create this condition. */ - if (unlikely(hdr->hdr.gso_type || hdr->hdr.f...
2016 Dec 23
1
[PATCH net 4/9] virtio-net: correctly handle XDP_PASS for linearized packets
...eletions(-) > > diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > index 58ad40e..470293e 100644 > --- a/drivers/net/virtio_net.c > +++ b/drivers/net/virtio_net.c > @@ -578,8 +578,14 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, > act = do_xdp_prog(vi, rq, xdp_prog, xdp_page, offset, len); > switch (act) { > case XDP_PASS: > - if (unlikely(xdp_page != page)) > - __free_pages(xdp_page, 0); > + /* We can only create skb based on xdp_page. */ > + if (unlikely(xdp_page != page)) { > + rcu_read_unlock(); >...
2016 Dec 23
1
[PATCH net 4/9] virtio-net: correctly handle XDP_PASS for linearized packets
...eletions(-) > > diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > index 58ad40e..470293e 100644 > --- a/drivers/net/virtio_net.c > +++ b/drivers/net/virtio_net.c > @@ -578,8 +578,14 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, > act = do_xdp_prog(vi, rq, xdp_prog, xdp_page, offset, len); > switch (act) { > case XDP_PASS: > - if (unlikely(xdp_page != page)) > - __free_pages(xdp_page, 0); > + /* We can only create skb based on xdp_page. */ > + if (unlikely(xdp_page != page)) { > + rcu_read_unlock(); >...
2016 Dec 23
0
[PATCH net 4/9] virtio-net: correctly handle XDP_PASS for linearized packets
...file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index 58ad40e..470293e 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -578,8 +578,14 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, act = do_xdp_prog(vi, rq, xdp_prog, xdp_page, offset, len); switch (act) { case XDP_PASS: - if (unlikely(xdp_page != page)) - __free_pages(xdp_page, 0); + /* We can only create skb based on xdp_page. */ + if (unlikely(xdp_page != page)) { + rcu_read_unlock(); + put_page(page); + head_skb = pa...