Re: [PATCH 1/4] usb/dwc3: remove custom unique id handling

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.tikhomirov@xxxxxxxxxxx>
> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx>

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


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux