projects
/
platform
/
kernel
/
linux-starfive.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
92264f2
)
LoongArch: Fix sleeping in atomic context in setup_tlb_handler()
author
Huacai Chen
<chenhuacai@loongson.cn>
Thu, 23 Jun 2022 01:55:42 +0000
(09:55 +0800)
committer
Huacai Chen
<chenhuacai@loongson.cn>
Sat, 25 Jun 2022 10:05:58 +0000
(18:05 +0800)
Since setup_tlb_handler() is executed in atomic context, we should use
GFP_ATOMIC instead of GFP_KERNEL to alloc pages. Otherwise we will get
a "sleeping in atomic context" error:
[ 0.013118] BUG: sleeping function called from invalid context at mm/page_alloc.c:5158
[ 0.013126] in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 0, name: swapper/1
[ 0.013131] CPU: 1 PID: 0 Comm: swapper/1 Not tainted 5.19-rc3+ #1008
1a223086d14d07967cc427f15d52139422271360
[ 0.013136] Hardware name: Loongson Loongson-3A5000-7A1000-1w-V0.1-CRB/Loongson-LS3A5000-7A1000-1w-EVB-V1.21, BIOS Loongson-UDK2018-V2.0.04082-beta7 04/27
[ 0.013140] Stack :
90000000015fc990
9000000100493c18
9000000000df3370
9000000100490000
[ 0.013151]
9000000100493b50
0000000000000000
9000000100493b58
9000000001417ef0
[ 0.013160]
900000000199e54e
0000000000000040
9000000100493c18
90000000015f7a98
[ 0.013168]
ffffffffffffffff
6de72f8b42179d1e
9000000100403b80
90000000015f7890
[ 0.013176]
0000000000000001
00000000fffff175
9000000000eb9860
9000000001530b4b
[ 0.013184]
9000000000e99e60
0000000000000013
0000000006ecc000
0000000000000001
[ 0.013193]
90000000015f7a98
9000000001417ef0
0000000000000004
0000000000000000
[ 0.013201]
0000000000000cc0
0000000000000000
0000000000000001
90000000015fc990
[ 0.013209]
9000000000217e74
9000000001603b6b
9000000000208640
0000000000000000
[ 0.013217]
00000000000000b0
0000000000000004
0000000000000000
0000000000070000
[ 0.013225] ...
[ 0.013229] Call Trace:
[ 0.013230] [<
9000000000208640
>] show_stack+0x4c/0x14c
[ 0.013240] [<
9000000000df3370
>] dump_stack_lvl+0x70/0xac
[ 0.013246] [<
9000000000270c8c
>] ___might_sleep+0x104/0x124
[ 0.013253] [<
9000000000477e84
>] __alloc_pages+0x240/0x464
[ 0.013260] [<
9000000000214214
>] setup_tlb_handler+0x104/0x1e8
[ 0.013265] [<
9000000000214324
>] tlb_init+0x2c/0x3c
[ 0.013270] [<
9000000000208b74
>] per_cpu_trap_init+0xec/0x108
[ 0.013275] [<
9000000000202850
>] cpu_probe+0x400/0x8a4
[ 0.013279] [<
900000000020d160
>] start_secondary+0x5c/0x3d4
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
arch/loongarch/mm/tlb.c
patch
|
blob
|
history
diff --git
a/arch/loongarch/mm/tlb.c
b/arch/loongarch/mm/tlb.c
index
e272f8a
..
6d05097
100644
(file)
--- a/
arch/loongarch/mm/tlb.c
+++ b/
arch/loongarch/mm/tlb.c
@@
-281,7
+281,7
@@
void setup_tlb_handler(int cpu)
if (pcpu_handlers[cpu])
return;
- page = alloc_pages_node(cpu_to_node(cpu), GFP_
KERNEL
, get_order(vec_sz));
+ page = alloc_pages_node(cpu_to_node(cpu), GFP_
ATOMIC
, get_order(vec_sz));
if (!page)
return;