79c4324644
Change-Id: I2d302dda68298877c65c99147f5bf22186a59aac
65 lines
2.2 KiB
Diff
65 lines
2.2 KiB
Diff
From 1675d767aa9bd496178b4d74e01a40dbbd97eccb Mon Sep 17 00:00:00 2001
|
|
From: Kunkun Jiang <jiangkunkun@huawei.com>
|
|
Date: Tue, 11 May 2021 10:08:13 +0800
|
|
Subject: [PATCH] vfio: Introduce helpers to mark dirty pages of a RAM section
|
|
|
|
Extract part of the code from vfio_sync_dirty_bitmap to form a
|
|
new helper, which allows to mark dirty pages of a RAM section.
|
|
This helper will be called for nested stage.
|
|
|
|
Signed-off-by: Kunkun Jiang <jiangkunkun@huawei.com>
|
|
---
|
|
hw/vfio/common.c | 22 ++++++++++++++--------
|
|
1 file changed, 14 insertions(+), 8 deletions(-)
|
|
|
|
diff --git a/hw/vfio/common.c b/hw/vfio/common.c
|
|
index bdfcc854fe..6136b1ef61 100644
|
|
--- a/hw/vfio/common.c
|
|
+++ b/hw/vfio/common.c
|
|
@@ -1566,6 +1566,19 @@ err_out:
|
|
return ret;
|
|
}
|
|
|
|
+static int vfio_dma_sync_ram_section_dirty_bitmap(VFIOContainer *container,
|
|
+ MemoryRegionSection *section)
|
|
+{
|
|
+ ram_addr_t ram_addr;
|
|
+
|
|
+ ram_addr = memory_region_get_ram_addr(section->mr) +
|
|
+ section->offset_within_region;
|
|
+
|
|
+ return vfio_get_dirty_bitmap(container,
|
|
+ REAL_HOST_PAGE_ALIGN(section->offset_within_address_space),
|
|
+ int128_get64(section->size), ram_addr);
|
|
+}
|
|
+
|
|
typedef struct {
|
|
IOMMUNotifier n;
|
|
VFIOGuestIOMMU *giommu;
|
|
@@ -1650,8 +1663,6 @@ static int vfio_sync_ram_discard_listener_dirty_bitmap(VFIOContainer *container,
|
|
static int vfio_sync_dirty_bitmap(VFIOContainer *container,
|
|
MemoryRegionSection *section)
|
|
{
|
|
- ram_addr_t ram_addr;
|
|
-
|
|
if (memory_region_is_iommu(section->mr)) {
|
|
VFIOGuestIOMMU *giommu;
|
|
|
|
@@ -1682,12 +1693,7 @@ static int vfio_sync_dirty_bitmap(VFIOContainer *container,
|
|
return vfio_sync_ram_discard_listener_dirty_bitmap(container, section);
|
|
}
|
|
|
|
- ram_addr = memory_region_get_ram_addr(section->mr) +
|
|
- section->offset_within_region;
|
|
-
|
|
- return vfio_get_dirty_bitmap(container,
|
|
- REAL_HOST_PAGE_ALIGN(section->offset_within_address_space),
|
|
- int128_get64(section->size), ram_addr);
|
|
+ return vfio_dma_sync_ram_section_dirty_bitmap(container, section);
|
|
}
|
|
|
|
static void vfio_listener_log_sync(MemoryListener *listener,
|
|
--
|
|
2.27.0
|
|
|