Every little bit of code shrinkage helps ... :)
This removes the code supporting usb_device->hcpriv allocation/deallocation, and hcd_dev-dev_list, from usbcore and the HCDs.
Signed-off-by: David Brownell <[EMAIL PROTECTED]> --- epmax/drivers/usb/core/hcd.c 2004-11-27 23:29:53.000000000 -0800 +++ amd64/drivers/usb/core/hcd.c 2004-11-25 18:21:39.000000000 -0800 @@ -1018,40 +1018,6 @@ /*-------------------------------------------------------------------------*/ -/* called from khubd, or root hub init threads for hcd-private init */ -static int hcd_alloc_dev (struct usb_device *udev) -{ - struct hcd_dev *dev; - struct usb_hcd *hcd; - unsigned long flags; - - if (!udev || udev->hcpriv) - return -EINVAL; - if (!udev->bus || !udev->bus->hcpriv) - return -ENODEV; - hcd = udev->bus->hcpriv; - if (hcd->state == USB_STATE_QUIESCING) - return -ENOLINK; - - dev = (struct hcd_dev *) kmalloc (sizeof *dev, GFP_KERNEL); - if (dev == NULL) - return -ENOMEM; - memset (dev, 0, sizeof *dev); - - INIT_LIST_HEAD (&dev->dev_list); - INIT_LIST_HEAD (&dev->urb_list); - - spin_lock_irqsave (&hcd_data_lock, flags); - list_add (&dev->dev_list, &hcd->dev_list); - // refcount is implicit - udev->hcpriv = dev; - spin_unlock_irqrestore (&hcd_data_lock, flags); - - return 0; -} - -/*-------------------------------------------------------------------------*/ - static void urb_unlink (struct urb *urb) { unsigned long flags; @@ -1464,44 +1426,6 @@ /*-------------------------------------------------------------------------*/ -/* called by khubd, rmmod, apmd, or other thread for hcd-private cleanup. - * we're guaranteed that the device is fully quiesced. also, that each - * endpoint has been hcd_endpoint_disabled. - */ - -static int hcd_free_dev (struct usb_device *udev) -{ - struct hcd_dev *dev; - struct usb_hcd *hcd; - unsigned long flags; - - if (!udev || !udev->hcpriv) - return -EINVAL; - - if (!udev->bus || !udev->bus->hcpriv) - return -ENODEV; - - // should udev->devnum == -1 ?? - - dev = udev->hcpriv; - hcd = udev->bus->hcpriv; - - /* device driver problem with refcounts? */ - if (!list_empty (&dev->urb_list)) { - dev_dbg (hcd->self.controller, "free busy dev, %s devnum %d (bug!)\n", - hcd->self.bus_name, udev->devnum); - return -EINVAL; - } - - spin_lock_irqsave (&hcd_data_lock, flags); - list_del (&dev->dev_list); - udev->hcpriv = NULL; - spin_unlock_irqrestore (&hcd_data_lock, flags); - - kfree (dev); - return 0; -} - /* * usb_hcd_operations - adapts usb_bus framework to HCD framework (bus glue) * @@ -1510,11 +1434,9 @@ * bus glue for non-PCI system busses will need to use this. */ struct usb_operations usb_hcd_operations = { - .allocate = hcd_alloc_dev, .get_frame_number = hcd_get_frame_number, .submit_urb = hcd_submit_urb, .unlink_urb = hcd_unlink_urb, - .deallocate = hcd_free_dev, .buffer_alloc = hcd_buffer_alloc, .buffer_free = hcd_buffer_free, .disable = hcd_endpoint_disable, --- epmax/drivers/usb/core/hcd-pci.c 2004-11-27 23:06:08.000000000 -0800 +++ amd64/drivers/usb/core/hcd-pci.c 2004-11-23 15:58:24.000000000 -0800 @@ -195,8 +195,6 @@ hcd->self.hcpriv = (void *) hcd; init_timer (&hcd->rh_timer); - INIT_LIST_HEAD (&hcd->dev_list); - usb_register_bus (&hcd->self); if ((retval = driver->start (hcd)) < 0) { --- epmax/drivers/usb/core/usb.c 2004-11-27 23:25:45.000000000 -0800 +++ amd64/drivers/usb/core/usb.c 2004-11-27 21:40:33.000000000 -0800 @@ -646,8 +646,6 @@ udev = to_usb_device(dev); - if (udev->bus && udev->bus->op && udev->bus->op->deallocate) - udev->bus->op->deallocate(udev); usb_destroy_configuration(udev); usb_bus_put(udev->bus); kfree (udev); @@ -730,13 +729,6 @@ init_MUTEX(&dev->serialize); - if (dev->bus->op->allocate) - if (dev->bus->op->allocate(dev)) { - usb_bus_put(bus); - kfree(dev); - return NULL; - } - return dev; } --- epmax/drivers/usb/host/ohci-lh7a404.c 2004-11-27 23:06:09.000000000 -0800 +++ amd64/drivers/usb/host/ohci-lh7a404.c 2004-11-23 15:58:24.000000000 -0800 @@ -151,8 +151,6 @@ hcd->self.bus_name = "lh7a404"; hcd->product_desc = "LH7A404 OHCI"; - INIT_LIST_HEAD (&hcd->dev_list); - usb_register_bus (&hcd->self); if ((retval = driver->start (hcd)) < 0) --- epmax/drivers/usb/host/ohci-omap.c 2004-11-27 23:06:09.000000000 -0800 +++ amd64/drivers/usb/host/ohci-omap.c 2004-11-24 14:11:42.000000000 -0800 @@ -335,7 +335,6 @@ hcd->self.bus_name = pdev->dev.bus_id; hcd->product_desc = "OMAP OHCI"; - INIT_LIST_HEAD (&hcd->dev_list); usb_register_bus (&hcd->self); if ((retval = driver->start (hcd)) < 0) --- epmax/drivers/usb/host/ohci-pxa27x.c 2004-11-27 23:06:09.000000000 -0800 +++ amd64/drivers/usb/host/ohci-pxa27x.c 2004-11-23 15:58:24.000000000 -0800 @@ -249,8 +249,6 @@ hcd->self.bus_name = "pxa27x"; hcd->product_desc = "PXA27x OHCI"; - INIT_LIST_HEAD (&hcd->dev_list); - usb_register_bus (&hcd->self); if ((retval = driver->start (hcd)) < 0) { --- epmax/drivers/usb/host/ohci-sa1111.c 2004-11-27 23:06:09.000000000 -0800 +++ amd64/drivers/usb/host/ohci-sa1111.c 2004-11-23 15:58:24.000000000 -0800 @@ -199,8 +199,6 @@ hcd->self.bus_name = "sa1111"; hcd->product_desc = "SA-1111 OHCI"; - INIT_LIST_HEAD (&hcd->dev_list); - usb_register_bus (&hcd->self); if ((retval = driver->start (hcd)) < 0)