2021-04-28 06:34:34

by Zhen Lei

[permalink] [raw]
Subject: [PATCH 1/1] lib: devres: Add error information printing for __devm_ioremap_resource()

Ensure that all error handling branches print error information. In this
way, when this function fails, the upper-layer functions can directly
return an error code without missing debugging information. Otherwise,
the error message will be printed redundantly or missing.

Fixes: 35bd8c07db2c ("devres: keep both device name and resource name in pretty name")
Signed-off-by: Zhen Lei <[email protected]>
---
lib/devres.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/lib/devres.c b/lib/devres.c
index 4679dbb1bf5f8a8..bdb06898a977701 100644
--- a/lib/devres.c
+++ b/lib/devres.c
@@ -157,8 +157,10 @@ __devm_ioremap_resource(struct device *dev, const struct resource *res,
dev_name(dev), res->name);
else
pretty_name = devm_kstrdup(dev, dev_name(dev), GFP_KERNEL);
- if (!pretty_name)
+ if (!pretty_name) {
+ dev_err(dev, "can't generate pretty name for resource %pR\n", res);
return IOMEM_ERR_PTR(-ENOMEM);
+ }

if (!devm_request_mem_region(dev, res->start, size, pretty_name)) {
dev_err(dev, "can't request region for resource %pR\n", res);
--
2.26.0.106.g9fadedd



2021-04-28 17:35:32

by Vladimir Oltean

[permalink] [raw]
Subject: Re: [PATCH 1/1] lib: devres: Add error information printing for __devm_ioremap_resource()

On Wed, Apr 28, 2021 at 02:32:03PM +0800, Zhen Lei wrote:
> Ensure that all error handling branches print error information. In this
> way, when this function fails, the upper-layer functions can directly
> return an error code without missing debugging information. Otherwise,
> the error message will be printed redundantly or missing.
>
> Fixes: 35bd8c07db2c ("devres: keep both device name and resource name in pretty name")
> Signed-off-by: Zhen Lei <[email protected]>
> ---

A Fixes: tag is probably a bit too drastic, but anyway:

Reviewed-by: Vladimir Oltean <[email protected]>

2021-05-17 12:44:53

by Geert Uytterhoeven

[permalink] [raw]
Subject: Re: [PATCH 1/1] lib: devres: Add error information printing for __devm_ioremap_resource()

Hi Zhen,

On Wed, Apr 28, 2021 at 8:33 AM Zhen Lei <[email protected]> wrote:
> Ensure that all error handling branches print error information. In this
> way, when this function fails, the upper-layer functions can directly
> return an error code without missing debugging information. Otherwise,
> the error message will be printed redundantly or missing.
>
> Fixes: 35bd8c07db2c ("devres: keep both device name and resource name in pretty name")
> Signed-off-by: Zhen Lei <[email protected]>

Thanks for your patch, which is now commit 5c3e241f5246445d ("lib:
devres: Add error information printing for __devm_ioremap_resource()")
in driver-core-next.

> --- a/lib/devres.c
> +++ b/lib/devres.c
> @@ -157,8 +157,10 @@ __devm_ioremap_resource(struct device *dev, const struct resource *res,
> dev_name(dev), res->name);
> else
> pretty_name = devm_kstrdup(dev, dev_name(dev), GFP_KERNEL);
> - if (!pretty_name)
> + if (!pretty_name) {
> + dev_err(dev, "can't generate pretty name for resource %pR\n", res);

If the above fails, it is due to a memory allocation failure, and the
memory allocation core will have already printed an error message.
So there is no need to print a second message.
Hence IMHO this commit should be reverted.

> return IOMEM_ERR_PTR(-ENOMEM);
> + }
>
> if (!devm_request_mem_region(dev, res->start, size, pretty_name)) {
> dev_err(dev, "can't request region for resource %pR\n", res);

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds

2021-06-07 07:14:20

by Zhen Lei

[permalink] [raw]
Subject: Re: [PATCH 1/1] lib: devres: Add error information printing for __devm_ioremap_resource()



On 2021/5/17 15:04, Geert Uytterhoeven wrote:
> Hi Zhen,
>
> On Wed, Apr 28, 2021 at 8:33 AM Zhen Lei <[email protected]> wrote:
>> Ensure that all error handling branches print error information. In this
>> way, when this function fails, the upper-layer functions can directly
>> return an error code without missing debugging information. Otherwise,
>> the error message will be printed redundantly or missing.
>>
>> Fixes: 35bd8c07db2c ("devres: keep both device name and resource name in pretty name")
>> Signed-off-by: Zhen Lei <[email protected]>
>
> Thanks for your patch, which is now commit 5c3e241f5246445d ("lib:
> devres: Add error information printing for __devm_ioremap_resource()")
> in driver-core-next.
>
>> --- a/lib/devres.c
>> +++ b/lib/devres.c
>> @@ -157,8 +157,10 @@ __devm_ioremap_resource(struct device *dev, const struct resource *res,
>> dev_name(dev), res->name);
>> else
>> pretty_name = devm_kstrdup(dev, dev_name(dev), GFP_KERNEL);
>> - if (!pretty_name)
>> + if (!pretty_name) {
>> + dev_err(dev, "can't generate pretty name for resource %pR\n", res);
>
> If the above fails, it is due to a memory allocation failure, and the
> memory allocation core will have already printed an error message.
> So there is no need to print a second message.
> Hence IMHO this commit should be reverted.

If the memory allocation fails, only the 'size' is printed, but the start address of
the 'res' is not printed. So the printing here is not repeated. The start address is
the more critical help information.

>
>> return IOMEM_ERR_PTR(-ENOMEM);
>> + }
>>
>> if (!devm_request_mem_region(dev, res->start, size, pretty_name)) {
>> dev_err(dev, "can't request region for resource %pR\n", res);
>
> Gr{oetje,eeting}s,
>
> Geert
>

2021-06-07 08:17:57

by Geert Uytterhoeven

[permalink] [raw]
Subject: Re: [PATCH 1/1] lib: devres: Add error information printing for __devm_ioremap_resource()

Hi Leizhen,

On Mon, Jun 7, 2021 at 9:11 AM Leizhen (ThunderTown)
<[email protected]> wrote:
> On 2021/5/17 15:04, Geert Uytterhoeven wrote:
> > On Wed, Apr 28, 2021 at 8:33 AM Zhen Lei <[email protected]> wrote:
> >> Ensure that all error handling branches print error information. In this
> >> way, when this function fails, the upper-layer functions can directly
> >> return an error code without missing debugging information. Otherwise,
> >> the error message will be printed redundantly or missing.
> >>
> >> Fixes: 35bd8c07db2c ("devres: keep both device name and resource name in pretty name")
> >> Signed-off-by: Zhen Lei <[email protected]>
> >
> > Thanks for your patch, which is now commit 5c3e241f5246445d ("lib:
> > devres: Add error information printing for __devm_ioremap_resource()")
> > in driver-core-next.
> >
> >> --- a/lib/devres.c
> >> +++ b/lib/devres.c
> >> @@ -157,8 +157,10 @@ __devm_ioremap_resource(struct device *dev, const struct resource *res,
> >> dev_name(dev), res->name);
> >> else
> >> pretty_name = devm_kstrdup(dev, dev_name(dev), GFP_KERNEL);
> >> - if (!pretty_name)
> >> + if (!pretty_name) {
> >> + dev_err(dev, "can't generate pretty name for resource %pR\n", res);
> >
> > If the above fails, it is due to a memory allocation failure, and the
> > memory allocation core will have already printed an error message.
> > So there is no need to print a second message.
> > Hence IMHO this commit should be reverted.
>
> If the memory allocation fails, only the 'size' is printed, but the start address of
> the 'res' is not printed. So the printing here is not repeated. The start address is
> the more critical help information.

Does that actually matter?
What can the user or developer do to fix this problem, with the
additional knowledge of the resource's start address?

> >> return IOMEM_ERR_PTR(-ENOMEM);
> >> + }
> >>
> >> if (!devm_request_mem_region(dev, res->start, size, pretty_name)) {
> >> dev_err(dev, "can't request region for resource %pR\n", res);

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds

2021-06-07 08:35:39

by Zhen Lei

[permalink] [raw]
Subject: Re: [PATCH 1/1] lib: devres: Add error information printing for __devm_ioremap_resource()



On 2021/6/7 16:15, Geert Uytterhoeven wrote:
> Hi Leizhen,
>
> On Mon, Jun 7, 2021 at 9:11 AM Leizhen (ThunderTown)
> <[email protected]> wrote:
>> On 2021/5/17 15:04, Geert Uytterhoeven wrote:
>>> On Wed, Apr 28, 2021 at 8:33 AM Zhen Lei <[email protected]> wrote:
>>>> Ensure that all error handling branches print error information. In this
>>>> way, when this function fails, the upper-layer functions can directly
>>>> return an error code without missing debugging information. Otherwise,
>>>> the error message will be printed redundantly or missing.
>>>>
>>>> Fixes: 35bd8c07db2c ("devres: keep both device name and resource name in pretty name")
>>>> Signed-off-by: Zhen Lei <[email protected]>
>>>
>>> Thanks for your patch, which is now commit 5c3e241f5246445d ("lib:
>>> devres: Add error information printing for __devm_ioremap_resource()")
>>> in driver-core-next.
>>>
>>>> --- a/lib/devres.c
>>>> +++ b/lib/devres.c
>>>> @@ -157,8 +157,10 @@ __devm_ioremap_resource(struct device *dev, const struct resource *res,
>>>> dev_name(dev), res->name);
>>>> else
>>>> pretty_name = devm_kstrdup(dev, dev_name(dev), GFP_KERNEL);
>>>> - if (!pretty_name)
>>>> + if (!pretty_name) {
>>>> + dev_err(dev, "can't generate pretty name for resource %pR\n", res);
>>>
>>> If the above fails, it is due to a memory allocation failure, and the
>>> memory allocation core will have already printed an error message.
>>> So there is no need to print a second message.
>>> Hence IMHO this commit should be reverted.
>>
>> If the memory allocation fails, only the 'size' is printed, but the start address of
>> the 'res' is not printed. So the printing here is not repeated. The start address is
>> the more critical help information.
>
> Does that actually matter?
> What can the user or developer do to fix this problem, with the
> additional knowledge of the resource's start address?

Oh, you're right.

>
>>>> return IOMEM_ERR_PTR(-ENOMEM);
>>>> + }
>>>>
>>>> if (!devm_request_mem_region(dev, res->start, size, pretty_name)) {
>>>> dev_err(dev, "can't request region for resource %pR\n", res);
>
> Gr{oetje,eeting}s,
>
> Geert
>