Contents of /trunk/kernel26-xen/patches-2.6.25-r1/1041-2.6.25-xen-Make-xen_pte_val-generic.patch
Parent Directory | 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)
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 |