diff options
| -rw-r--r-- | drivers/usb/core/buffer.c | 4 | ||||
| -rw-r--r-- | drivers/usb/core/hcd.c | 67 | ||||
| -rw-r--r-- | drivers/usb/core/hcd.h | 13 | ||||
| -rw-r--r-- | drivers/usb/core/usb.c | 5 | ||||
| -rw-r--r-- | drivers/usb/gadget/dummy_hcd.c | 8 | ||||
| -rw-r--r-- | drivers/usb/host/ehci-dbg.c | 6 | ||||
| -rw-r--r-- | drivers/usb/host/ohci-dbg.c | 6 | ||||
| -rw-r--r-- | drivers/usb/mon/mon_main.c | 6 | ||||
| -rw-r--r-- | include/linux/usb.h | 3 |
9 files changed, 44 insertions, 74 deletions
diff --git a/drivers/usb/core/buffer.c b/drivers/usb/core/buffer.c index f4f4ef0f377a..840442a25b61 100644 --- a/drivers/usb/core/buffer.c +++ b/drivers/usb/core/buffer.c | |||
| @@ -104,7 +104,7 @@ void *hcd_buffer_alloc ( | |||
| 104 | dma_addr_t *dma | 104 | dma_addr_t *dma |
| 105 | ) | 105 | ) |
| 106 | { | 106 | { |
| 107 | struct usb_hcd *hcd = bus->hcpriv; | 107 | struct usb_hcd *hcd = bus_to_hcd(bus); |
| 108 | int i; | 108 | int i; |
| 109 | 109 | ||
| 110 | /* some USB hosts just use PIO */ | 110 | /* some USB hosts just use PIO */ |
| @@ -127,7 +127,7 @@ void hcd_buffer_free ( | |||
| 127 | dma_addr_t dma | 127 | dma_addr_t dma |
| 128 | ) | 128 | ) |
| 129 | { | 129 | { |
| 130 | struct usb_hcd *hcd = bus->hcpriv; | 130 | struct usb_hcd *hcd = bus_to_hcd(bus); |
| 131 | int i; | 131 | int i; |
| 132 | 132 | ||
| 133 | if (!addr) | 133 | if (!addr) |
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c index 0cc14206920a..9dfc812de034 100644 --- a/drivers/usb/core/hcd.c +++ b/drivers/usb/core/hcd.c | |||
| @@ -664,31 +664,6 @@ static int usb_rh_urb_dequeue (struct usb_hcd *hcd, struct urb *urb) | |||
| 664 | 664 | ||
| 665 | /*-------------------------------------------------------------------------*/ | 665 | /*-------------------------------------------------------------------------*/ |
| 666 | 666 | ||
| 667 | /* exported only within usbcore */ | ||
| 668 | struct usb_bus *usb_bus_get(struct usb_bus *bus) | ||
| 669 | { | ||
| 670 | if (bus) | ||
| 671 | kref_get(&bus->kref); | ||
| 672 | return bus; | ||
| 673 | } | ||
| 674 | |||
| 675 | static void usb_host_release(struct kref *kref) | ||
| 676 | { | ||
| 677 | struct usb_bus *bus = container_of(kref, struct usb_bus, kref); | ||
| 678 | |||
| 679 | if (bus->release) | ||
| 680 | bus->release(bus); | ||
| 681 | } | ||
| 682 | |||
| 683 | /* exported only within usbcore */ | ||
| 684 | void usb_bus_put(struct usb_bus *bus) | ||
| 685 | { | ||
| 686 | if (bus) | ||
| 687 | kref_put(&bus->kref, usb_host_release); | ||
| 688 | } | ||
| 689 | |||
| 690 | /*-------------------------------------------------------------------------*/ | ||
| 691 | |||
| 692 | static struct class *usb_host_class; | 667 | static struct class *usb_host_class; |
| 693 | 668 | ||
| 694 | int usb_host_init(void) | 669 | int usb_host_init(void) |
| @@ -720,15 +695,12 @@ static void usb_bus_init (struct usb_bus *bus) | |||
| 720 | bus->devnum_next = 1; | 695 | bus->devnum_next = 1; |
| 721 | 696 | ||
| 722 | bus->root_hub = NULL; | 697 | bus->root_hub = NULL; |
| 723 | bus->hcpriv = NULL; | ||
| 724 | bus->busnum = -1; | 698 | bus->busnum = -1; |
| 725 | bus->bandwidth_allocated = 0; | 699 | bus->bandwidth_allocated = 0; |
| 726 | bus->bandwidth_int_reqs = 0; | 700 | bus->bandwidth_int_reqs = 0; |
| 727 | bus->bandwidth_isoc_reqs = 0; | 701 | bus->bandwidth_isoc_reqs = 0; |
| 728 | 702 | ||
| 729 | INIT_LIST_HEAD (&bus->bus_list); | 703 | INIT_LIST_HEAD (&bus->bus_list); |
| 730 | |||
| 731 | kref_init(&bus->kref); | ||
| 732 | } | 704 | } |
| 733 | 705 | ||
| 734 | /*-------------------------------------------------------------------------*/ | 706 | /*-------------------------------------------------------------------------*/ |
| @@ -1081,7 +1053,7 @@ static void urb_unlink (struct urb *urb) | |||
| 1081 | int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags) | 1053 | int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags) |
| 1082 | { | 1054 | { |
| 1083 | int status; | 1055 | int status; |
| 1084 | struct usb_hcd *hcd = urb->dev->bus->hcpriv; | 1056 | struct usb_hcd *hcd = bus_to_hcd(urb->dev->bus); |
| 1085 | struct usb_host_endpoint *ep; | 1057 | struct usb_host_endpoint *ep; |
| 1086 | unsigned long flags; | 1058 | unsigned long flags; |
| 1087 | 1059 | ||
| @@ -1189,7 +1161,8 @@ done: | |||
| 1189 | /* called in any context */ | 1161 | /* called in any context */ |
| 1190 | int usb_hcd_get_frame_number (struct usb_device *udev) | 1162 | int usb_hcd_get_frame_number (struct usb_device *udev) |
| 1191 | { | 1163 | { |
| 1192 | struct usb_hcd *hcd = (struct usb_hcd *)udev->bus->hcpriv; | 1164 | struct usb_hcd *hcd = bus_to_hcd(udev->bus); |
| 1165 | |||
| 1193 | if (!HC_IS_RUNNING (hcd->state)) | 1166 | if (!HC_IS_RUNNING (hcd->state)) |
| 1194 | return -ESHUTDOWN; | 1167 | return -ESHUTDOWN; |
| 1195 | return hcd->driver->get_frame_number (hcd); | 1168 | return hcd->driver->get_frame_number (hcd); |
| @@ -1262,7 +1235,7 @@ int usb_hcd_unlink_urb (struct urb *urb, int status) | |||
| 1262 | spin_lock (&hcd_data_lock); | 1235 | spin_lock (&hcd_data_lock); |
| 1263 | 1236 | ||
| 1264 | sys = &urb->dev->dev; | 1237 | sys = &urb->dev->dev; |
| 1265 | hcd = urb->dev->bus->hcpriv; | 1238 | hcd = bus_to_hcd(urb->dev->bus); |
| 1266 | if (hcd == NULL) { | 1239 | if (hcd == NULL) { |
| 1267 | retval = -ENODEV; | 1240 | retval = -ENODEV; |
| 1268 | goto done; | 1241 | goto done; |
| @@ -1333,7 +1306,7 @@ void usb_hcd_endpoint_disable (struct usb_device *udev, | |||
| 1333 | struct usb_hcd *hcd; | 1306 | struct usb_hcd *hcd; |
| 1334 | struct urb *urb; | 1307 | struct urb *urb; |
| 1335 | 1308 | ||
| 1336 | hcd = udev->bus->hcpriv; | 1309 | hcd = bus_to_hcd(udev->bus); |
| 1337 | 1310 | ||
| 1338 | WARN_ON (!HC_IS_RUNNING (hcd->state) && hcd->state != HC_STATE_HALT && | 1311 | WARN_ON (!HC_IS_RUNNING (hcd->state) && hcd->state != HC_STATE_HALT && |
| 1339 | udev->state != USB_STATE_NOTATTACHED); | 1312 | udev->state != USB_STATE_NOTATTACHED); |
| @@ -1673,14 +1646,6 @@ EXPORT_SYMBOL_GPL (usb_hc_died); | |||
| 1673 | 1646 | ||
| 1674 | /*-------------------------------------------------------------------------*/ | 1647 | /*-------------------------------------------------------------------------*/ |
| 1675 | 1648 | ||
| 1676 | static void hcd_release (struct usb_bus *bus) | ||
| 1677 | { | ||
| 1678 | struct usb_hcd *hcd; | ||
| 1679 | |||
| 1680 | hcd = container_of(bus, struct usb_hcd, self); | ||
| 1681 | kfree(hcd); | ||
| 1682 | } | ||
| 1683 | |||
| 1684 | /** | 1649 | /** |
| 1685 | * usb_create_hcd - create and initialize an HCD structure | 1650 | * usb_create_hcd - create and initialize an HCD structure |
| 1686 | * @driver: HC driver that will use this hcd | 1651 | * @driver: HC driver that will use this hcd |
| @@ -1705,10 +1670,9 @@ struct usb_hcd *usb_create_hcd (const struct hc_driver *driver, | |||
| 1705 | return NULL; | 1670 | return NULL; |
| 1706 | } | 1671 | } |
| 1707 | dev_set_drvdata(dev, hcd); | 1672 | dev_set_drvdata(dev, hcd); |
| 1673 | kref_init(&hcd->kref); | ||
| 1708 | 1674 | ||
| 1709 | usb_bus_init(&hcd->self); | 1675 | usb_bus_init(&hcd->self); |
| 1710 | hcd->self.hcpriv = hcd; | ||
| 1711 | hcd->self.release = &hcd_release; | ||
| 1712 | hcd->self.controller = dev; | 1676 | hcd->self.controller = dev; |
| 1713 | hcd->self.bus_name = bus_name; | 1677 | hcd->self.bus_name = bus_name; |
| 1714 | hcd->self.uses_dma = (dev->dma_mask != NULL); | 1678 | hcd->self.uses_dma = (dev->dma_mask != NULL); |
| @@ -1725,10 +1689,25 @@ struct usb_hcd *usb_create_hcd (const struct hc_driver *driver, | |||
| 1725 | } | 1689 | } |
| 1726 | EXPORT_SYMBOL (usb_create_hcd); | 1690 | EXPORT_SYMBOL (usb_create_hcd); |
| 1727 | 1691 | ||
| 1692 | static void hcd_release (struct kref *kref) | ||
| 1693 | { | ||
| 1694 | struct usb_hcd *hcd = container_of (kref, struct usb_hcd, kref); | ||
| 1695 | |||
| 1696 | kfree(hcd); | ||
| 1697 | } | ||
| 1698 | |||
| 1699 | struct usb_hcd *usb_get_hcd (struct usb_hcd *hcd) | ||
| 1700 | { | ||
| 1701 | if (hcd) | ||
| 1702 | kref_get (&hcd->kref); | ||
| 1703 | return hcd; | ||
| 1704 | } | ||
| 1705 | EXPORT_SYMBOL (usb_get_hcd); | ||
| 1706 | |||
| 1728 | void usb_put_hcd (struct usb_hcd *hcd) | 1707 | void usb_put_hcd (struct usb_hcd *hcd) |
| 1729 | { | 1708 | { |
| 1730 | dev_set_drvdata(hcd->self.controller, NULL); | 1709 | if (hcd) |
| 1731 | usb_bus_put(&hcd->self); | 1710 | kref_put (&hcd->kref, hcd_release); |
| 1732 | } | 1711 | } |
| 1733 | EXPORT_SYMBOL (usb_put_hcd); | 1712 | EXPORT_SYMBOL (usb_put_hcd); |
| 1734 | 1713 | ||
diff --git a/drivers/usb/core/hcd.h b/drivers/usb/core/hcd.h index 83e229914797..7a2bcba2ae61 100644 --- a/drivers/usb/core/hcd.h +++ b/drivers/usb/core/hcd.h | |||
| @@ -55,12 +55,13 @@ | |||
| 55 | 55 | ||
| 56 | /*-------------------------------------------------------------------------*/ | 56 | /*-------------------------------------------------------------------------*/ |
| 57 | 57 | ||
| 58 | struct usb_hcd { /* usb_bus.hcpriv points to this */ | 58 | struct usb_hcd { |
| 59 | 59 | ||
| 60 | /* | 60 | /* |
| 61 | * housekeeping | 61 | * housekeeping |
| 62 | */ | 62 | */ |
| 63 | struct usb_bus self; /* hcd is-a bus */ | 63 | struct usb_bus self; /* hcd is-a bus */ |
| 64 | struct kref kref; /* reference counter */ | ||
| 64 | 65 | ||
| 65 | const char *product_desc; /* product/vendor string */ | 66 | const char *product_desc; /* product/vendor string */ |
| 66 | char irq_descr[24]; /* driver + bus # */ | 67 | char irq_descr[24]; /* driver + bus # */ |
| @@ -129,8 +130,10 @@ static inline struct usb_bus *hcd_to_bus (struct usb_hcd *hcd) | |||
| 129 | return &hcd->self; | 130 | return &hcd->self; |
| 130 | } | 131 | } |
| 131 | 132 | ||
| 132 | 133 | static inline struct usb_hcd *bus_to_hcd (struct usb_bus *bus) | |
| 133 | // urb.hcpriv is really hardware-specific | 134 | { |
| 135 | return container_of(bus, struct usb_hcd, self); | ||
| 136 | } | ||
| 134 | 137 | ||
| 135 | struct hcd_timeout { /* timeouts we allocate */ | 138 | struct hcd_timeout { /* timeouts we allocate */ |
| 136 | struct list_head timeout_list; | 139 | struct list_head timeout_list; |
| @@ -210,6 +213,7 @@ extern int usb_hcd_get_frame_number (struct usb_device *udev); | |||
| 210 | 213 | ||
| 211 | extern struct usb_hcd *usb_create_hcd (const struct hc_driver *driver, | 214 | extern struct usb_hcd *usb_create_hcd (const struct hc_driver *driver, |
| 212 | struct device *dev, char *bus_name); | 215 | struct device *dev, char *bus_name); |
| 216 | extern struct usb_hcd *usb_get_hcd (struct usb_hcd *hcd); | ||
| 213 | extern void usb_put_hcd (struct usb_hcd *hcd); | 217 | extern void usb_put_hcd (struct usb_hcd *hcd); |
| 214 | extern int usb_add_hcd(struct usb_hcd *hcd, | 218 | extern int usb_add_hcd(struct usb_hcd *hcd, |
| 215 | unsigned int irqnum, unsigned long irqflags); | 219 | unsigned int irqnum, unsigned long irqflags); |
| @@ -356,9 +360,6 @@ extern struct list_head usb_bus_list; | |||
| 356 | extern struct mutex usb_bus_list_lock; | 360 | extern struct mutex usb_bus_list_lock; |
| 357 | extern wait_queue_head_t usb_kill_urb_queue; | 361 | extern wait_queue_head_t usb_kill_urb_queue; |
| 358 | 362 | ||
| 359 | extern struct usb_bus *usb_bus_get (struct usb_bus *bus); | ||
| 360 | extern void usb_bus_put (struct usb_bus *bus); | ||
| 361 | |||
| 362 | extern void usb_enable_root_hub_irq (struct usb_bus *bus); | 363 | extern void usb_enable_root_hub_irq (struct usb_bus *bus); |
| 363 | 364 | ||
| 364 | extern int usb_find_interface_driver (struct usb_device *dev, | 365 | extern int usb_find_interface_driver (struct usb_device *dev, |
diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c index 7ab9d29215f8..b0c0a993338f 100644 --- a/drivers/usb/core/usb.c +++ b/drivers/usb/core/usb.c | |||
| @@ -169,7 +169,7 @@ static void usb_release_dev(struct device *dev) | |||
| 169 | udev = to_usb_device(dev); | 169 | udev = to_usb_device(dev); |
| 170 | 170 | ||
| 171 | usb_destroy_configuration(udev); | 171 | usb_destroy_configuration(udev); |
| 172 | usb_bus_put(udev->bus); | 172 | usb_put_hcd(bus_to_hcd(udev->bus)); |
| 173 | kfree(udev->product); | 173 | kfree(udev->product); |
| 174 | kfree(udev->manufacturer); | 174 | kfree(udev->manufacturer); |
| 175 | kfree(udev->serial); | 175 | kfree(udev->serial); |
| @@ -197,8 +197,7 @@ usb_alloc_dev(struct usb_device *parent, struct usb_bus *bus, unsigned port1) | |||
| 197 | if (!dev) | 197 | if (!dev) |
| 198 | return NULL; | 198 | return NULL; |
| 199 | 199 | ||
| 200 | bus = usb_bus_get(bus); | 200 | if (!usb_get_hcd(bus_to_hcd(bus))) { |
| 201 | if (!bus) { | ||
| 202 | kfree(dev); | 201 | kfree(dev); |
| 203 | return NULL; | 202 | return NULL; |
| 204 | } | 203 | } |
diff --git a/drivers/usb/gadget/dummy_hcd.c b/drivers/usb/gadget/dummy_hcd.c index 7d1c22c34957..fdab97a27c08 100644 --- a/drivers/usb/gadget/dummy_hcd.c +++ b/drivers/usb/gadget/dummy_hcd.c | |||
| @@ -889,11 +889,9 @@ EXPORT_SYMBOL (net2280_set_fifo_mode); | |||
| 889 | static void | 889 | static void |
| 890 | dummy_gadget_release (struct device *dev) | 890 | dummy_gadget_release (struct device *dev) |
| 891 | { | 891 | { |
| 892 | #if 0 /* usb_bus_put isn't EXPORTed! */ | ||
| 893 | struct dummy *dum = gadget_dev_to_dummy (dev); | 892 | struct dummy *dum = gadget_dev_to_dummy (dev); |
| 894 | 893 | ||
| 895 | usb_bus_put (&dummy_to_hcd (dum)->self); | 894 | usb_put_hcd (dummy_to_hcd (dum)); |
| 896 | #endif | ||
| 897 | } | 895 | } |
| 898 | 896 | ||
| 899 | static int dummy_udc_probe (struct platform_device *pdev) | 897 | static int dummy_udc_probe (struct platform_device *pdev) |
| @@ -915,9 +913,7 @@ static int dummy_udc_probe (struct platform_device *pdev) | |||
| 915 | if (rc < 0) | 913 | if (rc < 0) |
| 916 | return rc; | 914 | return rc; |
| 917 | 915 | ||
| 918 | #if 0 /* usb_bus_get isn't EXPORTed! */ | 916 | usb_get_hcd (dummy_to_hcd (dum)); |
| 919 | usb_bus_get (&dummy_to_hcd (dum)->self); | ||
| 920 | #endif | ||
| 921 | 917 | ||
| 922 | platform_set_drvdata (pdev, dum); | 918 | platform_set_drvdata (pdev, dum); |
| 923 | device_create_file (&dum->gadget.dev, &dev_attr_function); | 919 | device_create_file (&dum->gadget.dev, &dev_attr_function); |
diff --git a/drivers/usb/host/ehci-dbg.c b/drivers/usb/host/ehci-dbg.c index 65ac9fef3a7c..215ce6d06394 100644 --- a/drivers/usb/host/ehci-dbg.c +++ b/drivers/usb/host/ehci-dbg.c | |||
| @@ -451,7 +451,7 @@ show_async (struct class_device *class_dev, char *buf) | |||
| 451 | *buf = 0; | 451 | *buf = 0; |
| 452 | 452 | ||
| 453 | bus = class_get_devdata(class_dev); | 453 | bus = class_get_devdata(class_dev); |
| 454 | hcd = bus->hcpriv; | 454 | hcd = bus_to_hcd(bus); |
| 455 | ehci = hcd_to_ehci (hcd); | 455 | ehci = hcd_to_ehci (hcd); |
| 456 | next = buf; | 456 | next = buf; |
| 457 | size = PAGE_SIZE; | 457 | size = PAGE_SIZE; |
| @@ -497,7 +497,7 @@ show_periodic (struct class_device *class_dev, char *buf) | |||
| 497 | seen_count = 0; | 497 | seen_count = 0; |
| 498 | 498 | ||
| 499 | bus = class_get_devdata(class_dev); | 499 | bus = class_get_devdata(class_dev); |
| 500 | hcd = bus->hcpriv; | 500 | hcd = bus_to_hcd(bus); |
| 501 | ehci = hcd_to_ehci (hcd); | 501 | ehci = hcd_to_ehci (hcd); |
| 502 | next = buf; | 502 | next = buf; |
| 503 | size = PAGE_SIZE; | 503 | size = PAGE_SIZE; |
| @@ -634,7 +634,7 @@ show_registers (struct class_device *class_dev, char *buf) | |||
| 634 | static char label [] = ""; | 634 | static char label [] = ""; |
| 635 | 635 | ||
| 636 | bus = class_get_devdata(class_dev); | 636 | bus = class_get_devdata(class_dev); |
| 637 | hcd = bus->hcpriv; | 637 | hcd = bus_to_hcd(bus); |
| 638 | ehci = hcd_to_ehci (hcd); | 638 | ehci = hcd_to_ehci (hcd); |
| 639 | next = buf; | 639 | next = buf; |
| 640 | size = PAGE_SIZE; | 640 | size = PAGE_SIZE; |
diff --git a/drivers/usb/host/ohci-dbg.c b/drivers/usb/host/ohci-dbg.c index da52609a9290..534d07dcb824 100644 --- a/drivers/usb/host/ohci-dbg.c +++ b/drivers/usb/host/ohci-dbg.c | |||
| @@ -477,7 +477,7 @@ show_async (struct class_device *class_dev, char *buf) | |||
| 477 | unsigned long flags; | 477 | unsigned long flags; |
| 478 | 478 | ||
| 479 | bus = class_get_devdata(class_dev); | 479 | bus = class_get_devdata(class_dev); |
| 480 | hcd = bus->hcpriv; | 480 | hcd = bus_to_hcd(bus); |
| 481 | ohci = hcd_to_ohci(hcd); | 481 | ohci = hcd_to_ohci(hcd); |
| 482 | 482 | ||
| 483 | /* display control and bulk lists together, for simplicity */ | 483 | /* display control and bulk lists together, for simplicity */ |
| @@ -510,7 +510,7 @@ show_periodic (struct class_device *class_dev, char *buf) | |||
| 510 | seen_count = 0; | 510 | seen_count = 0; |
| 511 | 511 | ||
| 512 | bus = class_get_devdata(class_dev); | 512 | bus = class_get_devdata(class_dev); |
| 513 | hcd = bus->hcpriv; | 513 | hcd = bus_to_hcd(bus); |
| 514 | ohci = hcd_to_ohci(hcd); | 514 | ohci = hcd_to_ohci(hcd); |
| 515 | next = buf; | 515 | next = buf; |
| 516 | size = PAGE_SIZE; | 516 | size = PAGE_SIZE; |
| @@ -607,7 +607,7 @@ show_registers (struct class_device *class_dev, char *buf) | |||
| 607 | u32 rdata; | 607 | u32 rdata; |
| 608 | 608 | ||
| 609 | bus = class_get_devdata(class_dev); | 609 | bus = class_get_devdata(class_dev); |
| 610 | hcd = bus->hcpriv; | 610 | hcd = bus_to_hcd(bus); |
| 611 | ohci = hcd_to_ohci(hcd); | 611 | ohci = hcd_to_ohci(hcd); |
| 612 | regs = ohci->regs; | 612 | regs = ohci->regs; |
| 613 | next = buf; | 613 | next = buf; |
diff --git a/drivers/usb/mon/mon_main.c b/drivers/usb/mon/mon_main.c index 275a66f83058..e0ed36cdfd8b 100644 --- a/drivers/usb/mon/mon_main.c +++ b/drivers/usb/mon/mon_main.c | |||
| @@ -265,7 +265,6 @@ static void mon_dissolve(struct mon_bus *mbus, struct usb_bus *ubus) | |||
| 265 | ubus->mon_bus = NULL; | 265 | ubus->mon_bus = NULL; |
| 266 | mbus->u_bus = NULL; | 266 | mbus->u_bus = NULL; |
| 267 | mb(); | 267 | mb(); |
| 268 | // usb_bus_put(ubus); | ||
| 269 | } | 268 | } |
| 270 | 269 | ||
| 271 | /* | 270 | /* |
| @@ -297,10 +296,9 @@ static void mon_bus_init(struct dentry *mondir, struct usb_bus *ubus) | |||
| 297 | INIT_LIST_HEAD(&mbus->r_list); | 296 | INIT_LIST_HEAD(&mbus->r_list); |
| 298 | 297 | ||
| 299 | /* | 298 | /* |
| 300 | * This usb_bus_get here is superfluous, because we receive | 299 | * We don't need to take a reference to ubus, because we receive |
| 301 | * a notification if usb_bus is about to be removed. | 300 | * a notification if the bus is about to be removed. |
| 302 | */ | 301 | */ |
| 303 | // usb_bus_get(ubus); | ||
| 304 | mbus->u_bus = ubus; | 302 | mbus->u_bus = ubus; |
| 305 | ubus->mon_bus = mbus; | 303 | ubus->mon_bus = mbus; |
| 306 | 304 | ||
diff --git a/include/linux/usb.h b/include/linux/usb.h index 09661759621f..c66303285a45 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
| @@ -280,7 +280,6 @@ struct usb_bus { | |||
| 280 | struct usb_devmap devmap; /* device address allocation map */ | 280 | struct usb_devmap devmap; /* device address allocation map */ |
| 281 | struct usb_device *root_hub; /* Root hub */ | 281 | struct usb_device *root_hub; /* Root hub */ |
| 282 | struct list_head bus_list; /* list of busses */ | 282 | struct list_head bus_list; /* list of busses */ |
| 283 | void *hcpriv; /* Host Controller private data */ | ||
| 284 | 283 | ||
| 285 | int bandwidth_allocated; /* on this bus: how much of the time | 284 | int bandwidth_allocated; /* on this bus: how much of the time |
| 286 | * reserved for periodic (intr/iso) | 285 | * reserved for periodic (intr/iso) |
| @@ -295,8 +294,6 @@ struct usb_bus { | |||
| 295 | struct dentry *usbfs_dentry; /* usbfs dentry entry for the bus */ | 294 | struct dentry *usbfs_dentry; /* usbfs dentry entry for the bus */ |
| 296 | 295 | ||
| 297 | struct class_device *class_dev; /* class device for this bus */ | 296 | struct class_device *class_dev; /* class device for this bus */ |
| 298 | struct kref kref; /* reference counting for this bus */ | ||
| 299 | void (*release)(struct usb_bus *bus); | ||
| 300 | 297 | ||
| 301 | #if defined(CONFIG_USB_MON) | 298 | #if defined(CONFIG_USB_MON) |
| 302 | struct mon_bus *mon_bus; /* non-null when associated */ | 299 | struct mon_bus *mon_bus; /* non-null when associated */ |
