Skip to contentSkip to conversation

kvm: qemu: Enable EPT support for real mode

RFC PATCH In review Yang, Sheng 1 participant 1 message Feb 1, 2008 KVM

lore
Share & tools
lore
#0 lore raw

RFC PATCH 7/7 kvm: qemu: Enable EPT support for real mode

From de2bedf0890c95828b07ba3d2d98025fd39050a1 Mon Sep 17 00:00:00 2001
From: Sheng Yang <[email protected]>
Date: Fri, 1 Feb 2008 07:33:13 +0800
Subject: [PATCH] kvm: qemu: Enable EPT support for real mode

The patch allocated one page from 0xcf000 (the last page of vga bios region), took it as the guest identity mapped page table in real mode. Then we can support EPT in real mode by using the address as guest CR3.

---
 qemu/hw/pc.c |   14 ++++++++++++++
 1 files changed, 14 insertions(+), 0 deletions(-)
qemu/hw/pc.c +0 -0
index 0e0d051..f3fa49c 100644
@@ -758,6 +758,9 @@ static void pc_init1(ram_addr_t ram_size, int 

vga_ram_size,

     int index;
     BlockDriverState *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
     BlockDriverState *fd[MAX_FD];

+#ifdef USE_KVM
+ uint32_t *table_items;
+#endif

     if (ram_size >= 0xe0000000 ) {
         above_4g_mem_size = ram_size - 0xe0000000;
@@ -851,6 +854,17 @@ static void pc_init1(ram_addr_t ram_size, int 
vga_ram_size,
         exit(1);
     }

+#ifdef USE_KVM
+ if (kvm_allowed) {
+ /* set up identity map for EPT at the last page of VGA BIOS region.
+ * 0xe7 = _PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED |
+ * _PAGE_DIRTY | _PAGE_PSE */
+ table_items = (void *)(phys_ram_base + vga_bios_offset + 0xf000);
+ for (i = 0; i < 1024; i++)
+ table_items[i] = (i << 22) + 0xe7;
+ }
+#endif
+

     /* above 4giga memory allocation */
     if (above_4g_mem_size > 0) {
         ram_addr = qemu_ram_alloc(above_4g_mem_size);

--
debian.1.5.3.7.1-dirty

From de2bedf0890c95828b07ba3d2d98025fd39050a1 Mon Sep 17 00:00:00 2001
From: Sheng Yang <[email protected]>
Date: Fri, 1 Feb 2008 07:33:13 +0800
Subject: [PATCH] kvm: qemu: Enable EPT support for real mode

The patch allocated one page from 0xcf000 (the last page of vga bios region), took it as the guest identity mapped page table in real mode. Then we can support EPT in real mode by using the address as guest CR3.

---
 qemu/hw/pc.c |   14 ++++++++++++++
 1 files changed, 14 insertions(+), 0 deletions(-)
qemu/hw/pc.c +14 -0
index 0e0d051..f3fa49c 100644
@@ -758,6 +758,9 @@ static void pc_init1(ram_addr_t ram_size, int vga_ram_size,
     int index;
     BlockDriverState *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
     BlockDriverState *fd[MAX_FD];
+#ifdef USE_KVM
+    uint32_t *table_items;
+#endif
 
     if (ram_size >= 0xe0000000 ) {
         above_4g_mem_size = ram_size - 0xe0000000;
@@ -851,6 +854,17 @@ static void pc_init1(ram_addr_t ram_size, int vga_ram_size,
         exit(1);
     }
 
+#ifdef USE_KVM
+    if (kvm_allowed) {
+	/* set up identity map for EPT at the last page of VGA BIOS region.
+	 * 0xe7 = _PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED |
+	 *	  _PAGE_DIRTY   | _PAGE_PSE */
+	table_items = (void *)(phys_ram_base + vga_bios_offset + 0xf000);
+	for (i = 0; i < 1024; i++)
+	    table_items[i] = (i << 22) + 0xe7;
+    }
+#endif
+
     /* above 4giga memory allocation */
     if (above_4g_mem_size > 0) {
         ram_addr = qemu_ram_alloc(above_4g_mem_size);
Signature · 1 line
debian.1.5.3.7.1-dirty

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/

_______________________________________________
kvm-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/kvm-devel