• Marcelo Tosatti's avatar
    [PATCH] 8xx: avoid "dcbst" misbehaviour with unpopulated TLB · bb165746
    Marcelo Tosatti authored
    The proposed _tlbie call at update_mmu_cache() is safe because:
    
    Addresses for which update_mmu_cache() gets invocated are never inside the
    static kernel virtual mapping, meaning that there is no risk for the
    _tlbie() here to be thrashing the pinned entry, as Dan suspected.
    
    The intermediate TLB state in which this bug can be triggered is not
    visible by userspace or any other contexts, except the page fault handling
    path.  So there is no need to worry about userspace dcbxxx users.
    
    The other solution to this is to avoid dcbst misbehaviour in the first
    place, which involves changing in-kernel "dcbst" callers to use 8xx
    specific SPR's.
    
    Summary:
    
    On 8xx, cache control instructions (particularly "dcbst" from
    flush_dcache_icache) fault as write operation if there is an unpopulated
    TLB entry for the address in question.  To workaround that, we invalidate
    the TLB here, thus avoiding dcbst misbehaviour.
    Signed-off-by: default avatarMarcelo Tosatti <marcelo.tosatti@cyclades.com>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    bb165746
init.c 16.9 KB