Magellan Linux

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 Parent Directory | Revision Log 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)
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