On Thu, Sep 03, 2020 at 10:58:45PM +0200, Lorenzo Bianconi wrote: > Introduce multi-buffer bit (mb) in xdp_frame/xdp_buffer to specify > if shared_info area has been properly initialized for non-linear > xdp buffers > > Signed-off-by: Lorenzo Bianconi <lorenzo@xxxxxxxxxx> > --- > include/net/xdp.h | 8 ++++++-- > net/core/xdp.c | 1 + > 2 files changed, 7 insertions(+), 2 deletions(-) > > diff --git a/include/net/xdp.h b/include/net/xdp.h > index 3814fb631d52..42f439f9fcda 100644 > --- a/include/net/xdp.h > +++ b/include/net/xdp.h > @@ -72,7 +72,8 @@ struct xdp_buff { > void *data_hard_start; > struct xdp_rxq_info *rxq; > struct xdp_txq_info *txq; > - u32 frame_sz; /* frame size to deduce data_hard_end/reserved tailroom*/ > + u32 frame_sz:31; /* frame size to deduce data_hard_end/reserved tailroom*/ > + u32 mb:1; /* xdp non-linear buffer */ > }; > > /* Reserve memory area at end-of data area. > @@ -96,7 +97,8 @@ struct xdp_frame { > u16 len; > u16 headroom; > u32 metasize:8; > - u32 frame_sz:24; > + u32 frame_sz:23; > + u32 mb:1; /* xdp non-linear frame */ Hmm. Last time I checked compilers were generating ugly code with bitfields. Not performant and not efficient. frame_sz is used in the fast path. I suspect the first hunk alone will cause performance degradation. Could you use normal u8 or u32 flag field?