aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>2005-08-17 18:14:46 +0000
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>2005-08-17 18:14:46 +0000
commit4ce65049c8a03275ae62e19d066943531017710e (patch)
tree2347443500c887586d36cc9b3d4c6472e68d6ff0
parent81cf88dc9c8db10fe5ab4495c917be4933730a2a (diff)
downloadxen-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.c6
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;