/[pkg-src]/tags/kernel26-xen-2_6_25_r1-fedora9-patches/kernel26-xen/patches-2.6.25-r1/1018-2.6.25-xen-expose-set_pte_vaddr-and-make-xen-use-it.patch |
Annotation of /tags/kernel26-xen-2_6_25_r1-fedora9-patches/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 608 -
(hide annotations)
(download)
Fri May 23 12:17:32 2008 UTC (16 years, 4 months ago) by (unknown author)
File size: 3329 byte(s)
Fri May 23 12:17:32 2008 UTC (16 years, 4 months ago) by (unknown author)
File size: 3329 byte(s)
This commit was manufactured by cvs2svn to create tag 'kernel26-xen-2_6_25_r1-fedora9-patches'.
1 | niro | 606 | 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 |