Magellan Linux

Contents of /trunk/kernel26-xen/patches-2.6.25-r1/1041-2.6.25-xen-Make-xen_pte_val-generic.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 606 - (show annotations) (download)
Thu May 22 23:13:13 2008 UTC (15 years, 11 months ago) by niro
File size: 1855 byte(s)
-ver bump to 2.6.25-magellan-r1:
- linux-2.6.25.4
- fbcondecor-0.9.4
- squashfs-3.3
- unionfs-2.3.3
- tuxonice-3.0-rc7
- linux-phc-0.3.0
- acpi-dstd-0.9a
- reiser4
- xen-3.2.0
. ipw3945-1.2.2

1 From 38f761fca639ce462f3184daecebb18b063316e7 Mon Sep 17 00:00:00 2001
2 From: Eduardo Habkost <ehabkost@redhat.com>
3 Date: Wed, 28 Nov 2007 17:53:17 -0200
4 Subject: [PATCH] xen: Make xen_pte_val() generic
5
6 Care is taken to make sure that all attribute bits
7 are left untouched by the address translation,
8 especially NX since it is a higher bit than all the
9 others.
10
11 Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
12 ---
13 arch/x86/xen/mmu.c | 36 ++++++++++++++----------------------
14 1 files changed, 14 insertions(+), 22 deletions(-)
15
16 diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
17 index b974434..4ec41ce 100644
18 --- a/arch/x86/xen/mmu.c
19 +++ b/arch/x86/xen/mmu.c
20 @@ -143,6 +143,20 @@ void xen_set_pte_at(struct mm_struct *mm, unsigned long addr,
21 xen_set_pte(ptep, pteval);
22 }
23
24 +pteval_t xen_pte_val(pte_t pte)
25 +{
26 + pteval_t ret = pte_val_ma(pte);
27 +
28 + if (ret & _PAGE_PRESENT) {
29 + /* preserve all other pte bits */
30 + unsigned long m = machine_to_phys(XMADDR(ret & PHYSICAL_PAGE_MASK)).paddr;
31 + ret &= ~PHYSICAL_PAGE_MASK;
32 + ret |= m;
33 + }
34 +
35 + return ret;
36 +}
37 +
38 #ifdef CONFIG_X86_PAE
39 void xen_set_pud(pud_t *ptr, pud_t val)
40 {
41 @@ -186,18 +200,6 @@ void xen_pmd_clear(pmd_t *pmdp)
42 xen_set_pmd(pmdp, __pmd(0));
43 }
44
45 -pteval_t xen_pte_val(pte_t pte)
46 -{
47 - unsigned long long ret = 0;
48 -
49 - if (pte.pte_low) {
50 - ret = ((unsigned long long)pte.pte_high << 32) | pte.pte_low;
51 - ret = machine_to_phys(XMADDR(ret)).paddr | 1;
52 - }
53 -
54 - return ret;
55 -}
56 -
57 pmdval_t xen_pmd_val(pmd_t pmd)
58 {
59 unsigned long long ret = pmd.pmd;
60 @@ -245,16 +247,6 @@ void xen_set_pte(pte_t *ptep, pte_t pte)
61 *ptep = pte;
62 }
63
64 -pteval_t xen_pte_val(pte_t pte)
65 -{
66 - unsigned long ret = pte.pte_low;
67 -
68 - if (ret & _PAGE_PRESENT)
69 - ret = machine_to_phys(XMADDR(ret)).paddr;
70 -
71 - return ret;
72 -}
73 -
74 pgdval_t xen_pgd_val(pgd_t pgd)
75 {
76 unsigned long ret = pgd.pgd;
77 --
78 1.5.4.1
79