Comment 18 for bug 152742

Revision history for this message
Bill Ellis (noncalamari) wrote :

Sorry... I guess I didn't explain that very well. :-/

What I'm seeing is that the high-CPU problem with udevd only happens when I plug in
the Blackberry when the "berry_charge" module is already loaded. The module seems
to work just fine the *first* time it loads (that is to say, when it auto-loads in response
to my plugging in the Blackberry).

To clarify, I'm not using "barry". I'm just using the berry_charge kernel module (on a
2.6.24.2 kernel).

BTW, I found that it was informative to turn on debugging for the module, which I did
by creating a file in "/etc/modprobe.d", containing this line:

  options berry_charge debug=1

With this in effect, the dmesg output shows that the berry_charge module keeps getting
called over and over, successfully sending the "magic" commands to the Blackberry each time.
The problem seems to be that udevd doesn't understand that it doesn't need to keep
trying to reinitialize the module. Again, udevd only seems to get in this mode when a Blackberry
is plugged in when the berry_charge module is already loaded.

From a quick look at the source code of the "berry_charge" module, I'd guess that this is because
the module doesn't finish its initialization like most drivers -- it actually returns a failure ("-ENODEV"),
presumably because it's not *really* a driver at all. Guessing that this doesn't phase udevd when
we're in the "auto-install module" code path, but exposes a bug when it's on the "reinitialize module"
code path.
(I may be talking through my hat on this last part, as I haven't looked at the udevd source...)

Best Regards,

Bill