| /linux/net/xdp/ |
| H A D | xdp_umem.c | 24 static void xdp_umem_unpin_pages(struct xdp_umem *umem) in xdp_umem_unpin_pages() argument 26 unpin_user_pages_dirty_lock(umem->pgs, umem->npgs, true); in xdp_umem_unpin_pages() 28 kvfree(umem->pgs); in xdp_umem_unpin_pages() 29 umem->pgs = NULL; in xdp_umem_unpin_pages() 32 static void xdp_umem_unaccount_pages(struct xdp_umem *umem) in xdp_umem_unaccount_pages() argument 34 if (umem->user) { in xdp_umem_unaccount_pages() 35 atomic_long_sub(umem->npgs, &umem->user->locked_vm); in xdp_umem_unaccount_pages() 36 free_uid(umem->user); in xdp_umem_unaccount_pages() 40 static void xdp_umem_addr_unmap(struct xdp_umem *umem) in xdp_umem_addr_unmap() argument 42 vunmap(umem->addrs); in xdp_umem_addr_unmap() [all …]
|
| H A D | xsk_buff_pool.c | 59 struct xdp_umem *umem, in xp_create_and_assign_umem() argument 62 bool unaligned = umem->flags & XDP_UMEM_UNALIGNED_CHUNK_FLAG; in xp_create_and_assign_umem() 67 entries = unaligned ? umem->chunks : 0; in xp_create_and_assign_umem() 72 pool->heads = kvzalloc_objs(*pool->heads, umem->chunks); in xp_create_and_assign_umem() 80 pool->chunk_mask = ~((u64)umem->chunk_size - 1); in xp_create_and_assign_umem() 81 pool->addrs_cnt = umem->size; in xp_create_and_assign_umem() 82 pool->heads_cnt = umem->chunks; in xp_create_and_assign_umem() 83 pool->free_heads_cnt = umem->chunks; in xp_create_and_assign_umem() 84 pool->headroom = umem->headroom; in xp_create_and_assign_umem() 85 pool->chunk_size = umem in xp_create_and_assign_umem() 277 struct xdp_umem *umem = umem_xs->umem; xp_assign_dev_shared() local 360 xp_create_dma_map(struct device * dev,struct net_device * netdev,u32 nr_pages,struct xdp_umem * umem) xp_create_dma_map() argument [all...] |
| H A D | xsk_diag.c | 50 struct xdp_umem *umem = xs->umem; in xsk_diag_put_umem() local 54 if (!umem) in xsk_diag_put_umem() 57 du.id = umem->id; in xsk_diag_put_umem() 58 du.size = umem->size; in xsk_diag_put_umem() 59 du.num_pages = umem->npgs; in xsk_diag_put_umem() 60 du.chunk_size = umem->chunk_size; in xsk_diag_put_umem() 61 du.headroom = umem->headroom; in xsk_diag_put_umem() 65 if (umem->zc) in xsk_diag_put_umem() 67 du.refs = refcount_read(&umem in xsk_diag_put_umem() [all...] |
| H A D | xdp_umem.h | 11 void xdp_get_umem(struct xdp_umem *umem); 12 void xdp_put_umem(struct xdp_umem *umem, bool defer_cleanup);
|
| H A D | xsk.c | 765 if (umem_shared && !(pool->umem->flags & XDP_UMEM_SG_FLAG)) { in xsk_tx_peek_release_desc_batch() 1089 page = pool->umem->pgs[addr >> PAGE_SHIFT]; in xsk_build_skb() 1671 if (xs->umem) { in xsk_bind() 1698 /* Share the umem with another socket on another qid in xsk_bind() 1702 umem_xs->umem, in xsk_bind() 1730 /* If underlying shared umem was created without Tx in xsk_bind() 1746 xdp_get_umem(umem_xs->umem); in xsk_bind() 1747 WRITE_ONCE(xs->umem, umem_xs->umem); in xsk_bind() 1749 } else if (!xs->umem || !xsk_validate_queue in xsk_bind() 1827 struct xdp_umem *umem; xsk_setsockopt() local [all...] |
| /linux/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/ |
| H A D | umem.c | 22 #include "umem.h" 40 struct nvkm_umem *umem; in nvkm_umem_search() local 46 list_for_each_entry(umem, &master->umem, head) { in nvkm_umem_search() 47 if (umem->object.object == handle) { in nvkm_umem_search() 48 memory = nvkm_memory_ref(umem->memory); in nvkm_umem_search() 55 umem = nvkm_umem(object); in nvkm_umem_search() 56 memory = nvkm_memory_ref(umem->memory); in nvkm_umem_search() 65 struct nvkm_umem *umem = nvkm_umem(object); in nvkm_umem_unmap() local 67 if (!umem->map) in nvkm_umem_unmap() 70 if (umem->io) { in nvkm_umem_unmap() [all …]
|
| /linux/tools/testing/selftests/bpf/ |
| H A D | xsk.c | 72 struct xsk_umem *umem; member 92 int xsk_umem__fd(const struct xsk_umem *umem) in xsk_umem__fd() argument 94 return umem ? umem->fd : -EINVAL; in xsk_umem__fd() 163 static int xsk_create_umem_rings(struct xsk_umem *umem, int fd, in xsk_create_umem_rings() argument 172 &umem->config.fill_size, in xsk_create_umem_rings() 173 sizeof(umem->config.fill_size)); in xsk_create_umem_rings() 178 &umem->config.comp_size, in xsk_create_umem_rings() 179 sizeof(umem->config.comp_size)); in xsk_create_umem_rings() 187 map = mmap(NULL, off.fr.desc + umem->config.fill_size * sizeof(__u64), in xsk_create_umem_rings() 193 fill->mask = umem->config.fill_size - 1; in xsk_create_umem_rings() [all …]
|
| H A D | xskxceiver.c | 13 * a unique UMEM. It validates in-order packet delivery and packet content 35 * Increase the UMEM frame headroom to a value which results in 38 * Set the 'len' field of tx descriptors to an invalid value (umem frame 62 * - Each thread creates one AF_XDP socket connected to a unique umem for each 125 struct xsk_umem_info *umem; in ifobj_zc_avail() local 134 umem = calloc(1, sizeof(struct xsk_umem_info)); in ifobj_zc_avail() 135 if (!umem) { in ifobj_zc_avail() 139 umem->frame_size = XSK_UMEM__DEFAULT_FRAME_SIZE; in ifobj_zc_avail() 140 ret = xsk_configure_umem(ifobject, umem, bufs, umem_sz); in ifobj_zc_avail() 150 ret = xsk_configure_socket(xsk, umem, ifobject, false); in ifobj_zc_avail() [all …]
|
| H A D | xsk.h | 187 int xsk_umem__fd(const struct xsk_umem *umem); 219 int xsk_umem__create(struct xsk_umem **umem, 226 struct xsk_umem *umem, 232 __u32 queue_id, struct xsk_umem *umem, 239 /* Returns 0 for success and -EBUSY if the umem is still in use. */ 240 int xsk_umem__delete(struct xsk_umem *umem);
|
| H A D | xskxceiver.h | 75 struct xsk_umem *umem; global() member 90 struct xsk_umem_info *umem; global() member 134 struct xsk_umem_info *umem; global() member
|
| H A D | xdp_hw_metadata.c | 60 struct xsk_umem *umem; member 116 ret = xsk_umem__create(&xsk->umem, in open_xsk() 125 xsk->umem, in open_xsk() 132 /* First half of umem is for TX. This way address matches 1-to-1 in open_xsk() 141 /* Second half of umem is for RX. */ in open_xsk() 156 if (xsk->umem) in close_xsk() 157 xsk_umem__delete(xsk->umem); in close_xsk() 437 memcpy(data, rx_packet, len); /* don't share umem chunk for simplicity */ in ping_pong()
|
| /linux/tools/testing/selftests/bpf/prog_tests/ |
| H A D | test_xsk.c | 72 static u64 umem_size(struct xsk_umem_info *umem) in umem_size() argument 74 return umem->num_frames * umem->frame_size; in umem_size() 77 int xsk_configure_umem(struct ifobject *ifobj, struct xsk_umem_info *umem, void *buffer, in xsk_configure_umem() argument 83 .frame_size = umem->frame_size, in xsk_configure_umem() 84 .frame_headroom = umem->frame_headroom, in xsk_configure_umem() 89 if (umem->fill_size) in xsk_configure_umem() 90 cfg.fill_size = umem->fill_size; in xsk_configure_umem() 92 if (umem->comp_size) in xsk_configure_umem() 93 cfg.comp_size = umem->comp_size; in xsk_configure_umem() 95 if (umem->unaligned_mode) in xsk_configure_umem() [all …]
|
| H A D | xdp_metadata.c | 51 struct xsk_umem *umem; member 84 ret = xsk_umem__create(&xsk->umem, in open_xsk() 93 xsk->umem, in open_xsk() 100 /* First half of umem is for TX. This way address matches 1-to-1 in open_xsk() 109 /* Second half of umem is for RX. */ in open_xsk() 131 if (xsk->umem) in close_xsk() 132 xsk_umem__delete(xsk->umem); in close_xsk()
|
| H A D | test_xsk.h | 87 struct xsk_umem_info *umem; member 104 struct xsk_umem *umem; member 159 int xsk_configure_umem(struct ifobject *ifobj, struct xsk_umem_info *umem, void *buffer, u64 size); 160 int xsk_configure_socket(struct xsk_socket_info *xsk, struct xsk_umem_info *umem,
|
| /linux/Documentation/networking/ |
| H A D | af_xdp.rst | 30 UMEM. RX and TX can share the same UMEM so that a packet does not have 36 The UMEM consists of a number of equally sized chunks. A descriptor in 38 is simply an offset within the entire UMEM region. The user space 39 allocates memory for this UMEM using whatever means it feels is most 42 UMEM also has two rings: the FILL ring and the COMPLETION ring. The 58 The UMEM can be shared between processes, if desired. If a process 59 wants to do this, it simply skips the registration of the UMEM and its 61 call and submits the XSK of the process it would like to share UMEM 64 this shared UMEM. Note that since the ring structures are 69 UMEM. It is the responsibility of a single process to handle the UMEM. [all …]
|
| /linux/include/rdma/ |
| H A D | ib_umem_odp.h | 14 struct ib_umem umem; member 22 * umem, allowing only a single thread to map/unmap pages. The mutex 31 * An implicit odp umem cannot be DMA mapped, has 0 length, and serves 41 static inline struct ib_umem_odp *to_ib_umem_odp(struct ib_umem *umem) in to_ib_umem_odp() argument 43 return container_of(umem, struct ib_umem_odp, umem); in to_ib_umem_odp() 46 /* Returns the first page of an ODP umem. */ 52 /* Returns the address of the page after the last one of an ODP umem. */
|
| /linux/drivers/vdpa/vdpa_user/ |
| H A D | vduse_dev.c | 108 struct vduse_umem *umem; member 1320 if (!dev->as[asid].umem) in vduse_dev_dereg_umem() 1327 if (dev->as[asid].umem->iova != iova || in vduse_dev_dereg_umem() 1332 unpin_user_pages_dirty_lock(dev->as[asid].umem->pages, in vduse_dev_dereg_umem() 1333 dev->as[asid].umem->npages, true); in vduse_dev_dereg_umem() 1334 atomic64_sub(dev->as[asid].umem->npages, &dev->as[asid].umem->mm->pinned_vm); in vduse_dev_dereg_umem() 1335 mmdrop(dev->as[asid].umem->mm); in vduse_dev_dereg_umem() 1336 vfree(dev->as[asid].umem->pages); in vduse_dev_dereg_umem() 1337 kfree(dev->as[asid].umem); in vduse_dev_dereg_umem() 1338 dev->as[asid].umem = NULL; in vduse_dev_dereg_umem() [all …]
|
| /linux/drivers/vhost/ |
| H A D | vhost.c | 393 vq->umem = NULL; in vhost_vq_reset() 594 dev->umem = NULL; in vhost_dev_init() 1154 void vhost_dev_reset_owner(struct vhost_dev *dev, struct vhost_iotlb *umem) in vhost_dev_reset_owner() argument 1161 dev->umem = umem; in vhost_dev_reset_owner() 1166 dev->vqs[i]->umem = umem; in vhost_dev_reset_owner() 1221 vhost_iotlb_free(dev->umem); in vhost_dev_cleanup() 1222 dev->umem = NULL; in vhost_dev_cleanup() 1258 static bool vq_memory_access_ok(void __user *log_base, struct vhost_iotlb *umem, in vq_memory_access_ok() argument 1263 if (!umem) in vq_memory_access_ok() 1266 list_for_each_entry(map, &umem->list, link) { in vq_memory_access_ok() [all …]
|
| H A D | test.c | 227 struct vhost_iotlb *umem; in vhost_test_reset_owner() local 233 umem = vhost_dev_reset_owner_prepare(); in vhost_test_reset_owner() 234 if (!umem) { in vhost_test_reset_owner() 241 vhost_dev_reset_owner(&n->dev, umem); in vhost_test_reset_owner()
|
| /linux/drivers/vdpa/mlx5/net/ |
| H A D | mlx5_vnet.c | 120 /* umem resources are required for the virtqueue operation. They're use 325 static int umem_frag_buf_alloc(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_umem *umem, int size) in umem_frag_buf_alloc() argument 327 struct mlx5_frag_buf *frag_buf = &umem->frag_buf; in umem_frag_buf_alloc() 664 "Failed reading vdpa umem capabilities with err %d\n", err); in read_umem_params() 711 static void umem_frag_buf_free(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_umem *umem) in umem_frag_buf_free() argument 713 mlx5_frag_buf_free(ndev->mvdev.mdev, &umem->frag_buf); in umem_frag_buf_free() 724 struct mlx5_vdpa_umem *umem; in create_umem() local 726 set_umem_size(ndev, mvq, num, &umem); in create_umem() 727 err = umem_frag_buf_alloc(ndev, umem, umem->size); in create_umem() 731 inlen = MLX5_ST_SZ_BYTES(create_umem_in) + MLX5_ST_SZ_BYTES(mtt) * umem->frag_buf.npages; in create_umem() [all …]
|
| /linux/drivers/net/ethernet/mellanox/mlx5/core/en/ |
| H A D | xdp.h | 63 /* No xdp_frame was created at all, the transmit happened from a UMEM 64 * page. The UMEM Completion Ring producer pointer has to be increased.
|
| /linux/drivers/infiniband/hw/mlx5/ |
| H A D | srq.h | 31 struct ib_umem *umem; member
|
| /linux/drivers/gpu/drm/nouveau/include/nvkm/core/ |
| H A D | client.h | 19 struct list_head umem; member
|
| /linux/drivers/infiniband/hw/usnic/ |
| H A D | usnic_ib.h | 70 struct usnic_uiom_reg *umem; member
|
| /linux/drivers/gpu/drm/nouveau/nvkm/core/ |
| H A D | client.c | 123 INIT_LIST_HEAD(&client->umem); in nvkm_client_new()
|