From: David Brazdil <dbrazdil@google.com>
To: kvmarm@lists.cs.columbia.edu
Cc: Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>, Marc Zyngier <maz@kernel.org>,
James Morse <james.morse@arm.com>,
Julien Thierry <julien.thierry.kdev@gmail.com>,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Dennis Zhou <dennis@kernel.org>, Tejun Heo <tj@kernel.org>,
Christoph Lameter <cl@linux.com>,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, kernel-team@android.com,
David Brazdil <dbrazdil@google.com>
Subject: [PATCH v4 00/10] Independent per-CPU data section for nVHE
Date: Tue, 22 Sep 2020 21:49:00 +0100 [thread overview]
Message-ID: <20200922204910.7265-1-dbrazdil@google.com> (raw)
Introduce '.hyp.data..percpu' as part of ongoing effort to make nVHE
hyp code self-contained and independent of the rest of the kernel.
Main benefits:
* independent nVHE per-CPU data section that can be unmapped from host,
* more robust linking of nVHE hyp code,
* no need for hyp-specific macros to access per-CPU variables.
The series is structured as follows:
- patch 1: Improve existing hyp build rules. This could be sent and merged
independently of per-CPU but this series builds on it.
- patches 2-3: Minor cleanups.
- patches 4-5: Replace hyp helpers for accessing per-CPU variables
with common helpers modified to work correctly in hyp. Per-CPU
variables can now be accessed with one API anywhere.
- patches 6-8: Where VHE and nVHE use per-CPU variables defined in
kernel proper, move their definitions to hyp/ where they are
duplicated and owned by VHE/nVHE, respectively. Non-VHE hyp code
now refers only to per-CPU variables defined in its source files.
Helpers are added so that kernel proper can continue to access
nVHE hyp variables, same way as it does with other nVHE symbols.
- patches 9-10: Introduce '.hyp.data..percpu' ELF section and allocate
memory for every CPU core during KVM init. All nVHE per-CPU state
is now grouped together in ELF and in memory. Introducing a new
per-CPU variable does not require adding new memory mappings any
more. nVHE hyp code cannot accidentally refer to kernel-proper
per-CPU data as it only has the pointer to its own per-CPU memory.
Patches are rebased on v5.9-rc6 and available in branch 'topic/percpu-v4' at:
https://android-kvm.googlesource.com/linux
For maintainers: In case of interest, there are patches that remove the need
for redefining macros under DEBUG_PREEMPT available at the same repo, branch
'topic/percpu-v3-debug-preempt'. Since they are non-trivial, I am not going
to post them here so late in the 5.10 window. I plan to post them for 5.11
when they will also be useful for other patches.
Changes v3 -> v4:
* Drop patch that marked pages allocated for hyp reserved
* Copy arm64_ssbd_callback_required at cpu_init_hyp_mode
* Use read_sysreg in __hyp_my_cpu_offset
* Simplify per-CPU region allocation code
* Use same subsection name regex as other kernel linker scripts
* Rename helper per-CPU macros
* Add .gitignore for hyp linker script
Changes v2 -> v3:
* Use PERCPU_INPUT in hyp.ld instead of modifying PERCPU_SECTION
* Only pass linker script once to LD (fix error message)
* Renamed '.hyp.o' to '.nvhe.o'
* Use __KVM_VHE_HYPERVISOR__ to select TPIDR_EL2 instead of alternatives
* Move all prefixing-related macros to hyp_image.h
Changes v1 -> v2:
* partially link hyp code, add linker script
David Brazdil (10):
kvm: arm64: Partially link nVHE hyp code, simplify HYPCOPY
kvm: arm64: Move nVHE hyp namespace macros to hyp_image.h
kvm: arm64: Only define __kvm_ex_table for CONFIG_KVM
kvm: arm64: Remove __hyp_this_cpu_read
kvm: arm64: Remove hyp_adr/ldr_this_cpu
kvm: arm64: Add helpers for accessing nVHE hyp per-cpu vars
kvm: arm64: Duplicate arm64_ssbd_callback_required for nVHE hyp
kvm: arm64: Create separate instances of kvm_host_data for VHE/nVHE
kvm: arm64: Set up hyp percpu data for nVHE
kvm: arm64: Remove unnecessary hyp mappings
arch/arm64/include/asm/assembler.h | 29 +++++---
arch/arm64/include/asm/hyp_image.h | 36 ++++++++++
arch/arm64/include/asm/kvm_asm.h | 82 +++++++++++------------
arch/arm64/include/asm/kvm_host.h | 2 +-
arch/arm64/include/asm/kvm_mmu.h | 22 ++----
arch/arm64/include/asm/percpu.h | 28 +++++++-
arch/arm64/kernel/image-vars.h | 4 --
arch/arm64/kernel/vmlinux.lds.S | 13 ++++
arch/arm64/kvm/arm.c | 61 +++++++++++++----
arch/arm64/kvm/hyp/hyp-entry.S | 2 +-
arch/arm64/kvm/hyp/include/hyp/debug-sr.h | 4 +-
arch/arm64/kvm/hyp/include/hyp/switch.h | 8 +--
arch/arm64/kvm/hyp/nvhe/.gitignore | 2 +
arch/arm64/kvm/hyp/nvhe/Makefile | 60 +++++++++--------
arch/arm64/kvm/hyp/nvhe/hyp.lds.S | 19 ++++++
arch/arm64/kvm/hyp/nvhe/switch.c | 8 ++-
arch/arm64/kvm/hyp/vhe/switch.c | 5 +-
arch/arm64/kvm/hyp/vhe/sysreg-sr.c | 4 +-
arch/arm64/kvm/pmu.c | 13 ++--
19 files changed, 272 insertions(+), 130 deletions(-)
create mode 100644 arch/arm64/include/asm/hyp_image.h
create mode 100644 arch/arm64/kvm/hyp/nvhe/.gitignore
create mode 100644 arch/arm64/kvm/hyp/nvhe/hyp.lds.S
--
2.28.0.681.g6f77f65b4e-goog
next reply other threads:[~2020-09-22 20:49 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-22 20:49 David Brazdil [this message]
2020-09-22 20:49 ` [PATCH v4 01/10] kvm: arm64: Partially link nVHE hyp code, simplify HYPCOPY David Brazdil
2020-09-22 20:49 ` [PATCH v4 02/10] kvm: arm64: Move nVHE hyp namespace macros to hyp_image.h David Brazdil
2020-09-22 20:49 ` [PATCH v4 03/10] kvm: arm64: Only define __kvm_ex_table for CONFIG_KVM David Brazdil
2020-09-22 20:49 ` [PATCH v4 04/10] kvm: arm64: Remove __hyp_this_cpu_read David Brazdil
2020-09-29 17:30 ` Will Deacon
2020-09-22 20:49 ` [PATCH v4 05/10] kvm: arm64: Remove hyp_adr/ldr_this_cpu David Brazdil
2020-09-29 17:34 ` Will Deacon
2020-09-29 17:46 ` Marc Zyngier
2020-09-22 20:49 ` [PATCH v4 06/10] kvm: arm64: Add helpers for accessing nVHE hyp per-cpu vars David Brazdil
2020-09-22 20:49 ` [PATCH v4 07/10] kvm: arm64: Duplicate arm64_ssbd_callback_required for nVHE hyp David Brazdil
2020-09-29 17:37 ` Will Deacon
2020-09-22 20:49 ` [PATCH v4 08/10] kvm: arm64: Create separate instances of kvm_host_data for VHE/nVHE David Brazdil
2020-09-22 20:49 ` [PATCH v4 09/10] kvm: arm64: Set up hyp percpu data for nVHE David Brazdil
2020-09-29 17:50 ` Will Deacon
2020-09-22 20:49 ` [PATCH v4 10/10] kvm: arm64: Remove unnecessary hyp mappings David Brazdil
2020-09-29 17:49 ` Will Deacon
2020-09-24 10:10 ` [PATCH v4 00/10] Independent per-CPU data section for nVHE Christopher Lameter
2020-10-02 8:19 ` 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=20200922204910.7265-1-dbrazdil@google.com \
--to=dbrazdil@google.com \
--cc=catalin.marinas@arm.com \
--cc=cl@linux.com \
--cc=dennis@kernel.org \
--cc=james.morse@arm.com \
--cc=julien.thierry.kdev@gmail.com \
--cc=kernel-team@android.com \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=maz@kernel.org \
--cc=suzuki.poulose@arm.com \
--cc=tj@kernel.org \
--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