Magellan Linux

Contents of /trunk/kernel26-xen/patches-2.6.25-r1/1021-2.6.25-xen-x86_64-Split-set_pte_vaddr.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: 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 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