Re: [PATCH V6 0/2] mm/debug: Add tests validating architecture page table helpers

From: Anshuman Khandual
Date: Wed Oct 16 2019 - 04:59:53 EST




On 10/16/2019 12:12 AM, Qian Cai wrote:
> On Tue, 2019-10-15 at 20:51 +0530, Anshuman Khandual wrote:
>>
>> On 10/15/2019 08:11 PM, Qian Cai wrote:
>>> The x86 will crash with linux-next during boot due to this series (v5) with the
>>> config below plus CONFIG_DEBUG_VM_PGTABLE=y. I am not sure if v6 would address
>>> it.
>>>
>>> https://raw.githubusercontent.com/cailca/linux-mm/master/x86.config
>>>
>>> [ÂÂÂ33.862600][ÂÂÂÂT1] page:ffffea0009000000 is uninitialized and poisoned
>>> [ÂÂÂ33.862608][ÂÂÂÂT1] raw: ffffffffffffffff ffffffffffffffff ffffffffffffffff
>>> ffffff871140][ÂÂÂÂT1]ÂÂ? _raw_spin_unlock_irq+0x27/0x40
>>> [ÂÂÂ33.871140][ÂÂÂÂT1]ÂÂ? rest_init+0x307/0x307
>>> [ÂÂÂ33.871140][ÂÂÂÂT1]ÂÂkernel_init+0x11/0x139
>>> [ÂÂÂ33.871140][ÂÂÂÂT1]ÂÂ? rest_init+0x307/0x307
>>> [ÂÂÂ33.871140][ÂÂÂÂT1]ÂÂret_from_fork+0x27/0x50
>>> [ÂÂÂ33.871140][ÂÂÂÂT1] Modules linked in:
>>> [ÂÂÂ33.871140][ÂÂÂÂT1] ---[ end trace e99d392b0f7befbd ]---
>>> [ÂÂÂ33.871140][ÂÂÂÂT1] RIP: 0010:alloc_gigantic_page_order+0x3fe/0x490
>>
>> Hmm, with defconfig (DEBUG_VM=y and DEBUG_VM_PGTABLE=y) it does not crash but
>> with the config above, it does. Just wondering if it is possible that these
>> pages might not been initialized yet because DEFERRED_STRUCT_PAGE_INIT=y ?
>
> Yes, this patch works fine.
>
> diff --git a/init/main.c b/init/main.c
> index 676d8020dd29..591be8f9e8e0 100644
> --- a/init/main.c
> +++ b/init/main.c
> @@ -1177,7 +1177,6 @@ static noinline void __init kernel_init_freeable(void)
> ÂÂÂÂÂÂÂÂworkqueue_init();
> Â
> ÂÂÂÂÂÂÂÂinit_mm_internals();
> -ÂÂÂÂÂÂÂdebug_vm_pgtable();
> Â
> ÂÂÂÂÂÂÂÂdo_pre_smp_initcalls();
> ÂÂÂÂÂÂÂÂlockup_detector_init();
> @@ -1186,6 +1185,8 @@ static noinline void __init kernel_init_freeable(void)
> ÂÂÂÂÂÂÂÂsched_init_smp();
> Â
> ÂÂÂÂÂÂÂÂpage_alloc_init_late();
> +ÂÂÂÂÂÂÂdebug_vm_pgtable();
> +
> ÂÂÂÂÂÂÂÂ/* Initialize page ext after all struct pages are initialized. */
> ÂÂÂÂÂÂÂÂpage_ext_init();
>

Sure, will keep this in mind if we at all end up with memory allocation approach
for this test.

>>
>> [ 13.898549][ T1] page:ffffea0005000000 is uninitialized and poisoned
>> [ 13.898549][ T1] raw: ffffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffff
>> [ 13.898549][ T1] raw: ffffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffff
>> [ 13.898549][ T1] page dumped because: VM_BUG_ON_PAGE(PagePoisoned(p))
>> [ 13.898549][ T1] ------------[ cut here ]------------
>> [ 13.898549][ T1] kernel BUG at ./include/linux/mm.h:1107!
>> [ 13.898549][ T1] invalid opcode: 0000 [#1] SMP DEBUG_PAGEALLOC KASAN PTI
>> [ 13.898549][ T1] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.4.0-rc3-next-20191015+ #
>