--- linux-2.6.orig/mm/percpu.c 2011-11-16 09:38:58.000000000 +0800 +++ linux-2.6/mm/percpu.c 2011-11-16 10:05:36.804771014 +0800 @@ -987,6 +987,7 @@ phys_addr_t per_cpu_ptr_to_phys(void *ad unsigned long first_start, first_end; unsigned int cpu; + printk(KERN_INFO "per cpu addr %lx\n", addr); /* * The following test on first_start/end isn't strictly * necessary but will speed up lookups of addresses which @@ -1002,11 +1003,19 @@ phys_addr_t per_cpu_ptr_to_phys(void *ad if (addr >= start && addr < start + pcpu_unit_size) { in_first_chunk = true; + printk(KERN_INFO "addr is in first chunk\n"); + printk(KERN_INFO "cpu %d, %lx - %lx\n", + start, start + pcpu_unit_size); break; } } } + if (is_vmalloc_addr(addr)) + printk(KERN_INFO "addr is in vmalloc area\n"); + else + printk(KERN_INFO "addr is not in vmalloc area\n"); + if (in_first_chunk) { if (!is_vmalloc_addr(addr)) return __pa(addr);