#include <linux/init.h>
#include <linux/sched/mm.h>
#include <linux/sched/signal.h>
#include <linux/sched/task.h>
#include <linux/uaccess.h>
#include <linux/slab.h>
#include <linux/bpf.h>
#include <linux/mm.h>
#include <linux/netdevice.h>
#include <linux/rtnetlink.h>
#include <linux/idr.h>
#include <linux/vmalloc.h>
#include "xdp_umem.h"
#include "xsk_queue.h"
static DEFINE_IDA(umem_ida);
static void xdp_umem_unpin_pages(struct xdp_umem *umem)
{ … }
static void xdp_umem_unaccount_pages(struct xdp_umem *umem)
{ … }
static void xdp_umem_addr_unmap(struct xdp_umem *umem)
{ … }
static int xdp_umem_addr_map(struct xdp_umem *umem, struct page **pages,
u32 nr_pages)
{ … }
static void xdp_umem_release(struct xdp_umem *umem)
{ … }
static void xdp_umem_release_deferred(struct work_struct *work)
{ … }
void xdp_get_umem(struct xdp_umem *umem)
{ … }
void xdp_put_umem(struct xdp_umem *umem, bool defer_cleanup)
{ … }
static int xdp_umem_pin_pages(struct xdp_umem *umem, unsigned long address)
{ … }
static int xdp_umem_account_pages(struct xdp_umem *umem)
{ … }
#define XDP_UMEM_FLAGS_VALID …
static int xdp_umem_reg(struct xdp_umem *umem, struct xdp_umem_reg *mr)
{ … }
struct xdp_umem *xdp_umem_create(struct xdp_umem_reg *mr)
{ … }