> Bisecting. See http://kerneltrap.org/node/11753.
OK, I bisected from 1 PM to 6 PM today. I ended up building 16 kernels which would have seemed like a LOT, except for how many I built on Saturday night and all day Sunday! I used my custom '.config', instead of the enormous Debian stock config, in order to save time. If I ever do bisecting again, I will cut a lot of unnecessary stuff out of my config so that the builds take even less time. Each build only takes me 5 minutes, luckily, because the machine with the problem has an AMD Athlon X2 4850e, 2.5 GHz, dual core CPU. After each 'git bisect <status>', I would run 'make-kpkg clean' and 'make oldconfig' before building with something like this: CONCURRENCY_LEVEL=3 make-kpkg --rootcmd=fakeroot \ --append-to-version=.bisect01 \ --revision=b01 kernel_image Then I would fix up GRUB's 'menu.lst' and reboot. Here is a summary of the process, some of which I posted on LKML: ================================================================= Iteration ID status --------- ---------- ------ 1 2.6.25 good 2 2.6.26-rc4 bad 3 10c993a6b5418cb1026775765ba4c70ffb70853d bad 4 334d094504c2fe1c44211ecb49146ae6bca8c321 bad 5 eddeb0e2d863e3941d8768e70cb50c6120e61fa0 bad 6 77ad386e596c6b0930cc2e09e3cce485e3ee7f72 bad 7 ede1389f8ab4f3a1343e567133fa9720a054a3aa bad 8 c048fdfe6178e082be918d4062c86d9764979112 bad 9 f73920cd63d316008738427a0df2caab6cc88ad7 bad 10 04aaa7ba096c707a8df337b29303f1a5a65f0462 good 11 8fa6878ffc6366f490e99a1ab31127fb599657c9 good 12 1180e01de50c0c7683c6648251f32957bc2d7850 good 13 1e934dda0c77c8ad13fdda02074f2cfcea118a56 bad 14 322850af8d93735f67b8ebf84bb1350639be3f34 good 15 3def3d6ddf43dbe20c00c3cbc38dfacc8586998f bad 16 700efc1b9f6afe34caae231b87d129ad8ffb559f good First commit causing failure: commit 3def3d6ddf43dbe20c00c3cbc38dfacc8586998f Author: Yinghai Lu <[EMAIL PROTECTED]> Date: Fri Feb 22 17:07:16 2008 -0800 x86: clean up e820_reserve_resources on 64-bit e820_resource_resources could use insert_resource instead of request_resource also move code_resource, data_resource, bss_resource, and crashk_res out of e820_reserve_resources. Signed-off-by: Yinghai Lu <[EMAIL PROTECTED]> Signed-off-by: Ingo Molnar <[EMAIL PROTECTED]> $ git diff 700efc1b9f6afe34caae231b87d129ad8ffb559f 3def3d6ddf43dbe20c00c3cbc38dfacc8586998f diff --git a/arch/x86/kernel/e820_64.c b/arch/x86/kernel/e820_64.c index a8694a3..8b914a8 100644 --- a/arch/x86/kernel/e820_64.c +++ b/arch/x86/kernel/e820_64.c @@ -229,8 +229,7 @@ unsigned long __init e820_end_of_ram(void) /* * Mark e820 reserved areas as busy for the resource manager. */ -void __init e820_reserve_resources(struct resource *code_resource, - struct resource *data_resource, struct resource *bss_resource) +void __init e820_reserve_resources(void) { int i; for (i = 0; i < e820.nr_map; i++) { @@ -245,21 +244,7 @@ void __init e820_reserve_resources(struct resource *code_resource, res->start = e820.map[i].addr; res->end = res->start + e820.map[i].size - 1; res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; - request_resource(&iomem_resource, res); - if (e820.map[i].type == E820_RAM) { - /* - * We don't know which RAM region contains kernel data, - * so we try it repeatedly and let the resource manager - * test it. - */ - request_resource(res, code_resource); - request_resource(res, data_resource); - request_resource(res, bss_resource); -#ifdef CONFIG_KEXEC - if (crashk_res.start != crashk_res.end) - request_resource(res, &crashk_res); -#endif - } + insert_resource(&iomem_resource, res); } } diff --git a/arch/x86/kernel/setup_64.c b/arch/x86/kernel/setup_64.c index 187f084..e3cb3ea 100644 --- a/arch/x86/kernel/setup_64.c +++ b/arch/x86/kernel/setup_64.c @@ -248,6 +248,7 @@ static void __init reserve_crashkernel(void) (unsigned long)(total_mem >> 20)); crashk_res.start = crash_base; crashk_res.end = crash_base + crash_size - 1; + insert_resource(&iomem_resource, &crashk_res); } } #else @@ -322,6 +323,11 @@ void __init setup_arch(char **cmdline_p) finish_e820_parsing(); + /* after parse_early_param, so could debug it */ + insert_resource(&iomem_resource, &code_resource); + insert_resource(&iomem_resource, &data_resource); + insert_resource(&iomem_resource, &bss_resource); + early_gart_iommu_check(); e820_register_active_regions(0, 0, -1UL); @@ -454,7 +460,7 @@ void __init setup_arch(char **cmdline_p) /* * We trust e820 completely. No explicit ROM probing in memory. */ - e820_reserve_resources(&code_resource, &data_resource, &bss_resource); + e820_reserve_resources(); e820_mark_nosave_regions(); /* request I/O space for devices used on all i[345]86 PCs */ diff --git a/include/asm-x86/e820_64.h b/include/asm-x86/e820_64.h index 9e06c6e..ef653a4 100644 --- a/include/asm-x86/e820_64.h +++ b/include/asm-x86/e820_64.h @@ -23,8 +23,7 @@ extern void update_memory_range(u64 start, u64 size, unsigned old_type, extern void setup_memory_region(void); extern void contig_e820_setup(void); extern unsigned long e820_end_of_ram(void); -extern void e820_reserve_resources(struct resource *code_resource, - struct resource *data_resource, struct resource *bss_resource); +extern void e820_reserve_resources(void); extern void e820_mark_nosave_regions(void); extern int e820_any_mapped(unsigned long start, unsigned long end, unsigned type); extern int e820_all_mapped(unsigned long start, unsigned long end, unsigned type); ================================================================= I'm hoping to get some suggestions on how to fix the problem from developers or other contributors on LKML. I do know that the 'arch/x86/kernel/setup_64.c' file is not the problem because the code that changed is in an #ifdef block depending on CONFIG_KEXEC, which is _not_ enabled in my custom '.config' (though it is in the Debian config). Maybe someone will be able to help me, now that I've been able to point at before/after commits which cause kernels to freeze on my ECS machine! Dave W. -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]