2017-06-21 05:20:25

by Stephen Rothwell

[permalink] [raw]
Subject: linux-next: build warning after merge of the percpu tree

Hi all,

After merging the percpu tree, today's linux-next build (arm
multi_v7_defconfig) produced this warning:

In file included from include/linux/kernel.h:13:0,
from include/linux/bitmap.h:9,
from mm/percpu.c:58:
mm/percpu.c: In function 'pcpu_alloc':
include/linux/printk.h:303:2: warning: 'err' may be used uninitialized in this function [-Wmaybe-uninitialized]
printk(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__)
^
mm/percpu.c:864:14: note: 'err' was declared here
const char *err;
^

I am not sure which commit introduced this, although the

if (is_atomic)
goto fail;

in pcpu_alloc() looks suspicious.

--
Cheers,
Stephen Rothwell


2017-06-21 16:24:30

by Tejun Heo

[permalink] [raw]
Subject: Re: [PATCH 1/1] percpu: resolve err may not be initialized in pcpu_alloc

On Wed, Jun 21, 2017 at 11:51:09AM -0400, Dennis Zhou wrote:
> From 4a42ecc735cff0015cc73c3d87edede631f4b885 Mon Sep 17 00:00:00 2001
> From: Dennis Zhou <[email protected]>
> Date: Wed, 21 Jun 2017 08:07:15 -0700
>
> Add error message to out of space failure for atomic allocations in
> percpu allocation path to fix -Wmaybe-uninitialized.
>
> Signed-off-by: Dennis Zhou <[email protected]>
> Reported-by: Stephen Rothwell <[email protected]>

Applied to percpu/for-4.13.

Thanks.

--
tejun

2017-06-21 16:33:51

by Dennis Zhou

[permalink] [raw]
Subject: [PATCH 1/1] percpu: resolve err may not be initialized in pcpu_alloc

>From 4a42ecc735cff0015cc73c3d87edede631f4b885 Mon Sep 17 00:00:00 2001
From: Dennis Zhou <[email protected]>
Date: Wed, 21 Jun 2017 08:07:15 -0700

Add error message to out of space failure for atomic allocations in
percpu allocation path to fix -Wmaybe-uninitialized.

Signed-off-by: Dennis Zhou <[email protected]>
Reported-by: Stephen Rothwell <[email protected]>
---
mm/percpu.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/mm/percpu.c b/mm/percpu.c
index a5bc363..bd4130a 100644
--- a/mm/percpu.c
+++ b/mm/percpu.c
@@ -956,8 +956,10 @@ static void __percpu *pcpu_alloc(size_t size, size_t align, bool reserved,
* tasks to create chunks simultaneously. Serialize and create iff
* there's still no empty chunk after grabbing the mutex.
*/
- if (is_atomic)
+ if (is_atomic) {
+ err = "atomic alloc failed, no space left";
goto fail;
+ }

if (list_empty(&pcpu_slot[pcpu_nr_slots - 1])) {
chunk = pcpu_create_chunk();
--
2.9.3