diff options
author | kaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk> | 2005-08-17 18:14:46 +0000 |
---|---|---|
committer | kaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk> | 2005-08-17 18:14:46 +0000 |
commit | 4ce65049c8a03275ae62e19d066943531017710e (patch) | |
tree | 2347443500c887586d36cc9b3d4c6472e68d6ff0 | |
parent | 81cf88dc9c8db10fe5ab4495c917be4933730a2a (diff) | |
download | xen-4ce65049c8a03275ae62e19d066943531017710e.tar.gz xen-4ce65049c8a03275ae62e19d066943531017710e.tar.bz2 xen-4ce65049c8a03275ae62e19d066943531017710e.zip |
Fix vmalloc_fault() path for x86/64 XenLinux.
There may be a deeper underlying problem w.r.t pagetable
initialisation at start of day, but this simple fix is
a good workaround until we have time to investigate
properly.
Signed-off-by: Keir Fraser <keir@xensource.com>
-rw-r--r-- | linux-2.6-xen-sparse/arch/xen/x86_64/mm/fault.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/linux-2.6-xen-sparse/arch/xen/x86_64/mm/fault.c b/linux-2.6-xen-sparse/arch/xen/x86_64/mm/fault.c index 874b3afede..c0c5dc86b5 100644 --- a/linux-2.6-xen-sparse/arch/xen/x86_64/mm/fault.c +++ b/linux-2.6-xen-sparse/arch/xen/x86_64/mm/fault.c @@ -250,7 +250,11 @@ static int vmalloc_fault(unsigned long address) happen within a race in page table update. In the later case just flush. */ - pgd = pgd_offset(current->mm ?: &init_mm, address); + /* On Xen the line below does not always work. Needs investigating! */ + /*pgd = pgd_offset(current->mm ?: &init_mm, address);*/ + pgd = (pgd_t *)per_cpu(cur_pgd, smp_processor_id()); + pgd += pgd_index(address); + pgd_ref = pgd_offset_k(address); if (pgd_none(*pgd_ref)) return -1; |