lkml.org 
[lkml]   [2007]   [Mar]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: 2.6.21-rc4-mm1
On Thu, 22 Mar 2007 07:23:06 -0500,
Larry Finger <larry.finger@lwfinger.net> wrote:

> Cornelia Huck wrote:
> > On Wed, 21 Mar 2007 23:39:17 -0800,
> > Andrew Morton <akpm@linux-foundation.org> wrote:
> >
> >> On Wed, 21 Mar 2007 15:22:25 -0500 Matt Mackall <mpm@selenic.com> wrote:
> >>
> >>> With the latest -mm, I'm now getting this:
> >>>
> >>> Mar 21 15:06:52 cinder kernel: ipw2200: Detected Intel PRO/Wireless
> >>> 2200BG Network Connection
> >>> Mar 21 15:06:52 cinder kernel: firmware_loading_store: unexpected
> >>> value (0)
> >>> Mar 21 15:06:52 cinder kernel: ipw2200: ipw2200-bss.fw
> >>> request_firmware failed:
> >>> Reason -2
> >>> Mar 21 15:06:52 cinder kernel: ipw2200: Unable to load firmware: -2
> >>> Mar 21 15:06:52 cinder kernel: ipw2200: failed to register network
> >>> device
> >> The firmware loading bug is caused by
> >> driver-core-handles-kobject_uevent-failure-while-device_add.patch
> >
> > Hm, this patch looks sane. It might be a good idea to enable
> > CONFIG_DEBUG_KOBJECT and find out why kobject_uevent() actually fails
> > in this case...
>
> Attached is the appropriate portion of /var/log/messages with Kobject debugging enabled.

> Mar 22 07:01:42 larrylap2 kernel: kobject 0000:01:00.0: registering. parent: firmware, set: devices
> Mar 22 07:01:42 larrylap2 kernel: kobject_uevent_env
> Mar 22 07:01:42 larrylap2 kernel: fill_kobj_path: path = '/class/firmware/0000:01:00.0'
> Mar 22 07:01:42 larrylap2 kernel: fill_kobj_path: path = '/devices/pci0000:00/0000:00:02.0/0000:01:00.0'
> Mar 22 07:01:42 larrylap2 kernel: kobject_uevent_env
> Mar 22 07:01:42 larrylap2 ntpd[3434]: frequency initialized -31.513 PPM from /var/lib/ntp/drift/ntp.drift
> Mar 22 07:01:43 larrylap2 kernel: fill_kobj_path: path = '/class/firmware/0000:01:00.0'
> Mar 22 07:01:43 larrylap2 kernel: fill_kobj_path: path = '/devices/pci0000:00/0000:00:02.0/0000:01:00.0'
> Mar 22 07:01:43 larrylap2 kernel: firmware_loading_store: unexpected value (0)
> Mar 22 07:01:43 larrylap2 kernel: kobject_uevent_env
> Mar 22 07:01:43 larrylap2 kernel: fill_kobj_path: path = '/class/firmware/0000:01:00.0'
> Mar 22 07:01:43 larrylap2 kernel: fill_kobj_path: path = '/devices/pci0000:00/0000:00:02.0/0000:01:00.0'
> Mar 22 07:01:43 larrylap2 kernel: kobject 0000:01:00.0: cleaning up

(Repeating several times)

This would indicate that dev_uevent had been called. But how could
kobject_uevent then return an error without moaning about an uevent()
error code? Maybe the following debug patch could shed some light on
this (all moaning is prefixed with kobject_uevent_env, so it should be
easy to spot)...

---
lib/kobject_uevent.c | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
--- linux-2.6.orig/lib/kobject_uevent.c
+++ linux-2.6/lib/kobject_uevent.c
@@ -85,11 +85,11 @@ int kobject_uevent_env(struct kobject *k
int retval = 0;
int j;

- pr_debug("%s\n", __FUNCTION__);
+ pr_debug("%s: %s\n", __FUNCTION__, kobject_name(kobj));

action_string = action_to_string(action);
if (!action_string) {
- pr_debug("kobject attempted to send uevent without action_string!\n");
+ pr_debug("%s: kobject attempted to send uevent without action_string!\n", __FUNCTION__);
return -EINVAL;
}

@@ -101,7 +101,7 @@ int kobject_uevent_env(struct kobject *k
} while (!top_kobj->kset && top_kobj->parent);
}
if (!top_kobj->kset) {
- pr_debug("kobject attempted to send uevent without kset!\n");
+ pr_debug("%s: kobject attempted to send uevent without kset!\n", __FUNCTION__);
return -EINVAL;
}

@@ -111,7 +111,7 @@ int kobject_uevent_env(struct kobject *k
/* skip the event, if the filter returns zero. */
if (uevent_ops && uevent_ops->filter)
if (!uevent_ops->filter(kset, kobj)) {
- pr_debug("kobject filter function caused the event to drop!\n");
+ pr_debug("%s: kobject filter function caused the event to drop!\n", __FUNCTION__);
return 0;
}

@@ -121,18 +121,20 @@ int kobject_uevent_env(struct kobject *k
else
subsystem = kobject_name(&kset->kobj);
if (!subsystem) {
- pr_debug("unset subsytem caused the event to drop!\n");
+ pr_debug("%s: unset subsytem caused the event to drop!\n", __FUNCTION__);
return 0;
}

/* environment index */
envp = kzalloc(NUM_ENVP * sizeof (char *), GFP_KERNEL);
- if (!envp)
+ if (!envp) {
+ pr_debug("%s: couldn't alloc envp\n", __FUNCTION__);
return -ENOMEM;
-
+ }
/* environment values */
buffer = kmalloc(BUFFER_SIZE, GFP_KERNEL);
if (!buffer) {
+ pr_debug("%s: couldn't alloc buffer\n", __FUNCTION__);
retval = -ENOMEM;
goto exit;
}
@@ -140,6 +142,7 @@ int kobject_uevent_env(struct kobject *k
/* complete object path */
devpath = kobject_get_path(kobj, GFP_KERNEL);
if (!devpath) {
+ pr_debug("%s: couldn't get kobject path\n", __FUNCTION__);
retval = -ENOENT;
goto exit;
}
@@ -221,6 +224,7 @@ exit:
kfree(devpath);
kfree(buffer);
kfree(envp);
+ pr_debug("%s: returning %d\n", __FUNCTION__, retval);
return retval;
}

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
\
 
 \ /
  Last update: 2007-03-22 18:13    [from the cache]
©2003-2014 Jasper Spaans. hosted at Digital Ocean