Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v4.18 103 lines 2.4 kB view raw
1/* SPDX-License-Identifier: GPL-2.0 */ 2/* AF_XDP internal functions 3 * Copyright(c) 2018 Intel Corporation. 4 */ 5 6#ifndef _LINUX_XDP_SOCK_H 7#define _LINUX_XDP_SOCK_H 8 9#include <linux/workqueue.h> 10#include <linux/if_xdp.h> 11#include <linux/mutex.h> 12#include <linux/spinlock.h> 13#include <linux/mm.h> 14#include <net/sock.h> 15 16struct net_device; 17struct xsk_queue; 18 19struct xdp_umem_props { 20 u64 chunk_mask; 21 u64 size; 22}; 23 24struct xdp_umem_page { 25 void *addr; 26 dma_addr_t dma; 27}; 28 29struct xdp_umem { 30 struct xsk_queue *fq; 31 struct xsk_queue *cq; 32 struct xdp_umem_page *pages; 33 struct xdp_umem_props props; 34 u32 headroom; 35 u32 chunk_size_nohr; 36 struct user_struct *user; 37 struct pid *pid; 38 unsigned long address; 39 refcount_t users; 40 struct work_struct work; 41 struct page **pgs; 42 u32 npgs; 43 struct net_device *dev; 44 u16 queue_id; 45 bool zc; 46 spinlock_t xsk_list_lock; 47 struct list_head xsk_list; 48}; 49 50struct xdp_sock { 51 /* struct sock must be the first member of struct xdp_sock */ 52 struct sock sk; 53 struct xsk_queue *rx; 54 struct net_device *dev; 55 struct xdp_umem *umem; 56 struct list_head flush_node; 57 u16 queue_id; 58 struct xsk_queue *tx ____cacheline_aligned_in_smp; 59 struct list_head list; 60 bool zc; 61 /* Protects multiple processes in the control path */ 62 struct mutex mutex; 63 /* Mutual exclusion of NAPI TX thread and sendmsg error paths 64 * in the SKB destructor callback. 65 */ 66 spinlock_t tx_completion_lock; 67 u64 rx_dropped; 68}; 69 70struct xdp_buff; 71#ifdef CONFIG_XDP_SOCKETS 72int xsk_generic_rcv(struct xdp_sock *xs, struct xdp_buff *xdp); 73int xsk_rcv(struct xdp_sock *xs, struct xdp_buff *xdp); 74void xsk_flush(struct xdp_sock *xs); 75bool xsk_is_setup_for_bpf_map(struct xdp_sock *xs); 76/* Used from netdev driver */ 77u64 *xsk_umem_peek_addr(struct xdp_umem *umem, u64 *addr); 78void xsk_umem_discard_addr(struct xdp_umem *umem); 79void xsk_umem_complete_tx(struct xdp_umem *umem, u32 nb_entries); 80bool xsk_umem_consume_tx(struct xdp_umem *umem, dma_addr_t *dma, u32 *len); 81void xsk_umem_consume_tx_done(struct xdp_umem *umem); 82#else 83static inline int xsk_generic_rcv(struct xdp_sock *xs, struct xdp_buff *xdp) 84{ 85 return -ENOTSUPP; 86} 87 88static inline int xsk_rcv(struct xdp_sock *xs, struct xdp_buff *xdp) 89{ 90 return -ENOTSUPP; 91} 92 93static inline void xsk_flush(struct xdp_sock *xs) 94{ 95} 96 97static inline bool xsk_is_setup_for_bpf_map(struct xdp_sock *xs) 98{ 99 return false; 100} 101#endif /* CONFIG_XDP_SOCKETS */ 102 103#endif /* _LINUX_XDP_SOCK_H */