search for: virtio_xdp_headroom

Displaying 20 results from an estimated 48 matches for "virtio_xdp_headroom".

2023 Mar 28
1
[PATCH net-next 2/8] virtio_net: mergeable xdp: introduce mergeable_xdp_prepare
...want to bother users who are + * using xdp normally. + */ + if (!xdp_prog->aux->xdp_has_frags && + (*num_buf > 1 || headroom < virtnet_get_headroom(vi))) { + /* linearize data for XDP */ + xdp_page = xdp_linearize_page(rq, num_buf, + *page, offset, + VIRTIO_XDP_HEADROOM, + len); + + if (!xdp_page) + return NULL; + } else if (unlikely(headroom < virtnet_get_headroom(vi))) { + xdp_room = SKB_DATA_ALIGN(VIRTIO_XDP_HEADROOM + + sizeof(struct skb_shared_info)); + if (*len + xdp_room > PAGE_SIZE) + return NULL; + + xdp_page = alloc_page(GFP...
2023 Mar 31
1
[PATCH net-next 2/8] virtio_net: mergeable xdp: introduce mergeable_xdp_prepare
...using xdp normally. > + */ > + if (!xdp_prog->aux->xdp_has_frags && > + (*num_buf > 1 || headroom < virtnet_get_headroom(vi))) { > + /* linearize data for XDP */ > + xdp_page = xdp_linearize_page(rq, num_buf, > + *page, offset, > + VIRTIO_XDP_HEADROOM, > + len); > + > + if (!xdp_page) > + return NULL; > + } else if (unlikely(headroom < virtnet_get_headroom(vi))) { > + xdp_room = SKB_DATA_ALIGN(VIRTIO_XDP_HEADROOM + > + sizeof(struct skb_shared_info)); > + if (*len + xdp_room > PAGE_SIZE) > +...
2023 Mar 28
1
[PATCH net-next 1/8] virtio_net: mergeable xdp: put old page immediately
...--git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index e2560b6f7980..4d2bf1ce0730 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -1245,6 +1245,9 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, if (!xdp_page) goto err_xdp; offset = VIRTIO_XDP_HEADROOM; + + put_page(page); + page = xdp_page; } else if (unlikely(headroom < virtnet_get_headroom(vi))) { xdp_room = SKB_DATA_ALIGN(VIRTIO_XDP_HEADROOM + sizeof(struct skb_shared_info)); @@ -1259,6 +1262,9 @@ static struct sk_buff *receive_mergeable(struct net_device *dev,...
2023 Mar 31
1
[PATCH net-next 1/8] virtio_net: mergeable xdp: put old page immediately
...44 > --- a/drivers/net/virtio_net.c > +++ b/drivers/net/virtio_net.c > @@ -1245,6 +1245,9 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, > if (!xdp_page) > goto err_xdp; > offset = VIRTIO_XDP_HEADROOM; > + > + put_page(page); > + page = xdp_page; > } else if (unlikely(headroom < virtnet_get_headroom(vi))) { > xdp_room = SKB_DATA_ALIGN(VIRTIO_XDP_HEADROOM + >...
2020 May 06
6
[PATCH net-next 1/2] virtio-net: don't reserve space for vnet header for XDP
....data + len; xdp.data_meta = xdp.data; xdp.rxq = &rq->xdp_rxq; @@ -845,7 +845,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, * the descriptor on if we get an XDP_TX return code. */ data = page_address(xdp_page) + offset; - xdp.data_hard_start = data - VIRTIO_XDP_HEADROOM + vi->hdr_len; + xdp.data_hard_start = data - VIRTIO_XDP_HEADROOM; xdp.data = data + vi->hdr_len; xdp.data_end = xdp.data + (len - vi->hdr_len); xdp.data_meta = xdp.data; -- 2.20.1
2020 May 06
6
[PATCH net-next 1/2] virtio-net: don't reserve space for vnet header for XDP
....data + len; xdp.data_meta = xdp.data; xdp.rxq = &rq->xdp_rxq; @@ -845,7 +845,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, * the descriptor on if we get an XDP_TX return code. */ data = page_address(xdp_page) + offset; - xdp.data_hard_start = data - VIRTIO_XDP_HEADROOM + vi->hdr_len; + xdp.data_hard_start = data - VIRTIO_XDP_HEADROOM; xdp.data = data + vi->hdr_len; xdp.data_end = xdp.data + (len - vi->hdr_len); xdp.data_meta = xdp.data; -- 2.20.1
2023 Mar 23
1
[PATCH net-next 1/8] virtio_net: mergeable xdp: put old page immediately
...index e2560b6f7980..4d2bf1ce0730 100644 > > --- a/drivers/net/virtio_net.c > > +++ b/drivers/net/virtio_net.c > > @@ -1245,6 +1245,9 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, > > if (!xdp_page) > > goto err_xdp; > > offset = VIRTIO_XDP_HEADROOM; > > + > > + put_page(page); > > the error handling of xdp_linearize_page() does not seems self contained. > Does it not seem better? > 1. if xdp_linearize_page() succesed, call put_page() for first buffer just > as put_page() is call for other buffer > 2. or call...
2017 Jul 18
1
[PATCH net-next 4/5] virtio-net: do not reset during XDP set
...f --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > index e31b5b2..e732bd6 100644 > --- a/drivers/net/virtio_net.c > +++ b/drivers/net/virtio_net.c > @@ -407,6 +407,67 @@ static unsigned int virtnet_get_headroom(struct virtnet_info *vi) > return vi->xdp_queue_pairs ? VIRTIO_XDP_HEADROOM : 0; > } > > +/* We copy and linearize packet in the following cases: > + * > + * 1) Packet across multiple buffers, this happens normally when rx > + * buffer size is underestimated. Rarely, since spec does not > + * forbid using more than one buffer even if a single...
2017 Jul 18
1
[PATCH net-next 4/5] virtio-net: do not reset during XDP set
...f --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > index e31b5b2..e732bd6 100644 > --- a/drivers/net/virtio_net.c > +++ b/drivers/net/virtio_net.c > @@ -407,6 +407,67 @@ static unsigned int virtnet_get_headroom(struct virtnet_info *vi) > return vi->xdp_queue_pairs ? VIRTIO_XDP_HEADROOM : 0; > } > > +/* We copy and linearize packet in the following cases: > + * > + * 1) Packet across multiple buffers, this happens normally when rx > + * buffer size is underestimated. Rarely, since spec does not > + * forbid using more than one buffer even if a single...
2023 Mar 28
8
[PATCH net-next 0/8] virtio_net: refactor xdp codes
Due to historical reasons, the implementation of XDP in virtio-net is relatively chaotic. For example, the processing of XDP actions has two copies of similar code. Such as page, xdp_page processing, etc. The purpose of this patch set is to refactor these code. Reduce the difficulty of subsequent maintenance. Subsequent developers will not introduce new bugs because of some complex logical
2023 Mar 22
9
[PATCH net-next 0/8] virtio_net: refactor xdp codes
Due to historical reasons, the implementation of XDP in virtio-net is relatively chaotic. For example, the processing of XDP actions has two copies of similar code. Such as page, xdp_page processing, etc. The purpose of this patch set is to refactor these code. Reduce the difficulty of subsequent maintenance. Subsequent developers will not introduce new bugs because of some complex logical
2017 Jul 17
0
[PATCH net-next 4/5] virtio-net: do not reset during XDP set
...+), 125 deletions(-) diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index e31b5b2..e732bd6 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -407,6 +407,67 @@ static unsigned int virtnet_get_headroom(struct virtnet_info *vi) return vi->xdp_queue_pairs ? VIRTIO_XDP_HEADROOM : 0; } +/* We copy and linearize packet in the following cases: + * + * 1) Packet across multiple buffers, this happens normally when rx + * buffer size is underestimated. Rarely, since spec does not + * forbid using more than one buffer even if a single buffer is + * sufficient for the...
2023 Mar 15
10
[RFC net-next 0/8] virtio_net: refactor xdp codes
Due to historical reasons, the implementation of XDP in virtio-net is relatively chaotic. For example, the processing of XDP actions has two copies of similar code. Such as page, xdp_page processing, etc. The purpose of this patch set is to refactor these code. Reduce the difficulty of subsequent maintenance. Subsequent developers will not introduce new bugs because of some complex logical
2020 May 06
2
[PATCH net-next 1/2] virtio-net: don't reserve space for vnet header for XDP
....rxq = &rq->xdp_rxq; >> @@ -845,7 +845,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, >> * the descriptor on if we get an XDP_TX return code. >> */ >> data = page_address(xdp_page) + offset; >> - xdp.data_hard_start = data - VIRTIO_XDP_HEADROOM + vi->hdr_len; >> + xdp.data_hard_start = data - VIRTIO_XDP_HEADROOM; >> xdp.data = data + vi->hdr_len; >> xdp.data_end = xdp.data + (len - vi->hdr_len); >> xdp.data_meta = xdp.data; >> -- >> 2.20.1
2020 May 06
2
[PATCH net-next 1/2] virtio-net: don't reserve space for vnet header for XDP
....rxq = &rq->xdp_rxq; >> @@ -845,7 +845,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, >> * the descriptor on if we get an XDP_TX return code. >> */ >> data = page_address(xdp_page) + offset; >> - xdp.data_hard_start = data - VIRTIO_XDP_HEADROOM + vi->hdr_len; >> + xdp.data_hard_start = data - VIRTIO_XDP_HEADROOM; >> xdp.data = data + vi->hdr_len; >> xdp.data_end = xdp.data + (len - vi->hdr_len); >> xdp.data_meta = xdp.data; >> -- >> 2.20.1
2023 Mar 23
0
[PATCH net-next 1/8] virtio_net: mergeable xdp: put old page immediately
...;>> --- a/drivers/net/virtio_net.c > >>> +++ b/drivers/net/virtio_net.c > >>> @@ -1245,6 +1245,9 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, > >>> if (!xdp_page) > >>> goto err_xdp; > >>> offset = VIRTIO_XDP_HEADROOM; > >>> + > >>> + put_page(page); > >> > >> the error handling of xdp_linearize_page() does not seems self contained. > >> Does it not seem better? > >> 1. if xdp_linearize_page() succesed, call put_page() for first buffer just > >&...
2018 Mar 01
7
[PATCH net-next 0/2] virtio-net: re enable XDP_REDIRECT for mergeable buffer
Hi: This series tries to re-enable XDP_REDIRECT for mergeable buffer which was removed since commit 7324f5399b06 ("virtio_net: disable XDP_REDIRECT in receive_mergeable() case"). Main concerns are: - not enough tailroom was reserved which breaks cpumap - complex logic like EWMA and linearizing during XDP processing Fix those by: - reserve enough tailroom during refill - disable EWMA
2018 Mar 01
7
[PATCH net-next 0/2] virtio-net: re enable XDP_REDIRECT for mergeable buffer
Hi: This series tries to re-enable XDP_REDIRECT for mergeable buffer which was removed since commit 7324f5399b06 ("virtio_net: disable XDP_REDIRECT in receive_mergeable() case"). Main concerns are: - not enough tailroom was reserved which breaks cpumap - complex logic like EWMA and linearizing during XDP processing Fix those by: - reserve enough tailroom during refill - disable EWMA
2020 May 06
2
[PATCH net-next 1/2] virtio-net: don't reserve space for vnet header for XDP
....rxq = &rq->xdp_rxq; >> @@ -845,7 +845,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, >> * the descriptor on if we get an XDP_TX return code. >> */ >> data = page_address(xdp_page) + offset; >> - xdp.data_hard_start = data - VIRTIO_XDP_HEADROOM + vi->hdr_len; >> + xdp.data_hard_start = data - VIRTIO_XDP_HEADROOM; >> xdp.data = data + vi->hdr_len; >> xdp.data_end = xdp.data + (len - vi->hdr_len); >> xdp.data_meta = xdp.data; > >
2020 May 06
2
[PATCH net-next 1/2] virtio-net: don't reserve space for vnet header for XDP
....rxq = &rq->xdp_rxq; >> @@ -845,7 +845,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, >> * the descriptor on if we get an XDP_TX return code. >> */ >> data = page_address(xdp_page) + offset; >> - xdp.data_hard_start = data - VIRTIO_XDP_HEADROOM + vi->hdr_len; >> + xdp.data_hard_start = data - VIRTIO_XDP_HEADROOM; >> xdp.data = data + vi->hdr_len; >> xdp.data_end = xdp.data + (len - vi->hdr_len); >> xdp.data_meta = xdp.data; > >