Re: [PATCH v2] musb: omap: Fix: pass all the resources to musb core

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

 



On Wed, Jul 10, 2013 at 04:29:22PM +0530, Kishon Vijay Abraham I wrote:
> commit 09fc7d (usb: musb: fix incorrect usage of resource pointer)
> assumes musb core will always have only 2 resources. But for OMAP
> platforms there can be 3 resources (2 irq resource and 1 iomem
> resource). Fixed it here.
> 
> Signed-off-by: Kishon Vijay Abraham I <kishon@xxxxxx>
> ---
> Changes from v1:
> *) Removed redundant initialization of *i*
> 
>  drivers/usb/musb/omap2430.c |   18 ++++++++----------
>  1 file changed, 8 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/usb/musb/omap2430.c b/drivers/usb/musb/omap2430.c
> index 5b6113a..5bbef78 100644
> --- a/drivers/usb/musb/omap2430.c
> +++ b/drivers/usb/musb/omap2430.c
> @@ -481,7 +481,7 @@ static u64 omap2430_dmamask = DMA_BIT_MASK(32);
>  
>  static int omap2430_probe(struct platform_device *pdev)
>  {
> -	struct resource			musb_resources[2];
> +	struct resource			musb_resources[3];
>  	struct musb_hdrc_platform_data	*pdata = pdev->dev.platform_data;
>  	struct omap_musb_board_data	*data;
>  	struct platform_device		*musb;
> @@ -489,6 +489,7 @@ static int omap2430_probe(struct platform_device *pdev)
>  	struct device_node		*np = pdev->dev.of_node;
>  	struct musb_hdrc_config		*config;
>  	int				ret = -ENOMEM;
> +	int				i;
>  
>  	glue = devm_kzalloc(&pdev->dev, sizeof(*glue), GFP_KERNEL);
>  	if (!glue) {
> @@ -571,15 +572,12 @@ static int omap2430_probe(struct platform_device *pdev)
>  	memset(musb_resources, 0x00, sizeof(*musb_resources) *
>  			ARRAY_SIZE(musb_resources));
>  
> -	musb_resources[0].name = pdev->resource[0].name;
> -	musb_resources[0].start = pdev->resource[0].start;
> -	musb_resources[0].end = pdev->resource[0].end;
> -	musb_resources[0].flags = pdev->resource[0].flags;
> -
> -	musb_resources[1].name = pdev->resource[1].name;
> -	musb_resources[1].start = pdev->resource[1].start;
> -	musb_resources[1].end = pdev->resource[1].end;
> -	musb_resources[1].flags = pdev->resource[1].flags;
> +	for (i = 0; i < ARRAY_SIZE(musb_resources); i++) {

then this is not enough, what if one device using omap2430.c has 2
resources and the other has 3 ? and what if a new one has 4 ?

How about using pdev->num_resources to dynamically allocate
musb_resources array and using the same thing iterate here ?

Something like:

	struct resource		*musb_resources;

	musb_resources = kcalloc(pdev->num_resources, struct resource, GPF_KERNEL);
	if (!musb_resources)
		bail();

	for (i = 0; i < pdev->num_resources, i++) {
		musb_resources[i].name = pdev->resource[i].name;
		musb_resources[i].start = pdev->resource[i].start;
		musb_resources[i].end = pdev->resource[i].end;
		musb_resources[i].flags = pdev->resource[i].flags;
	}

cheers

-- 
balbi

Attachment: signature.asc
Description: Digital signature


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux