• Vineet Gupta's avatar
    ARC: [ASID] Track ASID allocation cycles/generations · 947bf103
    Vineet Gupta authored
    This helps remove asid-to-mm reverse map
    
    While mm->context.id contains the ASID assigned to a process, our ASID
    allocator also used asid_mm_map[] reverse map. In a new allocation
    cycle (mm->ASID >= @asid_cache), the Round Robin ASID allocator used this
    to check if new @asid_cache belonged to some mm2 (from prev cycle).
    If so, it could locate that mm using the ASID reverse map, and mark that
    mm as unallocated ASID, to force it to refresh at the time of switch_mm()
    
    However, for SMP, the reverse map has to be maintained per CPU, so
    becomes 2 dimensional, hence got rid of it.
    
    With reverse map gone, it is NOT possible to reach out to current
    assignee. So we track the ASID allocation generation/cycle and
    on every switch_mm(), check if the current generation of CPU ASID is
    same as mm's ASID; If not it is refreshed.
    
    (Based loosely on arch/sh implementation)
    Signed-off-by: default avatarVineet Gupta <vgupta@synopsys.com>
    947bf103
tlb.c 21.6 KB