include/net/xsk_buff_pool.h
Source file repositories/reference/linux-study-clean/include/net/xsk_buff_pool.h
File Facts
- System
- Linux kernel
- Corpus path
include/net/xsk_buff_pool.h- Extension
.h- Size
- 7031 bytes
- Lines
- 247
- Domain
- Networking Core
- Bucket
- Sockets, Protocols, Packet Path, And Network Policy
- Inferred role
- Networking Core: implementation source
- Status
- source implementation candidate
Why This File Exists
Networking stack implementation surface: socket APIs, protocol dispatch, packet flow, routing, filtering, and network namespaces.
- Networking stack implementation surface: socket APIs, protocol dispatch, packet flow, routing, filtering, and network namespaces.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/if_xdp.hlinux/types.hlinux/dma-mapping.hlinux/bpf.hnet/xdp.h
Detected Declarations
struct xsk_buff_poolstruct xdp_rxq_infostruct xsk_cb_descstruct xsk_queuestruct xdp_descstruct xdp_umemstruct xdp_sockstruct devicestruct pagestruct xdp_buff_xskstruct xsk_dma_mapstruct xsk_buff_poolstruct xdp_desc_ctxfunction xp_init_xskb_addrfunction xp_init_xskb_dmafunction xp_get_dmafunction xp_get_frame_dmafunction xp_dma_sync_for_cpufunction xp_dma_sync_for_devicefunction xp_desc_crosses_non_contig_pgfunction xp_mb_descfunction xp_aligned_extract_addrfunction xp_unaligned_extract_addrfunction xp_unaligned_extract_offsetfunction xp_unaligned_add_offset_to_addrfunction xp_aligned_extract_idxfunction xp_releasefunction xp_get_handlefunction xp_tx_metadata_enabled
Annotated Snippet
struct xdp_buff_xsk {
struct xdp_buff xdp;
u8 cb[XSK_PRIV_MAX];
dma_addr_t dma;
dma_addr_t frame_dma;
struct xsk_buff_pool *pool;
struct list_head list_node;
} __aligned_largest;
#define XSK_CHECK_PRIV_TYPE(t) BUILD_BUG_ON(sizeof(t) > offsetofend(struct xdp_buff_xsk, cb))
#define XSK_TX_COMPL_FITS(t) BUILD_BUG_ON(sizeof(struct xsk_tx_metadata_compl) > sizeof(t))
struct xsk_dma_map {
dma_addr_t *dma_pages;
struct device *dev;
struct net_device *netdev;
refcount_t users;
struct list_head list; /* Protected by the RTNL_LOCK */
u32 dma_pages_cnt;
};
struct xsk_buff_pool {
/* Members only used in the control path first. */
struct device *dev;
struct net_device *netdev;
struct list_head xsk_tx_list;
/* Protects modifications to the xsk_tx_list */
spinlock_t xsk_tx_list_lock;
refcount_t users;
struct xdp_umem *umem;
struct work_struct work;
/* Protects generic receive in shared and non-shared umem mode. */
spinlock_t rx_lock;
struct list_head free_list;
struct list_head xskb_list;
u32 heads_cnt;
u16 queue_id;
/* Data path members as close to free_heads at the end as possible. */
struct xsk_queue *fq ____cacheline_aligned_in_smp;
struct xsk_queue *cq;
/* For performance reasons, each buff pool has its own array of dma_pages
* even when they are identical.
*/
dma_addr_t *dma_pages;
struct xdp_buff_xsk *heads;
struct xdp_desc *tx_descs;
u64 chunk_mask;
u64 addrs_cnt;
u32 free_list_cnt;
u32 dma_pages_cnt;
u32 free_heads_cnt;
u32 headroom;
u32 chunk_size;
u32 chunk_shift;
u32 frame_len;
u32 xdp_zc_max_segs;
u8 tx_metadata_len; /* inherited from umem */
u8 cached_need_wakeup;
bool uses_need_wakeup;
bool unaligned;
bool tx_sw_csum;
void *addrs;
/* Mutual exclusion of the completion ring in the SKB mode.
* Protect: NAPI TX thread and sendmsg error paths in the SKB
* destructor callback.
*/
spinlock_t cq_prod_lock;
struct xdp_buff_xsk *free_heads[];
};
/* Masks for xdp_umem_page flags.
* The low 12-bits of the addr will be 0 since this is the page address, so we
* can use them for flags.
*/
#define XSK_NEXT_PG_CONTIG_SHIFT 0
#define XSK_NEXT_PG_CONTIG_MASK BIT_ULL(XSK_NEXT_PG_CONTIG_SHIFT)
/* AF_XDP core. */
struct xsk_buff_pool *xp_create_and_assign_umem(struct xdp_sock *xs,
struct xdp_umem *umem);
int xp_assign_dev(struct xsk_buff_pool *pool, struct net_device *dev,
u16 queue_id, u16 flags);
int xp_assign_dev_shared(struct xsk_buff_pool *pool, struct xdp_sock *umem_xs,
struct net_device *dev, u16 queue_id);
int xp_alloc_tx_descs(struct xsk_buff_pool *pool, struct xdp_sock *xs);
void xp_destroy(struct xsk_buff_pool *pool);
void xp_get_pool(struct xsk_buff_pool *pool);
bool xp_put_pool(struct xsk_buff_pool *pool);
void xp_clear_dev(struct xsk_buff_pool *pool);
Annotation
- Immediate include surface: `linux/if_xdp.h`, `linux/types.h`, `linux/dma-mapping.h`, `linux/bpf.h`, `net/xdp.h`.
- Detected declarations: `struct xsk_buff_pool`, `struct xdp_rxq_info`, `struct xsk_cb_desc`, `struct xsk_queue`, `struct xdp_desc`, `struct xdp_umem`, `struct xdp_sock`, `struct device`, `struct page`, `struct xdp_buff_xsk`.
- Atlas domain: Networking Core / Sockets, Protocols, Packet Path, And Network Policy.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.