All of lore.kernel.org
 help / color / mirror / Atom feed
From: John Levon <john.levon@nutanix.com>
To: "Cédric Le Goater" <clg@redhat.com>
Cc: qemu-devel@nongnu.org,
	"Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Thanos Makatos" <thanos.makatos@nutanix.com>,
	"Daniel P. Berrangé" <berrange@redhat.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Peter Xu" <peterx@redhat.com>,
	"David Hildenbrand" <david@redhat.com>,
	"Stefano Garzarella" <sgarzare@redhat.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	"Alex Williamson" <alex.williamson@redhat.com>,
	"Philippe Mathieu-Daudé" <philmd@linaro.org>,
	"Steve Sistare" <steven.sistare@oracle.com>
Subject: Re: [PATCH 00/27] vfio-user client
Date: Mon, 19 May 2025 14:29:54 +0100	[thread overview]
Message-ID: <aCsyUnQj33YEtAjb@lent> (raw)
In-Reply-To: <6cc53fff-9583-48cc-a5e3-3dadf1dd215c@redhat.com>

On Mon, May 19, 2025 at 02:40:12PM +0200, Cédric Le Goater wrote:

> patches 3-5 seem be ok to merge. They are first on my vfio-next
> candidates.
> 
> patches 1-2 should be reworked on top of the memory_get_xlat_addr()
> changes [1] proposed by Steven.

Now v5 is out I will rebase on top of it.

> The rest (9-27) is vfio-user territory only (I hope). Still, it
> should be merged through the VFIO tree.

It isn't entirely contained within hw/vfio-user/ (there are e.g. some exports of
util functions), but yes essentially. See diff below for illustration.

> Would it be complex to propose a functional test for it ?

We have a libvfio-user we can use, but this would be a problem:

 487   │ 2025-05-19 14:19:20,304: modprobe gpio-pci-idio-16
 488   │ 2025-05-19 14:19:20,306: modprobe: FATAL: Module gpio-pci-idio-16 not found in directory /lib/modules/5.3.7-301.fc31.x86_64

If somebody can help with how to get a suitable test initrd with this module
available, we could at least do basic testing (although no DMA).

regards
john


diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h
index 7a03d24805..80599454d4 100644
--- a/hw/vfio/pci.h
+++ b/hw/vfio/pci.h
@@ -116,6 +116,7 @@ typedef struct VFIOMSIXInfo {
     uint32_t pba_offset;
     unsigned long *pending;
     bool noresize;
+    MemoryRegion *pba_region;
 } VFIOMSIXInfo;
 
 /*
@@ -215,6 +216,20 @@ uint32_t vfio_pci_read_config(PCIDevice *pdev, uint32_t addr, int len);
 void vfio_pci_write_config(PCIDevice *pdev,
                            uint32_t addr, uint32_t val, int len);
 
+void vfio_intx_eoi(VFIODevice *vbasedev);
+Object *vfio_pci_get_object(VFIODevice *vbasedev);
+int vfio_pci_save_config(VFIODevice *vbasedev, QEMUFile *f, Error **errp);
+int vfio_pci_load_config(VFIODevice *vbasedev, QEMUFile *f);
+void vfio_pci_put_device(VFIOPCIDevice *vdev);
+bool vfio_populate_device(VFIOPCIDevice *vdev, Error **errp);
+void vfio_teardown_msi(VFIOPCIDevice *vdev);
+void vfio_bars_exit(VFIOPCIDevice *vdev);
+bool vfio_add_capabilities(VFIOPCIDevice *vdev, Error **errp);
+void vfio_register_err_notifier(VFIOPCIDevice *vdev);
+void vfio_register_req_notifier(VFIOPCIDevice *vdev);
+bool vfio_pci_config_setup(VFIOPCIDevice *vdev, Error **errp);
+bool vfio_interrupt_setup(VFIOPCIDevice *vdev, Error **errp);
+
 uint64_t vfio_vga_read(void *opaque, hwaddr addr, unsigned size);
 void vfio_vga_write(void *opaque, hwaddr addr, uint64_t data, unsigned size);
 
diff --git a/include/hw/vfio/vfio-container-base.h b/include/hw/vfio/vfio-container-base.h
index c18986a621..c854f902ed 100644
--- a/include/hw/vfio/vfio-container-base.h
+++ b/include/hw/vfio/vfio-container-base.h
@@ -109,6 +109,7 @@ vfio_container_get_page_size_mask(const VFIOContainerBase *bcontainer)
 #define TYPE_VFIO_IOMMU_LEGACY TYPE_VFIO_IOMMU "-legacy"
 #define TYPE_VFIO_IOMMU_SPAPR TYPE_VFIO_IOMMU "-spapr"
 #define TYPE_VFIO_IOMMU_IOMMUFD TYPE_VFIO_IOMMU "-iommufd"
+#define TYPE_VFIO_IOMMU_USER TYPE_VFIO_IOMMU "-user"
 
 OBJECT_DECLARE_TYPE(VFIOContainerBase, VFIOIOMMUClass, VFIO_IOMMU)
 
diff --git a/include/hw/vfio/vfio-device.h b/include/hw/vfio/vfio-device.h
index a23ef4ea13..09f1a21bf8 100644
--- a/include/hw/vfio/vfio-device.h
+++ b/include/hw/vfio/vfio-device.h
@@ -46,6 +46,7 @@ typedef struct VFIOMigration VFIOMigration;
 
 typedef struct IOMMUFDBackend IOMMUFDBackend;
 typedef struct VFIOIOASHwpt VFIOIOASHwpt;
+typedef struct VFIOUserProxy VFIOUserProxy;
 
 typedef struct VFIODevice {
     QLIST_ENTRY(VFIODevice) next;
@@ -86,6 +87,7 @@ typedef struct VFIODevice {
     QLIST_ENTRY(VFIODevice) hwpt_next;
     struct vfio_region_info **reginfo;
     int *region_fds;
+    VFIOUserProxy *proxy;
 } VFIODevice;
 
 struct VFIODeviceOps {
diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
index 57ef65dcc9..a92e38f822 100644
--- a/hw/vfio/pci.c
+++ b/hw/vfio/pci.c
@@ -103,7 +103,7 @@ static void vfio_intx_interrupt(void *opaque)
     }
 }
 
-static void vfio_intx_eoi(VFIODevice *vbasedev)
+void vfio_intx_eoi(VFIODevice *vbasedev)
 {
     VFIOPCIDevice *vdev = container_of(vbasedev, VFIOPCIDevice, vbasedev);
 
@@ -1770,7 +1770,7 @@ static bool vfio_msix_setup(VFIOPCIDevice *vdev, int pos, Error **errp)
     return true;
 }
 
-static void vfio_teardown_msi(VFIOPCIDevice *vdev)
+void vfio_teardown_msi(VFIOPCIDevice *vdev)
 {
     msi_uninit(&vdev->pdev);
 
@@ -1869,7 +1869,7 @@ static void vfio_bars_register(VFIOPCIDevice *vdev)
     }
 }
 
-static void vfio_bars_exit(VFIOPCIDevice *vdev)
+void vfio_bars_exit(VFIOPCIDevice *vdev)
 {
     int i;
 
@@ -2460,7 +2460,7 @@ static void vfio_add_ext_cap(VFIOPCIDevice *vdev)
     g_free(config);
 }
 
-static bool vfio_add_capabilities(VFIOPCIDevice *vdev, Error **errp)
+bool vfio_add_capabilities(VFIOPCIDevice *vdev, Error **errp)
 {
     PCIDevice *pdev = &vdev->pdev;
 
@@ -2629,7 +2629,7 @@ static void vfio_pci_compute_needs_reset(VFIODevice *vbasedev)
     }
 }
 
-static Object *vfio_pci_get_object(VFIODevice *vbasedev)
+Object *vfio_pci_get_object(VFIODevice *vbasedev)
 {
     VFIOPCIDevice *vdev = container_of(vbasedev, VFIOPCIDevice, vbasedev);
 
@@ -2685,7 +2685,7 @@ static const VMStateDescription vmstate_vfio_pci_config = {
     }
 };
 
-static int vfio_pci_save_config(VFIODevice *vbasedev, QEMUFile *f, Error **errp)
+int vfio_pci_save_config(VFIODevice *vbasedev, QEMUFile *f, Error **errp)
 {
     VFIOPCIDevice *vdev = container_of(vbasedev, VFIOPCIDevice, vbasedev);
 
@@ -2693,7 +2693,7 @@ static int vfio_pci_save_config(VFIODevice *vbasedev, QEMUFile *f, Error **errp)
                                        errp);
 }
 
-static int vfio_pci_load_config(VFIODevice *vbasedev, QEMUFile *f)
+int vfio_pci_load_config(VFIODevice *vbasedev, QEMUFile *f)
 {
     VFIOPCIDevice *vdev = container_of(vbasedev, VFIOPCIDevice, vbasedev);
     PCIDevice *pdev = &vdev->pdev;
@@ -2807,7 +2807,7 @@ bool vfio_populate_vga(VFIOPCIDevice *vdev, Error **errp)
     return true;
 }
 
-static bool vfio_populate_device(VFIOPCIDevice *vdev, Error **errp)
+bool vfio_populate_device(VFIOPCIDevice *vdev, Error **errp)
 {
     VFIODevice *vbasedev = &vdev->vbasedev;
     struct vfio_region_info *reg_info = NULL;
@@ -2895,7 +2895,7 @@ static bool vfio_populate_device(VFIOPCIDevice *vdev, Error **errp)
     return true;
 }
 
-static void vfio_pci_put_device(VFIOPCIDevice *vdev)
+void vfio_pci_put_device(VFIOPCIDevice *vdev)
 {
     vfio_display_finalize(vdev);
     vfio_bars_finalize(vdev);
@@ -2943,7 +2943,7 @@ static void vfio_err_notifier_handler(void *opaque)
  * and continue after disabling error recovery support for the
  * device.
  */
-static void vfio_register_err_notifier(VFIOPCIDevice *vdev)
+void vfio_register_err_notifier(VFIOPCIDevice *vdev)
 {
     Error *err = NULL;
     int32_t fd;
@@ -3002,7 +3002,7 @@ static void vfio_req_notifier_handler(void *opaque)
     }
 }
 
-static void vfio_register_req_notifier(VFIOPCIDevice *vdev)
+void vfio_register_req_notifier(VFIOPCIDevice *vdev)
 {
     struct vfio_irq_info irq_info;
     Error *err = NULL;
@@ -3056,7 +3056,7 @@ static void vfio_unregister_req_notifier(VFIOPCIDevice *vdev)
     vdev->req_enabled = false;
 }
 
-static bool vfio_pci_config_setup(VFIOPCIDevice *vdev, Error **errp)
+bool vfio_pci_config_setup(VFIOPCIDevice *vdev, Error **errp)
 {
     PCIDevice *pdev = &vdev->pdev;
     VFIODevice *vbasedev = &vdev->vbasedev;
@@ -3162,7 +3162,7 @@ static bool vfio_pci_config_setup(VFIOPCIDevice *vdev, Error **errp)
     return true;
 }
 
-static bool vfio_interrupt_setup(VFIOPCIDevice *vdev, Error **errp)
+bool vfio_interrupt_setup(VFIOPCIDevice *vdev, Error **errp)
 {
     PCIDevice *pdev = &vdev->pdev;
 


  reply	other threads:[~2025-05-19 13:30 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-05-15 15:43 [PATCH 00/27] vfio-user client John Levon
2025-05-15 15:43 ` [PATCH 01/27] vfio: return mr from vfio_get_xlat_addr John Levon
2025-05-15 15:46   ` John Levon
2025-05-15 15:43 ` [PATCH 02/27] vfio/container: pass MemoryRegion to DMA operations John Levon
2025-05-16 15:11   ` Cédric Le Goater
2025-05-18 17:00     ` John Levon
2025-05-19  8:17       ` Cédric Le Goater
2025-05-15 15:43 ` [PATCH 03/27] vfio: move more cleanup into vfio_pci_put_device() John Levon
2025-05-16 15:21   ` Cédric Le Goater
2025-05-15 15:43 ` [PATCH 04/27] vfio: move config space read into vfio_pci_config_setup() John Levon
2025-05-16 15:26   ` Cédric Le Goater
2025-05-15 15:43 ` [PATCH 05/27] vfio: refactor out IRQ signalling setup John Levon
2025-05-16 15:27   ` Cédric Le Goater
2025-05-15 15:43 ` [PATCH 06/27] vfio: enable per-IRQ MSI-X masking John Levon
2025-05-15 15:43 ` [PATCH 07/27] vfio: add per-region fd support John Levon
2025-05-15 15:43 ` [PATCH 08/27] vfio: mark posted writes in region write callbacks John Levon
2025-05-15 15:43 ` [PATCH 09/27] vfio-user: introduce vfio-user protocol specification John Levon
2025-05-15 15:43 ` [PATCH 10/27] vfio-user: add vfio-user class and container John Levon
2025-05-15 15:43 ` [PATCH 11/27] vfio-user: connect vfio proxy to remote server John Levon
2025-05-15 15:43 ` [PATCH 12/27] vfio-user: implement message receive infrastructure John Levon
2025-05-15 15:43 ` [PATCH 13/27] vfio-user: implement message send infrastructure John Levon
2025-05-15 15:43 ` [PATCH 14/27] vfio-user: implement VFIO_USER_DEVICE_GET_INFO John Levon
2025-05-15 15:44 ` [PATCH 15/27] vfio-user: implement VFIO_USER_DEVICE_GET_REGION_INFO John Levon
2025-05-15 15:44 ` [PATCH 16/27] vfio-user: implement VFIO_USER_REGION_READ/WRITE John Levon
2025-05-15 15:44 ` [PATCH 17/27] vfio-user: set up PCI in vfio_user_pci_realize() John Levon
2025-05-15 15:44 ` [PATCH 18/27] vfio-user: implement VFIO_USER_DEVICE_GET/SET_IRQ* John Levon
2025-05-15 15:44 ` [PATCH 19/27] vfio-user: forward MSI-X PBA BAR accesses to server John Levon
2025-05-15 15:44 ` [PATCH 20/27] vfio-user: set up container access to the proxy John Levon
2025-05-15 15:44 ` [PATCH 21/27] vfio-user: implement VFIO_USER_DEVICE_RESET John Levon
2025-05-15 15:44 ` [PATCH 22/27] vfio-user: implement VFIO_USER_DMA_MAP/UNMAP John Levon
2025-05-15 15:44 ` [PATCH 23/27] vfio-user: implement VFIO_USER_DMA_READ/WRITE John Levon
2025-05-15 15:44 ` [PATCH 24/27] vfio-user: add 'x-msg-timeout' option John Levon
2025-05-15 15:44 ` [PATCH 25/27] vfio-user: support posted writes John Levon
2025-05-15 15:44 ` [PATCH 26/27] vfio-user: add coalesced " John Levon
2025-05-15 15:44 ` [PATCH 27/27] docs: add vfio-user documentation John Levon
2025-05-19 12:40 ` [PATCH 00/27] vfio-user client Cédric Le Goater
2025-05-19 13:29   ` John Levon [this message]
2025-05-20  5:59     ` Cédric Le Goater
2025-05-20 15:05       ` John Levon

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=aCsyUnQj33YEtAjb@lent \
    --to=john.levon@nutanix.com \
    --cc=alex.williamson@redhat.com \
    --cc=berrange@redhat.com \
    --cc=clg@redhat.com \
    --cc=david@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peterx@redhat.com \
    --cc=philmd@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=sgarzare@redhat.com \
    --cc=steven.sistare@oracle.com \
    --cc=thanos.makatos@nutanix.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.