• Frederic Barrat's avatar
    cxl: Enable global TLBIs for cxl contexts · 03b8abed
    Frederic Barrat authored
    The PSL and nMMU need to see all TLB invalidations for the memory
    contexts used on the adapter. For the hash memory model, it is done by
    making all TLBIs global as soon as the cxl driver is in use. For
    radix, we need something similar, but we can refine and only convert
    to global the invalidations for contexts actually used by the device.
    
    The new mm_context_add_copro() API increments the 'active_cpus' count
    for the contexts attached to the cxl adapter. As soon as there's more
    than 1 active cpu, the TLBIs for the context become global. Active cpu
    count must be decremented when detaching to restore locality if
    possible and to avoid overflowing the counter.
    
    The hash memory model support is somewhat limited, as we can't
    decrement the active cpus count when mm_context_remove_copro() is
    called, because we can't flush the TLB for a mm on hash. So TLBIs
    remain global on hash.
    Signed-off-by: default avatarFrederic Barrat <fbarrat@linux.vnet.ibm.com>
    Fixes: f24be42a ("cxl: Add psl9 specific code")
    Tested-by: default avatarAlistair Popple <alistair@popple.id.au>
    [mpe: Fold in updated comment on the barrier from Fred]
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    03b8abed
file.c 17.3 KB