Revert "usb: add struct usb_hub_port to store port related members."

This reverts commit f397d7c4c5e8a1eb93f2ed15808a509318ccf1dd.

This series isn't quite ready for 3.5 just yet, so revert it and give
the author more time to get it correct.

Cc: Lan Tianyu <tianyu.lan@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index 0c17d5a..ec6c97d 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -37,10 +37,6 @@
 #endif
 #endif
 
-struct usb_hub_port {
-	void			*port_owner;
-};
-
 struct usb_hub {
 	struct device		*intfdev;	/* the "interface" device */
 	struct usb_device	*hdev;
@@ -85,7 +81,7 @@
 	u8			indicator[USB_MAXCHILDREN];
 	struct delayed_work	leds;
 	struct delayed_work	init_work;
-	struct usb_hub_port	*port_data;
+	void			**port_owners;
 };
 
 static inline int hub_is_superspeed(struct usb_device *hdev)
@@ -1053,9 +1049,8 @@
 
 	hdev->children = kzalloc(hdev->maxchild *
 				sizeof(struct usb_device *), GFP_KERNEL);
-	hub->port_data = kzalloc(hdev->maxchild * sizeof(struct usb_hub_port),
-			GFP_KERNEL);
-	if (!hub->port_data || !hdev->children) {
+	hub->port_owners = kzalloc(hdev->maxchild * sizeof(void *), GFP_KERNEL);
+	if (!hdev->children || !hub->port_owners) {
 		ret = -ENOMEM;
 		goto fail;
 	}
@@ -1310,7 +1305,7 @@
 
 	usb_free_urb(hub->urb);
 	kfree(hdev->children);
-	kfree(hub->port_data);
+	kfree(hub->port_owners);
 	kfree(hub->descriptor);
 	kfree(hub->status);
 	kfree(hub->buffer);
@@ -1442,7 +1437,7 @@
 	/* This assumes that devices not managed by the hub driver
 	 * will always have maxchild equal to 0.
 	 */
-	*ppowner = &(hdev_to_hub(hdev)->port_data[port1 - 1].port_owner);
+	*ppowner = &(hdev_to_hub(hdev)->port_owners[port1 - 1]);
 	return 0;
 }
 
@@ -1477,14 +1472,16 @@
 
 void usb_hub_release_all_ports(struct usb_device *hdev, void *owner)
 {
-	struct usb_hub *hub = hdev_to_hub(hdev);
 	int n;
+	void **powner;
 
-	for (n = 0; n < hdev->maxchild; n++) {
-		if (hub->port_data[n].port_owner == owner)
-			hub->port_data[n].port_owner = NULL;
+	n = find_port_owner(hdev, 1, &powner);
+	if (n == 0) {
+		for (; n < hdev->maxchild; (++n, ++powner)) {
+			if (*powner == owner)
+				*powner = NULL;
+		}
 	}
-
 }
 
 /* The caller must hold udev's lock */
@@ -1495,7 +1492,7 @@
 	if (udev->state == USB_STATE_NOTATTACHED || !udev->parent)
 		return false;
 	hub = hdev_to_hub(udev->parent);
-	return !!hub->port_data[udev->portnum - 1].port_owner;
+	return !!hub->port_owners[udev->portnum - 1];
 }