From: Yulei Zhang <yuleixzhang@xxxxxxxxxxx> Adjust the kvm_map_gfn while using dmemfs to enable record_steal_time when entering the guest. Signed-off-by: Yulei Zhang <yuleixzhang@xxxxxxxxxxx> --- virt/kvm/kvm_main.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 2541a17..500b170 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -51,6 +51,7 @@ #include <linux/io.h> #include <linux/lockdep.h> #include <linux/kthread.h> +#include <linux/dmem.h> #include <asm/processor.h> #include <asm/ioctl.h> @@ -2164,7 +2165,10 @@ static int __kvm_map_gfn(struct kvm_memslots *slots, gfn_t gfn, hva = kmap(page); #ifdef CONFIG_HAS_IOMEM } else if (!atomic) { - hva = memremap(pfn_to_hpa(pfn), PAGE_SIZE, MEMREMAP_WB); + if (is_dmem_pfn(pfn)) + hva = __va(PFN_PHYS(pfn)); + else + hva = memremap(pfn_to_hpa(pfn), PAGE_SIZE, MEMREMAP_WB); } else { return -EINVAL; #endif @@ -2214,9 +2218,10 @@ static void __kvm_unmap_gfn(struct kvm_memory_slot *memslot, kunmap(map->page); } #ifdef CONFIG_HAS_IOMEM - else if (!atomic) - memunmap(map->hva); - else + else if (!atomic) { + if (!is_dmem_pfn(map->pfn)) + memunmap(map->hva); + } else WARN_ONCE(1, "Unexpected unmapping in atomic context"); #endif -- 1.8.3.1