On Tue, 5 Dec 2023 at 22:11, Larysa Zaremba <larysa.zaremba@xxxxxxxxx> wrote: > > From: Maciej Fijalkowski <maciej.fijalkowski@xxxxxxxxx> > > Commit 94ecc5ca4dbf ("xsk: Add cb area to struct xdp_buff_xsk") has added > a buffer for custom data to xdp_buff_xsk. Particularly, this memory is used > for data, consumed by XDP hints kfuncs. It does not always change on > a per-packet basis and some parts can be set for example, at the same time > as RX queue info. > > Add functions to fill all cbs in xsk_buff_pool with the same metadata. Thanks Larysa and Maciej. Acked-by: Magnus Karlsson <magnus.karlsson@xxxxxxxxx> > Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@xxxxxxxxx> > Signed-off-by: Larysa Zaremba <larysa.zaremba@xxxxxxxxx> > --- > include/net/xdp_sock_drv.h | 17 +++++++++++++++++ > include/net/xsk_buff_pool.h | 2 ++ > net/xdp/xsk_buff_pool.c | 12 ++++++++++++ > 3 files changed, 31 insertions(+) > > diff --git a/include/net/xdp_sock_drv.h b/include/net/xdp_sock_drv.h > index 81e02de3f453..b62bb8525a5f 100644 > --- a/include/net/xdp_sock_drv.h > +++ b/include/net/xdp_sock_drv.h > @@ -14,6 +14,12 @@ > > #ifdef CONFIG_XDP_SOCKETS > > +struct xsk_cb_desc { > + void *src; > + u8 off; > + u8 bytes; > +}; > + > void xsk_tx_completed(struct xsk_buff_pool *pool, u32 nb_entries); > bool xsk_tx_peek_desc(struct xsk_buff_pool *pool, struct xdp_desc *desc); > u32 xsk_tx_peek_release_desc_batch(struct xsk_buff_pool *pool, u32 max); > @@ -47,6 +53,12 @@ static inline void xsk_pool_set_rxq_info(struct xsk_buff_pool *pool, > xp_set_rxq_info(pool, rxq); > } > > +static inline void xsk_pool_fill_cb(struct xsk_buff_pool *pool, > + struct xsk_cb_desc *desc) > +{ > + xp_fill_cb(pool, desc); > +} > + > static inline unsigned int xsk_pool_get_napi_id(struct xsk_buff_pool *pool) > { > #ifdef CONFIG_NET_RX_BUSY_POLL > @@ -274,6 +286,11 @@ static inline void xsk_pool_set_rxq_info(struct xsk_buff_pool *pool, > { > } > > +static inline void xsk_pool_fill_cb(struct xsk_buff_pool *pool, > + struct xsk_cb_desc *desc) > +{ > +} > + > static inline unsigned int xsk_pool_get_napi_id(struct xsk_buff_pool *pool) > { > return 0; > diff --git a/include/net/xsk_buff_pool.h b/include/net/xsk_buff_pool.h > index 8d48d37ab7c0..99dd7376df6a 100644 > --- a/include/net/xsk_buff_pool.h > +++ b/include/net/xsk_buff_pool.h > @@ -12,6 +12,7 @@ > > struct xsk_buff_pool; > struct xdp_rxq_info; > +struct xsk_cb_desc; > struct xsk_queue; > struct xdp_desc; > struct xdp_umem; > @@ -135,6 +136,7 @@ static inline void xp_init_xskb_dma(struct xdp_buff_xsk *xskb, struct xsk_buff_p > > /* AF_XDP ZC drivers, via xdp_sock_buff.h */ > void xp_set_rxq_info(struct xsk_buff_pool *pool, struct xdp_rxq_info *rxq); > +void xp_fill_cb(struct xsk_buff_pool *pool, struct xsk_cb_desc *desc); > int xp_dma_map(struct xsk_buff_pool *pool, struct device *dev, > unsigned long attrs, struct page **pages, u32 nr_pages); > void xp_dma_unmap(struct xsk_buff_pool *pool, unsigned long attrs); > diff --git a/net/xdp/xsk_buff_pool.c b/net/xdp/xsk_buff_pool.c > index 4f6f538a5462..28711cc44ced 100644 > --- a/net/xdp/xsk_buff_pool.c > +++ b/net/xdp/xsk_buff_pool.c > @@ -125,6 +125,18 @@ void xp_set_rxq_info(struct xsk_buff_pool *pool, struct xdp_rxq_info *rxq) > } > EXPORT_SYMBOL(xp_set_rxq_info); > > +void xp_fill_cb(struct xsk_buff_pool *pool, struct xsk_cb_desc *desc) > +{ > + u32 i; > + > + for (i = 0; i < pool->heads_cnt; i++) { > + struct xdp_buff_xsk *xskb = &pool->heads[i]; > + > + memcpy(xskb->cb + desc->off, desc->src, desc->bytes); > + } > +} > +EXPORT_SYMBOL(xp_fill_cb); > + > static void xp_disable_drv_zc(struct xsk_buff_pool *pool) > { > struct netdev_bpf bpf; > -- > 2.41.0 >