diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2011-08-28 23:15:33 +0200 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2011-08-28 23:15:33 +0200 |
commit | 32fe0684cc758e7624223044e4286f3e7c9f2c92 (patch) | |
tree | fc42ddc9fe6919ea802fd491ddd629756079bf26 /i386 | |
parent | 9899c659b1a2436085e772d02f5394db7869bf64 (diff) |
Disable (<i486)-only WP workaround on Xen & PAE
i386 didn't support PAE anyway.
* i386/i386/locore.S (copyout_retry) [MACH_HYP || PAE]: Remove.
* xen/xen.c (hyp_invalidate_pte): Remove function.
* xen/xen.h (hyp_invalidate_pte): Remove prototype.
Diffstat (limited to 'i386')
-rw-r--r-- | i386/i386/locore.S | 38 |
1 files changed, 2 insertions, 36 deletions
diff --git a/i386/i386/locore.S b/i386/i386/locore.S index 379b219..77ca05b 100644 --- a/i386/i386/locore.S +++ b/i386/i386/locore.S @@ -1294,42 +1294,15 @@ Entry(copyoutmsg) * XXX only have to do this on 386's. */ copyout_retry: -#ifdef MACH_HYP - movl cr3,%ecx /* point to page directory */ -#else /* MACH_HYP */ +#if !defined(MACH_HYP) && !PAE movl %cr3,%ecx /* point to page directory */ -#endif /* MACH_HYP */ -#if PAE - movl %edi,%eax /* get page directory pointer bits */ - shrl $(PDPSHIFT),%eax /* from user address */ - movl KERNELBASE(%ecx,%eax,PTE_SIZE),%ecx - /* get page directory pointer */ -#ifdef MACH_PSEUDO_PHYS - shrl $(PTESHIFT),%ecx - movl pfn_list,%eax - movl (%eax,%ecx,4),%ecx /* mfn_to_pfn */ - shll $(PTESHIFT),%ecx -#else /* MACH_PSEUDO_PHYS */ - andl $(PTE_PFN),%ecx /* isolate page frame address */ -#endif /* MACH_PSEUDO_PHYS */ -#endif /* PAE */ movl %edi,%eax /* get page directory bits */ shrl $(PDESHIFT),%eax /* from user address */ -#if PAE - andl $(PDEMASK),%eax -#endif /* PAE */ movl KERNELBASE(%ecx,%eax,PTE_SIZE),%ecx /* get page directory pointer */ testl $(PTE_V),%ecx /* present? */ jz 0f /* if not, fault is OK */ -#ifdef MACH_PSEUDO_PHYS - shrl $(PTESHIFT),%ecx - movl pfn_list,%eax - movl (%eax,%ecx,4),%ecx /* mfn_to_pfn */ - shll $(PTESHIFT),%ecx -#else /* MACH_PSEUDO_PHYS */ andl $(PTE_PFN),%ecx /* isolate page frame address */ -#endif /* MACH_PSEUDO_PHYS */ movl %edi,%eax /* get page table bits */ shrl $(PTESHIFT),%eax andl $(PTEMASK),%eax /* from user address */ @@ -1343,18 +1316,11 @@ copyout_retry: /* * Not writable - must fake a fault. Turn off access to the page. */ -#ifdef MACH_HYP - pushl %edx - pushl %ecx - call hyp_invalidate_pte - popl %ecx - popl %edx -#else /* MACH_HYP */ andl $(PTE_INVALID),(%ecx) /* turn off valid bit */ movl %cr3,%eax /* invalidate TLB */ movl %eax,%cr3 -#endif /* MACH_HYP */ 0: +#endif /* !defined(MACH_HYP) && !PAE */ /* * Copy only what fits on the current destination page. |