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> Signed-off-by: imxcc <xingchaochao@huawei.com> (cherry picked from commit 6c878a81777952114b8c559c51450b19ab9e13d8)
This commit is contained in:
parent
74e7cc0ba0
commit
4a31f0107a
64
vfio-Introduce-helpers-to-mark-dirty-pages-of-a-RAM-.patch
Normal file
64
vfio-Introduce-helpers-to-mark-dirty-pages-of-a-RAM-.patch
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
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
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user