This is an automated email from the ASF dual-hosted git repository. xiaoxiang781216 pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 41326aea43942fe9a0f0b6c81fd800199c40393a Author: Bowen Wang <[email protected]> AuthorDate: Mon Jun 22 22:56:59 2026 +0800 drivers/virtio/virtio-pci: leave buffers unmapped except ADDRENV user ones The host (QEMU) can access arbitrary guest memory over PCI, so buffers need no bouncing: leave map, unmap and free_largest NULL so virtio_map_buf returns the buffer as is (zero copy). With CONFIG_ARCH_ADDRENV use virtio_addrenv_map/unmap/free_largest, as virtio-mmio does, so user buffers are bounced through the kernel heap. Signed-off-by: Bowen Wang <[email protected]> --- drivers/virtio/virtio-pci.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/drivers/virtio/virtio-pci.c b/drivers/virtio/virtio-pci.c index 4b1bb40c513..38a4d593f89 100644 --- a/drivers/virtio/virtio-pci.c +++ b/drivers/virtio/virtio-pci.c @@ -79,8 +79,23 @@ static struct pci_driver_s g_virtio_pci_drv = static const struct virtio_memory_ops g_virtio_pci_mmops = { - virtio_pci_alloc_buf, /* Alloc */ - virtio_pci_free_buf, /* Free */ + .alloc = virtio_pci_alloc_buf, + .free = virtio_pci_free_buf, + + /* The host (QEMU) can access arbitrary guest memory, so buffers are used + * as is (zero copy), except user buffers of a per-process address + * environment, which are not physically contiguous. + */ + +#ifdef CONFIG_ARCH_ADDRENV + .free_largest = virtio_addrenv_free_largest, + .map = virtio_addrenv_map, + .unmap = virtio_addrenv_unmap, +#else + .free_largest = NULL, + .map = NULL, + .unmap = NULL, +#endif }; /****************************************************************************
