• Y
    x86, NUMA: Fix empty memblk detection in numa_cleanup_meminfo() · 2be19102
    Yinghai Lu 提交于
    numa_cleanup_meminfo() trims each memblk between low (0) and
    high (max_pfn) limits and discards empty ones.  However, the
    emptiness detection incorrectly used equality test.  If the
    start of a memblk is higher than max_pfn, it is empty but fails
    the equality test and doesn't get discarded.
    
    The condition triggers when max_pfn is lower than start of a
    NUMA node and results in memory misconfiguration - leading to
    WARN_ON()s and other funnies.  The bug was discovered in devel
    branch where 32bit too uses this code path for NUMA init.  If a
    node is above the addressing limit, max_pfn ends up lower than
    the node triggering this problem.
    
    The failure hasn't been observed on x86-64 but is still possible
    with broken hardware e820/NUMA info.  As the fix is very low
    risk, it would be better to apply it even for 64bit.
    
    Fix it by using >= instead of ==.
    Signed-off-by: NYinghai Lu <yinghai@kernel.org>
    [ Extracted the actual fix from the original patch and rewrote patch description. ]
    Signed-off-by: NTejun Heo <tj@kernel.org>
    Link: http://lkml.kernel.org/r/20110501171204.GO29280@htj.dyndns.orgSigned-off-by: NIngo Molnar <mingo@elte.hu>
    2be19102
numa_64.c 16.9 KB