usbip: vhci-hcd: Move VHCI platform device into vhci struct
authorYuyang Du <yuyang.du@intel.com>
Thu, 8 Jun 2017 05:04:07 +0000 (13:04 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 13 Jun 2017 08:51:10 +0000 (10:51 +0200)
Every VHCI is a platform device, so move the platform_device struct
into the VHCI struct.

Signed-off-by: Yuyang Du <yuyang.du@intel.com>
Acked-by: Shuah Khan <shuahkh@osg.samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/usbip/vhci.h
drivers/usb/usbip/vhci_hcd.c
drivers/usb/usbip/vhci_sysfs.c

index 995958494263bf7c2ff4f2d886af5c66b2b42488..62ee537b44c8af8fbdd53d7c424e8b650f50257a 100644 (file)
@@ -90,6 +90,8 @@ struct vhci_unlink {
 struct vhci {
        spinlock_t lock;
 
+       struct platform_device *pdev;
+
        struct vhci_hcd *vhci_hcd_hs;
        struct vhci_hcd *vhci_hcd_ss;
 };
@@ -116,7 +118,6 @@ struct vhci_hcd {
 };
 
 extern int vhci_num_controllers;
-extern struct platform_device **vhci_pdevs;
 extern struct vhci *vhcis;
 extern struct attribute_group vhci_attr_group;
 
index 863a12d53933a90fd1018bdbf03cbf45050c4480..a445d237b0c3d6a5377869051a3e5ad89321190e 100644 (file)
@@ -58,8 +58,7 @@ static const char driver_name[] = "vhci_hcd";
 static const char driver_desc[] = "USB/IP Virtual Host Controller";
 
 int vhci_num_controllers = VHCI_NR_HCS;
-
-struct platform_device **vhci_pdevs;
+struct vhci *vhcis;
 
 static const char * const bit_desc[] = {
        "CONNECTION",           /*0*/
@@ -1193,7 +1192,7 @@ static int add_platform_device(int id)
        if (IS_ERR(pdev))
                return PTR_ERR(pdev);
 
-       *(vhci_pdevs + id) = pdev;
+       vhcis[id].pdev = pdev;
        return 0;
 }
 
@@ -1203,10 +1202,10 @@ static void del_platform_devices(void)
        int i;
 
        for (i = 0; i < vhci_num_controllers; i++) {
-               pdev = *(vhci_pdevs + i);
+               pdev = vhcis[i].pdev;
                if (pdev != NULL)
                        platform_device_unregister(pdev);
-               *(vhci_pdevs + i) = NULL;
+               vhcis[i].pdev = NULL;
        }
        sysfs_remove_link(&platform_bus.kobj, driver_name);
 }
@@ -1221,8 +1220,8 @@ static int __init vhci_hcd_init(void)
        if (vhci_num_controllers < 1)
                vhci_num_controllers = 1;
 
-       vhci_pdevs = kcalloc(vhci_num_controllers, sizeof(void *), GFP_KERNEL);
-       if (vhci_pdevs == NULL)
+       vhcis = kcalloc(vhci_num_controllers, sizeof(struct vhci), GFP_KERNEL);
+       if (vhcis == NULL)
                return -ENOMEM;
 
        ret = platform_driver_register(&vhci_driver);
@@ -1242,7 +1241,7 @@ err_platform_device_register:
        del_platform_devices();
        platform_driver_unregister(&vhci_driver);
 err_driver_register:
-       kfree(vhci_pdevs);
+       kfree(vhcis);
        return ret;
 }
 
@@ -1250,7 +1249,7 @@ static void __exit vhci_hcd_exit(void)
 {
        del_platform_devices();
        platform_driver_unregister(&vhci_driver);
-       kfree(vhci_pdevs);
+       kfree(vhcis);
 }
 
 module_init(vhci_hcd_init);
index d878faa3f52c24f18a6647cb5f4899a5975088ba..07f0d3789a8c09c36eaa61ac87e0f04a6319dd29 100644 (file)
@@ -32,7 +32,7 @@
 /* Sysfs entry to show port status */
 static ssize_t status_show_vhci(int pdev_nr, char *out)
 {
-       struct platform_device *pdev = *(vhci_pdevs + pdev_nr);
+       struct platform_device *pdev = vhcis[pdev_nr].pdev;
        struct vhci_hcd *vhci;
        char *s = out;
        int i = 0;
@@ -206,7 +206,7 @@ static ssize_t store_detach(struct device *dev, struct device_attribute *attr,
        if (!valid_port(pdev_nr, rhport))
                return -EINVAL;
 
-       hcd = platform_get_drvdata(*(vhci_pdevs + pdev_nr));
+       hcd = platform_get_drvdata(vhcis[pdev_nr].pdev);
        if (hcd == NULL) {
                dev_err(dev, "port is not ready %u\n", port);
                return -EAGAIN;
@@ -287,7 +287,7 @@ static ssize_t store_attach(struct device *dev, struct device_attribute *attr,
        if (!valid_args(pdev_nr, rhport, speed))
                return -EINVAL;
 
-       hcd = platform_get_drvdata(*(vhci_pdevs + pdev_nr));
+       hcd = platform_get_drvdata(vhcis[pdev_nr].pdev);
        if (hcd == NULL) {
                dev_err(dev, "port %d is not ready\n", port);
                return -EAGAIN;