Magellan Linux

Contents of /trunk/kernel26-xen/patches-2.6.25-r1/1018-2.6.25-xen-expose-set_pte_vaddr-and-make-xen-use-it.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: 3329 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 f6a60c5b6dfd7b4a74bfb12740d202c56f262705 Mon Sep 17 00:00:00 2001
2 From: Mark McLoughlin <markmc@redhat.com>
3 Date: Mon, 28 Jan 2008 15:38:03 +0000
4 Subject: [PATCH] xen: expose set_pte_vaddr() and make xen use it
5
6 Re-name set_pte_pfn() to set_pte_vaddr(), taking a pte_t
7 rather than pfn/flags, and expose it.
8
9 Make xen's set_pte_mfn() use this rather than copying it.
10
11 Signed-off-by: Jeremy Fitzhardinge <jeremy@xensource.com>
12 Signed-off-by: Juan Quintela <quintela@redhat.com>
13 Signed-off-by: Mark McLoughlin <markmc@redhat.com>
14 ---
15 arch/x86/mm/pgtable_32.c | 8 ++++----
16 arch/x86/xen/mmu.c | 30 +-----------------------------
17 include/asm-x86/pgtable_32.h | 3 +++
18 3 files changed, 8 insertions(+), 33 deletions(-)
19
20 diff --git a/arch/x86/mm/pgtable_32.c b/arch/x86/mm/pgtable_32.c
21 index 2f9e9af..fca936b 100644
22 --- a/arch/x86/mm/pgtable_32.c
23 +++ b/arch/x86/mm/pgtable_32.c
24 @@ -76,7 +76,7 @@ void show_mem(void)
25 * Associate a virtual page frame with a given physical page frame
26 * and protection flags for that frame.
27 */
28 -static void set_pte_pfn(unsigned long vaddr, unsigned long pfn, pgprot_t flags)
29 +void set_pte_vaddr(unsigned long vaddr, pte_t pteval)
30 {
31 pgd_t *pgd;
32 pud_t *pud;
33 @@ -99,8 +99,8 @@ static void set_pte_pfn(unsigned long vaddr, unsigned long pfn, pgprot_t flags)
34 return;
35 }
36 pte = pte_offset_kernel(pmd, vaddr);
37 - if (pgprot_val(flags))
38 - set_pte_present(&init_mm, vaddr, pte, pfn_pte(pfn, flags));
39 + if (pte_val(pteval))
40 + set_pte_present(&init_mm, vaddr, pte, pteval);
41 else
42 pte_clear(&init_mm, vaddr, pte);
43
44 @@ -158,7 +158,7 @@ void __set_fixmap (enum fixed_addresses idx, unsigned long phys, pgprot_t flags)
45 BUG();
46 return;
47 }
48 - set_pte_pfn(address, phys >> PAGE_SHIFT, flags);
49 + set_pte_vaddr(address, pfn_pte(phys >> PAGE_SHIFT, flags));
50 fixmaps++;
51 }
52
53 diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
54 index 2a054ef..8660786 100644
55 --- a/arch/x86/xen/mmu.c
56 +++ b/arch/x86/xen/mmu.c
57 @@ -122,35 +122,7 @@ void xen_set_pmd(pmd_t *ptr, pmd_t val)
58 */
59 void set_pte_mfn(unsigned long vaddr, unsigned long mfn, pgprot_t flags)
60 {
61 - pgd_t *pgd;
62 - pud_t *pud;
63 - pmd_t *pmd;
64 - pte_t *pte;
65 -
66 - pgd = swapper_pg_dir + pgd_index(vaddr);
67 - if (pgd_none(*pgd)) {
68 - BUG();
69 - return;
70 - }
71 - pud = pud_offset(pgd, vaddr);
72 - if (pud_none(*pud)) {
73 - BUG();
74 - return;
75 - }
76 - pmd = pmd_offset(pud, vaddr);
77 - if (pmd_none(*pmd)) {
78 - BUG();
79 - return;
80 - }
81 - pte = pte_offset_kernel(pmd, vaddr);
82 - /* <mfn,flags> stored as-is, to permit clearing entries */
83 - xen_set_pte(pte, mfn_pte(mfn, flags));
84 -
85 - /*
86 - * It's enough to flush this one mapping.
87 - * (PGE mappings get flushed as well)
88 - */
89 - __flush_tlb_one(vaddr);
90 + set_pte_vaddr(vaddr, mfn_pte(mfn, flags));
91 }
92
93 void xen_set_pte_at(struct mm_struct *mm, unsigned long addr,
94 diff --git a/include/asm-x86/pgtable_32.h b/include/asm-x86/pgtable_32.h
95 index 4e6a0fc..0c9fddb 100644
96 --- a/include/asm-x86/pgtable_32.h
97 +++ b/include/asm-x86/pgtable_32.h
98 @@ -209,6 +209,9 @@ do { \
99 void native_pagetable_setup_start(pgd_t *base);
100 void native_pagetable_setup_done(pgd_t *base);
101
102 +/* Install a pte for a particular vaddr in kernel space. */
103 +void set_pte_vaddr(unsigned long vaddr, pte_t pte);
104 +
105 #ifndef CONFIG_PARAVIRT
106 static inline void paravirt_pagetable_setup_start(pgd_t *base)
107 {
108 --
109 1.5.4.1
110