qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [RFC 1/5] vfio: introduce a new VFIO region for migrati


From: Alex Williamson
Subject: Re: [Qemu-devel] [RFC 1/5] vfio: introduce a new VFIO region for migration support
Date: Mon, 26 Jun 2017 14:19:14 -0600

On Tue,  4 Apr 2017 18:26:57 +0800
Yulei Zhang <address@hidden> wrote:

> New VFIO region VFIO_PCI_DEVICE_STATE_REGION_INDEX is added to fetch
> and restore the pci device status during the live migration.
> 
> Signed-off-by: Yulei Zhang <address@hidden>
> ---
>  hw/vfio/pci.c              | 17 +++++++++++++++++
>  hw/vfio/pci.h              |  1 +
>  linux-headers/linux/vfio.h |  5 ++++-
>  3 files changed, 22 insertions(+), 1 deletion(-)
> 
> diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
> index 03a3d01..bf2e0ff 100644
> --- a/hw/vfio/pci.c
> +++ b/hw/vfio/pci.c
> @@ -2360,6 +2360,23 @@ static void vfio_populate_device(VFIOPCIDevice *vdev, 
> Error **errp)
>          QLIST_INIT(&vdev->bars[i].quirks);
>      }
>  
> +    /* device state region setup */
> +    if (vbasedev->flags & VFIO_DEVICE_FLAGS_MIGRATABLE) {
> +        char *name = g_strdup_printf("%s BAR %d", vbasedev->name, 
> VFIO_PCI_DEVICE_STATE_REGION_INDEX);
> +
> +        ret = vfio_region_setup(OBJECT(vdev), vbasedev,
> +                                &vdev->device_state.region, 
> VFIO_PCI_DEVICE_STATE_REGION_INDEX, name);
> +        g_free(name);
> +
> +        if (ret) {
> +            error_setg_errno(errp, -ret, "failed to get region %d info",
> +                             VFIO_PCI_DEVICE_STATE_REGION_INDEX);
> +            return;
> +        }
> +
> +        QLIST_INIT(&vdev->device_state.quirks);
> +    }
> +
>      ret = vfio_get_region_info(vbasedev,
>                                 VFIO_PCI_CONFIG_REGION_INDEX, &reg_info);
>      if (ret) {
> diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h
> index a8366bb..bd98618 100644
> --- a/hw/vfio/pci.h
> +++ b/hw/vfio/pci.h
> @@ -115,6 +115,7 @@ typedef struct VFIOPCIDevice {
>      int interrupt; /* Current interrupt type */
>      VFIOBAR bars[PCI_NUM_REGIONS - 1]; /* No ROM */
>      VFIOVGA *vga; /* 0xa0000, 0x3b0, 0x3c0 */
> +    VFIOBAR device_state;

But it's not a BAR...

>      void *igd_opregion;
>      PCIHostDeviceAddress host;
>      EventNotifier err_notifier;
> diff --git a/linux-headers/linux/vfio.h b/linux-headers/linux/vfio.h
> index 531cb2e..c87d05c 100644
> --- a/linux-headers/linux/vfio.h
> +++ b/linux-headers/linux/vfio.h
> @@ -198,6 +198,8 @@ struct vfio_device_info {
>  #define VFIO_DEVICE_FLAGS_PCI        (1 << 1)        /* vfio-pci device */
>  #define VFIO_DEVICE_FLAGS_PLATFORM (1 << 2)  /* vfio-platform device */
>  #define VFIO_DEVICE_FLAGS_AMBA  (1 << 3)     /* vfio-amba device */
> +#define VFIO_DEVICE_FLAGS_CCW   (1 << 4)        /* vfio-ccw device */
> +#define VFIO_DEVICE_FLAGS_MIGRATABLE (1 << 5)        /* Device supports 
> migrate */
>       __u32   num_regions;    /* Max region index + 1 */
>       __u32   num_irqs;       /* Max IRQ index + 1 */
>  };
> @@ -433,7 +435,8 @@ enum {
>        * between described ranges are unimplemented.
>        */
>       VFIO_PCI_VGA_REGION_INDEX,
> -     VFIO_PCI_NUM_REGIONS = 9 /* Fixed user ABI, region indexes >=9 use */
> +     VFIO_PCI_DEVICE_STATE_REGION_INDEX,
> +     VFIO_PCI_NUM_REGIONS = 10 /* Fixed user ABI, region indexes >=9 use */
>                                /* device specific cap to define content. */
>  };
>  

Nak, please read the comment on the line you changed.  We're not adding
any more static region indexes, anything new should be added with
device specific capabilities.  Look at how we do opregions and various
other IGD related regions.  There's also no reason to add a flag, the
existence of the device specific region should indicate that it
supports migration.  Also, we call these device specific, but I would
still encourage a shared format, userspace doesn't want to support a
different mechanism for each device.  Thanks,

Alex



reply via email to

[Prev in Thread] Current Thread [Next in Thread]