bus->bandwidth_allocated = 0;
        bus->bandwidth_int_reqs  = 0;
        bus->bandwidth_isoc_reqs = 0;
+       mutex_init(&bus->usb_address0_mutex);
 
        INIT_LIST_HEAD (&bus->bus_list);
 }
 
 hub_port_init (struct usb_hub *hub, struct usb_device *udev, int port1,
                int retry_counter)
 {
-       static DEFINE_MUTEX(usb_address0_mutex);
-
        struct usb_device       *hdev = hub->hdev;
        struct usb_hcd          *hcd = bus_to_hcd(hdev->bus);
        int                     i, j, retval;
        if (oldspeed == USB_SPEED_LOW)
                delay = HUB_LONG_RESET_TIME;
 
-       mutex_lock(&usb_address0_mutex);
+       mutex_lock(&hdev->bus->usb_address0_mutex);
 
        /* Reset the device; full speed may morph to high speed */
        /* FIXME a USB 2.0 device may morph into SuperSpeed on reset. */
                hub_port_disable(hub, port1, 0);
                update_devnum(udev, devnum);    /* for disconnect processing */
        }
-       mutex_unlock(&usb_address0_mutex);
+       mutex_unlock(&hdev->bus->usb_address0_mutex);
        return retval;
 }
 
 
        struct usb_bus *hs_companion;   /* Companion EHCI bus, if any */
        struct list_head bus_list;      /* list of busses */
 
+       struct mutex usb_address0_mutex; /* unaddressed device mutex */
+
        int bandwidth_allocated;        /* on this bus: how much of the time
                                         * reserved for periodic (intr/iso)
                                         * requests is used, on average?