Message ID | 20210618151436.38217-1-wanjiabing@vivo.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | mm/percpu: Fix gfp flag in pcpu_balance_populated | expand |
Hello, On Fri, Jun 18, 2021 at 11:14:36PM +0800, Wan Jiabing wrote: > Fix coccicheck warning: > > ./mm/percpu.c:2045:19-29: ERROR: function pcpu_balance_populated > called on line 2232 inside lock on line 2228 but uses GFP_KERNEL > > When pcpu_balance_populated() is called in pcpu_balance_workfn(), > it helds spin_lock but use GFP_KERNEL to alloc mem, which is unsafe. > > Signed-off-by: Wan Jiabing <wanjiabing@vivo.com> > --- > mm/percpu.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/mm/percpu.c b/mm/percpu.c > index b4cebeca4c0c..4031f32e6975 100644 > --- a/mm/percpu.c > +++ b/mm/percpu.c > @@ -2042,7 +2042,7 @@ static void pcpu_balance_free(bool empty_only) > static void pcpu_balance_populated(void) > { > /* gfp flags passed to underlying allocators */ > - const gfp_t gfp = GFP_KERNEL | __GFP_NORETRY | __GFP_NOWARN; > + const gfp_t gfp = GFP_ATOMIC | __GFP_NORETRY | __GFP_NOWARN; > struct pcpu_chunk *chunk; > int slot, nr_to_pop, ret; > > -- > 2.30.2 > In both places gfp flags are passed, the pcpu_lock is dropped. So I think this is an issue with coccicheck. Regardless, the fix wouldn't be to switch to GFP_ATOMIC but to make the locking correct. Thanks, Dennis
diff --git a/mm/percpu.c b/mm/percpu.c index b4cebeca4c0c..4031f32e6975 100644 --- a/mm/percpu.c +++ b/mm/percpu.c @@ -2042,7 +2042,7 @@ static void pcpu_balance_free(bool empty_only) static void pcpu_balance_populated(void) { /* gfp flags passed to underlying allocators */ - const gfp_t gfp = GFP_KERNEL | __GFP_NORETRY | __GFP_NOWARN; + const gfp_t gfp = GFP_ATOMIC | __GFP_NORETRY | __GFP_NOWARN; struct pcpu_chunk *chunk; int slot, nr_to_pop, ret;
Fix coccicheck warning: ./mm/percpu.c:2045:19-29: ERROR: function pcpu_balance_populated called on line 2232 inside lock on line 2228 but uses GFP_KERNEL When pcpu_balance_populated() is called in pcpu_balance_workfn(), it helds spin_lock but use GFP_KERNEL to alloc mem, which is unsafe. Signed-off-by: Wan Jiabing <wanjiabing@vivo.com> --- mm/percpu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)