On Thu, Jun 27, 2002 at 12:52:30PM -0700, David Brownell wrote:
> This updates the doc and code to match what's been
> true since 2.4.0 (!) and keventd, removing some error
> checks that are now handled lower down as well as
> making a few messages less confusing ("kusbd" etc).
>
> Please merge to Linus' latest. I think it should
> also work against the 2.4 tree (with different "-p")
> and if so, it's worth applying there too.
>
> - Dave
> --- ./drivers/usb-dist/core/usb.c Mon Jun 3 10:18:29 2002
> +++ ./drivers/usb/core/usb.c Thu Jun 27 10:08:21 2002
> @@ -754,39 +754,24 @@
> /*
> * USB hotplugging invokes what /proc/sys/kernel/hotplug says
> * (normally /sbin/hotplug) when USB devices get added or removed.
> + * May not be called in_interrupt().
> *
> * This invokes a user mode policy agent, typically helping to load driver
> * or other modules, configure the device, and more. Drivers can provide
> * a MODULE_DEVICE_TABLE to help with module loading subtasks.
> *
> - * Some synchronization is important: removes can't start processing
> - * before the add-device processing completes, and vice versa. That keeps
> - * a stack of USB-related identifiers stable while they're in use. If we
> - * know that agents won't complete after they return (such as by forking
> - * a process that completes later), it's enough to just waitpid() for the
> - * agent -- as is currently done.
> - *
> - * The reason: we know we're called either from khubd (the typical case)
> - * or from root hub initialization (init, kapmd, modprobe, etc). In both
> - * cases, we know no other thread can recycle our address, since we must
> - * already have been serialized enough to prevent that.
> + * keventd task sequencing ensures that removes can't start processing
> + * before the add-device processing completes, and vice versa ... but only
> + * so far as user mode reporting goes. khubd can process disconnects
> + * for devices before the hotplug connect event gets reported, since there
> + * is no synchronization once keventd is given its job. This basically
> + * means usb hotplug agents need to verify any usbfs names they see.
> */
> static void call_policy (char *verb, struct usb_device *dev)
> {
> char *argv [3], **envp, *buf, *scratch;
> - int i = 0, value;
> + int i = 0;
>
> - if (!hotplug_path [0])
> - return;
> - if (in_interrupt ()) {
> - dbg ("In_interrupt");
> - return;
> - }
> - if (!current->fs->root) {
> - /* statically linked USB is initted rather early */
> - dbg ("call_policy %s, num %d -- no FS yet", verb, dev->devnum);
> - return;
> - }
Why take out these checks? Aren't they good to keep around?
> if (dev->devnum < 0) {
> dbg ("device already deleted ??");
> return;
> @@ -854,7 +839,7 @@
>
> /* a simple/common case: one config, one interface, one driver
> * with current altsetting being a reasonable setting.
> - * everything needs a smart agent and usbfs; or can rely on
> + * otherwise needs a smart agent and usbfs; or can rely on
> * device-specific binding policies.
> */
Hm, this still doesn't look any clearer :)
> envp [i++] = scratch;
> @@ -870,12 +855,10 @@
>
> /* NOTE: user mode daemons can call the agents too */
>
> - dbg ("kusbd: %s %s %d", argv [0], verb, dev->devnum);
> - value = call_usermodehelper (argv [0], argv, envp);
> + dbg ("%s %s %d", argv [0], verb, dev->devnum);
> + (void) call_usermodehelper (argv [0], argv, envp);
> kfree (buf);
> kfree (envp);
> - if (value != 0)
> - dbg ("kusbd policy returned 0x%x", value);
Why throw away the return value?
thanks,
greg k-h
-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel