x86/mm/ptdump: Fix soft lockup in page table walker

CONFIG_KASAN=y needs a lot of virtual memory mapped for its shadow.
In that case ptdump_walk_pgd_level_core() takes a lot of time to
walk across all page tables and doing this without
a rescheduling causes soft lockups:

NMI watchdog: BUG: soft lockup - CPU#3 stuck for 23s! [swapper/0:1]
...
Call Trace:
ptdump_walk_pgd_level_core+0x40c/0x550
ptdump_walk_pgd_level_checkwx+0x17/0x20
mark_rodata_ro+0x13b/0x150
kernel_init+0x2f/0x120
ret_from_fork+0x2c/0x40

I guess that this issue might arise even without KASAN on huge machines
with several terabytes of RAM.

Stick cond_resched() in pgd loop to fix this.

Reported-by: Tobias Regnery <tobias.regnery@gmail.com>
Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
Cc: kasan-dev@googlegroups.com
Cc: Alexander Potapenko <glider@google.com>
Cc: "Paul E . McKenney" <paulmck@linux.vnet.ibm.com>
Cc: Dmitry Vyukov <dvyukov@google.com>
Cc: stable@vger.kernel.org
Link: http://lkml.kernel.org/r/20170210095405.31802-1-aryabinin@virtuozzo.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

authored by Andrey Ryabinin and committed by Thomas Gleixner 146fbb76 5f2e71e7

Changed files
+2
arch
+2
arch/x86/mm/dump_pagetables.c
··· 15 15 #include <linux/debugfs.h> 16 16 #include <linux/mm.h> 17 17 #include <linux/init.h> 18 + #include <linux/sched.h> 18 19 #include <linux/seq_file.h> 19 20 20 21 #include <asm/pgtable.h> ··· 407 406 } else 408 407 note_page(m, &st, __pgprot(0), 1); 409 408 409 + cond_resched(); 410 410 start++; 411 411 } 412 412