Contents 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 -
(show 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 | 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 |