• V
    ARC: MMUv4 preps/1 - Fold PTE K/U access flags · 64b703ef
    Vineet Gupta 提交于
    The current ARC VM code has 13 flags in Page Table entry: some software
    (accesed/dirty/non-linear-maps) and rest hardware specific. With 8k MMU
    page, we need 19 bits for addressing page frame so remaining 13 bits is
    just about enough to accomodate the current flags.
    
    In MMUv4 there are 2 additional flags, SZ (normal or super page) and WT
    (cache access mode write-thru) - and additionally PFN is 20 bits (vs. 19
    before for 8k). Thus these can't be held in current PTE w/o making each
    entry 64bit wide.
    
    It seems there is some scope of compressing the current PTE flags (and
    freeing up a few bits). Currently PTE contains fully orthogonal distinct
    access permissions for kernel and user mode (Kr, Kw, Kx; Ur, Uw, Ux)
    which can be folded into one set (R, W, X). The translation of 3 PTE
    bits into 6 TLB bits (when programming the MMU) can be done based on
    following pre-requites/assumptions:
    
    1. For kernel-mode-only translations (vmalloc: 0x7000_0000 to
       0x7FFF_FFFF), PTE additionally has PAGE_GLOBAL flag set (and user
       space entries can never be global). Thus such a PTE can translate
       to Kr, Kw, Kx (as appropriate) and zero for User mode counterparts.
    
    2. For non global entries, the PTE flags can be used to create mirrored
       K and U TLB bits. This is true after commit a950549c
       "ARC: copy_(to|from)_user() to honor usermode-access permissions"
       which ensured that user-space translations _MUST_ have same access
       permissions for both U/K mode accesses so that  copy_{to,from}_user()
       play fair with fault based CoW break and such...
    
    There is no such thing as free lunch - the cost is slightly infalted
    TLB-Miss Handlers.
    Signed-off-by: NVineet Gupta <vgupta@synopsys.com>
    64b703ef
tlb.c 21.8 KB