[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC 1/5] vfio: introduce a new VFIO region for migration s
From: |
Yulei Zhang |
Subject: |
[Qemu-devel] [RFC 1/5] vfio: introduce a new VFIO region for migration support |
Date: |
Mon, 26 Jun 2017 08:52:44 -0000 |
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, ®_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;
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. */
};
--
2.7.4
- [Qemu-devel] [RFC 1/5] vfio: introduce a new VFIO region for migration support,
Yulei Zhang <=