usbfs_remove_device(udev); 
void usb_disconnect(struct usb_device **pdev){	struct usb_device	*udev = *pdev;	int			i;	if (!udev) {		pr_debug ("%s nodev\n", __FUNCTION__);		return;	}	/* mark the device as inactive, so any further urb submissions for	 * this device (and any of its children) will fail immediately.	 * this quiesces everyting except pending urbs.	 */	usb_set_device_state(udev, USB_STATE_NOTATTACHED);	/* lock the bus list on behalf of HCDs unregistering their root hubs */	if (!udev->parent) {		down(&usb_bus_list_lock);		usb_lock_device(udev);	} else		down(&udev->serialize);	dev_info (&udev->dev, "USB disconnect, address %d\n", udev->devnum);	/* Free up all the children before we remove this device */	for (i = 0; i < USB_MAXCHILDREN; i++) {		if (udev->children[i])			usb_disconnect(&udev->children[i]);	}	/* deallocate hcd/hardware state ... nuking all pending urbs and	 * cleaning up all state associated with the current configuration	 * so that the hardware is now fully quiesced.	 */	usb_disable_device(udev, 0);	usb_notify_remove_device(udev);	/* Free the device number, remove the /proc/bus/usb entry and	 * the sysfs attributes, and delete the parent's children[]	 * (or root_hub) pointer.	 */	dev_dbg (&udev->dev, "unregistering device\n");	release_address(udev);	usbfs_remove_device(udev);	usb_remove_sysfs_dev_files(udev);	/* Avoid races with recursively_mark_NOTATTACHED() */	spin_lock_irq(&device_state_lock);	*pdev = NULL;	spin_unlock_irq(&device_state_lock);	if (!udev->parent) {		usb_unlock_device(udev);		up(&usb_bus_list_lock);	} else		up(&udev->serialize);	device_unregister(&udev->dev);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/54a5c4cd2e4ec0b27c2c3731727f52591456086c/hub.c/clean/drivers/usb/core/hub.c