DPDK patches and discussions
 help / color / mirror / Atom feed
From: Pekka Riikonen <priikone@iki.fi>
To: dev@dpdk.org
Cc: Maxime Coquelin <maxime.coquelin@redhat.com>,
	Chenbo Xia <chenbox@nvidia.com>
Subject: virtio_user exception path with external memory
Date: Wed, 06 Aug 2025 10:56:41 +0300	[thread overview]
Message-ID: <0e15cd8e9def8c16b15c028206a6d308@silc.fi> (raw)


It seems that currently it's not possible to use packet pools allocated 
with external memory with the virtio_user exception path use case, 
because it ignores extmem in virtio_user_mem_event_cb() (and also in the 
kernel backend in add_memseg_list()).  This is easy to test with testpmd 
with the --mp-alloc=xmemhuge or --mp-alloc=anon option 
(https://doc.dpdk.org/guides/howto/virtio_user_as_exception_path.html).

The original commit that added the check (5282bb1c3 mem: allow memseg 
lists to be marked as external) talks about needing file descriptors in 
virtio that aren't available with extmem, but at least the kernel 
backend doesn't seem to need any.  The patch below fixes the issue for 
me with with the exception path.

So I'm wondering whether ignoring the extmem is actually needed, in this 
use case?

---
diff --git a/drivers/net/virtio/virtio_user/vhost_kernel.c 
b/drivers/net/virtio/virtio_user/vhost_kernel.c
index e42bb35935..cd5b975675 100644
--- a/drivers/net/virtio/virtio_user/vhost_kernel.c
+++ b/drivers/net/virtio/virtio_user/vhost_kernel.c
@@ -189,9 +189,6 @@ add_memseg_list(const struct rte_memseg_list *msl, 
void *arg)
  	void *start_addr;
  	uint64_t len;

-	if (msl->external)
-		return 0;
-
  	if (vm->nregions >= max_regions)
  		return -1;

diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.c 
b/drivers/net/virtio/virtio_user/virtio_user_dev.c
index 187f81b066..d5204a64a7 100644
--- a/drivers/net/virtio/virtio_user/virtio_user_dev.c
+++ b/drivers/net/virtio/virtio_user/virtio_user_dev.c
@@ -539,20 +539,14 @@ virtio_user_fill_intr_handle(struct 
virtio_user_dev *dev)

  static void
  virtio_user_mem_event_cb(enum rte_mem_event type __rte_unused,
-			 const void *addr,
+			 const void *addr __rte_unused,
  			 size_t len __rte_unused,
  			 void *arg)
  {
  	struct virtio_user_dev *dev = arg;
-	struct rte_memseg_list *msl;
  	uint16_t i;
  	int ret = 0;

-	/* ignore externally allocated memory */
-	msl = rte_mem_virt2memseg_list(addr);
-	if (msl->external)
-		return;
-
  	pthread_mutex_lock(&dev->mutex);

  	if (dev->started == false)
---

Pekka

                 reply	other threads:[~2025-08-06  7:56 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=0e15cd8e9def8c16b15c028206a6d308@silc.fi \
    --to=priikone@iki.fi \
    --cc=chenbox@nvidia.com \
    --cc=dev@dpdk.org \
    --cc=maxime.coquelin@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).