• David S. Miller's avatar
    [SPARC64]: Fix 32-bit truncation which broke sparsemem. · 17b0e199
    David S. Miller authored
    The page->flags manipulations done by the D-cache dirty
    state tracking was broken because the constants were not
    marked with "UL" to make them 64-bit, which means we were
    clobbering the upper 32-bits of page->flags all the time.
    
    This doesn't jive well with sparsemem which stores the
    section and indexing information in the top 32-bits of
    page->flags.
    
    This is yet another sparc64 bug which has been with us
    forever.
    
    While we're here, tidy up some things in bootmem_init()
    and paginig_init():
    
    1) Pass min_low_pfn to init_bootmem_node(), it's identical
       to (phys_base >> PAGE_SHIFT) but we should use consistent
       with the variable names we print in CONFIG_BOOTMEM_DEBUG
    
    2) max_mapnr, although no longer used, was being set
       inaccurately, we shouldn't subtract pfn_base any more.
    
    3) All the games with phys_base in the zones_*[] arrays
       we pass to free_area_init_node() are no longer necessary.
    
    Thanks to Josh Grebe and Fabbione for the bug reports
    and testing.  Fix also verified locally on an SB2500
    which had a memory layout that triggered the same problem.
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    17b0e199
init.c 47.2 KB