On Wed, Oct 31, 2012 at 03:54:49PM -0400, Alan Stern wrote: > + ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), > + USB_REQ_SET_CONFIGURATION, 0, configuration, 0, > + NULL, 0, USB_CTRL_SET_TIMEOUT); > + if (ret < 0 && cp) { > + /* > + * All the old state is gone, so what else can we do? > + * The device is probably useless now anyway. > + */ > + for (i = 0; i < nintf; ++i) { > + usb_disable_interface(dev, cp->interface[i], true); usb_disable_interface() will set the udev->ep_out and udev->ep_in array entries to NULL. The bandwidth functions need those arrays to figure out which entries to disable. Is there a particular reason why you wanted to call usb_disable_interface() before calling usb_hcd_alloc_bandwidth()? And I do agree that this patch is much cleaner than my patch. Sarah Sharp > + put_device(&cp->interface[i]->dev); > + cp->interface[i] = NULL; > + } > + cp = NULL; > + usb_hcd_alloc_bandwidth(dev, NULL, NULL, NULL); > + } > + > + dev->actconfig = cp; > + mutex_unlock(hcd->bandwidth_mutex); > + > + if (!cp) { > + usb_set_device_state(dev, USB_STATE_ADDRESS); > + > + /* Leave LPM disabled while the device is unconfigured. */ > + usb_autosuspend_device(dev); > + return ret; > + } > + usb_set_device_state(dev, USB_STATE_CONFIGURED); > + > if (cp->string == NULL && > !(dev->quirks & USB_QUIRK_CONFIG_INTF_STRINGS)) > cp->string = usb_cache_string(dev, cp->desc.iConfiguration); > -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html