/[pkg-src]/trunk/kernel26-xen/patches-2.6.25-r1/1018-2.6.25-xen-expose-set_pte_vaddr-and-make-xen-use-it.patch |
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 | 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)
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 |