Magellan Linux

Annotation 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 - (hide annotations) (download)
Thu May 22 23:13:13 2008 UTC (16 years, 1 month 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 niro 606 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