Paul Jackson <[email protected]> wrote:
>
> ...
>
> The initial failure is in the file:
>
> arch/ia64/kernel/topology.c
>
> function:
>
> topology_init
>
> line:
>
> sysfs_cpus = kzalloc(sizeof(struct ia64_cpu) * NR_CPUS, GFP_KERNEL);
>
> With our large NR_CPUS of 1024, and the additional cost of
> the CONFIG_DEBUG_SPINLOCK* debug stuff, and the little bit of
> additional data added by this patch, that kzalloc() fails.
>
Oh. Maybe we should put a big fat printk in slab for that.
> I should stare at the code between this point of initial failure and
> the point that the house of cards finally collapsed and see if
> something should have squeaked sooner.
Probably a panic() in your topology_init().
Also the below patch should have been done ages ago.
> I suspect that the short term solution is to proceed without
> prejudice to the patch that triggered this:
>
> gregkh-driver-allow-sysfs-attribute-files-to-be-pollable.patch
Well yeah, except I find that patch to be independently malodorous ;)
> while I look at some way, if just a stop gap measure, to complain
> earlier in the boot, closer to the scene of the original crime,
> so that others hitting this won't waste more time.
See below.
> Perhaps failing that first kzalloc should cause a complaint,
> if not a panic. It would seem that the system is beyond repair
> if that kzalloc fails. And since the system hasn't even finished
> booting yet, and is for sure trying to boot some larger than tried
> before configuration, might just as well announce ones death boldly.
Yeah, it's dead.
From: Andrew Morton <[email protected]>
We presently ignore the return values from initcalls. But that can carry
useful debugging information. So print it out if it's non-zero.
Also make that warning message more friendly by printing the name of the
initcall function.
Signed-off-by: Andrew Morton <[email protected]>
---
init/main.c | 20 ++++++++++++++------
1 files changed, 14 insertions(+), 6 deletions(-)
diff -puN init/main.c~initcall-failure-reporting init/main.c
--- 25/init/main.c~initcall-failure-reporting Thu Mar 2 13:41:02 2006
+++ 25-akpm/init/main.c Thu Mar 2 13:50:53 2006
@@ -565,17 +565,23 @@ static void __init do_initcalls(void)
int count = preempt_count();
for (call = __initcall_start; call < __initcall_end; call++) {
- char *msg;
+ char *msg = NULL;
+ char msgbuf[40];
+ int result;
if (initcall_debug) {
printk(KERN_DEBUG "Calling initcall 0x%p", *call);
- print_fn_descriptor_symbol(": %s()", (unsigned long) *call);
+ print_fn_descriptor_symbol(": %s()",
+ (unsigned long) *call);
printk("\n");
}
- (*call)();
+ result = (*call)();
- msg = NULL;
+ if (result) {
+ sprintf(msgbuf, "error code %d", result);
+ msg = msgbuf;
+ }
if (preempt_count() != count) {
msg = "preemption imbalance";
preempt_count() = count;
@@ -585,8 +591,10 @@ static void __init do_initcalls(void)
local_irq_enable();
}
if (msg) {
- printk(KERN_WARNING "error in initcall at 0x%p: "
- "returned with %s\n", *call, msg);
+ printk(KERN_WARNING "initcall at 0x%p", *call);
+ print_fn_descriptor_symbol(": %s()",
+ (unsigned long) *call);
+ printk(": returned with %s\n", msg);
}
}
_
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]