• L
    mm: Fix boot crash in mm_alloc() · 6345d24d
    Linus Torvalds 提交于
    Thomas Gleixner reports that we now have a boot crash triggered by
    CONFIG_CPUMASK_OFFSTACK=y:
    
        BUG: unable to handle kernel NULL pointer dereference at   (null)
        IP: [<c11ae035>] find_next_bit+0x55/0xb0
        Call Trace:
         [<c11addda>] cpumask_any_but+0x2a/0x70
         [<c102396b>] flush_tlb_mm+0x2b/0x80
         [<c1022705>] pud_populate+0x35/0x50
         [<c10227ba>] pgd_alloc+0x9a/0xf0
         [<c103a3fc>] mm_init+0xec/0x120
         [<c103a7a3>] mm_alloc+0x53/0xd0
    
    which was introduced by commit de03c72c ("mm: convert
    mm->cpu_vm_cpumask into cpumask_var_t"), and is due to wrong ordering of
    mm_init() vs mm_init_cpumask
    
    Thomas wrote a patch to just fix the ordering of initialization, but I
    hate the new double allocation in the fork path, so I ended up instead
    doing some more radical surgery to clean it all up.
    Reported-by: NThomas Gleixner <tglx@linutronix.de>
    Reported-by: NIngo Molnar <mingo@elte.hu>
    Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    6345d24d
fork.c 42.0 KB