Skip to content
Permalink
Nicholas-Piggi…
Switch branches/tags

Commits on Aug 11, 2021

  1. KVM: PPC: Book3S HV P9: Remove subcore HMI handling

    On POWER9 and newer, rather than the complex HMI synchronisation and
    subcore state, have each thread un-apply the guest TB offset before
    calling into the early HMI handler.
    
    This allows the subcore state to be avoided, including subcore enter
    / exit guest, which includes an expensive divide that shows up
    slightly in profiles.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  2. KVM: PPC: Book3S HV P9: Stop using vc->dpdes

    The P9 path uses vc->dpdes only for msgsndp / SMT emulation. This adds
    an ordering requirement between vcpu->doorbell_request and vc->dpdes for
    no real benefit. Use vcpu->doorbell_request directly.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  3. KVM: PPC: Book3S HV P9: Tidy kvmppc_create_dtl_entry

    This goes further to removing vcores from the P9 path. Also avoid the
    memset in favour of explicitly initialising all fields.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  4. KVM: PPC: Book3S HV P9: Remove most of the vcore logic

    The P9 path always uses one vcpu per vcore, so none of the the vcore,
    locks, stolen time, blocking logic, shared waitq, etc., is required.
    
    Remove most of it.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  5. KVM: PPC: Book3S HV P9: Avoid cpu_in_guest atomics on entry and exit

    cpu_in_guest is set to determine if a CPU needs to be IPI'ed to exit
    the guest and notice the need_tlb_flush bit.
    
    This can be implemented as a global per-CPU pointer to the currently
    running guest instead of per-guest cpumasks, saving 2 atomics per
    entry/exit. P7/8 doesn't require cpu_in_guest, nor does a nested HV
    (only the L0 does), so move it to the P9 HV path.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  6. KVM: PPC: Book3S HV P9: Add unlikely annotation for !mmu_ready

    The mmu will almost always be ready.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  7. KVM: PPC: Book3S HV P9: Avoid changing MSR[RI] in entry and exit

    kvm_hstate.in_guest provides the equivalent of MSR[RI]=0 protection,
    and it covers the existing MSR[RI]=0 section in late entry and early
    exit, so clearing and setting MSR[RI] in those cases does not
    actually do anything useful.
    
    Remove the RI manipulation and replace it with comments. Make the
    in_guest memory accesses a bit closer to a proper critical section
    pattern. This speeds up guest entry/exit performance.
    
    This also removes the MSR[RI] warnings which aren't very interesting
    and would cause crashes if they hit due to causing an interrupt in
    non-recoverable code.
    
    From: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  8. KVM: PPC: Book3S HV P9: Optimise hash guest SLB saving

    slbmfee/slbmfev instructions are very expensive, moreso than a regular
    mfspr instruction, so minimising them significantly improves hash guest
    exit performance. The slbmfev is only required if slbmfee found a valid
    SLB entry.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  9. KVM: PPC: Book3S HV P9: Improve mfmsr performance on entry

    Rearrange the MSR saving on entry so it does not follow the mtmsrd to
    disable interrupts, avoiding a possible RAW scoreboard stall.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  10. KVM: PPC: Book3S HV Nested: Avoid extra mftb() in nested entry

    mftb() is expensive and one can be avoided on nested guest dispatch.
    
    If the time checking code distinguishes between the L0 timer and the
    nested HV timer, then both can be tested in the same place with the
    same mftb() value.
    
    This also nicely illustrates the relationship between the L0 and nested
    HV timers.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  11. KVM: PPC: Book3S HV P9: Avoid tlbsync sequence on radix guest exit

    Use the existing TLB flushing logic to IPI the previous CPU and run the
    necessary barriers before running a guest vCPU on a new physical CPU,
    to do the necessary radix GTSE barriers for handling the case of an
    interrupted guest tlbie sequence.
    
    This results in more IPIs than the TLB flush logic requires, but it's
    a significant win for common case scheduling when the vCPU remains on
    the same physical CPU.
    
    This saves about 520 cycles (nearly 10%) on a guest entry+exit micro
    benchmark on a POWER9.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  12. KVM: PPC: Book3S HV P9: Don't restore PSSCR if not needed

    This also moves the PSSCR update in nested entry to avoid a SPR
    scoreboard stall.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  13. KVM: PPC: Book3S HV P9: Test dawr_enabled() before saving host DAWR SPRs

    Some of the DAWR SPR access is already predicated on dawr_enabled(),
    apply this to the remainder of the accesses.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  14. KVM: PPC: Book3S HV P9: Comment and fix MMU context switching code

    Tighten up partition switching code synchronisation and comments.
    
    In particular, hwsync ; isync is required after the last access that is
    performed in the context of a partition, before the partition is
    switched away from.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  15. KVM: PPC: Book3S HV P9: Use Linux SPR save/restore to manage some hos…

    …t SPRs
    
    Linux implements SPR save/restore including storage space for registers
    in the task struct for process context switching. Make use of this
    similarly to the way we make use of the context switching fp/vec save
    restore.
    
    This improves code reuse, allows some stack space to be saved, and helps
    with avoiding VRSAVE updates if they are not required.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  16. KVM: PPC: Book3S HV P9: Demand fault TM facility registers

    Use HFSCR facility disabling to implement demand faulting for TM, with
    a hysteresis counter similar to the load_fp etc counters in context
    switching that implement the equivalent demand faulting for userspace
    facilities.
    
    This speeds up guest entry/exit by avoiding the register save/restore
    when a guest is not frequently using them. When a guest does use them
    often, there will be some additional demand fault overhead, but these
    are not commonly used facilities.
    
    Reviewed-by: Fabiano Rosas <farosas@linux.ibm.com>
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  17. KVM: PPC: Book3S HV P9: Demand fault EBB facility registers

    Use HFSCR facility disabling to implement demand faulting for EBB, with
    a hysteresis counter similar to the load_fp etc counters in context
    switching that implement the equivalent demand faulting for userspace
    facilities.
    
    This speeds up guest entry/exit by avoiding the register save/restore
    when a guest is not frequently using them. When a guest does use them
    often, there will be some additional demand fault overhead, but these
    are not commonly used facilities.
    
    Reviewed-by: Fabiano Rosas <farosas@linux.ibm.com>
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  18. KVM: PPC: Book3S HV P9: More SPR speed improvements

    This avoids more scoreboard stalls and reduces mtSPRs.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  19. KVM: PPC: Book3S HV P9: Restrict DSISR canary workaround to processor…

    …s that require it
    
    Use CPU_FTR_P9_RADIX_PREFETCH_BUG to apply the workaround, to test for
    DD2.1 and below processors. This saves a mtSPR in guest entry.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  20. KVM: PPC: Book3S HV P9: Switch PMU to guest as late as possible

    This moves PMU switch to guest as late as possible in entry, and switch
    back to host as early as possible at exit. This helps the host get the
    most perf coverage of KVM entry/exit code as possible.
    
    This is slightly suboptimal for SPR scheduling point of view when the
    PMU is enabled, but when perf is disabled there is no real difference.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  21. KVM: PPC: Book3S HV P9: Implement TM fastpath for guest entry/exit

    If TM is not active, only TM register state needs to be saved and
    restored, avoiding several mfmsr/mtmsrd instructions and improving
    performance.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  22. KVM: PPC: Book3S HV P9: Move remaining SPR and MSR access into low le…

    …vel entry
    
    Move register saving and loading from kvmhv_p9_guest_entry() into the HV
    and nested entry handlers.
    
    Accesses are scheduled to reduce mtSPR / mfSPR interleaving which
    reduces SPR scoreboard stalls.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  23. KVM: PPC: Book3S HV P9: Move nested guest entry into its own function

    Move the part of the guest entry which is specific to nested HV into its
    own function. This is just refactoring.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  24. KVM: PPC: Book3S HV P9: Move host OS save/restore functions to built-in

    Move the P9 guest/host register switching functions to the built-in
    P9 entry code, and export it for nested to use as well.
    
    This allows more flexibility in scheduling these supervisor privileged
    SPR accesses with the HV privileged and PR SPR accesses in the low level
    entry code.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  25. KVM: PPC: Book3S HV P9: Move vcpu register save/restore into functions

    This should be no functional difference but makes the caller easier
    to read.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  26. KVM: PPC: Book3S HV P9: Juggle SPR switching around

    This juggles SPR switching on the entry and exit sides to be more
    symmetric, which makes the next refactoring patch possible with no
    functional change.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  27. KVM: PPC: Book3S HV P9: Only execute mtSPR if the value changed

    Keep better track of the current SPR value in places where
    they are to be loaded with a new context, to reduce expensive
    mtSPR operations.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  28. KVM: PPC: Book3S HV P9: Avoid SPR scoreboard stalls

    Avoid interleaving mfSPR and mtSPR to reduce SPR scoreboard stalls.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  29. KVM: PPC: Book3S HV P9: Optimise timebase reads

    Reduce the number of mfTB executed by passing the current timebase
    around entry and exit code rather than read it multiple times.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  30. KVM: PPC: Book3S HV P9: Move TB updates

    Move the TB updates between saving and loading guest and host SPRs,
    to improve scheduling by keeping issue-NTC operations together as
    much as possible.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  31. KVM: PPC: Book3S HV: Change dec_expires to be relative to guest timebase

    Change dec_expires to be relative to the guest timebase, and allow
    it to be moved into low level P9 guest entry functions, to improve
    SPR access scheduling.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  32. KVM: PPC: Book3S HV P9: Add kvmppc_stop_thread to match kvmppc_start_…

    …thread
    
    Small cleanup makes it a bit easier to match up entry and exit
    operations.
    
    Reviewed-by: Fabiano Rosas <farosas@linux.ibm.com>
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  33. KVM: PPC: Book3S HV P9: Improve mtmsrd scheduling by delaying MSR[EE]…

    … disable
    
    Moving the mtmsrd after the host SPRs are saved and before the guest
    SPRs start to be loaded can prevent an SPR scoreboard stall (because
    the mtmsrd is L=1 type which does not cause context synchronisation.
    
    This is also now more convenient to combined with the mtmsrd L=0
    instruction to enable facilities just below, but that is not done yet.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  34. KVM: PPC: Book3S HV P9: Reduce mtmsrd instructions required to save h…

    …ost SPRs
    
    This reduces the number of mtmsrd required to enable facility bits when
    saving/restoring registers, by having the KVM code set all bits up front
    rather than using individual facility functions that set their particular
    MSR bits.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
  35. KVM: PPC: Book3S HV P9: Move SPRG restore to restore_p9_host_os_sprs

    Move the SPR update into its relevant helper function. This will
    help with SPR scheduling improvements in later changes.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    npiggin authored and intel-lab-lkp committed Aug 11, 2021
Older