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