2016-12-21 09:15:51

by Chen Yu

[permalink] [raw]
Subject: [PATCH] platform: Print the resource range if device failed to claim

Sometimes we have the following error message:
platform MSFT0101:00: failed to claim resource 1
acpi MSFT0101:00: platform device creation failed: -16
But there is not enough information to figure out which resource range
failed to claim.

Thus print the resource range at first-place thus /proc/iomem or
ioports should tell us who already claimed this resource, then
the driver bug or incorrect resource assignment which is running
into this conflict can be diagnosed:
platform MSFT0101:00: failed to claim resource 1: [mem 0xfed40000-0xfed40fff]
acpi MSFT0101:00: platform device creation failed: -16

Suggested-by: Len Brown <[email protected]>
Reported-by: Wendy Wang <[email protected]>
Signed-off-by: Chen Yu <[email protected]>
---
drivers/base/platform.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/base/platform.c b/drivers/base/platform.c
index c4af003..22a6430 100644
--- a/drivers/base/platform.c
+++ b/drivers/base/platform.c
@@ -396,7 +396,7 @@ int platform_device_add(struct platform_device *pdev)
}

if (p && insert_resource(p, r)) {
- dev_err(&pdev->dev, "failed to claim resource %d\n", i);
+ dev_err(&pdev->dev, "failed to claim resource %d: %pR\n", i, r);
ret = -EBUSY;
goto failed;
}
--
2.7.4


2016-12-22 01:24:24

by Rafael J. Wysocki

[permalink] [raw]
Subject: Re: [PATCH] platform: Print the resource range if device failed to claim

[CC Mika and linux-acpi]

On Wednesday, December 21, 2016 05:24:55 PM Chen Yu wrote:
> Sometimes we have the following error message:
> platform MSFT0101:00: failed to claim resource 1
> acpi MSFT0101:00: platform device creation failed: -16
> But there is not enough information to figure out which resource range
> failed to claim.
>
> Thus print the resource range at first-place thus /proc/iomem or
> ioports should tell us who already claimed this resource, then
> the driver bug or incorrect resource assignment which is running
> into this conflict can be diagnosed:
> platform MSFT0101:00: failed to claim resource 1: [mem 0xfed40000-0xfed40fff]
> acpi MSFT0101:00: platform device creation failed: -16
>
> Suggested-by: Len Brown <[email protected]>
> Reported-by: Wendy Wang <[email protected]>
> Signed-off-by: Chen Yu <[email protected]>
> ---
> drivers/base/platform.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/base/platform.c b/drivers/base/platform.c
> index c4af003..22a6430 100644
> --- a/drivers/base/platform.c
> +++ b/drivers/base/platform.c
> @@ -396,7 +396,7 @@ int platform_device_add(struct platform_device *pdev)
> }
>
> if (p && insert_resource(p, r)) {
> - dev_err(&pdev->dev, "failed to claim resource %d\n", i);
> + dev_err(&pdev->dev, "failed to claim resource %d: %pR\n", i, r);

Do we still need the resource number?

> ret = -EBUSY;
> goto failed;
> }
>

Thanks,
Rafael

2016-12-22 03:22:51

by Chen Yu

[permalink] [raw]
Subject: Re: [PATCH] platform: Print the resource range if device failed to claim

Hi,
On Thu, Dec 22, 2016 at 02:19:22AM +0100, Rafael J. Wysocki wrote:
> [CC Mika and linux-acpi]
>
> On Wednesday, December 21, 2016 05:24:55 PM Chen Yu wrote:
> > Sometimes we have the following error message:
> > platform MSFT0101:00: failed to claim resource 1
> > acpi MSFT0101:00: platform device creation failed: -16
> > But there is not enough information to figure out which resource range
> > failed to claim.
> >
> > Thus print the resource range at first-place thus /proc/iomem or
> > ioports should tell us who already claimed this resource, then
> > the driver bug or incorrect resource assignment which is running
> > into this conflict can be diagnosed:
> > platform MSFT0101:00: failed to claim resource 1: [mem 0xfed40000-0xfed40fff]
> > acpi MSFT0101:00: platform device creation failed: -16
> >
> > Suggested-by: Len Brown <[email protected]>
> > Reported-by: Wendy Wang <[email protected]>
> > Signed-off-by: Chen Yu <[email protected]>
> > ---
> > drivers/base/platform.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/base/platform.c b/drivers/base/platform.c
> > index c4af003..22a6430 100644
> > --- a/drivers/base/platform.c
> > +++ b/drivers/base/platform.c
> > @@ -396,7 +396,7 @@ int platform_device_add(struct platform_device *pdev)
> > }
> >
> > if (p && insert_resource(p, r)) {
> > - dev_err(&pdev->dev, "failed to claim resource %d\n", i);
> > + dev_err(&pdev->dev, "failed to claim resource %d: %pR\n", i, r);
>
> Do we still need the resource number?
>
Seems we don't need the resource number anymore.
(As platform.c was written earlier than 2005, and the support of %pR was introduced
later in 2008.)
> > ret = -EBUSY;
> > goto failed;
> > }
> >
>
> Thanks,
> Rafael
>

Thanks,
Yu

2016-12-22 09:18:57

by Mika Westerberg

[permalink] [raw]
Subject: Re: [PATCH] platform: Print the resource range if device failed to claim

On Thu, Dec 22, 2016 at 02:19:22AM +0100, Rafael J. Wysocki wrote:
> [CC Mika and linux-acpi]
>
> On Wednesday, December 21, 2016 05:24:55 PM Chen Yu wrote:
> > Sometimes we have the following error message:
> > platform MSFT0101:00: failed to claim resource 1
> > acpi MSFT0101:00: platform device creation failed: -16
> > But there is not enough information to figure out which resource range
> > failed to claim.
> >
> > Thus print the resource range at first-place thus /proc/iomem or
> > ioports should tell us who already claimed this resource, then
> > the driver bug or incorrect resource assignment which is running
> > into this conflict can be diagnosed:
> > platform MSFT0101:00: failed to claim resource 1: [mem 0xfed40000-0xfed40fff]
> > acpi MSFT0101:00: platform device creation failed: -16
> >
> > Suggested-by: Len Brown <[email protected]>
> > Reported-by: Wendy Wang <[email protected]>
> > Signed-off-by: Chen Yu <[email protected]>
> > ---
> > drivers/base/platform.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/base/platform.c b/drivers/base/platform.c
> > index c4af003..22a6430 100644
> > --- a/drivers/base/platform.c
> > +++ b/drivers/base/platform.c
> > @@ -396,7 +396,7 @@ int platform_device_add(struct platform_device *pdev)
> > }
> >
> > if (p && insert_resource(p, r)) {
> > - dev_err(&pdev->dev, "failed to claim resource %d\n", i);
> > + dev_err(&pdev->dev, "failed to claim resource %d: %pR\n", i, r);
>
> Do we still need the resource number?

It may still be useful. For example some BIOSes fill MMIO resources
based on variables in memory in which case the resource in DSDT is
filled with zeroes when disassembled. With the number you can find out
the right MMIO resource.

Either way, this is a good change. I had it on my list as well but never
got a chance to write a patch.

Reviewed-by: Mika Westerberg <[email protected]>