Lines Matching defs:niov
36 static inline struct io_zcrx_area *io_zcrx_iov_to_area(const struct net_iov *niov)
38 struct net_iov_area *owner = net_iov_owner(niov);
43 static inline struct page *io_zcrx_iov_page(const struct net_iov *niov)
45 struct io_zcrx_area *area = io_zcrx_iov_to_area(niov);
49 return area->mem.pages[net_iov_idx(niov)];
69 struct net_iov *niov = &area->nia.niovs[niov_idx];
71 if (net_mp_niov_set_dma_addr(niov, dma))
296 struct net_iov *niov)
304 dma_addr = page_pool_get_dma_addr_netmem(net_iov_to_netmem(niov));
323 static inline atomic_t *io_get_user_counter(struct net_iov *niov)
325 struct io_zcrx_area *area = io_zcrx_iov_to_area(niov);
327 return &area->user_refs[net_iov_idx(niov)];
330 static bool io_zcrx_put_niov_uref(struct net_iov *niov)
332 atomic_t *uref = io_get_user_counter(niov);
340 static void io_zcrx_get_niov_uref(struct net_iov *niov)
342 atomic_inc(io_get_user_counter(niov));
441 struct net_iov *niov = &area->nia.niovs[i];
443 niov->owner = &area->nia;
446 niov->type = NET_IOV_IOURING;
679 static void io_zcrx_return_niov_freelist(struct net_iov *niov)
681 struct io_zcrx_area *area = io_zcrx_iov_to_area(niov);
684 area->freelist[area->free_count++] = net_iov_idx(niov);
688 static void io_zcrx_return_niov(struct net_iov *niov)
690 netmem_ref netmem = net_iov_to_netmem(niov);
692 if (!niov->pp) {
694 io_zcrx_return_niov_freelist(niov);
697 page_pool_put_unrefed_netmem(niov->pp, netmem, -1, false);
710 struct net_iov *niov = &area->nia.niovs[i];
713 if (!atomic_read(io_get_user_counter(niov)))
715 nr = atomic_xchg(io_get_user_counter(niov), 0);
716 if (nr && !page_pool_unref_netmem(net_iov_to_netmem(niov), nr))
717 io_zcrx_return_niov(niov);
769 struct net_iov *niov;
783 niov = &area->nia.niovs[niov_idx];
784 if (!io_zcrx_put_niov_uref(niov))
787 netmem = net_iov_to_netmem(niov);
791 if (unlikely(niov->pp != pp)) {
792 io_zcrx_return_niov(niov);
796 io_zcrx_sync_for_device(pp, niov);
810 struct net_iov *niov = __io_zcrx_get_free_niov(area);
811 netmem_ref netmem = net_iov_to_netmem(niov);
813 net_mp_niov_set_page_pool(pp, niov);
814 io_zcrx_sync_for_device(pp, niov);
841 struct net_iov *niov;
846 niov = netmem_to_net_iov(netmem);
847 net_mp_niov_clear_page_pool(niov);
848 io_zcrx_return_niov_freelist(niov);
920 static bool io_zcrx_queue_cqe(struct io_kiocb *req, struct net_iov *niov,
935 area = io_zcrx_iov_to_area(niov);
936 offset = off + (net_iov_idx(niov) << PAGE_SHIFT);
945 struct net_iov *niov = NULL;
949 niov = __io_zcrx_get_free_niov(area);
952 if (niov)
953 page_pool_fragment_netmem(net_iov_to_netmem(niov), 1);
954 return niov;
1015 struct net_iov *niov;
1018 niov = io_zcrx_alloc_fallback(area);
1019 if (!niov) {
1024 cc.page = io_zcrx_iov_page(niov);
1030 if (!io_zcrx_queue_cqe(req, niov, ifq, 0, n)) {
1031 io_zcrx_return_niov(niov);
1036 io_zcrx_get_niov_uref(niov);
1056 struct net_iov *niov;
1061 niov = netmem_to_net_iov(frag->netmem);
1062 if (!niov->pp || niov->pp->mp_ops != &io_uring_pp_zc_ops ||
1063 io_pp_to_ifq(niov->pp) != ifq)
1066 if (!io_zcrx_queue_cqe(req, niov, ifq, off + skb_frag_off(frag), len))
1073 page_pool_ref_netmem(net_iov_to_netmem(niov));
1074 io_zcrx_get_niov_uref(niov);