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 <[email protected]> > Signed-off-by: Sebastian Andrzej Siewior <[email protected]>
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
signature.asc
Description: Digital signature
