• Steven Capper's avatar
    ARM: 8109/1: mm: Modify pte_write and pmd_write logic for LPAE · b12835bd
    Steven Capper authored
    commit ded94779 upstream.
    
    For LPAE, we have the following means for encoding writable or dirty
    ptes:
                                  L_PTE_DIRTY       L_PTE_RDONLY
        !pte_dirty && !pte_write        0               1
        !pte_dirty && pte_write         0               1
        pte_dirty && !pte_write         1               1
        pte_dirty && pte_write          1               0
    
    So we can't distinguish between writeable clean ptes and read only
    ptes. This can cause problems with ptes being incorrectly flagged as
    read only when they are writeable but not dirty.
    
    This patch renumbers L_PTE_RDONLY from AP[2] to a software bit #58,
    and adds additional logic to set AP[2] whenever the pte is read only
    or not dirty. That way we can distinguish between clean writeable ptes
    and read only ptes.
    
    HugeTLB pages will use this new logic automatically.
    
    We need to add some logic to Transparent HugePages to ensure that they
    correctly interpret the revised pgprot permissions (L_PTE_RDONLY has
    moved and no longer matches PMD_SECT_AP2). In the process of revising
    THP, the names of the PMD software bits have been prefixed with L_ to
    make them easier to distinguish from their hardware bit counterparts.
    Signed-off-by: default avatarSteve Capper <steve.capper@linaro.org>
    Reviewed-by: default avatarWill Deacon <will.deacon@arm.com>
    Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
    [hpy: Backported to 3.10
     - adjust the context
     - ignore change related to pmd, because 3.10 does not support HugePage ]
    Signed-off-by: default avatarHou Pengyang <houpengyang@huawei.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    b12835bd
pgtable-3level-hwdef.h 3.04 KB