mirror of
https://github.com/torvalds/linux.git
synced 2024-11-01 13:03:25 +01:00
xsk: add functions to fill control buffer
Commit 94ecc5ca4d
("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.
Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Signed-off-by: Larysa Zaremba <larysa.zaremba@intel.com>
Acked-by: Magnus Karlsson <magnus.karlsson@intel.com>
Link: https://lore.kernel.org/r/20231205210847.28460-8-larysa.zaremba@intel.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
0e6a7b0959
commit
b4e352ff11
3 changed files with 31 additions and 0 deletions
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue