added invlpg emulation
authorbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Wed, 25 Jun 2003 16:19:50 +0000 (16:19 +0000)
committerbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Wed, 25 Jun 2003 16:19:50 +0000 (16:19 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@280 c046a42c-6fe2-441c-8c8c-71466251a162

translate-i386.c

index 79d6eed63f46484b5ae563be8459cec4f5270435..d986752dae1a5626c4845d06e782b41f73b3dc68 100644 (file)
@@ -4036,6 +4036,7 @@ void cpu_x86_close(CPUX86State *env)
 
 /***********************************************************/
 /* x86 mmu */
+/* XXX: add PGE support */
 
 /* called when cr3 or PG bit are modified */
 static int last_pg_state = -1;
@@ -4091,8 +4092,18 @@ void cpu_x86_init_mmu(CPUX86State *env)
     cpu_x86_update_cr0(env);
 }
 
+/* XXX: also flush 4MB pages */
 void cpu_x86_flush_tlb(CPUX86State *env, uint32_t addr)
 {
+    int flags;
+    unsigned long virt_addr;
+
+    flags = page_get_flags(addr);
+    if (flags & PAGE_VALID) {
+        virt_addr = addr & ~0xfff;
+        munmap((void *)virt_addr, 4096);
+        page_set_flags(virt_addr, virt_addr + 4096, 0);
+    }
 }
 
 /* return value: