| From 933a0dbe333f1205f1f0a57a4c982519b68706d2 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 1 Oct 2019 14:16:56 +0530 |
| Subject: powerpc/book3s64/hash: Add cond_resched to avoid soft lockup warning |
| |
| From: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> |
| |
| [ Upstream commit 16f6b67cf03cb43db7104acb2ca877bdc2606c92 ] |
| |
| With large memory (8TB and more) hotplug, we can get soft lockup |
| warnings as below. These were caused by a long loop without any |
| explicit cond_resched which is a problem for !PREEMPT kernels. |
| |
| Avoid this using cond_resched() while inserting hash page table |
| entries. We already do similar cond_resched() in __add_pages(), see |
| commit f64ac5e6e306 ("mm, memory_hotplug: add scheduling point to |
| __add_pages"). |
| |
| rcu: 3-....: (24002 ticks this GP) idle=13e/1/0x4000000000000002 softirq=722/722 fqs=12001 |
| (t=24003 jiffies g=4285 q=2002) |
| NMI backtrace for cpu 3 |
| CPU: 3 PID: 3870 Comm: ndctl Not tainted 5.3.0-197.18-default+ #2 |
| Call Trace: |
| dump_stack+0xb0/0xf4 (unreliable) |
| nmi_cpu_backtrace+0x124/0x130 |
| nmi_trigger_cpumask_backtrace+0x1ac/0x1f0 |
| arch_trigger_cpumask_backtrace+0x28/0x3c |
| rcu_dump_cpu_stacks+0xf8/0x154 |
| rcu_sched_clock_irq+0x878/0xb40 |
| update_process_times+0x48/0x90 |
| tick_sched_handle.isra.16+0x4c/0x80 |
| tick_sched_timer+0x68/0xe0 |
| __hrtimer_run_queues+0x180/0x430 |
| hrtimer_interrupt+0x110/0x300 |
| timer_interrupt+0x108/0x2f0 |
| decrementer_common+0x114/0x120 |
| --- interrupt: 901 at arch_add_memory+0xc0/0x130 |
| LR = arch_add_memory+0x74/0x130 |
| memremap_pages+0x494/0x650 |
| devm_memremap_pages+0x3c/0xa0 |
| pmem_attach_disk+0x188/0x750 |
| nvdimm_bus_probe+0xac/0x2c0 |
| really_probe+0x148/0x570 |
| driver_probe_device+0x19c/0x1d0 |
| device_driver_attach+0xcc/0x100 |
| bind_store+0x134/0x1c0 |
| drv_attr_store+0x44/0x60 |
| sysfs_kf_write+0x64/0x90 |
| kernfs_fop_write+0x1a0/0x270 |
| __vfs_write+0x3c/0x70 |
| vfs_write+0xd0/0x260 |
| ksys_write+0xdc/0x130 |
| system_call+0x5c/0x68 |
| |
| Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> |
| Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> |
| Link: https://lore.kernel.org/r/20191001084656.31277-1-aneesh.kumar@linux.ibm.com |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/powerpc/mm/hash_utils_64.c | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c |
| index 11b41383e167..8894c8f300ea 100644 |
| --- a/arch/powerpc/mm/hash_utils_64.c |
| +++ b/arch/powerpc/mm/hash_utils_64.c |
| @@ -307,6 +307,7 @@ int htab_bolt_mapping(unsigned long vstart, unsigned long vend, |
| if (ret < 0) |
| break; |
| |
| + cond_resched(); |
| #ifdef CONFIG_DEBUG_PAGEALLOC |
| if (debug_pagealloc_enabled() && |
| (paddr >> PAGE_SHIFT) < linear_map_hash_count) |
| -- |
| 2.20.1 |
| |