From patchwork Wed Mar 3 22:24:20 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: 2.6.33 dies on modprobe X-Patchwork-Submitter: Andrew Morton X-Patchwork-Id: 46877 X-Patchwork-Delegate: davem@davemloft.net Message-Id: <20100303142420.accf985e.akpm@linux-foundation.org> To: M G Berberich Cc: =?ISO-8859-1?Q?Am=E9rico?= Wang , linux-kernel@vger.kernel.org, Linux Kernel Network Developers Date: Wed, 3 Mar 2010 14:24:20 -0800 From: Andrew Morton List-Id: On Wed, 3 Mar 2010 23:16:02 +0100 M G Berberich wrote: > Hello, > > Am Dienstag, den 02. M__rz schrieb Andrew Morton: > > > It could be that some kobject on that list has become invalid (memory > > was freed, module was unloaded, etc) and later code stumbled across the > > now-invalid object on that list and then crashed. > > > > What we can do to find this is to add a diagnostic each time an object > > is registered, and a diagnostic each time kset_find_obj() looks at the > > objects. Then we'll see which kobject caused the crash, then we can > > look back and see where that kobject was registered from. > > [...] > > > This will generate a lot of output and we don't want to lose any of it. > > I'd suggest setting up netconsole so all the output can be reliably > > saved: Documentation/networking/netconsole.txt > > I have a serial connection to a netbook. Log attached. drat, my patch didn't work. Can you try this one please? --- a/lib/kobject.c~a +++ a/lib/kobject.c @@ -126,6 +126,8 @@ static void kobj_kset_join(struct kobjec kset_get(kobj->kset); spin_lock(&kobj->kset->list_lock); + printk("kobj_kset_join:%p\n", kobj); + dump_stack(); list_add_tail(&kobj->entry, &kobj->kset->list); spin_unlock(&kobj->kset->list_lock); } @@ -751,9 +753,12 @@ struct kobject *kset_find_obj(struct kse spin_lock(&kset->list_lock); list_for_each_entry(k, &kset->list, entry) { - if (kobject_name(k) && !strcmp(kobject_name(k), name)) { - ret = kobject_get(k); - break; + if (kobject_name(k)) { + printk("kset_find_obj:%p\n", k); + if (!strcmp(kobject_name(k), name)) { + ret = kobject_get(k); + break; + } } } spin_unlock(&kset->list_lock);