Magellan Linux

Contents of /trunk/kernel26-xen/patches-2.6.25-r1/1070-2.6.25-xen-Debug-dump-pgtables-on-make_page_readonly.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: 2482 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 bcd3f4ae6009563081166e6559eb9181d673d370 Mon Sep 17 00:00:00 2001
2 From: Eduardo Habkost <ehabkost@redhat.com>
3 Date: Tue, 18 Dec 2007 12:34:36 -0200
4 Subject: [PATCH] Debug: dump pgtables on make_page_readonly()
5
6 Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
7 ---
8 arch/x86/mm/init_64.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++++
9 1 files changed, 68 insertions(+), 0 deletions(-)
10
11 diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
12 index cf1453b..fddf208 100644
13 --- a/arch/x86/mm/init_64.c
14 +++ b/arch/x86/mm/init_64.c
15 @@ -72,6 +72,71 @@ DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
16
17 #ifdef CONFIG_XEN
18
19 +//#define vvva(p) ((void*)((p) + __START_KERNEL_map))
20 +#define vvva(p) __va((p))
21 +
22 +void show_pgtable1(pte_t *tbl, unsigned long addr)
23 +{
24 + pte_t *pte = tbl + pte_index(addr);
25 + pte_val_t pv;
26 + unsigned long *page;
27 +
28 + xprintk("\npte: %p\n", pte);
29 + xprintk("\npte val: %lx\n", pte->pte);
30 +
31 + pv = pte_val(*pte);
32 + if (!(pv & _PAGE_PRESENT))
33 + return;
34 +
35 + page = vvva(pv & PHYSICAL_PAGE_MASK);
36 +
37 + xprintk("\npage: %p\n", page);
38 + xprintk("\npage val: %lx\n", *page);
39 +}
40 +
41 +void show_pgtable2(pmd_t *tbl, unsigned long addr)
42 +{
43 + pmd_t *pmd = tbl + pmd_index(addr);
44 + pmd_val_t pv;
45 +
46 + xprintk("\npmd: %p\n", pmd);
47 + xprintk("\npmd val: %lx\n", pmd->pmd);
48 +
49 + pv = pmd_val(*pmd);
50 + if (!(pv & _PAGE_PRESENT))
51 + return;
52 +
53 + show_pgtable1((pte_t*)vvva(pv & PHYSICAL_PAGE_MASK), addr);
54 +}
55 +
56 +void show_pgtable3(pud_t *tbl, unsigned long addr)
57 +{
58 + pud_t *pud = tbl + pud_index(addr);
59 +
60 + xprintk("\npud: %p\n", pud);
61 + xprintk("pud value: %lx\n", pud->pud);
62 +
63 + show_pgtable2((pmd_t*)vvva(pud_val(*pud) & PHYSICAL_PAGE_MASK), addr);
64 +}
65 +
66 +void show_pgtable4(pgd_t *tbl, unsigned long addr)
67 +{
68 + pgd_t *pgd = tbl + pgd_index(addr);
69 +
70 + xprintk("\npgd: %p\n", pgd);
71 + xprintk("pgd value: %lx\n", pgd->pgd);
72 +
73 + show_pgtable3((pud_t*)vvva(pgd_val(*pgd) & PHYSICAL_PAGE_MASK), addr);
74 +}
75 +
76 +void show_pgtable(unsigned long addr)
77 +{
78 + xprintk("\nshowing pgtable for %lx\n", addr);
79 +
80 + show_pgtable4(init_level4_pgt, addr);
81 +}
82 +
83 +
84 static void __make_page_readonly(void *va)
85 {
86 pgd_t *pgd; pud_t *pud; pmd_t *pmd; pte_t pte, *ptep;
87 @@ -92,6 +157,9 @@ static void __make_page_readonly(void *va)
88
89 if ((addr >= VMALLOC_START) && (addr < VMALLOC_END))
90 __make_page_readonly(__va(pte_pfn(pte) << PAGE_SHIFT));
91 +
92 + //show_pgtable(addr);
93 + //show_pgtable(__START_KERNEL_map + __pa(va));
94 }
95
96 static void __make_page_writable(void *va)
97 --
98 1.5.4.1
99