Message ID | 20221220141449.115918-2-hengqi@linux.alibaba.com (mailing list archive) |
---|---|
State | Deferred |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | virtio_net: support multi buffer xdp | expand |
在 2022/12/20 22:14, Heng Qi 写道: > XDP core assumes that the frame_size of xdp_buff and the length of > the frag are PAGE_SIZE. The hole may cause the processing of xdp to > fail, so we disable the hole mechanism when xdp is set. > > Signed-off-by: Heng Qi <hengqi@linux.alibaba.com> > Reviewed-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com> > --- > drivers/net/virtio_net.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > index 9cce7dec7366..443aa7b8f0ad 100644 > --- a/drivers/net/virtio_net.c > +++ b/drivers/net/virtio_net.c > @@ -1419,8 +1419,11 @@ static int add_recvbuf_mergeable(struct virtnet_info *vi, > /* To avoid internal fragmentation, if there is very likely not > * enough space for another buffer, add the remaining space to > * the current buffer. > + * XDP core assumes that frame_size of xdp_buff and the length > + * of the frag are PAGE_SIZE, so we disable the hole mechanism. > */ > - len += hole; > + if (!headroom) > + len += hole; Is this only a requirement of multi-buffer XDP? If not, it need to be backported to stable. Thanks > alloc_frag->offset += hole; > } >
在 2022/12/27 下午2:30, Jason Wang 写道: > > 在 2022/12/20 22:14, Heng Qi 写道: >> XDP core assumes that the frame_size of xdp_buff and the length of >> the frag are PAGE_SIZE. The hole may cause the processing of xdp to >> fail, so we disable the hole mechanism when xdp is set. >> >> Signed-off-by: Heng Qi <hengqi@linux.alibaba.com> >> Reviewed-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com> >> --- >> drivers/net/virtio_net.c | 5 ++++- >> 1 file changed, 4 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c >> index 9cce7dec7366..443aa7b8f0ad 100644 >> --- a/drivers/net/virtio_net.c >> +++ b/drivers/net/virtio_net.c >> @@ -1419,8 +1419,11 @@ static int add_recvbuf_mergeable(struct >> virtnet_info *vi, >> /* To avoid internal fragmentation, if there is very likely >> not >> * enough space for another buffer, add the remaining space to >> * the current buffer. >> + * XDP core assumes that frame_size of xdp_buff and the length >> + * of the frag are PAGE_SIZE, so we disable the hole mechanism. >> */ >> - len += hole; >> + if (!headroom) >> + len += hole; > > > Is this only a requirement of multi-buffer XDP? If not, it need to be > backported to stable. It applies to single buffer xdp and multi-buffer xdp, but even if single buffer xdp has a hole mechanism, there will be no problem (limiting mtu and turning off GUEST GSO), so there is no need to backport it. Thanks. > > Thanks > > >> alloc_frag->offset += hole; >> }
在 2022/12/27 15:32, Heng Qi 写道: > > > 在 2022/12/27 下午2:30, Jason Wang 写道: >> >> 在 2022/12/20 22:14, Heng Qi 写道: >>> XDP core assumes that the frame_size of xdp_buff and the length of >>> the frag are PAGE_SIZE. The hole may cause the processing of xdp to >>> fail, so we disable the hole mechanism when xdp is set. >>> >>> Signed-off-by: Heng Qi <hengqi@linux.alibaba.com> >>> Reviewed-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com> >>> --- >>> drivers/net/virtio_net.c | 5 ++++- >>> 1 file changed, 4 insertions(+), 1 deletion(-) >>> >>> diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c >>> index 9cce7dec7366..443aa7b8f0ad 100644 >>> --- a/drivers/net/virtio_net.c >>> +++ b/drivers/net/virtio_net.c >>> @@ -1419,8 +1419,11 @@ static int add_recvbuf_mergeable(struct >>> virtnet_info *vi, >>> /* To avoid internal fragmentation, if there is very >>> likely not >>> * enough space for another buffer, add the remaining >>> space to >>> * the current buffer. >>> + * XDP core assumes that frame_size of xdp_buff and the length >>> + * of the frag are PAGE_SIZE, so we disable the hole >>> mechanism. >>> */ >>> - len += hole; >>> + if (!headroom) >>> + len += hole; >> >> >> Is this only a requirement of multi-buffer XDP? If not, it need to be >> backported to stable. > > It applies to single buffer xdp and multi-buffer xdp, but even if > single buffer xdp has a hole > mechanism, there will be no problem (limiting mtu and turning off > GUEST GSO), so there is > no need to backport it. Let's add this in the changelog. With that, Acked-by: Jason Wang <jasowang@redhat.com> Thanks > > Thanks. > >> >> Thanks >> >> >>> alloc_frag->offset += hole; >>> } >
在 2022/12/28 下午2:28, Jason Wang 写道: > > 在 2022/12/27 15:32, Heng Qi 写道: >> >> >> 在 2022/12/27 下午2:30, Jason Wang 写道: >>> >>> 在 2022/12/20 22:14, Heng Qi 写道: >>>> XDP core assumes that the frame_size of xdp_buff and the length of >>>> the frag are PAGE_SIZE. The hole may cause the processing of xdp to >>>> fail, so we disable the hole mechanism when xdp is set. >>>> >>>> Signed-off-by: Heng Qi <hengqi@linux.alibaba.com> >>>> Reviewed-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com> >>>> --- >>>> drivers/net/virtio_net.c | 5 ++++- >>>> 1 file changed, 4 insertions(+), 1 deletion(-) >>>> >>>> diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c >>>> index 9cce7dec7366..443aa7b8f0ad 100644 >>>> --- a/drivers/net/virtio_net.c >>>> +++ b/drivers/net/virtio_net.c >>>> @@ -1419,8 +1419,11 @@ static int add_recvbuf_mergeable(struct >>>> virtnet_info *vi, >>>> /* To avoid internal fragmentation, if there is very >>>> likely not >>>> * enough space for another buffer, add the remaining >>>> space to >>>> * the current buffer. >>>> + * XDP core assumes that frame_size of xdp_buff and the >>>> length >>>> + * of the frag are PAGE_SIZE, so we disable the hole >>>> mechanism. >>>> */ >>>> - len += hole; >>>> + if (!headroom) >>>> + len += hole; >>> >>> >>> Is this only a requirement of multi-buffer XDP? If not, it need to >>> be backported to stable. >> >> It applies to single buffer xdp and multi-buffer xdp, but even if >> single buffer xdp has a hole >> mechanism, there will be no problem (limiting mtu and turning off >> GUEST GSO), so there is >> no need to backport it. > > > Let's add this in the changelog. Ok, thanks for your energy. > > With that, > > Acked-by: Jason Wang <jasowang@redhat.com> > > Thanks > > >> >> Thanks. >> >>> >>> Thanks >>> >>> >>>> alloc_frag->offset += hole; >>>> } >>
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index 9cce7dec7366..443aa7b8f0ad 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -1419,8 +1419,11 @@ static int add_recvbuf_mergeable(struct virtnet_info *vi, /* To avoid internal fragmentation, if there is very likely not * enough space for another buffer, add the remaining space to * the current buffer. + * XDP core assumes that frame_size of xdp_buff and the length + * of the frag are PAGE_SIZE, so we disable the hole mechanism. */ - len += hole; + if (!headroom) + len += hole; alloc_frag->offset += hole; }