2019-06-03 17:57:05

by Nathan Chancellor

[permalink] [raw]
Subject: [PATCH] PCI: rpaphp: Avoid a sometimes-uninitialized warning

When building with -Wsometimes-uninitialized, clang warns:

drivers/pci/hotplug/rpaphp_core.c:243:14: warning: variable 'fndit' is
used uninitialized whenever 'for' loop exits because its condition is
false [-Wsometimes-uninitialized]
for (j = 0; j < entries; j++) {
^~~~~~~~~~~
drivers/pci/hotplug/rpaphp_core.c:256:6: note: uninitialized use occurs
here
if (fndit)
^~~~~
drivers/pci/hotplug/rpaphp_core.c:243:14: note: remove the condition if
it is always true
for (j = 0; j < entries; j++) {
^~~~~~~~~~~
drivers/pci/hotplug/rpaphp_core.c:233:14: note: initialize the variable
'fndit' to silence this warning
int j, fndit;
^
= 0

Looking at the loop in a vacuum as clang would, fndit could be
uninitialized if entries was ever zero or the if statement was
always true within the loop. Regardless of whether or not this
warning is a problem in practice, "found" variables should always
be initialized to false so that there is no possibility of
undefined behavior.

Link: https://github.com/ClangBuiltLinux/linux/issues/504
Fixes: 2fcf3ae508c2 ("hotplug/drc-info: Add code to search ibm,drc-info property")
Signed-off-by: Nathan Chancellor <[email protected]>
---
drivers/pci/hotplug/rpaphp_core.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/pci/hotplug/rpaphp_core.c b/drivers/pci/hotplug/rpaphp_core.c
index bcd5d357ca23..07b56bf2886f 100644
--- a/drivers/pci/hotplug/rpaphp_core.c
+++ b/drivers/pci/hotplug/rpaphp_core.c
@@ -230,7 +230,7 @@ static int rpaphp_check_drc_props_v2(struct device_node *dn, char *drc_name,
struct of_drc_info drc;
const __be32 *value;
char cell_drc_name[MAX_DRC_NAME_LEN];
- int j, fndit;
+ int j, fndit = 0;

info = of_find_property(dn->parent, "ibm,drc-info", NULL);
if (info == NULL)
--
2.22.0.rc2


2019-06-03 21:54:30

by Nathan Chancellor

[permalink] [raw]
Subject: Re: [PATCH] PCI: rpaphp: Avoid a sometimes-uninitialized warning

Hi Nick,

On Mon, Jun 03, 2019 at 02:07:50PM -0700, Nick Desaulniers wrote:
> On Mon, Jun 3, 2019 at 10:44 AM Nathan Chancellor
> <[email protected]> wrote:
> > Looking at the loop in a vacuum as clang would, fndit could be
> > uninitialized if entries was ever zero or the if statement was
> > always true within the loop. Regardless of whether or not this
> > warning is a problem in practice, "found" variables should always
> > be initialized to false so that there is no possibility of
> > undefined behavior.
>
> Thanks for the patch Nathan. fndit isn't really being used for
> anything other than a print statement outside of the loop. How about:

Thank you for the review, this seems reasonable. I will send a v2
shortly.

>
> ```
> diff --git a/drivers/pci/hotplug/rpaphp_core.c
> b/drivers/pci/hotplug/rpaphp_core.c
> index bcd5d357ca23..c3899ee1db99 100644
> --- a/drivers/pci/hotplug/rpaphp_core.c
> +++ b/drivers/pci/hotplug/rpaphp_core.c
> @@ -230,7 +230,7 @@ static int rpaphp_check_drc_props_v2(struct
> device_node *dn, char *drc_name,
> struct of_drc_info drc;
> const __be32 *value;
> char cell_drc_name[MAX_DRC_NAME_LEN];
> - int j, fndit;
> + int j;
>
> info = of_find_property(dn->parent, "ibm,drc-info", NULL);
> if (info == NULL)
> @@ -245,17 +245,13 @@ static int rpaphp_check_drc_props_v2(struct
> device_node *dn, char *drc_name,
>
> /* Should now know end of current entry */
>
> - if (my_index > drc.last_drc_index)
> - continue;
> -
> - fndit = 1;
> - break;
> + /* Found it */
> + if (my_index <= drc.last_drc_index) {
> + sprintf(cell_drc_name, "%s%d", drc.drc_name_prefix,
> + my_index);
> + break;
> + }
> }
> - /* Found it */
> -
> - if (fndit)
> - sprintf(cell_drc_name, "%s%d", drc.drc_name_prefix,
> - my_index);
>
> if (((drc_name == NULL) ||
> (drc_name && !strcmp(drc_name, cell_drc_name))) &&
> ```
> (not sure my tabs were pasted properly in the above...)

Doesn't look like it but no worries.

Thanks,
Nathan

2019-06-03 22:09:33

by Nick Desaulniers

[permalink] [raw]
Subject: Re: [PATCH] PCI: rpaphp: Avoid a sometimes-uninitialized warning

On Mon, Jun 3, 2019 at 10:44 AM Nathan Chancellor
<[email protected]> wrote:
> Looking at the loop in a vacuum as clang would, fndit could be
> uninitialized if entries was ever zero or the if statement was
> always true within the loop. Regardless of whether or not this
> warning is a problem in practice, "found" variables should always
> be initialized to false so that there is no possibility of
> undefined behavior.

Thanks for the patch Nathan. fndit isn't really being used for
anything other than a print statement outside of the loop. How about:

```
diff --git a/drivers/pci/hotplug/rpaphp_core.c
b/drivers/pci/hotplug/rpaphp_core.c
index bcd5d357ca23..c3899ee1db99 100644
--- a/drivers/pci/hotplug/rpaphp_core.c
+++ b/drivers/pci/hotplug/rpaphp_core.c
@@ -230,7 +230,7 @@ static int rpaphp_check_drc_props_v2(struct
device_node *dn, char *drc_name,
struct of_drc_info drc;
const __be32 *value;
char cell_drc_name[MAX_DRC_NAME_LEN];
- int j, fndit;
+ int j;

info = of_find_property(dn->parent, "ibm,drc-info", NULL);
if (info == NULL)
@@ -245,17 +245,13 @@ static int rpaphp_check_drc_props_v2(struct
device_node *dn, char *drc_name,

/* Should now know end of current entry */

- if (my_index > drc.last_drc_index)
- continue;
-
- fndit = 1;
- break;
+ /* Found it */
+ if (my_index <= drc.last_drc_index) {
+ sprintf(cell_drc_name, "%s%d", drc.drc_name_prefix,
+ my_index);
+ break;
+ }
}
- /* Found it */
-
- if (fndit)
- sprintf(cell_drc_name, "%s%d", drc.drc_name_prefix,
- my_index);

if (((drc_name == NULL) ||
(drc_name && !strcmp(drc_name, cell_drc_name))) &&
```
(not sure my tabs were pasted properly in the above...)

--
Thanks,
~Nick Desaulniers

2019-06-03 22:15:20

by Nathan Chancellor

[permalink] [raw]
Subject: [PATCH v2] PCI: rpaphp: Avoid a sometimes-uninitialized warning

When building with -Wsometimes-uninitialized, clang warns:

drivers/pci/hotplug/rpaphp_core.c:243:14: warning: variable 'fndit' is
used uninitialized whenever 'for' loop exits because its condition is
false [-Wsometimes-uninitialized]
for (j = 0; j < entries; j++) {
^~~~~~~~~~~
drivers/pci/hotplug/rpaphp_core.c:256:6: note: uninitialized use occurs
here
if (fndit)
^~~~~
drivers/pci/hotplug/rpaphp_core.c:243:14: note: remove the condition if
it is always true
for (j = 0; j < entries; j++) {
^~~~~~~~~~~
drivers/pci/hotplug/rpaphp_core.c:233:14: note: initialize the variable
'fndit' to silence this warning
int j, fndit;
^
= 0

fndit is only used to gate a sprintf call, which can be moved into the
loop to simplify the code and eliminate the local variable, which will
fix this warning.

Link: https://github.com/ClangBuiltLinux/linux/issues/504
Fixes: 2fcf3ae508c2 ("hotplug/drc-info: Add code to search ibm,drc-info property")
Suggested-by: Nick Desaulniers <[email protected]>
Signed-off-by: Nathan Chancellor <[email protected]>
---

v1 -> v2:

* Eliminate fndit altogether by shuffling the sprintf call into the for
loop and changing the if conditional, as suggested by Nick.

drivers/pci/hotplug/rpaphp_core.c | 18 +++++++-----------
1 file changed, 7 insertions(+), 11 deletions(-)

diff --git a/drivers/pci/hotplug/rpaphp_core.c b/drivers/pci/hotplug/rpaphp_core.c
index bcd5d357ca23..c3899ee1db99 100644
--- a/drivers/pci/hotplug/rpaphp_core.c
+++ b/drivers/pci/hotplug/rpaphp_core.c
@@ -230,7 +230,7 @@ static int rpaphp_check_drc_props_v2(struct device_node *dn, char *drc_name,
struct of_drc_info drc;
const __be32 *value;
char cell_drc_name[MAX_DRC_NAME_LEN];
- int j, fndit;
+ int j;

info = of_find_property(dn->parent, "ibm,drc-info", NULL);
if (info == NULL)
@@ -245,17 +245,13 @@ static int rpaphp_check_drc_props_v2(struct device_node *dn, char *drc_name,

/* Should now know end of current entry */

- if (my_index > drc.last_drc_index)
- continue;
-
- fndit = 1;
- break;
+ /* Found it */
+ if (my_index <= drc.last_drc_index) {
+ sprintf(cell_drc_name, "%s%d", drc.drc_name_prefix,
+ my_index);
+ break;
+ }
}
- /* Found it */
-
- if (fndit)
- sprintf(cell_drc_name, "%s%d", drc.drc_name_prefix,
- my_index);

if (((drc_name == NULL) ||
(drc_name && !strcmp(drc_name, cell_drc_name))) &&
--
2.22.0.rc3

2019-06-04 00:05:01

by Tyrel Datwyler

[permalink] [raw]
Subject: Re: [PATCH v2] PCI: rpaphp: Avoid a sometimes-uninitialized warning

On 06/03/2019 03:11 PM, Nathan Chancellor wrote:
> When building with -Wsometimes-uninitialized, clang warns:
>
> drivers/pci/hotplug/rpaphp_core.c:243:14: warning: variable 'fndit' is
> used uninitialized whenever 'for' loop exits because its condition is
> false [-Wsometimes-uninitialized]
> for (j = 0; j < entries; j++) {
> ^~~~~~~~~~~
> drivers/pci/hotplug/rpaphp_core.c:256:6: note: uninitialized use occurs
> here
> if (fndit)
> ^~~~~
> drivers/pci/hotplug/rpaphp_core.c:243:14: note: remove the condition if
> it is always true
> for (j = 0; j < entries; j++) {
> ^~~~~~~~~~~
> drivers/pci/hotplug/rpaphp_core.c:233:14: note: initialize the variable
> 'fndit' to silence this warning
> int j, fndit;
> ^
> = 0
>
> fndit is only used to gate a sprintf call, which can be moved into the
> loop to simplify the code and eliminate the local variable, which will
> fix this warning.
>
> Link: https://github.com/ClangBuiltLinux/linux/issues/504
> Fixes: 2fcf3ae508c2 ("hotplug/drc-info: Add code to search ibm,drc-info property")
> Suggested-by: Nick Desaulniers <[email protected]>
> Signed-off-by: Nathan Chancellor <[email protected]>

Acked-by: Tyrel Datwyler <[email protected]>

2019-06-04 06:26:05

by Christophe Leroy

[permalink] [raw]
Subject: Re: [PATCH] PCI: rpaphp: Avoid a sometimes-uninitialized warning


Quoting Nathan Chancellor <[email protected]>:

> When building with -Wsometimes-uninitialized, clang warns:
>
> drivers/pci/hotplug/rpaphp_core.c:243:14: warning: variable 'fndit' is
> used uninitialized whenever 'for' loop exits because its condition is
> false [-Wsometimes-uninitialized]
> for (j = 0; j < entries; j++) {
> ^~~~~~~~~~~
> drivers/pci/hotplug/rpaphp_core.c:256:6: note: uninitialized use occurs
> here
> if (fndit)
> ^~~~~
> drivers/pci/hotplug/rpaphp_core.c:243:14: note: remove the condition if
> it is always true
> for (j = 0; j < entries; j++) {
> ^~~~~~~~~~~
> drivers/pci/hotplug/rpaphp_core.c:233:14: note: initialize the variable
> 'fndit' to silence this warning
> int j, fndit;
> ^
> = 0
>
> Looking at the loop in a vacuum as clang would, fndit could be
> uninitialized if entries was ever zero or the if statement was
> always true within the loop. Regardless of whether or not this
> warning is a problem in practice, "found" variables should always
> be initialized to false so that there is no possibility of
> undefined behavior.
>
> Link: https://github.com/ClangBuiltLinux/linux/issues/504
> Fixes: 2fcf3ae508c2 ("hotplug/drc-info: Add code to search
> ibm,drc-info property")
> Signed-off-by: Nathan Chancellor <[email protected]>
> ---
> drivers/pci/hotplug/rpaphp_core.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/pci/hotplug/rpaphp_core.c
> b/drivers/pci/hotplug/rpaphp_core.c
> index bcd5d357ca23..07b56bf2886f 100644
> --- a/drivers/pci/hotplug/rpaphp_core.c
> +++ b/drivers/pci/hotplug/rpaphp_core.c
> @@ -230,7 +230,7 @@ static int rpaphp_check_drc_props_v2(struct
> device_node *dn, char *drc_name,
> struct of_drc_info drc;
> const __be32 *value;
> char cell_drc_name[MAX_DRC_NAME_LEN];
> - int j, fndit;
> + int j, fndit = 0;

Not sure fndit is needed at all. Looking into the full function code,
fndit only serves as doing a single action. That action could be done
in the loop directly, see below

And while you are at it, I guess you should also handle the
initialisation of cell_drc_name.
In the current code, it looks like content of cell_drc_name is
undefined when doing the strcmp when fndit is not 1.

>
> info = of_find_property(dn->parent, "ibm,drc-info", NULL);
> if (info == NULL)
> --
> 2.22.0.rc2

diff --git a/drivers/pci/hotplug/rpaphp_core.c
b/drivers/pci/hotplug/rpaphp_core.c
index bcd5d357ca23..87113419a44f 100644
--- a/drivers/pci/hotplug/rpaphp_core.c
+++ b/drivers/pci/hotplug/rpaphp_core.c
@@ -230,7 +230,7 @@ static int rpaphp_check_drc_props_v2(struct
device_node *dn, char *drc_name,
struct of_drc_info drc;
const __be32 *value;
char cell_drc_name[MAX_DRC_NAME_LEN];
- int j, fndit;
+ int j;

info = of_find_property(dn->parent, "ibm,drc-info", NULL);
if (info == NULL)
@@ -248,14 +248,10 @@ static int rpaphp_check_drc_props_v2(struct
device_node *dn, char *drc_name,
if (my_index > drc.last_drc_index)
continue;

- fndit = 1;
+ /* Found it */
+ sprintf(cell_drc_name, "%s%d", drc.drc_name_prefix, my_index);
break;
}
- /* Found it */
-
- if (fndit)
- sprintf(cell_drc_name, "%s%d", drc.drc_name_prefix,
- my_index);

if (((drc_name == NULL) ||
(drc_name && !strcmp(drc_name, cell_drc_name))) &&

Christophe

2019-06-27 19:19:32

by Nathan Chancellor

[permalink] [raw]
Subject: Re: [PATCH v2] PCI: rpaphp: Avoid a sometimes-uninitialized warning

On Mon, Jun 03, 2019 at 03:11:58PM -0700, Nathan Chancellor wrote:
> When building with -Wsometimes-uninitialized, clang warns:
>
> drivers/pci/hotplug/rpaphp_core.c:243:14: warning: variable 'fndit' is
> used uninitialized whenever 'for' loop exits because its condition is
> false [-Wsometimes-uninitialized]
> for (j = 0; j < entries; j++) {
> ^~~~~~~~~~~
> drivers/pci/hotplug/rpaphp_core.c:256:6: note: uninitialized use occurs
> here
> if (fndit)
> ^~~~~
> drivers/pci/hotplug/rpaphp_core.c:243:14: note: remove the condition if
> it is always true
> for (j = 0; j < entries; j++) {
> ^~~~~~~~~~~
> drivers/pci/hotplug/rpaphp_core.c:233:14: note: initialize the variable
> 'fndit' to silence this warning
> int j, fndit;
> ^
> = 0
>
> fndit is only used to gate a sprintf call, which can be moved into the
> loop to simplify the code and eliminate the local variable, which will
> fix this warning.
>
> Link: https://github.com/ClangBuiltLinux/linux/issues/504
> Fixes: 2fcf3ae508c2 ("hotplug/drc-info: Add code to search ibm,drc-info property")
> Suggested-by: Nick Desaulniers <[email protected]>
> Signed-off-by: Nathan Chancellor <[email protected]>
> ---
>
> v1 -> v2:
>
> * Eliminate fndit altogether by shuffling the sprintf call into the for
> loop and changing the if conditional, as suggested by Nick.
>
> drivers/pci/hotplug/rpaphp_core.c | 18 +++++++-----------
> 1 file changed, 7 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/pci/hotplug/rpaphp_core.c b/drivers/pci/hotplug/rpaphp_core.c
> index bcd5d357ca23..c3899ee1db99 100644
> --- a/drivers/pci/hotplug/rpaphp_core.c
> +++ b/drivers/pci/hotplug/rpaphp_core.c
> @@ -230,7 +230,7 @@ static int rpaphp_check_drc_props_v2(struct device_node *dn, char *drc_name,
> struct of_drc_info drc;
> const __be32 *value;
> char cell_drc_name[MAX_DRC_NAME_LEN];
> - int j, fndit;
> + int j;
>
> info = of_find_property(dn->parent, "ibm,drc-info", NULL);
> if (info == NULL)
> @@ -245,17 +245,13 @@ static int rpaphp_check_drc_props_v2(struct device_node *dn, char *drc_name,
>
> /* Should now know end of current entry */
>
> - if (my_index > drc.last_drc_index)
> - continue;
> -
> - fndit = 1;
> - break;
> + /* Found it */
> + if (my_index <= drc.last_drc_index) {
> + sprintf(cell_drc_name, "%s%d", drc.drc_name_prefix,
> + my_index);
> + break;
> + }
> }
> - /* Found it */
> -
> - if (fndit)
> - sprintf(cell_drc_name, "%s%d", drc.drc_name_prefix,
> - my_index);
>
> if (((drc_name == NULL) ||
> (drc_name && !strcmp(drc_name, cell_drc_name))) &&
> --
> 2.22.0.rc3
>

Gentle ping, can someone pick this up?

Cheers,
Nathan

2019-06-28 02:58:56

by Joel Savitz

[permalink] [raw]
Subject: Re: [PATCH v2] PCI: rpaphp: Avoid a sometimes-uninitialized warning

>On Mon, Jun 03, 2019 at 03:11:58PM -0700, Nathan Chancellor wrote:
>> When building with -Wsometimes-uninitialized, clang warns:
>>
>> drivers/pci/hotplug/rpaphp_core.c:243:14: warning: variable 'fndit' is
>> used uninitialized whenever 'for' loop exits because its condition is
>> false [-Wsometimes-uninitialized]
>> for (j = 0; j < entries; j++) {
>> ^~~~~~~~~~~
>> drivers/pci/hotplug/rpaphp_core.c:256:6: note: uninitialized use occurs
>> here
>> if (fndit)
>> ^~~~~
>> drivers/pci/hotplug/rpaphp_core.c:243:14: note: remove the condition if
>> it is always true
>> for (j = 0; j < entries; j++) {
>> ^~~~~~~~~~~
>> drivers/pci/hotplug/rpaphp_core.c:233:14: note: initialize the variable
>> 'fndit' to silence this warning
>> int j, fndit;
>> ^
>> = 0
>>
>> fndit is only used to gate a sprintf call, which can be moved into the
>> loop to simplify the code and eliminate the local variable, which will
>> fix this warning.
>>
>> Link: https://github.com/ClangBuiltLinux/linux/issues/504
>> Fixes: 2fcf3ae508c2 ("hotplug/drc-info: Add code to search ibm,drc-info property")
>> Suggested-by: Nick Desaulniers <[email protected]>
>> Signed-off-by: Nathan Chancellor <[email protected]>
>> ---
>>
>> v1 -> v2:
>>
>> * Eliminate fndit altogether by shuffling the sprintf call into the for
>> loop and changing the if conditional, as suggested by Nick.
>
>> drivers/pci/hotplug/rpaphp_core.c | 18 +++++++-----------
>> 1 file changed, 7 insertions(+), 11 deletions(-)

>> Gentle ping, can someone pick this up?

Looks a good simplification of somewhat convoluted control flow.

Acked-by: Joel Savitz <[email protected]>

2019-07-22 02:51:59

by Nathan Chancellor

[permalink] [raw]
Subject: Re: [PATCH v2] PCI: rpaphp: Avoid a sometimes-uninitialized warning

On Mon, Jun 03, 2019 at 03:11:58PM -0700, Nathan Chancellor wrote:
> When building with -Wsometimes-uninitialized, clang warns:
>
> drivers/pci/hotplug/rpaphp_core.c:243:14: warning: variable 'fndit' is
> used uninitialized whenever 'for' loop exits because its condition is
> false [-Wsometimes-uninitialized]
> for (j = 0; j < entries; j++) {
> ^~~~~~~~~~~
> drivers/pci/hotplug/rpaphp_core.c:256:6: note: uninitialized use occurs
> here
> if (fndit)
> ^~~~~
> drivers/pci/hotplug/rpaphp_core.c:243:14: note: remove the condition if
> it is always true
> for (j = 0; j < entries; j++) {
> ^~~~~~~~~~~
> drivers/pci/hotplug/rpaphp_core.c:233:14: note: initialize the variable
> 'fndit' to silence this warning
> int j, fndit;
> ^
> = 0
>
> fndit is only used to gate a sprintf call, which can be moved into the
> loop to simplify the code and eliminate the local variable, which will
> fix this warning.
>
> Link: https://github.com/ClangBuiltLinux/linux/issues/504
> Fixes: 2fcf3ae508c2 ("hotplug/drc-info: Add code to search ibm,drc-info property")
> Suggested-by: Nick Desaulniers <[email protected]>
> Signed-off-by: Nathan Chancellor <[email protected]>
> ---
>
> v1 -> v2:
>
> * Eliminate fndit altogether by shuffling the sprintf call into the for
> loop and changing the if conditional, as suggested by Nick.
>
> drivers/pci/hotplug/rpaphp_core.c | 18 +++++++-----------
> 1 file changed, 7 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/pci/hotplug/rpaphp_core.c b/drivers/pci/hotplug/rpaphp_core.c
> index bcd5d357ca23..c3899ee1db99 100644
> --- a/drivers/pci/hotplug/rpaphp_core.c
> +++ b/drivers/pci/hotplug/rpaphp_core.c
> @@ -230,7 +230,7 @@ static int rpaphp_check_drc_props_v2(struct device_node *dn, char *drc_name,
> struct of_drc_info drc;
> const __be32 *value;
> char cell_drc_name[MAX_DRC_NAME_LEN];
> - int j, fndit;
> + int j;
>
> info = of_find_property(dn->parent, "ibm,drc-info", NULL);
> if (info == NULL)
> @@ -245,17 +245,13 @@ static int rpaphp_check_drc_props_v2(struct device_node *dn, char *drc_name,
>
> /* Should now know end of current entry */
>
> - if (my_index > drc.last_drc_index)
> - continue;
> -
> - fndit = 1;
> - break;
> + /* Found it */
> + if (my_index <= drc.last_drc_index) {
> + sprintf(cell_drc_name, "%s%d", drc.drc_name_prefix,
> + my_index);
> + break;
> + }
> }
> - /* Found it */
> -
> - if (fndit)
> - sprintf(cell_drc_name, "%s%d", drc.drc_name_prefix,
> - my_index);
>
> if (((drc_name == NULL) ||
> (drc_name && !strcmp(drc_name, cell_drc_name))) &&
> --
> 2.22.0.rc3
>

Hi all,

Could someone please pick this up?

Thanks,
Nathan

2019-07-22 04:22:43

by Michael Ellerman

[permalink] [raw]
Subject: Re: [PATCH v2] PCI: rpaphp: Avoid a sometimes-uninitialized warning

Nathan Chancellor <[email protected]> writes:
> On Mon, Jun 03, 2019 at 03:11:58PM -0700, Nathan Chancellor wrote:
>> When building with -Wsometimes-uninitialized, clang warns:
>>
>> drivers/pci/hotplug/rpaphp_core.c:243:14: warning: variable 'fndit' is
>> used uninitialized whenever 'for' loop exits because its condition is
>> false [-Wsometimes-uninitialized]
>> for (j = 0; j < entries; j++) {
>> ^~~~~~~~~~~
>> drivers/pci/hotplug/rpaphp_core.c:256:6: note: uninitialized use occurs
>> here
>> if (fndit)
>> ^~~~~
>> drivers/pci/hotplug/rpaphp_core.c:243:14: note: remove the condition if
>> it is always true
>> for (j = 0; j < entries; j++) {
>> ^~~~~~~~~~~
>> drivers/pci/hotplug/rpaphp_core.c:233:14: note: initialize the variable
>> 'fndit' to silence this warning
>> int j, fndit;
>> ^
>> = 0
>>
>> fndit is only used to gate a sprintf call, which can be moved into the
>> loop to simplify the code and eliminate the local variable, which will
>> fix this warning.
>>
>> Link: https://github.com/ClangBuiltLinux/linux/issues/504
>> Fixes: 2fcf3ae508c2 ("hotplug/drc-info: Add code to search ibm,drc-info property")
>> Suggested-by: Nick Desaulniers <[email protected]>
>> Signed-off-by: Nathan Chancellor <[email protected]>
>> ---
>>
>> v1 -> v2:
>>
>> * Eliminate fndit altogether by shuffling the sprintf call into the for
>> loop and changing the if conditional, as suggested by Nick.
>>
>> drivers/pci/hotplug/rpaphp_core.c | 18 +++++++-----------
>> 1 file changed, 7 insertions(+), 11 deletions(-)
>>
>> diff --git a/drivers/pci/hotplug/rpaphp_core.c b/drivers/pci/hotplug/rpaphp_core.c
>> index bcd5d357ca23..c3899ee1db99 100644
>> --- a/drivers/pci/hotplug/rpaphp_core.c
>> +++ b/drivers/pci/hotplug/rpaphp_core.c
>> @@ -230,7 +230,7 @@ static int rpaphp_check_drc_props_v2(struct device_node *dn, char *drc_name,
>> struct of_drc_info drc;
>> const __be32 *value;
>> char cell_drc_name[MAX_DRC_NAME_LEN];
>> - int j, fndit;
>> + int j;
>>
>> info = of_find_property(dn->parent, "ibm,drc-info", NULL);
>> if (info == NULL)
>> @@ -245,17 +245,13 @@ static int rpaphp_check_drc_props_v2(struct device_node *dn, char *drc_name,
>>
>> /* Should now know end of current entry */
>>
>> - if (my_index > drc.last_drc_index)
>> - continue;
>> -
>> - fndit = 1;
>> - break;
>> + /* Found it */
>> + if (my_index <= drc.last_drc_index) {
>> + sprintf(cell_drc_name, "%s%d", drc.drc_name_prefix,
>> + my_index);
>> + break;
>> + }
>> }
>> - /* Found it */
>> -
>> - if (fndit)
>> - sprintf(cell_drc_name, "%s%d", drc.drc_name_prefix,
>> - my_index);
>>
>> if (((drc_name == NULL) ||
>> (drc_name && !strcmp(drc_name, cell_drc_name))) &&
>> --
>> 2.22.0.rc3
>>
>
> Hi all,
>
> Could someone please pick this up?

I'll take it.

I was expecting Bjorn to take it as a PCI patch, but I realise now that
I merged that code in the first place so may as well take this too.

I'll put it in my next branch once that opens next week.

cheers

2019-08-02 02:30:58

by Bjorn Helgaas

[permalink] [raw]
Subject: Re: [PATCH v2] PCI: rpaphp: Avoid a sometimes-uninitialized warning

On Mon, Jul 22, 2019 at 02:05:12PM +1000, Michael Ellerman wrote:
> Nathan Chancellor <[email protected]> writes:
> > On Mon, Jun 03, 2019 at 03:11:58PM -0700, Nathan Chancellor wrote:
> >> When building with -Wsometimes-uninitialized, clang warns:
> >>
> >> drivers/pci/hotplug/rpaphp_core.c:243:14: warning: variable 'fndit' is
> >> used uninitialized whenever 'for' loop exits because its condition is
> >> false [-Wsometimes-uninitialized]
> >> for (j = 0; j < entries; j++) {
> >> ^~~~~~~~~~~
> >> drivers/pci/hotplug/rpaphp_core.c:256:6: note: uninitialized use occurs
> >> here
> >> if (fndit)
> >> ^~~~~
> >> drivers/pci/hotplug/rpaphp_core.c:243:14: note: remove the condition if
> >> it is always true
> >> for (j = 0; j < entries; j++) {
> >> ^~~~~~~~~~~
> >> drivers/pci/hotplug/rpaphp_core.c:233:14: note: initialize the variable
> >> 'fndit' to silence this warning
> >> int j, fndit;
> >> ^
> >> = 0
> >>
> >> fndit is only used to gate a sprintf call, which can be moved into the
> >> loop to simplify the code and eliminate the local variable, which will
> >> fix this warning.
> >>
> >> Link: https://github.com/ClangBuiltLinux/linux/issues/504
> >> Fixes: 2fcf3ae508c2 ("hotplug/drc-info: Add code to search ibm,drc-info property")
> >> Suggested-by: Nick Desaulniers <[email protected]>
> >> Signed-off-by: Nathan Chancellor <[email protected]>
> >> ---
> >>
> >> v1 -> v2:
> >>
> >> * Eliminate fndit altogether by shuffling the sprintf call into the for
> >> loop and changing the if conditional, as suggested by Nick.
> >>
> >> drivers/pci/hotplug/rpaphp_core.c | 18 +++++++-----------
> >> 1 file changed, 7 insertions(+), 11 deletions(-)
> >>
> >> diff --git a/drivers/pci/hotplug/rpaphp_core.c b/drivers/pci/hotplug/rpaphp_core.c
> >> index bcd5d357ca23..c3899ee1db99 100644
> >> --- a/drivers/pci/hotplug/rpaphp_core.c
> >> +++ b/drivers/pci/hotplug/rpaphp_core.c
> >> @@ -230,7 +230,7 @@ static int rpaphp_check_drc_props_v2(struct device_node *dn, char *drc_name,
> >> struct of_drc_info drc;
> >> const __be32 *value;
> >> char cell_drc_name[MAX_DRC_NAME_LEN];
> >> - int j, fndit;
> >> + int j;
> >>
> >> info = of_find_property(dn->parent, "ibm,drc-info", NULL);
> >> if (info == NULL)
> >> @@ -245,17 +245,13 @@ static int rpaphp_check_drc_props_v2(struct device_node *dn, char *drc_name,
> >>
> >> /* Should now know end of current entry */
> >>
> >> - if (my_index > drc.last_drc_index)
> >> - continue;
> >> -
> >> - fndit = 1;
> >> - break;
> >> + /* Found it */
> >> + if (my_index <= drc.last_drc_index) {
> >> + sprintf(cell_drc_name, "%s%d", drc.drc_name_prefix,
> >> + my_index);
> >> + break;
> >> + }
> >> }
> >> - /* Found it */
> >> -
> >> - if (fndit)
> >> - sprintf(cell_drc_name, "%s%d", drc.drc_name_prefix,
> >> - my_index);
> >>
> >> if (((drc_name == NULL) ||
> >> (drc_name && !strcmp(drc_name, cell_drc_name))) &&
> >> --
> >> 2.22.0.rc3
> >>
> >
> > Hi all,
> >
> > Could someone please pick this up?
>
> I'll take it.
>
> I was expecting Bjorn to take it as a PCI patch, but I realise now that
> I merged that code in the first place so may as well take this too.
>
> I'll put it in my next branch once that opens next week.

Sorry, I should have done something with this. Did you take it,
Michael? I don't see it in -next and haven't figured out where to
look in your git tree, so I can't tell. Just let me know either way
so I know whether to drop this or apply it.

Bjorn

2019-08-02 22:18:22

by Michael Ellerman

[permalink] [raw]
Subject: Re: [PATCH v2] PCI: rpaphp: Avoid a sometimes-uninitialized warning

Bjorn Helgaas <[email protected]> writes:
> On Mon, Jul 22, 2019 at 02:05:12PM +1000, Michael Ellerman wrote:
>> Nathan Chancellor <[email protected]> writes:
>> > On Mon, Jun 03, 2019 at 03:11:58PM -0700, Nathan Chancellor wrote:
>> >> When building with -Wsometimes-uninitialized, clang warns:
>> >>
>> >> drivers/pci/hotplug/rpaphp_core.c:243:14: warning: variable 'fndit' is
>> >> used uninitialized whenever 'for' loop exits because its condition is
>> >> false [-Wsometimes-uninitialized]
>> >> for (j = 0; j < entries; j++) {
>> >> ^~~~~~~~~~~
>> >> drivers/pci/hotplug/rpaphp_core.c:256:6: note: uninitialized use occurs
>> >> here
>> >> if (fndit)
>> >> ^~~~~
>> >> drivers/pci/hotplug/rpaphp_core.c:243:14: note: remove the condition if
>> >> it is always true
>> >> for (j = 0; j < entries; j++) {
>> >> ^~~~~~~~~~~
>> >> drivers/pci/hotplug/rpaphp_core.c:233:14: note: initialize the variable
>> >> 'fndit' to silence this warning
>> >> int j, fndit;
>> >> ^
>> >> = 0
>> >>
>> >> fndit is only used to gate a sprintf call, which can be moved into the
>> >> loop to simplify the code and eliminate the local variable, which will
>> >> fix this warning.
>> >>
>> >> Link: https://github.com/ClangBuiltLinux/linux/issues/504
>> >> Fixes: 2fcf3ae508c2 ("hotplug/drc-info: Add code to search ibm,drc-info property")
>> >> Suggested-by: Nick Desaulniers <[email protected]>
>> >> Signed-off-by: Nathan Chancellor <[email protected]>
>> >> ---
>> >>
>> >> v1 -> v2:
>> >>
>> >> * Eliminate fndit altogether by shuffling the sprintf call into the for
>> >> loop and changing the if conditional, as suggested by Nick.
>> >>
>> >> drivers/pci/hotplug/rpaphp_core.c | 18 +++++++-----------
>> >> 1 file changed, 7 insertions(+), 11 deletions(-)
>> >>
>> >> diff --git a/drivers/pci/hotplug/rpaphp_core.c b/drivers/pci/hotplug/rpaphp_core.c
>> >> index bcd5d357ca23..c3899ee1db99 100644
>> >> --- a/drivers/pci/hotplug/rpaphp_core.c
>> >> +++ b/drivers/pci/hotplug/rpaphp_core.c
>> >> @@ -230,7 +230,7 @@ static int rpaphp_check_drc_props_v2(struct device_node *dn, char *drc_name,
>> >> struct of_drc_info drc;
>> >> const __be32 *value;
>> >> char cell_drc_name[MAX_DRC_NAME_LEN];
>> >> - int j, fndit;
>> >> + int j;
>> >>
>> >> info = of_find_property(dn->parent, "ibm,drc-info", NULL);
>> >> if (info == NULL)
>> >> @@ -245,17 +245,13 @@ static int rpaphp_check_drc_props_v2(struct device_node *dn, char *drc_name,
>> >>
>> >> /* Should now know end of current entry */
>> >>
>> >> - if (my_index > drc.last_drc_index)
>> >> - continue;
>> >> -
>> >> - fndit = 1;
>> >> - break;
>> >> + /* Found it */
>> >> + if (my_index <= drc.last_drc_index) {
>> >> + sprintf(cell_drc_name, "%s%d", drc.drc_name_prefix,
>> >> + my_index);
>> >> + break;
>> >> + }
>> >> }
>> >> - /* Found it */
>> >> -
>> >> - if (fndit)
>> >> - sprintf(cell_drc_name, "%s%d", drc.drc_name_prefix,
>> >> - my_index);
>> >>
>> >> if (((drc_name == NULL) ||
>> >> (drc_name && !strcmp(drc_name, cell_drc_name))) &&
>> >> --
>> >> 2.22.0.rc3
>> >>
>> >
>> > Hi all,
>> >
>> > Could someone please pick this up?
>>
>> I'll take it.
>>
>> I was expecting Bjorn to take it as a PCI patch, but I realise now that
>> I merged that code in the first place so may as well take this too.
>>
>> I'll put it in my next branch once that opens next week.
>
> Sorry, I should have done something with this. Did you take it,
> Michael? I don't see it in -next and haven't figured out where to
> look in your git tree, so I can't tell. Just let me know either way
> so I know whether to drop this or apply it.

Yes I have it in my next-test, which will eventually become my next when
I get time to rebase it, test and push etc:

https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/log/?h=next-test

So no further action required on your part.

cheers

2019-08-10 10:21:29

by Michael Ellerman

[permalink] [raw]
Subject: Re: [PATCH v2] PCI: rpaphp: Avoid a sometimes-uninitialized warning

On Mon, 2019-06-03 at 22:11:58 UTC, Nathan Chancellor wrote:
> When building with -Wsometimes-uninitialized, clang warns:
>
> drivers/pci/hotplug/rpaphp_core.c:243:14: warning: variable 'fndit' is
> used uninitialized whenever 'for' loop exits because its condition is
> false [-Wsometimes-uninitialized]
> for (j = 0; j < entries; j++) {
> ^~~~~~~~~~~
> drivers/pci/hotplug/rpaphp_core.c:256:6: note: uninitialized use occurs
> here
> if (fndit)
> ^~~~~
> drivers/pci/hotplug/rpaphp_core.c:243:14: note: remove the condition if
> it is always true
> for (j = 0; j < entries; j++) {
> ^~~~~~~~~~~
> drivers/pci/hotplug/rpaphp_core.c:233:14: note: initialize the variable
> 'fndit' to silence this warning
> int j, fndit;
> ^
> = 0
>
> fndit is only used to gate a sprintf call, which can be moved into the
> loop to simplify the code and eliminate the local variable, which will
> fix this warning.
>
> Link: https://github.com/ClangBuiltLinux/linux/issues/504
> Fixes: 2fcf3ae508c2 ("hotplug/drc-info: Add code to search ibm,drc-info property")
> Suggested-by: Nick Desaulniers <[email protected]>
> Signed-off-by: Nathan Chancellor <[email protected]>
> Acked-by: Tyrel Datwyler <[email protected]>
> Acked-by: Joel Savitz <[email protected]>

Applied to powerpc next, thanks.

https://git.kernel.org/powerpc/c/0df3e42167caaf9f8c7b64de3da40a459979afe8

cheers