KVM ARM Archive mirror
 help / color / mirror / Atom feed
From: Fuad Tabba <tabba@google.com>
To: kvmarm@lists.linux.dev
Cc: maz@kernel.org, will@kernel.org, qperret@google.com,
	tabba@google.com,  seanjc@google.com, alexandru.elisei@arm.com,
	catalin.marinas@arm.com,  philmd@linaro.org, james.morse@arm.com,
	suzuki.poulose@arm.com,  oliver.upton@linux.dev,
	mark.rutland@arm.com, broonie@kernel.org,  joey.gouly@arm.com,
	rananta@google.com, smostafa@google.com
Subject: [PATCH v2 00/47] KVM: arm64: Preamble for pKVM
Date: Tue, 16 Apr 2024 10:55:51 +0100	[thread overview]
Message-ID: <20240416095638.3620345-1-tabba@google.com> (raw)

Changes from V1:
- Rebased on Linux 6.9-rc3 -- kvmarm/next (9ac5bab4deee) [Marc]
- Fixed comments and tidied up [Marc, Mark]
- Moved fixes to beginning of series (patches 1-5) [Marc]
- Added a patch (patch 1) that allocates memory for fpsimd state
in protected mode, needed after the host state changes
- Added patches that refactor code for checking fpsimd state
ownership [Marc]
- Dropped patches that don't fit in this series [Marc, Mark]
- Fix build issue in "KVM: arm64: Add atomics-based checking
refcount implementation at EL2" (Mostafa)

We are getting closer to upstreaming the remaining part of pKVM
code [1]. To make the process easier for us and for our dear
reviewers, we are sending out this patch series as a preamble to
the upcoming patches.

This series is based on Linux 6.9-rc3 -- kvmarm/next
(9ac5bab4deee). Most of the patches in this series are
self-standing, without dependencies on other patches within the
same series, and can be applied directly.

This series is a bit of a bombay-mix of patches we've been
carrying. There's no one overarching theme, but they do improve
the code by fixing existing bugs in pKVM, refactoring code to
make it more readable and easier to re-use for pKVM, or adding
functionality to the existing pKVM code upstream.

None of the patches in this series intentionally affect the
functionality of non-protected modes. Patches 1 to 5 are bug and
comment fixes.

For a technical deep dive into pKVM, please refer to Quentin
Perret's KVM Forum Presentation [2, 3]. The pKVM core series,
which we plan on sending for review next, the code is here [1].

Cheers,
Fuad, Quentin, Will, and Marc

[1] https://android-kvm.googlesource.com/linux/+/refs/heads/for-upstream/pkvm-core

[2] Protected KVM on arm64 (slides)
https://static.sched.com/hosted_files/kvmforum2022/88/KVM%20forum%202022%20-%20pKVM%20deep%20dive.pdf

[3] Protected KVM on arm64 (video)
https://www.youtube.com/watch?v=9npebeVFbFw

Fuad Tabba (26):
  KVM: arm64: Allocate per-cpu memory for the host fpsimd state in pKVM
  KVM: arm64: Do not re-initialize the KVM lock
  KVM: arm64: Fix comment for __pkvm_vcpu_init_traps()
  KVM: arm64: Change kvm_handle_mmio_return() return polarity
  KVM: arm64: Move setting the page as dirty out of the critical section
  KVM: arm64: Split up nvhe/fixed_config.h
  KVM: arm64: Move pstate reset value definitions to kvm_arm.h
  KVM: arm64: Clarify rationale for ZCR_EL1 value restored on guest exit
  KVM: arm64: Refactor calculating SVE state size to use helpers
  KVM: arm64: Do not map the host fpsimd state to hyp in pKVM
  KVM: arm64: Move some kvm_psci functions to a shared header
  KVM: arm64: Refactor reset_mpidr() to extract its computation
  KVM: arm64: Refactor kvm_vcpu_enable_ptrauth() for hyp use
  KVM: arm64: Introduce gfn_to_memslot_prot()
  KVM: arm64: Do not use the hva in kvm_handle_guest_abort()
  KVM: arm64: Do not set the virtual timer offset for protected vCPUs
  KVM: arm64: Check directly whether a vcpu is protected
  KVM: arm64: Trap debug break and watch from guest
  KVM: arm64: Restrict protected VM capabilities
  KVM: arm64: Do not support MTE for protected VMs
  KVM: arm64: Move pkvm_vcpu_init_traps() to hyp vcpu init
  KVM: arm64: Fix initializing traps in protected mode
  KVM: arm64: Remove unused vcpu parameter from guest_owns_fp_regs()
  KVM: arm64: Move guest_owns_fp_regs() to enable use in KVM code
  KVM: arm64: Add host_owns_fp_regs()
  KVM: arm64: Refactor checks for FP state ownership

Marc Zyngier (6):
  KVM: arm64: Check for PTE validity when checking for
    executable/cacheable
  KVM: arm64: Simplify vgic-v3 hypercalls
  KVM: arm64: Introduce predicates to check for protected state
  KVM: arm64: Add PC_UPDATE_REQ flags covering all PC updates
  KVM: arm64: Add vcpu flag copy primitive
  KVM: arm64: Force injection of a data abort on NISV MMIO exit

Quentin Perret (5):
  KVM: arm64: Issue CMOs when tearing down guest s2 pages
  KVM: arm64: Avoid BUG-ing from the host abort path
  KVM: arm64: Add is_pkvm_initialized() helper
  KVM: arm64: Refactor enter_exception64()
  KVM: arm64: Prevent kmemleak from accessing .hyp.data

Will Deacon (10):
  KVM: arm64: Avoid BBM when changing only s/w bits in Stage-2 PTE
  KVM: arm64: Support TLB invalidation in guest context
  KVM: arm64: Introduce hyp_rwlock_t
  KVM: arm64: Add atomics-based checking refcount implementation at EL2
  KVM: arm64: Use atomic refcount helpers for 'struct
    hyp_page::refcount'
  KVM: arm64: Remove locking from EL2 allocation fast-paths
  KVM: arm64: Reformat/beautify PTP hypercall documentation
  KVM: arm64: Rename firmware pseudo-register documentation file
  KVM: arm64: Document the KVM/arm64-specific calls in hypercalls.rst
  KVM: arm64: Advertise GICv3 sysreg interface to protected guests

 Documentation/virt/kvm/api.rst                |   7 +
 .../virt/kvm/arm/fw-pseudo-registers.rst      | 138 +++++++++++
 Documentation/virt/kvm/arm/hypercalls.rst     | 180 ++++----------
 Documentation/virt/kvm/arm/index.rst          |   1 +
 Documentation/virt/kvm/arm/ptp_kvm.rst        |  38 +--
 arch/arm64/include/asm/kvm_arm.h              |  12 +
 arch/arm64/include/asm/kvm_asm.h              |   9 +-
 arch/arm64/include/asm/kvm_emulate.h          |  28 ++-
 arch/arm64/include/asm/kvm_host.h             |  42 +++-
 arch/arm64/include/asm/kvm_hyp.h              |   4 +-
 arch/arm64/include/asm/kvm_pkvm.h             | 234 ++++++++++++++++++
 arch/arm64/include/asm/virt.h                 |  12 +-
 arch/arm64/kvm/arch_timer.c                   |  20 +-
 arch/arm64/kvm/arm.c                          | 102 ++++++--
 arch/arm64/kvm/fpsimd.c                       |  59 +++--
 arch/arm64/kvm/hyp/exception.c                | 100 ++++----
 arch/arm64/kvm/hyp/include/hyp/switch.h       |   8 +-
 .../arm64/kvm/hyp/include/nvhe/fixed_config.h | 223 -----------------
 arch/arm64/kvm/hyp/include/nvhe/gfp.h         |   6 +-
 arch/arm64/kvm/hyp/include/nvhe/memory.h      |  18 +-
 arch/arm64/kvm/hyp/include/nvhe/pkvm.h        |  19 ++
 arch/arm64/kvm/hyp/include/nvhe/refcount.h    |  76 ++++++
 arch/arm64/kvm/hyp/include/nvhe/rwlock.h      | 129 ++++++++++
 .../arm64/kvm/hyp/include/nvhe/trap_handler.h |   2 -
 arch/arm64/kvm/hyp/nvhe/hyp-main.c            |  32 +--
 arch/arm64/kvm/hyp/nvhe/mem_protect.c         |  10 +-
 arch/arm64/kvm/hyp/nvhe/page_alloc.c          |  21 +-
 arch/arm64/kvm/hyp/nvhe/pkvm.c                |  72 ++++--
 arch/arm64/kvm/hyp/nvhe/setup.c               |   2 +-
 arch/arm64/kvm/hyp/nvhe/switch.c              |  12 +-
 arch/arm64/kvm/hyp/nvhe/sys_regs.c            |  13 +-
 arch/arm64/kvm/hyp/nvhe/tlb.c                 | 115 +++++++--
 arch/arm64/kvm/hyp/pgtable.c                  |  21 +-
 arch/arm64/kvm/hyp/vgic-v3-sr.c               |  27 +-
 arch/arm64/kvm/hyp/vhe/switch.c               |   4 +-
 arch/arm64/kvm/mmio.c                         |  13 +-
 arch/arm64/kvm/mmu.c                          |  25 +-
 arch/arm64/kvm/pkvm.c                         |   2 +-
 arch/arm64/kvm/psci.c                         |  28 ---
 arch/arm64/kvm/reset.c                        |  20 +-
 arch/arm64/kvm/sys_regs.c                     |  14 +-
 arch/arm64/kvm/sys_regs.h                     |  19 ++
 arch/arm64/kvm/vgic/vgic-v2.c                 |   9 +-
 arch/arm64/kvm/vgic/vgic-v3.c                 |  23 +-
 arch/arm64/kvm/vgic/vgic.c                    |  11 -
 arch/arm64/kvm/vgic/vgic.h                    |   2 -
 include/kvm/arm_psci.h                        |  29 +++
 include/kvm/arm_vgic.h                        |   1 -
 include/linux/kvm_host.h                      |   1 +
 virt/kvm/kvm_main.c                           |  22 ++
 50 files changed, 1271 insertions(+), 744 deletions(-)
 create mode 100644 Documentation/virt/kvm/arm/fw-pseudo-registers.rst
 delete mode 100644 arch/arm64/kvm/hyp/include/nvhe/fixed_config.h
 create mode 100644 arch/arm64/kvm/hyp/include/nvhe/refcount.h
 create mode 100644 arch/arm64/kvm/hyp/include/nvhe/rwlock.h


base-commit: 9ac5bab4deeeeb99f36695250b99c2f9bfae2379
-- 
2.44.0.683.g7961c838ac-goog


             reply	other threads:[~2024-04-16  9:56 UTC|newest]

Thread overview: 67+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-16  9:55 Fuad Tabba [this message]
2024-04-16  9:55 ` [PATCH v2 01/47] KVM: arm64: Allocate per-cpu memory for the host fpsimd state in pKVM Fuad Tabba
2024-04-16 10:57   ` Mark Brown
2024-04-16 12:54   ` Marc Zyngier
2024-04-16 13:08     ` Marc Zyngier
2024-04-16 13:10       ` Fuad Tabba
2024-04-16  9:55 ` [PATCH v2 02/47] KVM: arm64: Do not re-initialize the KVM lock Fuad Tabba
2024-04-16  9:55 ` [PATCH v2 03/47] KVM: arm64: Issue CMOs when tearing down guest s2 pages Fuad Tabba
2024-04-16  9:55 ` [PATCH v2 04/47] KVM: arm64: Avoid BUG-ing from the host abort path Fuad Tabba
2024-04-16  9:55 ` [PATCH v2 05/47] KVM: arm64: Fix comment for __pkvm_vcpu_init_traps() Fuad Tabba
2024-04-16  9:55 ` [PATCH v2 06/47] KVM: arm64: Change kvm_handle_mmio_return() return polarity Fuad Tabba
2024-04-16  9:55 ` [PATCH v2 07/47] KVM: arm64: Move setting the page as dirty out of the critical section Fuad Tabba
2024-04-16  9:55 ` [PATCH v2 08/47] KVM: arm64: Check for PTE validity when checking for executable/cacheable Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 09/47] KVM: arm64: Avoid BBM when changing only s/w bits in Stage-2 PTE Fuad Tabba
2024-04-16 16:59   ` Oliver Upton
2024-04-16 18:06     ` Fuad Tabba
2024-04-16 18:19       ` Oliver Upton
2024-04-16  9:56 ` [PATCH v2 10/47] KVM: arm64: Support TLB invalidation in guest context Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 11/47] KVM: arm64: Simplify vgic-v3 hypercalls Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 12/47] KVM: arm64: Add is_pkvm_initialized() helper Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 13/47] KVM: arm64: Introduce predicates to check for protected state Fuad Tabba
2024-04-16 17:18   ` Oliver Upton
2024-04-16 18:07     ` Fuad Tabba
2024-04-16 18:10       ` Oliver Upton
2024-04-16 18:12         ` Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 14/47] KVM: arm64: Split up nvhe/fixed_config.h Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 15/47] KVM: arm64: Move pstate reset value definitions to kvm_arm.h Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 16/47] KVM: arm64: Clarify rationale for ZCR_EL1 value restored on guest exit Fuad Tabba
2024-04-16 10:47   ` Mark Brown
2024-04-16 13:38     ` Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 17/47] KVM: arm64: Refactor calculating SVE state size to use helpers Fuad Tabba
2024-04-16 10:48   ` Mark Brown
2024-04-16  9:56 ` [PATCH v2 18/47] KVM: arm64: Do not map the host fpsimd state to hyp in pKVM Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 19/47] KVM: arm64: Move some kvm_psci functions to a shared header Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 20/47] KVM: arm64: Refactor reset_mpidr() to extract its computation Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 21/47] KVM: arm64: Refactor kvm_vcpu_enable_ptrauth() for hyp use Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 22/47] KVM: arm64: Refactor enter_exception64() Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 23/47] KVM: arm64: Add PC_UPDATE_REQ flags covering all PC updates Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 24/47] KVM: arm64: Add vcpu flag copy primitive Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 25/47] KVM: arm64: Introduce gfn_to_memslot_prot() Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 26/47] KVM: arm64: Do not use the hva in kvm_handle_guest_abort() Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 27/47] KVM: arm64: Introduce hyp_rwlock_t Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 28/47] KVM: arm64: Add atomics-based checking refcount implementation at EL2 Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 29/47] KVM: arm64: Use atomic refcount helpers for 'struct hyp_page::refcount' Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 30/47] KVM: arm64: Remove locking from EL2 allocation fast-paths Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 31/47] KVM: arm64: Reformat/beautify PTP hypercall documentation Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 32/47] KVM: arm64: Rename firmware pseudo-register documentation file Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 33/47] KVM: arm64: Document the KVM/arm64-specific calls in hypercalls.rst Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 34/47] KVM: arm64: Prevent kmemleak from accessing .hyp.data Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 35/47] KVM: arm64: Do not set the virtual timer offset for protected vCPUs Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 36/47] KVM: arm64: Check directly whether a vcpu is protected Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 37/47] KVM: arm64: Trap debug break and watch from guest Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 38/47] KVM: arm64: Restrict protected VM capabilities Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 39/47] KVM: arm64: Do not support MTE for protected VMs Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 40/47] KVM: arm64: Move pkvm_vcpu_init_traps() to hyp vcpu init Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 41/47] KVM: arm64: Fix initializing traps in protected mode Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 42/47] KVM: arm64: Advertise GICv3 sysreg interface to protected guests Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 43/47] KVM: arm64: Force injection of a data abort on NISV MMIO exit Fuad Tabba
2024-04-16  9:56 ` [PATCH v2 44/47] KVM: arm64: Remove unused vcpu parameter from guest_owns_fp_regs() Fuad Tabba
2024-04-16 10:49   ` Mark Brown
2024-04-16  9:56 ` [PATCH v2 45/47] KVM: arm64: Move guest_owns_fp_regs() to enable use in KVM code Fuad Tabba
2024-04-16 10:50   ` Mark Brown
2024-04-16  9:56 ` [PATCH v2 46/47] KVM: arm64: Add host_owns_fp_regs() Fuad Tabba
2024-04-16 10:51   ` Mark Brown
2024-04-16  9:56 ` [PATCH v2 47/47] KVM: arm64: Refactor checks for FP state ownership Fuad Tabba
2024-04-16 10:55   ` Mark Brown
2024-04-16 13:33     ` Marc Zyngier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240416095638.3620345-1-tabba@google.com \
    --to=tabba@google.com \
    --cc=alexandru.elisei@arm.com \
    --cc=broonie@kernel.org \
    --cc=catalin.marinas@arm.com \
    --cc=james.morse@arm.com \
    --cc=joey.gouly@arm.com \
    --cc=kvmarm@lists.linux.dev \
    --cc=mark.rutland@arm.com \
    --cc=maz@kernel.org \
    --cc=oliver.upton@linux.dev \
    --cc=philmd@linaro.org \
    --cc=qperret@google.com \
    --cc=rananta@google.com \
    --cc=seanjc@google.com \
    --cc=smostafa@google.com \
    --cc=suzuki.poulose@arm.com \
    --cc=will@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).