[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v4 06/41] vfio: Introduce base object for VFIOContainer and targe
|
From: |
Zhenzhong Duan |
|
Subject: |
[PATCH v4 06/41] vfio: Introduce base object for VFIOContainer and targeted interface |
|
Date: |
Thu, 2 Nov 2023 15:12:27 +0800 |
Introduce a dumb VFIOContainerBase object and its targeted interface.
This is willingly not a QOM object because we don't want it to be
visible from the user interface. The VFIOContainerBase will be
smoothly populated in subsequent patches as well as interfaces.
No fucntional change intended.
Signed-off-by: Eric Auger <eric.auger@redhat.com>
Signed-off-by: Yi Liu <yi.l.liu@intel.com>
Signed-off-by: Yi Sun <yi.y.sun@linux.intel.com>
Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
---
v4: use SPDX identifier, use const char *name parameter,
HW_VFIO_VFIO_CONTAINER_BASE_H
include/hw/vfio/vfio-common.h | 8 ++---
include/hw/vfio/vfio-container-base.h | 50 +++++++++++++++++++++++++++
2 files changed, 52 insertions(+), 6 deletions(-)
create mode 100644 include/hw/vfio/vfio-container-base.h
diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h
index a4a22accb9..586d153c12 100644
--- a/include/hw/vfio/vfio-common.h
+++ b/include/hw/vfio/vfio-common.h
@@ -30,6 +30,7 @@
#include <linux/vfio.h>
#endif
#include "sysemu/sysemu.h"
+#include "hw/vfio/vfio-container-base.h"
#define VFIO_MSG_PREFIX "vfio %s: "
@@ -81,6 +82,7 @@ typedef struct VFIOAddressSpace {
struct VFIOGroup;
typedef struct VFIOContainer {
+ VFIOContainerBase bcontainer;
VFIOAddressSpace *space;
int fd; /* /dev/vfio/vfio, empowered by the attached groups */
MemoryListener listener;
@@ -201,12 +203,6 @@ typedef struct VFIODisplay {
} dmabuf;
} VFIODisplay;
-typedef struct {
- unsigned long *bitmap;
- hwaddr size;
- hwaddr pages;
-} VFIOBitmap;
-
VFIOAddressSpace *vfio_get_address_space(AddressSpace *as);
void vfio_put_address_space(VFIOAddressSpace *space);
bool vfio_devices_all_running_and_saving(VFIOContainer *container);
diff --git a/include/hw/vfio/vfio-container-base.h
b/include/hw/vfio/vfio-container-base.h
new file mode 100644
index 0000000000..1d6daaea5d
--- /dev/null
+++ b/include/hw/vfio/vfio-container-base.h
@@ -0,0 +1,50 @@
+/*
+ * VFIO BASE CONTAINER
+ *
+ * Copyright (C) 2023 Intel Corporation.
+ * Copyright Red Hat, Inc. 2023
+ *
+ * Authors: Yi Liu <yi.l.liu@intel.com>
+ * Eric Auger <eric.auger@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#ifndef HW_VFIO_VFIO_CONTAINER_BASE_H
+#define HW_VFIO_VFIO_CONTAINER_BASE_H
+
+#include "exec/memory.h"
+
+typedef struct VFIODevice VFIODevice;
+typedef struct VFIOIOMMUOps VFIOIOMMUOps;
+
+typedef struct {
+ unsigned long *bitmap;
+ hwaddr size;
+ hwaddr pages;
+} VFIOBitmap;
+
+/*
+ * This is the base object for vfio container backends
+ */
+typedef struct VFIOContainerBase {
+ const VFIOIOMMUOps *ops;
+} VFIOContainerBase;
+
+struct VFIOIOMMUOps {
+ /* basic feature */
+ int (*dma_map)(VFIOContainerBase *bcontainer,
+ hwaddr iova, ram_addr_t size,
+ void *vaddr, bool readonly);
+ int (*dma_unmap)(VFIOContainerBase *bcontainer,
+ hwaddr iova, ram_addr_t size,
+ IOMMUTLBEntry *iotlb);
+ int (*attach_device)(const char *name, VFIODevice *vbasedev,
+ AddressSpace *as, Error **errp);
+ void (*detach_device)(VFIODevice *vbasedev);
+ /* migration feature */
+ int (*set_dirty_page_tracking)(VFIOContainerBase *bcontainer, bool start);
+ int (*query_dirty_bitmap)(VFIOContainerBase *bcontainer, VFIOBitmap *vbmap,
+ hwaddr iova, hwaddr size);
+};
+#endif /* HW_VFIO_VFIO_CONTAINER_BASE_H */
--
2.34.1
- [PATCH v4 00/41] vfio: Adopt iommufd, Zhenzhong Duan, 2023/11/02
- [PATCH v4 01/41] vfio/container: Move IBM EEH related functions into spapr_pci_vfio.c, Zhenzhong Duan, 2023/11/02
- [PATCH v4 02/41] vfio/container: Move vfio_container_add/del_section_window into spapr.c, Zhenzhong Duan, 2023/11/02
- [PATCH v4 03/41] vfio/container: Move spapr specific init/deinit into spapr.c, Zhenzhong Duan, 2023/11/02
- [PATCH v4 04/41] vfio/spapr: Make vfio_spapr_create/remove_window static, Zhenzhong Duan, 2023/11/02
- [PATCH v4 05/41] vfio/common: Move vfio_host_win_add/del into spapr.c, Zhenzhong Duan, 2023/11/02
- [PATCH v4 06/41] vfio: Introduce base object for VFIOContainer and targeted interface,
Zhenzhong Duan <=
- [PATCH v4 07/41] vfio/container: Introduce a empty VFIOIOMMUOps, Zhenzhong Duan, 2023/11/02
- [PATCH v4 08/41] vfio/container: Switch to dma_map|unmap API, Zhenzhong Duan, 2023/11/02
- [PATCH v4 09/41] vfio/common: Introduce vfio_container_init/destroy helper, Zhenzhong Duan, 2023/11/02
- [PATCH v4 10/41] vfio/common: Move giommu_list in base container, Zhenzhong Duan, 2023/11/02
- [PATCH v4 11/41] vfio/container: Move space field to base container, Zhenzhong Duan, 2023/11/02