On Fri, 2020-12-11 at 20:28 +0100, Lorenzo Bianconi wrote: > Introduce xdp_prepare_buff utility routine to initialize per- > descriptor > xdp_buff fields (e.g. xdp_buff pointers). Rely on xdp_prepare_buff() > in > all XDP capable drivers. > > Signed-off-by: Lorenzo Bianconi <lorenzo@xxxxxxxxxx> > ... > +static inline void > +xdp_prepare_buff(struct xdp_buff *xdp, unsigned char *hard_start, > + int headroom, int data_len) > +{ > + xdp->data_hard_start = hard_start; > + xdp->data = hard_start + headroom; > + xdp->data_end = xdp->data + data_len; > + xdp->data_meta = xdp->data; You might want to compute data = hard_start + headroom; on a local var, and hopefully gcc will put it into a register, then reuse it three times instead of the 2 xdp->data de-references you got at the end of the function. unsigned char *data = hard_start + headroom; xdp->data_hard_start = hard_start; xdp->data = data; xdp->data_end = data + data_len; xdp->data_meta = data;