• Paul Mundt's avatar
    nommu: Correct kobjsize() page validity checks. · 5a1603be
    Paul Mundt authored
    This implements a few changes on top of the recent kobjsize() refactoring
    introduced by commit 6cfd53fc.
    
    As Christoph points out:
    
    	virt_to_head_page cannot return NULL. virt_to_page also
    	does not return NULL. pfn_valid() needs to be used to
    	figure out if a page is valid.  Otherwise the page struct
    	reference that was returned may have PageReserved() set
    	to indicate that it is not a valid page.
    
    As discussed further in the thread, virt_addr_valid() is the preferable
    way to validate the object pointer in this case. In addition to fixing
    up the reserved page case, it also has the benefit of encapsulating the
    hack introduced by commit 4016a139 on
    the impacted platforms, allowing us to get rid of the extra checking in
    kobjsize() for the platforms that don't perform this type of bizarre
    memory_end abuse (every nommu platform that isn't blackfin). If blackfin
    decides to get in line with every other platform and use PageReserved
    for the DMA pages in question, kobjsize() will also continue to work
    fine.
    
    It also turns out that compound_order() will give us back 0-order for
    non-head pages, so we can get rid of the PageCompound check and just
    use compound_order() directly. Clean that up while we're at it.
    Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
    Reviewed-by: default avatarChristoph Lameter <clameter@sgi.com>
    Acked-by: default avatarDavid Howells <dhowells@redhat.com>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    5a1603be
nommu.c 34.7 KB