[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v5 11/18] vfio-user: find and init PCI device
|
From: |
Stefan Hajnoczi |
|
Subject: |
Re: [PATCH v5 11/18] vfio-user: find and init PCI device |
|
Date: |
Tue, 25 Jan 2022 14:48:00 +0000 |
On Wed, Jan 19, 2022 at 04:42:00PM -0500, Jagannathan Raman wrote:
> Find the PCI device with specified id. Initialize the device context
> with the QEMU PCI device
>
> Signed-off-by: Elena Ufimtseva <elena.ufimtseva@oracle.com>
> Signed-off-by: John G Johnson <john.g.johnson@oracle.com>
> Signed-off-by: Jagannathan Raman <jag.raman@oracle.com>
> ---
> hw/remote/vfio-user-obj.c | 60 +++++++++++++++++++++++++++++++++++++++
> 1 file changed, 60 insertions(+)
>
> diff --git a/hw/remote/vfio-user-obj.c b/hw/remote/vfio-user-obj.c
> index 810a7c3943..10db78eb8d 100644
> --- a/hw/remote/vfio-user-obj.c
> +++ b/hw/remote/vfio-user-obj.c
> @@ -44,6 +44,8 @@
> #include "qemu/notify.h"
> #include "sysemu/sysemu.h"
> #include "libvfio-user.h"
> +#include "hw/qdev-core.h"
> +#include "hw/pci/pci.h"
>
> #define TYPE_VFU_OBJECT "x-vfio-user-server"
> OBJECT_DECLARE_TYPE(VfuObject, VfuObjectClass, VFU_OBJECT)
> @@ -89,6 +91,10 @@ struct VfuObject {
> Notifier machine_done;
>
> vfu_ctx_t *vfu_ctx;
> +
> + PCIDevice *pci_dev;
> +
> + Error *unplug_blocker;
> };
>
> static void vfu_object_init_ctx(VfuObject *o, Error **errp);
> @@ -161,6 +167,9 @@ static void vfu_object_machine_done(Notifier *notifier,
> void *data)
> static void vfu_object_init_ctx(VfuObject *o, Error **errp)
> {
> ERRP_GUARD();
> + DeviceState *dev = NULL;
> + vfu_pci_type_t pci_type = VFU_PCI_TYPE_CONVENTIONAL;
> + int ret;
>
> if (o->vfu_ctx || !o->socket || !o->device ||
> !phase_check(PHASE_MACHINE_READY)) {
> @@ -179,6 +188,49 @@ static void vfu_object_init_ctx(VfuObject *o, Error
> **errp)
> error_setg(errp, "vfu: Failed to create context - %s",
> strerror(errno));
> return;
> }
> +
> + dev = qdev_find_recursive(sysbus_get_default(), o->device);
> + if (dev == NULL) {
> + error_setg(errp, "vfu: Device %s not found", o->device);
> + goto fail;
> + }
> +
> + if (!object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) {
> + error_setg(errp, "vfu: %s not a PCI device", o->device);
> + goto fail;
> + }
> +
> + o->pci_dev = PCI_DEVICE(dev);
> +
> + if (pci_is_express(o->pci_dev)) {
> + pci_type = VFU_PCI_TYPE_EXPRESS;
> + }
> +
> + ret = vfu_pci_init(o->vfu_ctx, pci_type, PCI_HEADER_TYPE_NORMAL, 0);
> + if (ret < 0) {
> + error_setg(errp,
> + "vfu: Failed to attach PCI device %s to context - %s",
> + o->device, strerror(errno));
> + goto fail;
> + }
> +
> + error_setg(&o->unplug_blocker, "%s is in use", o->device);
More detailed error message:
"x-vfio-user-server for %s must be deleted before unplugging"
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
signature.asc
Description: PGP signature
- Re: [PATCH v5 04/18] pci: create and free isolated PCI buses, (continued)
- [PATCH v5 07/18] vfio-user: set qdev bus callbacks for remote machine, Jagannathan Raman, 2022/01/19
- [PATCH v5 09/18] vfio-user: define vfio-user-server object, Jagannathan Raman, 2022/01/19
- [PATCH v5 08/18] vfio-user: build library, Jagannathan Raman, 2022/01/19
- [PATCH v5 10/18] vfio-user: instantiate vfio-user context, Jagannathan Raman, 2022/01/19
- [PATCH v5 11/18] vfio-user: find and init PCI device, Jagannathan Raman, 2022/01/19
- Re: [PATCH v5 11/18] vfio-user: find and init PCI device,
Stefan Hajnoczi <=
- [PATCH v5 13/18] vfio-user: handle PCI config space accesses, Jagannathan Raman, 2022/01/19
- [PATCH v5 12/18] vfio-user: run vfio-user context, Jagannathan Raman, 2022/01/19
- [PATCH v5 15/18] vfio-user: handle PCI BAR accesses, Jagannathan Raman, 2022/01/19
- [PATCH v5 14/18] vfio-user: handle DMA mappings, Jagannathan Raman, 2022/01/19
- [PATCH v5 16/18] vfio-user: handle device interrupts, Jagannathan Raman, 2022/01/19