mbox series

[v2,0/6] KVM: arm64: Parallel access faults

Message ID 20221202185156.696189-1-oliver.upton@linux.dev (mailing list archive)
Headers show
Series KVM: arm64: Parallel access faults | expand

Message

Oliver Upton Dec. 2, 2022, 6:51 p.m. UTC
When I implemented the parallel faults series I was mostly focused on
improving the performance of 8.1+ implementations which bring us
FEAT_HAFDBS. In so doing, I failed to put access faults on the read side
of the MMU lock.

Anyhow, this small series adds support for handling access faults in
parallel, piling on top of the infrastructure from the first parallel
faults series.

Patch 1 is a nit I had when working on this series.

Patches 2-4 improve the retry logic to avoid unnecessarily serializing
and/or invalidating when an attr walker has no effect on the page
tables due to a race.

I added a flag to indicate whether or not a table walk takes place
within a fault handler to decide whether or not an early return is
necessary for EAGAIN. We could probably pile even more onto this in the
future with lock contention and need_resched() detection.

Patch 5 rolls over access faults to the read lock.

Finally, patch 6 guards KVM's use of VTCR_EL2.HA with the corresponding
kernel config option for FEAT_HAFDBS. FWIW, it is rather useful for
testing access faults on systems that implement FEAT_HAFDBS.

Applies to kvmarm/next. Tested on Ampere Altra w/ VTCR_EL2.HA=0 and
lockdep enabled.

v1 -> v2:
 - Don't serialize if attr walker fails due to an invalid PTE (Ricardo)
 - Rejig the error handling path in the table walker to suppress EAGAIN
   in non-fault handling paths

v1: https://lore.kernel.org/kvmarm/20221129191946.1735662-1-oliver.upton@linux.dev

Oliver Upton (6):
  KVM: arm64: Use KVM's pte type/helpers in handle_access_fault()
  KVM: arm64: Ignore EAGAIN for walks outside of a fault
  KVM: arm64: Return EAGAIN for invalid PTE in attr walker
  KVM: arm64: Don't serialize if the access flag isn't set
  KVM: arm64: Handle access faults behind the read lock
  KVM: arm64: Condition HW AF updates on config option

 arch/arm64/include/asm/kvm_pgtable.h |  8 ++++++
 arch/arm64/kvm/hyp/pgtable.c         | 43 ++++++++++++++++++++++++----
 arch/arm64/kvm/mmu.c                 | 18 ++++++------
 3 files changed, 54 insertions(+), 15 deletions(-)


base-commit: edf3e6d30db78cc37bb57944b2255225aa73bbe8

Comments

Oliver Upton Jan. 23, 2023, 8:29 p.m. UTC | #1
On Fri, 2 Dec 2022 18:51:50 +0000, Oliver Upton wrote:
> When I implemented the parallel faults series I was mostly focused on
> improving the performance of 8.1+ implementations which bring us
> FEAT_HAFDBS. In so doing, I failed to put access faults on the read side
> of the MMU lock.
> 
> Anyhow, this small series adds support for handling access faults in
> parallel, piling on top of the infrastructure from the first parallel
> faults series.
> 
> [...]

Applied to kvmarm/next, thanks!

[1/6] KVM: arm64: Use KVM's pte type/helpers in handle_access_fault()
      https://git.kernel.org/kvmarm/kvmarm/c/9a7ad19ac804
[2/6] KVM: arm64: Ignore EAGAIN for walks outside of a fault
      https://git.kernel.org/kvmarm/kvmarm/c/ddcadb297ce5
[3/6] KVM: arm64: Return EAGAIN for invalid PTE in attr walker
      https://git.kernel.org/kvmarm/kvmarm/c/76259cca4795
[4/6] KVM: arm64: Don't serialize if the access flag isn't set
      https://git.kernel.org/kvmarm/kvmarm/c/7d29a2407df6
[5/6] KVM: arm64: Handle access faults behind the read lock
      https://git.kernel.org/kvmarm/kvmarm/c/fc61f554e694
[6/6] KVM: arm64: Condition HW AF updates on config option
      https://git.kernel.org/kvmarm/kvmarm/c/1dfc3e905089

--
Best,
Oliver