• Greg Ungerer's avatar
    m68k: fix "bad page state" oops on ColdFire boot · ecd60532
    Greg Ungerer authored
    Booting a ColdFire m68k core with MMU enabled causes a "bad page state"
    oops since commit 1d40a5ea ("mm: mark pages in use for page tables"):
    
     BUG: Bad page state in process sh  pfn:01ce2
     page:004fefc8 count:0 mapcount:-1024 mapping:00000000 index:0x0
     flags: 0x0()
     raw: 00000000 00000000 00000000 fffffbff 00000000 00000100 00000200 00000000
     raw: 039c4000
     page dumped because: nonzero mapcount
     Modules linked in:
     CPU: 0 PID: 22 Comm: sh Not tainted 4.17.0-07461-g1d40a5ea #13
    
    Fix by calling pgtable_page_dtor() in our __pte_free_tlb() code path,
    so that the PG_table flag is cleared before we free the pte page.
    
    Note that I had to change the type of pte_free() to be static from
    extern. Otherwise you get a lot of warnings like this:
    
    ./arch/m68k/include/asm/mcf_pgalloc.h:80:2: warning: ‘pgtable_page_dtor’ is static but used in inline function ‘pte_free’ which is not static
      pgtable_page_dtor(page);
      ^
    
    And making it static is consistent with our use of this in the other
    m68k pgalloc definitions of pte_free().
    Signed-off-by: default avatarGreg Ungerer <gerg@linux-m68k.org>
    CC: Matthew Wilcox <willy@infradead.org>
    Reviewed-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
    ecd60532
mcf_pgalloc.h 2.37 KB