Hi,

On Mon, Oct 29, 2012 at 06:09:53PM +0100, Sebastian Andrzej Siewior wrote:
> The lockless implementation of the unique id is quite impressive (:P)
> but dirver's core can handle it, we can remove it and make our code a
> little smaller.
> 
> Cc: Anton Tikhomirov <av.tikhomi...@samsung.com>
> Signed-off-by: Sebastian Andrzej Siewior <bige...@linutronix.de>

Very nice :-) Can you implement a similar one for musb ?

thanks, I'll queue this one for v3.8

> ---
>  drivers/usb/dwc3/core.c        |   39 ---------------------------------------
>  drivers/usb/dwc3/core.h        |    3 ---
>  drivers/usb/dwc3/dwc3-exynos.c |   13 ++-----------
>  drivers/usb/dwc3/dwc3-omap.c   |   16 ++--------------
>  drivers/usb/dwc3/dwc3-pci.c    |   16 ++--------------
>  5 files changed, 6 insertions(+), 81 deletions(-)
> 
> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
> index 409f1a5..24d827f 100644
> --- a/drivers/usb/dwc3/core.c
> +++ b/drivers/usb/dwc3/core.c
> @@ -66,45 +66,6 @@ MODULE_PARM_DESC(maximum_speed, "Maximum supported 
> speed.");
>  
>  /* 
> -------------------------------------------------------------------------- */
>  
> -#define DWC3_DEVS_POSSIBLE   32
> -
> -static DECLARE_BITMAP(dwc3_devs, DWC3_DEVS_POSSIBLE);
> -
> -int dwc3_get_device_id(void)
> -{
> -     int             id;
> -
> -again:
> -     id = find_first_zero_bit(dwc3_devs, DWC3_DEVS_POSSIBLE);
> -     if (id < DWC3_DEVS_POSSIBLE) {
> -             int old;
> -
> -             old = test_and_set_bit(id, dwc3_devs);
> -             if (old)
> -                     goto again;
> -     } else {
> -             pr_err("dwc3: no space for new device\n");
> -             id = -ENOMEM;
> -     }
> -
> -     return id;
> -}
> -EXPORT_SYMBOL_GPL(dwc3_get_device_id);
> -
> -void dwc3_put_device_id(int id)
> -{
> -     int                     ret;
> -
> -     if (id < 0)
> -             return;
> -
> -     ret = test_bit(id, dwc3_devs);
> -     WARN(!ret, "dwc3: ID %d not in use\n", id);
> -     smp_mb__before_clear_bit();
> -     clear_bit(id, dwc3_devs);
> -}
> -EXPORT_SYMBOL_GPL(dwc3_put_device_id);
> -
>  void dwc3_set_mode(struct dwc3 *dwc, u32 mode)
>  {
>       u32 reg;
> diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
> index 243affc..4999563 100644
> --- a/drivers/usb/dwc3/core.h
> +++ b/drivers/usb/dwc3/core.h
> @@ -868,7 +868,4 @@ void dwc3_host_exit(struct dwc3 *dwc);
>  int dwc3_gadget_init(struct dwc3 *dwc);
>  void dwc3_gadget_exit(struct dwc3 *dwc);
>  
> -extern int dwc3_get_device_id(void);
> -extern void dwc3_put_device_id(int id);
> -
>  #endif /* __DRIVERS_USB_DWC3_CORE_H */
> diff --git a/drivers/usb/dwc3/dwc3-exynos.c b/drivers/usb/dwc3/dwc3-exynos.c
> index ca65978..586f105 100644
> --- a/drivers/usb/dwc3/dwc3-exynos.c
> +++ b/drivers/usb/dwc3/dwc3-exynos.c
> @@ -94,7 +94,6 @@ static int __devinit dwc3_exynos_probe(struct 
> platform_device *pdev)
>       struct dwc3_exynos      *exynos;
>       struct clk              *clk;
>  
> -     int                     devid;
>       int                     ret = -ENOMEM;
>  
>       exynos = kzalloc(sizeof(*exynos), GFP_KERNEL);
> @@ -105,20 +104,16 @@ static int __devinit dwc3_exynos_probe(struct 
> platform_device *pdev)
>  
>       platform_set_drvdata(pdev, exynos);
>  
> -     devid = dwc3_get_device_id();
> -     if (devid < 0)
> -             goto err1;
> -
>       ret = dwc3_exynos_register_phys(exynos);
>       if (ret) {
>               dev_err(&pdev->dev, "couldn't register PHYs\n");
>               goto err1;
>       }
>  
> -     dwc3 = platform_device_alloc("dwc3", devid);
> +     dwc3 = platform_device_alloc("dwc3", PLATFORM_DEVID_AUTO);
>       if (!dwc3) {
>               dev_err(&pdev->dev, "couldn't allocate dwc3 device\n");
> -             goto err2;
> +             goto err1;
>       }
>  
>       clk = clk_get(&pdev->dev, "usbdrd30");
> @@ -170,8 +165,6 @@ static int __devinit dwc3_exynos_probe(struct 
> platform_device *pdev)
>       clk_put(clk);
>  err3:
>       platform_device_put(dwc3);
> -err2:
> -     dwc3_put_device_id(devid);
>  err1:
>       kfree(exynos);
>  err0:
> @@ -187,8 +180,6 @@ static int __devexit dwc3_exynos_remove(struct 
> platform_device *pdev)
>       platform_device_unregister(exynos->usb2_phy);
>       platform_device_unregister(exynos->usb3_phy);
>  
> -     dwc3_put_device_id(exynos->dwc3->id);
> -
>       if (pdata && pdata->phy_exit)
>               pdata->phy_exit(pdev, pdata->phy_type);
>  
> diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c
> index ee57a10..900d435 100644
> --- a/drivers/usb/dwc3/dwc3-omap.c
> +++ b/drivers/usb/dwc3/dwc3-omap.c
> @@ -272,7 +272,6 @@ static int __devinit dwc3_omap_probe(struct 
> platform_device *pdev)
>       struct resource         *res;
>       struct device           *dev = &pdev->dev;
>  
> -     int                     devid;
>       int                     size;
>       int                     ret = -ENOMEM;
>       int                     irq;
> @@ -315,14 +314,10 @@ static int __devinit dwc3_omap_probe(struct 
> platform_device *pdev)
>               return ret;
>       }
>  
> -     devid = dwc3_get_device_id();
> -     if (devid < 0)
> -             return -ENODEV;
> -
> -     dwc3 = platform_device_alloc("dwc3", devid);
> +     dwc3 = platform_device_alloc("dwc3", PLATFORM_DEVID_AUTO);
>       if (!dwc3) {
>               dev_err(dev, "couldn't allocate dwc3 device\n");
> -             goto err1;
> +             return -ENOMEM;
>       }
>  
>       context = devm_kzalloc(dev, resource_size(res), GFP_KERNEL);
> @@ -423,10 +418,6 @@ static int __devinit dwc3_omap_probe(struct 
> platform_device *pdev)
>  
>  err2:
>       platform_device_put(dwc3);
> -
> -err1:
> -     dwc3_put_device_id(devid);
> -
>       return ret;
>  }
>  
> @@ -437,9 +428,6 @@ static int __devexit dwc3_omap_remove(struct 
> platform_device *pdev)
>       platform_device_unregister(omap->dwc3);
>       platform_device_unregister(omap->usb2_phy);
>       platform_device_unregister(omap->usb3_phy);
> -
> -     dwc3_put_device_id(omap->dwc3->id);
> -
>       return 0;
>  }
>  
> diff --git a/drivers/usb/dwc3/dwc3-pci.c b/drivers/usb/dwc3/dwc3-pci.c
> index 94f550e..1396259 100644
> --- a/drivers/usb/dwc3/dwc3-pci.c
> +++ b/drivers/usb/dwc3/dwc3-pci.c
> @@ -119,7 +119,6 @@ static int __devinit dwc3_pci_probe(struct pci_dev *pci,
>       struct platform_device  *dwc3;
>       struct dwc3_pci         *glue;
>       int                     ret = -ENOMEM;
> -     int                     devid;
>       struct device           *dev = &pci->dev;
>  
>       glue = devm_kzalloc(dev, sizeof(*glue), GFP_KERNEL);
> @@ -145,13 +144,7 @@ static int __devinit dwc3_pci_probe(struct pci_dev *pci,
>               return ret;
>       }
>  
> -     devid = dwc3_get_device_id();
> -     if (devid < 0) {
> -             ret = -ENOMEM;
> -             goto err1;
> -     }
> -
> -     dwc3 = platform_device_alloc("dwc3", devid);
> +     dwc3 = platform_device_alloc("dwc3", PLATFORM_DEVID_AUTO);
>       if (!dwc3) {
>               dev_err(dev, "couldn't allocate dwc3 device\n");
>               ret = -ENOMEM;
> @@ -172,7 +165,7 @@ static int __devinit dwc3_pci_probe(struct pci_dev *pci,
>       ret = platform_device_add_resources(dwc3, res, ARRAY_SIZE(res));
>       if (ret) {
>               dev_err(dev, "couldn't add resources to dwc3 device\n");
> -             goto err2;
> +             goto err1;
>       }
>  
>       pci_set_drvdata(pci, glue);
> @@ -195,10 +188,6 @@ static int __devinit dwc3_pci_probe(struct pci_dev *pci,
>  err3:
>       pci_set_drvdata(pci, NULL);
>       platform_device_put(dwc3);
> -
> -err2:
> -     dwc3_put_device_id(devid);
> -
>  err1:
>       pci_disable_device(pci);
>  
> @@ -211,7 +200,6 @@ static void __devexit dwc3_pci_remove(struct pci_dev *pci)
>  
>       platform_device_unregister(glue->usb2_phy);
>       platform_device_unregister(glue->usb3_phy);
> -     dwc3_put_device_id(glue->dwc3->id);
>       platform_device_unregister(glue->dwc3);
>       pci_set_drvdata(pci, NULL);
>       pci_disable_device(pci);
> -- 
> 1.7.10.4
> 

-- 
balbi

Attachment: signature.asc
Description: Digital signature

Reply via email to