[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] Fix read_cr3() and use it.
# HG changeset patch # User cl349@xxxxxxxxxxxxxxxxxxxx # Node ID 0e9a0a469c6bec37a5b510a6d39500b022a3f06f # Parent 9bf99522ce5e2dbb0592565f289c4fb1c78ea79a Fix read_cr3() and use it. From: Jan Beulich <JBeulich@xxxxxxxxxx> Signed-off-by: Christian Limpach <Christian.Limpach@xxxxxxxxxxxx> diff -r 9bf99522ce5e -r 0e9a0a469c6b linux-2.6-xen-sparse/arch/x86_64/mm/fault-xen.c --- a/linux-2.6-xen-sparse/arch/x86_64/mm/fault-xen.c Mon Feb 20 17:32:29 2006 +++ b/linux-2.6-xen-sparse/arch/x86_64/mm/fault-xen.c Mon Feb 20 17:34:21 2006 @@ -152,10 +152,7 @@ pmd_t *pmd; pte_t *pte; - asm("movq %%cr3,%0" : "=r" (pgd)); - pgd = (pgd_t *)machine_to_phys((maddr_t)pgd); - - pgd = __va((unsigned long)pgd & PHYSICAL_PAGE_MASK); + pgd = __va(read_cr3() & PHYSICAL_PAGE_MASK); pgd += pgd_index(address); if (bad_address(pgd)) goto bad; printk("PGD %lx ", pgd_val(*pgd)); @@ -261,9 +258,7 @@ /* On Xen the line below does not always work. Needs investigating! */ /*pgd = pgd_offset(current->mm ?: &init_mm, address);*/ - asm("movq %%cr3,%0" : "=r" (pgd)); - pgd = (pgd_t *)machine_to_phys((maddr_t)pgd); - pgd = __va((unsigned long)pgd & PHYSICAL_PAGE_MASK); + pgd = __va(read_cr3() & PHYSICAL_PAGE_MASK); pgd += pgd_index(address); pgd_ref = pgd_offset_k(address); if (pgd_none(*pgd_ref)) diff -r 9bf99522ce5e -r 0e9a0a469c6b linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/system.h --- a/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/system.h Mon Feb 20 17:32:29 2006 +++ b/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/system.h Mon Feb 20 17:34:21 2006 @@ -182,7 +182,7 @@ #define read_cr3() ({ \ unsigned long __dummy; \ asm("movq %%cr3,%0" : "=r" (__dummy)); \ - return machine_to_phys(__dummy); \ + machine_to_phys(__dummy); \ }) static inline unsigned long read_cr4(void) _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |