Annotation of /trunk/kernel26-xen/patches-2.6.25-r1/1021-2.6.25-xen-x86_64-Split-set_pte_vaddr.patch
Parent Directory | Revision Log
Revision 606 -
(hide annotations)
(download)
Thu May 22 23:13:13 2008 UTC (16 years ago) by niro
File size: 2039 byte(s)
Thu May 22 23:13:13 2008 UTC (16 years ago) by niro
File size: 2039 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 | niro | 606 | From 94105deeacbfac6e4baceb55e79b60c7301c03f6 Mon Sep 17 00:00:00 2001 |
2 | From: Eduardo Habkost <ehabkost@redhat.com> | ||
3 | Date: Fri, 8 Feb 2008 12:41:04 -0200 | ||
4 | Subject: [PATCH] x86_64: Split set_pte_vaddr() | ||
5 | |||
6 | We will need to set a pte on l3_user_pgt. Extract set_pte_vaddr_pud() | ||
7 | from set_pte_vaddr(), that will accept the l3 page table as | ||
8 | parameter. | ||
9 | |||
10 | This change should be a no-op for existing code. | ||
11 | |||
12 | Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> | ||
13 | Signed-off-by: Mark McLoughlin <markmc@redhat.com> | ||
14 | --- | ||
15 | arch/x86/mm/init_64.c | 33 +++++++++++++++++++++------------ | ||
16 | 1 files changed, 21 insertions(+), 12 deletions(-) | ||
17 | |||
18 | diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c | ||
19 | index 00628b5..65d2a75 100644 | ||
20 | --- a/arch/x86/mm/init_64.c | ||
21 | +++ b/arch/x86/mm/init_64.c | ||
22 | @@ -121,23 +121,14 @@ static __init void *spp_getpage(void) | ||
23 | return ptr; | ||
24 | } | ||
25 | |||
26 | -void | ||
27 | -set_pte_vaddr(unsigned long vaddr, pte_t pteval) | ||
28 | +static void | ||
29 | +set_pte_vaddr_pud(pud_t *pud_page, unsigned long vaddr, pte_t pteval) | ||
30 | { | ||
31 | - pgd_t *pgd; | ||
32 | pud_t *pud; | ||
33 | pmd_t *pmd; | ||
34 | pte_t *pte; | ||
35 | |||
36 | - pr_debug("set_pte_phys %lx to %lx\n", vaddr, native_pte_val(pteval)); | ||
37 | - | ||
38 | - pgd = pgd_offset_k(vaddr); | ||
39 | - if (pgd_none(*pgd)) { | ||
40 | - printk(KERN_ERR | ||
41 | - "PGD FIXMAP MISSING, it should be setup in head.S!\n"); | ||
42 | - return; | ||
43 | - } | ||
44 | - pud = pud_offset(pgd, vaddr); | ||
45 | + pud = pud_page + pud_index(vaddr); | ||
46 | if (pud_none(*pud)) { | ||
47 | pmd = (pmd_t *) spp_getpage(); | ||
48 | set_pud(pud, __pud(__pa(pmd) | _KERNPG_TABLE | _PAGE_USER)); | ||
49 | @@ -170,6 +161,24 @@ set_pte_vaddr(unsigned long vaddr, pte_t pteval) | ||
50 | __flush_tlb_one(vaddr); | ||
51 | } | ||
52 | |||
53 | +void | ||
54 | +set_pte_vaddr(unsigned long vaddr, pte_t pteval) | ||
55 | +{ | ||
56 | + pgd_t *pgd; | ||
57 | + pud_t *pud_page; | ||
58 | + | ||
59 | + pr_debug("set_pte_vaddr %lx to %lx\n", vaddr, native_pte_val(pteval)); | ||
60 | + | ||
61 | + pgd = pgd_offset_k(vaddr); | ||
62 | + if (pgd_none(*pgd)) { | ||
63 | + printk(KERN_ERR | ||
64 | + "PGD FIXMAP MISSING, it should be setup in head.S!\n"); | ||
65 | + return; | ||
66 | + } | ||
67 | + pud_page = (pud_t*)pgd_page_vaddr(*pgd); | ||
68 | + set_pte_vaddr_pud(pud_page, vaddr, pteval); | ||
69 | +} | ||
70 | + | ||
71 | /* | ||
72 | * The head.S code sets up the kernel high mapping: | ||
73 | * | ||
74 | -- | ||
75 | 1.5.4.1 | ||
76 |