• S
    [MIPS] Fix marking buddy of pte global for MIPS32 w/36-bit physical address · 6e953891
    Sergei Shtylyov 提交于
        
    In case of CONFIG_64BIT_PHYS_ADDR, set_pte() and pte_clear() functions
    only set _PAGE_GLOBAL bit in the pte_low field of the buddy PTEs,
    forgetting to propagate ito to pte_high. Thus, the both pages might not
    really be made global for the CPU (since it AND's the G-bit of the
    odd / even PTEs together to decide whether they're global or not). Thus,
    if only a single page is allocated via vmalloc() or ioremap(), it's not
    really global for CPU (and it must be, since this is kernel mapping),
    and thus its ASID is compared against the current process' one -- so,
    we'll get into trouble sooner or later...  Also, pte_none() will fail
    on global pages because _PAGE_GLOBAL bit is set in both pte_low and
    pte_high, and pte_val() will return u64 value consisting of those fields
    concateneted.
    Signed-off-by: NSergei Shtylyov <sshtylyov@ru.mvista.com>
    Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
    6e953891
pgtable.h 11.0 KB