| From 0095c48784a97827e79374e09bd6790e879e49ba Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 24 Mar 2021 21:37:38 -0700 |
| Subject: ia64: mca: allocate early mca with GFP_ATOMIC |
| |
| From: Sergei Trofimovich <slyfox@gentoo.org> |
| |
| [ Upstream commit f2a419cf495f95cac49ea289318b833477e1a0e2 ] |
| |
| The sleep warning happens at early boot right at secondary CPU |
| activation bootup: |
| |
| smp: Bringing up secondary CPUs ... |
| BUG: sleeping function called from invalid context at mm/page_alloc.c:4942 |
| in_atomic(): 0, irqs_disabled(): 1, non_block: 0, pid: 0, name: swapper/1 |
| CPU: 1 PID: 0 Comm: swapper/1 Not tainted 5.12.0-rc2-00007-g79e228d0b611-dirty #99 |
| .. |
| Call Trace: |
| show_stack+0x90/0xc0 |
| dump_stack+0x150/0x1c0 |
| ___might_sleep+0x1c0/0x2a0 |
| __might_sleep+0xa0/0x160 |
| __alloc_pages_nodemask+0x1a0/0x600 |
| alloc_page_interleave+0x30/0x1c0 |
| alloc_pages_current+0x2c0/0x340 |
| __get_free_pages+0x30/0xa0 |
| ia64_mca_cpu_init+0x2d0/0x3a0 |
| cpu_init+0x8b0/0x1440 |
| start_secondary+0x60/0x700 |
| start_ap+0x750/0x780 |
| Fixed BSP b0 value from CPU 1 |
| |
| As I understand interrupts are not enabled yet and system has a lot of |
| memory. There is little chance to sleep and switch to GFP_ATOMIC should |
| be a no-op. |
| |
| Link: https://lkml.kernel.org/r/20210315085045.204414-1-slyfox@gentoo.org |
| Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/ia64/kernel/mca.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/arch/ia64/kernel/mca.c b/arch/ia64/kernel/mca.c |
| index 9509cc73b9c6..64ae9cde8bdb 100644 |
| --- a/arch/ia64/kernel/mca.c |
| +++ b/arch/ia64/kernel/mca.c |
| @@ -1858,7 +1858,7 @@ ia64_mca_cpu_init(void *cpu_data) |
| data = mca_bootmem(); |
| first_time = 0; |
| } else |
| - data = (void *)__get_free_pages(GFP_KERNEL, |
| + data = (void *)__get_free_pages(GFP_ATOMIC, |
| get_order(sz)); |
| if (!data) |
| panic("Could not allocate MCA memory for cpu %d\n", |
| -- |
| 2.30.2 |
| |