[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Lost] kernel: invlpg braucht eine physische Adresse
! kernel: In alloc_kernel_pages wurde invlpg mit einer physischen Adresse
aufgerufen. Mit einer virtuellen Adresse bringt das mehr.
Index: trunk/src/kernel/src/mm/kmm.c
===================================================================
--- trunk.orig/src/kernel/src/mm/kmm.c
+++ trunk/src/kernel/src/mm/kmm.c
@@ -260,7 +260,9 @@ vaddr_t alloc_kernel_pages(int num)
for(j = (i == pgdir_index) ? pgtbl_index : 0; j < PAGE_TABLE_LENGTH && num; j++, num--)
{
page_table[j] = (dword)phys_alloc_page() | PTE_W | PTE_P;
- asm volatile("invlpg %0" : : "m" (*(char*)(page_table[j] & PAGE_MASK)));
+ asm volatile("invlpg %0"
+ : : "m" (*(char*)((i * PAGE_TABLE_LENGTH + j) * PAGE_SIZE))
+ : "memory");
}
}