forked from rpms/qemu-kvm
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
4.1 KiB
103 lines
4.1 KiB
8 months ago
|
From 6a597d7c82a4538fa1f928db7e600ec2e5a44361 Mon Sep 17 00:00:00 2001
|
||
|
From: Eric Auger <eric.auger@redhat.com>
|
||
|
Date: Thu, 2 Nov 2023 15:12:39 +0800
|
||
|
Subject: [PATCH 014/101] vfio/container: Move dirty_pgsizes and
|
||
|
max_dirty_bitmap_size to base container
|
||
|
MIME-Version: 1.0
|
||
|
Content-Type: text/plain; charset=UTF-8
|
||
|
Content-Transfer-Encoding: 8bit
|
||
|
|
||
|
RH-Author: Eric Auger <eric.auger@redhat.com>
|
||
|
RH-MergeRequest: 211: IOMMUFD backend backport
|
||
|
RH-Jira: RHEL-19302 RHEL-21057
|
||
|
RH-Acked-by: Cédric Le Goater <clg@redhat.com>
|
||
|
RH-Acked-by: Sebastian Ott <sebott@redhat.com>
|
||
|
RH-Commit: [13/67] b9fe57174368e36788b017cc2ad13b748592cfc2 (eauger1/centos-qemu-kvm)
|
||
|
|
||
|
No functional 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>
|
||
|
Reviewed-by: Cédric Le Goater <clg@redhat.com>
|
||
|
Signed-off-by: Cédric Le Goater <clg@redhat.com>
|
||
|
(cherry picked from commit 4d6b95010c59127ac4f7230d6ee88b5d0e99738c)
|
||
|
Signed-off-by: Eric Auger <eric.auger@redhat.com>
|
||
|
---
|
||
|
hw/vfio/container.c | 9 +++++----
|
||
|
include/hw/vfio/vfio-common.h | 2 --
|
||
|
include/hw/vfio/vfio-container-base.h | 2 ++
|
||
|
3 files changed, 7 insertions(+), 6 deletions(-)
|
||
|
|
||
|
diff --git a/hw/vfio/container.c b/hw/vfio/container.c
|
||
|
index 5c1dee8c9f..c8088a8174 100644
|
||
|
--- a/hw/vfio/container.c
|
||
|
+++ b/hw/vfio/container.c
|
||
|
@@ -64,6 +64,7 @@ static int vfio_dma_unmap_bitmap(VFIOContainer *container,
|
||
|
hwaddr iova, ram_addr_t size,
|
||
|
IOMMUTLBEntry *iotlb)
|
||
|
{
|
||
|
+ VFIOContainerBase *bcontainer = &container->bcontainer;
|
||
|
struct vfio_iommu_type1_dma_unmap *unmap;
|
||
|
struct vfio_bitmap *bitmap;
|
||
|
VFIOBitmap vbmap;
|
||
|
@@ -91,7 +92,7 @@ static int vfio_dma_unmap_bitmap(VFIOContainer *container,
|
||
|
bitmap->size = vbmap.size;
|
||
|
bitmap->data = (__u64 *)vbmap.bitmap;
|
||
|
|
||
|
- if (vbmap.size > container->max_dirty_bitmap_size) {
|
||
|
+ if (vbmap.size > bcontainer->max_dirty_bitmap_size) {
|
||
|
error_report("UNMAP: Size of bitmap too big 0x%"PRIx64, vbmap.size);
|
||
|
ret = -E2BIG;
|
||
|
goto unmap_exit;
|
||
|
@@ -131,7 +132,7 @@ static int vfio_legacy_dma_unmap(VFIOContainerBase *bcontainer, hwaddr iova,
|
||
|
|
||
|
if (iotlb && vfio_devices_all_running_and_mig_active(bcontainer)) {
|
||
|
if (!vfio_devices_all_device_dirty_tracking(bcontainer) &&
|
||
|
- container->bcontainer.dirty_pages_supported) {
|
||
|
+ bcontainer->dirty_pages_supported) {
|
||
|
return vfio_dma_unmap_bitmap(container, iova, size, iotlb);
|
||
|
}
|
||
|
|
||
|
@@ -469,8 +470,8 @@ static void vfio_get_iommu_info_migration(VFIOContainer *container,
|
||
|
*/
|
||
|
if (cap_mig->pgsize_bitmap & qemu_real_host_page_size()) {
|
||
|
bcontainer->dirty_pages_supported = true;
|
||
|
- container->max_dirty_bitmap_size = cap_mig->max_dirty_bitmap_size;
|
||
|
- container->dirty_pgsizes = cap_mig->pgsize_bitmap;
|
||
|
+ bcontainer->max_dirty_bitmap_size = cap_mig->max_dirty_bitmap_size;
|
||
|
+ bcontainer->dirty_pgsizes = cap_mig->pgsize_bitmap;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h
|
||
|
index 922022cbc6..b1c9fe711b 100644
|
||
|
--- a/include/hw/vfio/vfio-common.h
|
||
|
+++ b/include/hw/vfio/vfio-common.h
|
||
|
@@ -80,8 +80,6 @@ typedef struct VFIOContainer {
|
||
|
int fd; /* /dev/vfio/vfio, empowered by the attached groups */
|
||
|
MemoryListener prereg_listener;
|
||
|
unsigned iommu_type;
|
||
|
- uint64_t dirty_pgsizes;
|
||
|
- uint64_t max_dirty_bitmap_size;
|
||
|
QLIST_HEAD(, VFIOHostDMAWindow) hostwin_list;
|
||
|
QLIST_HEAD(, VFIOGroup) group_list;
|
||
|
GList *iova_ranges;
|
||
|
diff --git a/include/hw/vfio/vfio-container-base.h b/include/hw/vfio/vfio-container-base.h
|
||
|
index 95f8d319e0..80e4a993c5 100644
|
||
|
--- a/include/hw/vfio/vfio-container-base.h
|
||
|
+++ b/include/hw/vfio/vfio-container-base.h
|
||
|
@@ -39,6 +39,8 @@ typedef struct VFIOContainerBase {
|
||
|
MemoryListener listener;
|
||
|
Error *error;
|
||
|
bool initialized;
|
||
|
+ uint64_t dirty_pgsizes;
|
||
|
+ uint64_t max_dirty_bitmap_size;
|
||
|
unsigned long pgsizes;
|
||
|
unsigned int dma_max_mappings;
|
||
|
bool dirty_pages_supported;
|
||
|
--
|
||
|
2.39.3
|
||
|
|