Skip to content
  • Paul Mackerras's avatar
    KVM: PPC: Book 3S HV: Do ptesync in radix guest exit path · df158189
    Paul Mackerras authored
    
    
    A radix guest can execute tlbie instructions to invalidate TLB entries.
    After a tlbie or a group of tlbies, it must then do the architected
    sequence eieio; tlbsync; ptesync to ensure that the TLB invalidation
    has been processed by all CPUs in the system before it can rely on
    no CPU using any translation that it just invalidated.
    
    In fact it is the ptesync which does the actual synchronization in
    this sequence, and hardware has a requirement that the ptesync must
    be executed on the same CPU thread as the tlbies which it is expected
    to order.  Thus, if a vCPU gets moved from one physical CPU to
    another after it has done some tlbies but before it can get to do the
    ptesync, the ptesync will not have the desired effect when it is
    executed on the second physical CPU.
    
    To fix this, we do a ptesync in the exit path for radix guests.  If
    there are any pending tlbies, this will wait for them to complete.
    If there aren't, then ptesync will just do the same as sync.
    
    Signed-off-by: default avatarPaul Mackerras <paulus@ozlabs.org>
    df158189