Commit 03e96b8c authored by Mina Almasry's avatar Mina Almasry Committed by Paolo Abeni
Browse files

netmem: add niov->type attribute to distinguish different net_iov types



Later patches in the series adds TX net_iovs where there is no pp
associated, so we can't rely on niov->pp->mp_ops to tell what is the
type of the net_iov.

Add a type enum to the net_iov which tells us the net_iov type.

Signed-off-by: default avatarMina Almasry <almasrymina@google.com>
Link: https://patch.msgid.link/20250508004830.4100853-2-almasrymina@google.com


Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent e39d14a7
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -20,8 +20,17 @@ DECLARE_STATIC_KEY_FALSE(page_pool_mem_providers);
 */
#define NET_IOV 0x01UL

enum net_iov_type {
	NET_IOV_DMABUF,
	NET_IOV_IOURING,

	/* Force size to unsigned long to make the NET_IOV_ASSERTS below pass.
	 */
	NET_IOV_MAX = ULONG_MAX
};

struct net_iov {
	unsigned long __unused_padding;
	enum net_iov_type type;
	unsigned long pp_magic;
	struct page_pool *pp;
	struct net_iov_area *owner;
+1 −0
Original line number Diff line number Diff line
@@ -259,6 +259,7 @@ static int io_zcrx_create_area(struct io_zcrx_ifq *ifq,
		niov->owner = &area->nia;
		area->freelist[i] = i;
		atomic_set(&area->user_refs[i], 0);
		niov->type = NET_IOV_IOURING;
	}

	area->free_count = nr_iovs;
+2 −1
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@ static const struct memory_provider_ops dmabuf_devmem_ops;

bool net_is_devmem_iov(struct net_iov *niov)
{
	return niov->pp->mp_ops == &dmabuf_devmem_ops;
	return niov->type == NET_IOV_DMABUF;
}

static void net_devmem_dmabuf_free_chunk_owner(struct gen_pool *genpool,
@@ -266,6 +266,7 @@ net_devmem_bind_dmabuf(struct net_device *dev, unsigned int dmabuf_fd,

		for (i = 0; i < owner->area.num_niovs; i++) {
			niov = &owner->area.niovs[i];
			niov->type = NET_IOV_DMABUF;
			niov->owner = &owner->area;
			page_pool_set_dma_addr_netmem(net_iov_to_netmem(niov),
						      net_devmem_get_dma_addr(niov));