From 73c33765f3d879001818cd0719038c78a0c65561 Mon Sep 17 00:00:00 2001 From: Sheng Yang Date: Fri, 18 Apr 2008 17:15:39 +0800 Subject: [PATCH] kvm: qemu: Enable EPT support for real mode This patch build a identity page table on the last page of VGA bios, and use it as the guest page table in nonpaging mode for EPT. Signed-off-by: Sheng Yang --- qemu/hw/pc.c | 14 ++++++++++++++ 1 files changed, 14 insertions(+), 0 deletions(-) diff --git a/qemu/hw/pc.c b/qemu/hw/pc.c index ae87ab9..dcb98c6 100644 --- a/qemu/hw/pc.c +++ b/qemu/hw/pc.c @@ -780,6 +780,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; @@ -857,6 +860,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); -- 1.5.4.5