diff options
Diffstat (limited to 'arch/x86')
-rw-r--r-- | arch/x86/mm/ioremap_32.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/arch/x86/mm/ioremap_32.c b/arch/x86/mm/ioremap_32.c index 4bcd5e065df..30855c44818 100644 --- a/arch/x86/mm/ioremap_32.c +++ b/arch/x86/mm/ioremap_32.c @@ -208,6 +208,17 @@ void iounmap(volatile void __iomem *addr) } EXPORT_SYMBOL(iounmap); + +int __initdata early_ioremap_debug; + +static int __init early_ioremap_debug_setup(char *str) +{ + early_ioremap_debug = 1; + + return 1; +} +__setup("early_ioremap_debug", early_ioremap_debug_setup); + static __initdata int after_paging_init; static __initdata unsigned long bm_pte[1024] __attribute__((aligned(PAGE_SIZE))); @@ -226,6 +237,9 @@ void __init early_ioremap_init(void) { unsigned long *pgd; + if (early_ioremap_debug) + printk("early_ioremap_init()\n"); + pgd = early_ioremap_pgd(fix_to_virt(FIX_BTMAP_BEGIN)); *pgd = __pa(bm_pte) | _PAGE_TABLE; memset(bm_pte, 0, sizeof(bm_pte)); @@ -236,6 +250,9 @@ void __init early_ioremap_clear(void) { unsigned long *pgd; + if (early_ioremap_debug) + printk("early_ioremap_clear()\n"); + pgd = early_ioremap_pgd(fix_to_virt(FIX_BTMAP_BEGIN)); *pgd = 0; __flush_tlb_all(); @@ -303,6 +320,11 @@ void __init *early_ioremap(unsigned long phys_addr, unsigned long size) WARN_ON(system_state != SYSTEM_BOOTING); nesting = early_ioremap_nested; + if (early_ioremap_debug) { + printk("early_ioremap(%08lx, %08lx) [%d] => ", + phys_addr, size, nesting); + dump_stack(); + } /* Don't allow wraparound or zero size */ last_addr = phys_addr + size - 1; @@ -343,6 +365,8 @@ void __init *early_ioremap(unsigned long phys_addr, unsigned long size) --idx; --nrpages; } + if (early_ioremap_debug) + printk(KERN_CONT "%08lx + %08lx\n", offset, fix_to_virt(idx0)); return (void*) (offset + fix_to_virt(idx0)); } @@ -358,6 +382,11 @@ void __init early_iounmap(void *addr, unsigned long size) nesting = --early_ioremap_nested; WARN_ON(nesting < 0); + if (early_ioremap_debug) { + printk("early_iounmap(%p, %08lx) [%d]\n", addr, size, nesting); + dump_stack(); + } + virt_addr = (unsigned long)addr; if (virt_addr < fix_to_virt(FIX_BTMAP_BEGIN)) { WARN_ON(1); |