Removing support for 32bit KVM/arm host
Subsystems (7)
Marc Zyngier
maintainerv2 cover Removing support for 32bit KVM/arm host
KVM/arm was merged just over 7 years ago, and has lived a very quiet life so far. It mostly works if you're prepared to deal with its limitations, it has been a good prototype for the arm64 version, but it suffers a few problems:
- It is incomplete (no debug support, no PMU)
- It hasn't followed any of the architectural evolutions
- It has zero^W very few users (I don't count myself here)
- It is more and more getting in the way of new arm64 developments
There has been quite a bit of discussion (see [1]) on whether we were depriving users of something they were depending on. Most people didn't object, and actually supported the removal. A few people *did* object to the removal:
- Takashi uses it on a regular basis for developments
- Daniel uses it as well, although he doesn't depend on it
- Marek and Bartlomiej said that Samsung use it internally, without any description of their usage model
Alghouth I can really sympathetize with people above, I still don't think we should keep the 32bit port artificially alive for the sake of it, specially considering that the whole of the 32bit architecture is in best effort, maintenance mode. I'd rather drop KVM support now, while it is still in a decent shape, rather than seeing it bit-rot like it happened for ia64. I also plan to keep maintaining it in the various stable kernels, up to (and including) 5.6.
To reiterate: 32bit guest support for arm64 stays, of course. Only 32bit host goes. Once this is merged, I plan to move virt/kvm/arm to arm64, and cleanup all the now unnecessary abstractions.
The patches have been generated with the -D option to avoid spamming everyone with huge diffs, and there is a kvm-arm/goodbye branch in my kernel.org repository.
* From v1:
- Rebased on top of kvmarm/next
- Simplified the HYP vector replacement code
- Updated the MAINTAINERS file
- Collected Acks
[1] https://lore.kernel.org/linux-arm-kernel/[email protected]/
Marc Zyngier (7):
arm: Unplug KVM from the build system
arm: Remove KVM from config files
arm: Remove 32bit KVM host support
arm: Remove HYP/Stage-2 page-table support
arm: Remove GICv3 vgic compatibility macros
arm: Remove the ability to set HYP vectors outside of the decompressor
MAINTAINERS: RIP KVM/arm
Documentation/virt/kvm/arm/hyp-abi.rst | 5 + MAINTAINERS | 5 +- arch/arm/Kconfig | 2 - arch/arm/Makefile | 1 - arch/arm/configs/axm55xx_defconfig | 2 - arch/arm/include/asm/arch_gicv3.h | 114 -- arch/arm/include/asm/kvm_arm.h | 239 ---- arch/arm/include/asm/kvm_asm.h | 77 -- arch/arm/include/asm/kvm_coproc.h | 36 - arch/arm/include/asm/kvm_emulate.h | 372 ------ arch/arm/include/asm/kvm_host.h | 457 -------- arch/arm/include/asm/kvm_hyp.h | 127 --- arch/arm/include/asm/kvm_mmu.h | 435 ------- arch/arm/include/asm/kvm_ras.h | 14 - arch/arm/include/asm/pgtable-3level.h | 20 - arch/arm/include/asm/pgtable.h | 9 - arch/arm/include/asm/sections.h | 6 +- arch/arm/include/asm/stage2_pgtable.h | 75 -- arch/arm/include/asm/virt.h | 17 - arch/arm/include/uapi/asm/kvm.h | 314 ----- arch/arm/kernel/asm-offsets.c | 11 - arch/arm/kernel/hyp-stub.S | 39 +- arch/arm/kernel/vmlinux-xip.lds.S | 8 - arch/arm/kernel/vmlinux.lds.S | 8 - arch/arm/kernel/vmlinux.lds.h | 10 - arch/arm/kvm/Kconfig | 59 - arch/arm/kvm/Makefile | 43 - arch/arm/kvm/coproc.c | 1455 ------------------------ arch/arm/kvm/coproc.h | 130 --- arch/arm/kvm/coproc_a15.c | 39 - arch/arm/kvm/coproc_a7.c | 42 - arch/arm/kvm/emulate.c | 166 --- arch/arm/kvm/guest.c | 387 ------- arch/arm/kvm/handle_exit.c | 175 --- arch/arm/kvm/hyp/Makefile | 34 - arch/arm/kvm/hyp/banked-sr.c | 70 -- arch/arm/kvm/hyp/cp15-sr.c | 72 -- arch/arm/kvm/hyp/entry.S | 121 -- arch/arm/kvm/hyp/hyp-entry.S | 295 ----- arch/arm/kvm/hyp/s2-setup.c | 22 - arch/arm/kvm/hyp/switch.c | 242 ---- arch/arm/kvm/hyp/tlb.c | 68 -- arch/arm/kvm/hyp/vfp.S | 57 - arch/arm/kvm/init.S | 157 --- arch/arm/kvm/interrupts.S | 36 - arch/arm/kvm/irq.h | 16 - arch/arm/kvm/reset.c | 86 -- arch/arm/kvm/trace.h | 86 -- arch/arm/kvm/vgic-v3-coproc.c | 27 - arch/arm/mach-exynos/Kconfig | 2 +- arch/arm/mm/mmu.c | 26 - 51 files changed, 16 insertions(+), 6300 deletions(-) delete mode 100644 arch/arm/include/asm/kvm_arm.h delete mode 100644 arch/arm/include/asm/kvm_asm.h delete mode 100644 arch/arm/include/asm/kvm_coproc.h delete mode 100644 arch/arm/include/asm/kvm_emulate.h delete mode 100644 arch/arm/include/asm/kvm_host.h delete mode 100644 arch/arm/include/asm/kvm_hyp.h delete mode 100644 arch/arm/include/asm/kvm_mmu.h delete mode 100644 arch/arm/include/asm/kvm_ras.h delete mode 100644 arch/arm/include/asm/stage2_pgtable.h delete mode 100644 arch/arm/include/uapi/asm/kvm.h delete mode 100644 arch/arm/kvm/Kconfig delete mode 100644 arch/arm/kvm/Makefile delete mode 100644 arch/arm/kvm/coproc.c delete mode 100644 arch/arm/kvm/coproc.h delete mode 100644 arch/arm/kvm/coproc_a15.c delete mode 100644 arch/arm/kvm/coproc_a7.c delete mode 100644 arch/arm/kvm/emulate.c delete mode 100644 arch/arm/kvm/guest.c delete mode 100644 arch/arm/kvm/handle_exit.c delete mode 100644 arch/arm/kvm/hyp/Makefile delete mode 100644 arch/arm/kvm/hyp/banked-sr.c delete mode 100644 arch/arm/kvm/hyp/cp15-sr.c delete mode 100644 arch/arm/kvm/hyp/entry.S delete mode 100644 arch/arm/kvm/hyp/hyp-entry.S delete mode 100644 arch/arm/kvm/hyp/s2-setup.c delete mode 100644 arch/arm/kvm/hyp/switch.c delete mode 100644 arch/arm/kvm/hyp/tlb.c delete mode 100644 arch/arm/kvm/hyp/vfp.S delete mode 100644 arch/arm/kvm/init.S delete mode 100644 arch/arm/kvm/interrupts.S delete mode 100644 arch/arm/kvm/irq.h delete mode 100644 arch/arm/kvm/reset.c delete mode 100644 arch/arm/kvm/trace.h delete mode 100644 arch/arm/kvm/vgic-v3-coproc.c
Signature · 1 line
2.25.0
Marc Zyngier
maintainerPATCH v2 1/7 arm: Unplug KVM from the build system
As we're about to drop KVM/arm on the floor, carefully unplug it from the build system.
--- arch/arm/Kconfig | 2 -- arch/arm/Makefile | 1 - arch/arm/mach-exynos/Kconfig | 2 +- 3 files changed, 1 insertion(+), 4 deletions(-)
arch/arm/Kconfig +0 -2
@@ -2091,5 +2091,3 @@ source "drivers/firmware/Kconfig" if CRYPTO source "arch/arm/crypto/Kconfig" endif - -source "arch/arm/kvm/Kconfig"
arch/arm/Makefile +0 -1
@@ -278,7 +278,6 @@ core-$(CONFIG_FPE_NWFPE) += arch/arm/nwfpe/ core-$(CONFIG_FPE_FASTFPE) += $(patsubst $(srctree)/%,%,$(wildcard $(srctree)/arch/arm/fastfpe/)) core-$(CONFIG_VFP) += arch/arm/vfp/ core-$(CONFIG_XEN) += arch/arm/xen/ -core-$(CONFIG_KVM_ARM_HOST) += arch/arm/kvm/ core-$(CONFIG_VDSO) += arch/arm/vdso/ # If we have a machine-specific directory, then include it in the build.
arch/arm/mach-exynos/Kconfig +1 -1
@@ -21,7 +21,7 @@ menuconfig ARCH_EXYNOS select EXYNOS_SROM select EXYNOS_PM_DOMAINS if PM_GENERIC_DOMAINS select GPIOLIB - select HAVE_ARM_ARCH_TIMER if ARCH_EXYNOS5 && VIRTUALIZATION + select HAVE_ARM_ARCH_TIMER if ARCH_EXYNOS5 select HAVE_ARM_SCU if SMP select HAVE_S3C2410_I2C if I2C select HAVE_S3C2410_WATCHDOG if WATCHDOG
Signature · 1 line
2.25.0
Re: [PATCH v2 1/7] arm: Unplug KVM from the build system
Quoted 11 lines · Marc Zyngier
As we're about to drop KVM/arm on the floor, carefully unplug it from the build system.
Signed-off-by Marc Zyngier <[email protected]>Acked-by Olof Johansson <[email protected]>Acked-by Arnd Bergmann <[email protected]>Acked-by Will Deacon <[email protected]>Acked-by Vladimir Murzin <[email protected]>Acked-by Catalin Marinas <[email protected]>Acked-by Linus Walleij <[email protected]>Acked-by Christoffer Dall <[email protected]>
Quoted 4 lines
--- arch/arm/Kconfig | 2 -- arch/arm/Makefile | 1 - arch/arm/mach-exynos/Kconfig | 2 +-
For Exynos:
Best regards,
Krzysztof
Marc Zyngier
maintainerPATCH v2 2/7 arm: Remove KVM from config files
In reply to Marc ZyngierOnly one platform is building KVM by default. How crazy! Remove it whilst nobody is watching.
--- arch/arm/configs/axm55xx_defconfig | 2 -- 1 file changed, 2 deletions(-)
arch/arm/configs/axm55xx_defconfig +0 -2
@@ -236,5 +236,3 @@ CONFIG_CRYPTO_GCM=y CONFIG_CRYPTO_XCBC=y CONFIG_CRYPTO_SHA256=y # CONFIG_CRYPTO_ANSI_CPRNG is not set -CONFIG_VIRTUALIZATION=y -CONFIG_KVM=y
Signature · 1 line
2.25.0
Marc Zyngier
maintainerPATCH v2 3/7 arm: Remove 32bit KVM host support
In reply to Marc ZyngierThat's it. Remove all references to KVM itself, and document that although it is no more, the ABI between SVC and HYP still exists.
--- Documentation/virt/kvm/arm/hyp-abi.rst | 5 + arch/arm/include/asm/kvm_arm.h | 239 ---- arch/arm/include/asm/kvm_asm.h | 77 -- arch/arm/include/asm/kvm_coproc.h | 36 - arch/arm/include/asm/kvm_emulate.h | 372 ------ arch/arm/include/asm/kvm_host.h | 457 -------- arch/arm/include/asm/kvm_hyp.h | 127 --- arch/arm/include/asm/kvm_mmu.h | 435 ------- arch/arm/include/asm/kvm_ras.h | 14 - arch/arm/include/asm/stage2_pgtable.h | 75 -- arch/arm/include/asm/virt.h | 5 - arch/arm/include/uapi/asm/kvm.h | 314 ----- arch/arm/kernel/asm-offsets.c | 11 - arch/arm/kvm/Kconfig | 59 - arch/arm/kvm/Makefile | 43 - arch/arm/kvm/coproc.c | 1455 ------------------------ arch/arm/kvm/coproc.h | 130 --- arch/arm/kvm/coproc_a15.c | 39 - arch/arm/kvm/coproc_a7.c | 42 - arch/arm/kvm/emulate.c | 166 --- arch/arm/kvm/guest.c | 387 ------- arch/arm/kvm/handle_exit.c | 175 --- arch/arm/kvm/hyp/Makefile | 34 - arch/arm/kvm/hyp/banked-sr.c | 70 -- arch/arm/kvm/hyp/cp15-sr.c | 72 -- arch/arm/kvm/hyp/entry.S | 121 -- arch/arm/kvm/hyp/hyp-entry.S | 295 ----- arch/arm/kvm/hyp/s2-setup.c | 22 - arch/arm/kvm/hyp/switch.c | 242 ---- arch/arm/kvm/hyp/tlb.c | 68 -- arch/arm/kvm/hyp/vfp.S | 57 - arch/arm/kvm/init.S | 157 --- arch/arm/kvm/interrupts.S | 36 - arch/arm/kvm/irq.h | 16 - arch/arm/kvm/reset.c | 86 -- arch/arm/kvm/trace.h | 86 -- arch/arm/kvm/vgic-v3-coproc.c | 27 - 37 files changed, 5 insertions(+), 6047 deletions(-) delete mode 100644 arch/arm/include/asm/kvm_arm.h delete mode 100644 arch/arm/include/asm/kvm_asm.h delete mode 100644 arch/arm/include/asm/kvm_coproc.h delete mode 100644 arch/arm/include/asm/kvm_emulate.h delete mode 100644 arch/arm/include/asm/kvm_host.h delete mode 100644 arch/arm/include/asm/kvm_hyp.h delete mode 100644 arch/arm/include/asm/kvm_mmu.h delete mode 100644 arch/arm/include/asm/kvm_ras.h delete mode 100644 arch/arm/include/asm/stage2_pgtable.h delete mode 100644 arch/arm/include/uapi/asm/kvm.h delete mode 100644 arch/arm/kvm/Kconfig delete mode 100644 arch/arm/kvm/Makefile delete mode 100644 arch/arm/kvm/coproc.c delete mode 100644 arch/arm/kvm/coproc.h delete mode 100644 arch/arm/kvm/coproc_a15.c delete mode 100644 arch/arm/kvm/coproc_a7.c delete mode 100644 arch/arm/kvm/emulate.c delete mode 100644 arch/arm/kvm/guest.c delete mode 100644 arch/arm/kvm/handle_exit.c delete mode 100644 arch/arm/kvm/hyp/Makefile delete mode 100644 arch/arm/kvm/hyp/banked-sr.c delete mode 100644 arch/arm/kvm/hyp/cp15-sr.c delete mode 100644 arch/arm/kvm/hyp/entry.S delete mode 100644 arch/arm/kvm/hyp/hyp-entry.S delete mode 100644 arch/arm/kvm/hyp/s2-setup.c delete mode 100644 arch/arm/kvm/hyp/switch.c delete mode 100644 arch/arm/kvm/hyp/tlb.c delete mode 100644 arch/arm/kvm/hyp/vfp.S delete mode 100644 arch/arm/kvm/init.S delete mode 100644 arch/arm/kvm/interrupts.S delete mode 100644 arch/arm/kvm/irq.h delete mode 100644 arch/arm/kvm/reset.c delete mode 100644 arch/arm/kvm/trace.h delete mode 100644 arch/arm/kvm/vgic-v3-coproc.c
Documentation/virt/kvm/arm/hyp-abi.rst +5 -0
@@ -11,6 +11,11 @@ hypervisor when running as a guest (under Xen, KVM or any other hypervisor), or any hypervisor-specific interaction when the kernel is used as a host. +Note: KVM/arm has been removed from the kernel. The API described +here is still valid though, as it allows the kernel to kexec when +booted at HYP. It can also be used by a hypervisor other than KVM +if necessary. + On arm and arm64 (without VHE), the kernel doesn't run in hypervisor mode, but still needs to interact with it, allowing a built-in hypervisor to be either installed or torn down.
arch/arm/include/asm/kvm_arm.h deleted +0 -0
arch/arm/include/asm/kvm_asm.h deleted +0 -0
arch/arm/include/asm/kvm_coproc.h deleted +0 -0
arch/arm/include/asm/kvm_emulate.h deleted +0 -0
arch/arm/include/asm/kvm_host.h deleted +0 -0
arch/arm/include/asm/kvm_hyp.h deleted +0 -0
arch/arm/include/asm/kvm_mmu.h deleted +0 -0
arch/arm/include/asm/kvm_ras.h deleted +0 -0
arch/arm/include/asm/stage2_pgtable.h deleted +0 -0
arch/arm/include/asm/virt.h +0 -5
@@ -67,11 +67,6 @@ static inline bool is_kernel_in_hyp_mode(void)return false; } -static inline bool has_vhe (void ) -{ -return false; -} -/* The section containing the hypervisor idmap text */ extern char __hyp_idmap_text_start[];extern char __hyp_idmap_text_end[];
arch/arm/include/uapi/asm/kvm.h deleted +0 -0
arch/arm/kernel/asm-offsets.c +0 -11
@@ -11,9 +11,6 @@#include <linux/sched.h> #include <linux/mm.h> #include <linux/dma-mapping.h> -#ifdef CONFIG_KVM_ARM_HOST -#include <linux/kvm_host.h> -#endif #include <asm/cacheflush.h> #include <asm/glue-df.h> #include <asm/glue-pf.h>
@@ -167,14 +164,6 @@ int main(void)DEFINE (CACHE_WRITEBACK_ORDER , __CACHE_WRITEBACK_ORDER);DEFINE (CACHE_WRITEBACK_GRANULE , __CACHE_WRITEBACK_GRANULE);BLANK (); -#ifdef CONFIG_KVM_ARM_HOST - DEFINE(VCPU_GUEST_CTXT, offsetof(struct kvm_vcpu, arch.ctxt)); - DEFINE(VCPU_HOST_CTXT, offsetof(struct kvm_vcpu, arch.host_cpu_context)); -DEFINE (CPU_CTXT_VFP , offsetof(struct kvm_cpu_context , vfp)); -DEFINE (CPU_CTXT_GP_REGS , offsetof(struct kvm_cpu_context , gp_regs)); -DEFINE (GP_REGS_USR , offsetof(struct kvm_regs , usr_regs)); -#endif -BLANK ();#ifdef CONFIG_VDSO DEFINE (VDSO_DATA_SIZE ,sizeof (union vdso_data_store ));#endif
arch/arm/kvm/Kconfig deleted +0 -0
arch/arm/kvm/Makefile deleted +0 -0
arch/arm/kvm/coproc.c deleted +0 -0
arch/arm/kvm/coproc.h deleted +0 -0
arch/arm/kvm/coproc_a15.c deleted +0 -0
arch/arm/kvm/coproc_a7.c deleted +0 -0
arch/arm/kvm/emulate.c deleted +0 -0
arch/arm/kvm/guest.c deleted +0 -0
arch/arm/kvm/handle_exit.c deleted +0 -0
arch/arm/kvm/hyp/Makefile deleted +0 -0
arch/arm/kvm/hyp/banked-sr.c deleted +0 -0
arch/arm/kvm/hyp/cp15-sr.c deleted +0 -0
arch/arm/kvm/hyp/entry.S deleted +0 -0
arch/arm/kvm/hyp/hyp-entry.S deleted +0 -0
arch/arm/kvm/hyp/s2-setup.c deleted +0 -0
arch/arm/kvm/hyp/switch.c deleted +0 -0
arch/arm/kvm/hyp/tlb.c deleted +0 -0
arch/arm/kvm/hyp/vfp.S deleted +0 -0
arch/arm/kvm/init.S deleted +0 -0
arch/arm/kvm/interrupts.S deleted +0 -0
arch/arm/kvm/irq.h deleted +0 -0
arch/arm/kvm/reset.c deleted +0 -0
arch/arm/kvm/trace.h deleted +0 -0
arch/arm/kvm/vgic-v3-coproc.c deleted +0 -0
Signature · 1 line
2.25.0
Marc Zyngier
maintainerPATCH v2 4/7 arm: Remove HYP/Stage-2 page-table support
In reply to Marc ZyngierRemove all traces of Stage-2 and HYP page table support.
--- arch/arm/include/asm/pgtable-3level.h | 20 -------------------- arch/arm/include/asm/pgtable.h | 9 --------- arch/arm/include/asm/sections.h | 6 +----- arch/arm/include/asm/virt.h | 7 ------- arch/arm/kernel/vmlinux-xip.lds.S | 8 -------- arch/arm/kernel/vmlinux.lds.S | 8 -------- arch/arm/kernel/vmlinux.lds.h | 10 ---------- arch/arm/mm/mmu.c | 26 -------------------------- 8 files changed, 1 insertion(+), 93 deletions(-)
arch/arm/include/asm/pgtable-3level.h +0 -20
@@ -104,26 +104,6 @@*/ #define L_PGD_SWAPPER (_AT(pgdval_t, 1) << 55)/* swapper_pg_dir entry */ -/* -* 2nd stage PTE definitions for LPAE. -*/ -#define L_PTE_S2_MT_UNCACHED (_AT(pteval_t, 0x0) << 2)/* strongly ordered */ -#define L_PTE_S2_MT_WRITETHROUGH (_AT(pteval_t, 0xa) << 2)/* normal inner write-through */ -#define L_PTE_S2_MT_WRITEBACK (_AT(pteval_t, 0xf) << 2)/* normal inner write-back */ -#define L_PTE_S2_MT_DEV_SHARED (_AT(pteval_t, 0x1) << 2)/* device */ -#define L_PTE_S2_MT_MASK (_AT(pteval_t, 0xf) << 2) - -#define L_PTE_S2_RDONLY (_AT(pteval_t, 1) << 6)/* HAP[1] */ -#define L_PTE_S2_RDWR (_AT(pteval_t, 3) << 6)/* HAP[2:1] */ - -#define L_PMD_S2_RDONLY (_AT(pmdval_t, 1) << 6)/* HAP[1] */ -#define L_PMD_S2_RDWR (_AT(pmdval_t, 3) << 6)/* HAP[2:1] */ - -/* -* Hyp-mode PL2 PTE definitions for LPAE. -*/ -#define L_PTE_HYP L_PTE_USER -#ifndef __ASSEMBLY__#define pud_none (pud) (!pud_val(pud))
arch/arm/include/asm/pgtable.h +0 -9
@@ -80,9 +80,6 @@ extern void __pgd_error(const char *file, int line, pgd_t);extern pgprot_t pgprot_user;extern pgprot_t pgprot_kernel; -extern pgprot_t pgprot_hyp_device; -extern pgprot_t pgprot_s2; -extern pgprot_t pgprot_s2_device;#define _MOD_PROT (p, b) __pgprot(pgprot_val(p) | (b))
@@ -95,12 +92,6 @@ extern pgprot_t pgprot_s2_device;#define PAGE_READONLY_EXEC _MOD_PROT(pgprot_user, L_PTE_USER | L_PTE_RDONLY)#define PAGE_KERNEL _MOD_PROT(pgprot_kernel, L_PTE_XN)#define PAGE_KERNEL_EXEC pgprot_kernel -#define PAGE_HYP _MOD_PROT(pgprot_kernel, L_PTE_HYP | L_PTE_XN) -#define PAGE_HYP_EXEC _MOD_PROT(pgprot_kernel, L_PTE_HYP | L_PTE_RDONLY) -#define PAGE_HYP_RO _MOD_PROT(pgprot_kernel, L_PTE_HYP | L_PTE_RDONLY | L_PTE_XN) -#define PAGE_HYP_DEVICE _MOD_PROT(pgprot_hyp_device, L_PTE_HYP) -#define PAGE_S2 _MOD_PROT(pgprot_s2, L_PTE_S2_RDONLY | L_PTE_XN) -#define PAGE_S2_DEVICE _MOD_PROT(pgprot_s2_device, L_PTE_S2_RDONLY | L_PTE_XN)#define __PAGE_NONE __pgprot(_L_PTE_DEFAULT | L_PTE_RDONLY | L_PTE_XN | L_PTE_NONE)#define __PAGE_SHARED __pgprot(_L_PTE_DEFAULT | L_PTE_USER | L_PTE_XN)
arch/arm/include/asm/sections.h +1 -5
@@ -10,8 +10,6 @@ extern char __idmap_text_start[];extern char __idmap_text_end[];extern char __entry_text_start[];extern char __entry_text_end[]; -extern char __hyp_idmap_text_start[]; -extern char __hyp_idmap_text_end[];static inline bool in_entry_text (unsigned long addr) {
@@ -22,9 +20,7 @@ static inline bool in_entry_text(unsigned long addr)static inline bool in_idmap_text (unsigned long addr) {void *a = (void *)addr; -return memory_contains (__idmap_text_start, __idmap_text_end, a,1 ) || -memory_contains (__hyp_idmap_text_start, __hyp_idmap_text_end, - a,1 ); +return memory_contains (__idmap_text_start, __idmap_text_end, a,1 ); }#endif /* _ASM_ARM_SECTIONS_H */
arch/arm/include/asm/virt.h +0 -7
@@ -67,13 +67,6 @@ static inline bool is_kernel_in_hyp_mode(void) return false; } -/* The section containing the hypervisor idmap text */ -extern char __hyp_idmap_text_start[]; -extern char __hyp_idmap_text_end[]; - -/* The section containing the hypervisor text */ -extern char __hyp_text_start[]; -extern char __hyp_text_end[];#endif #else
arch/arm/kernel/vmlinux-xip.lds.S +0 -8
@@ -162,14 +162,6 @@ SECTIONS ASSERT((__proc_info_end - __proc_info_begin), "missing CPU support") ASSERT((__arch_info_end - __arch_info_begin), "no machine record defined") -/* - * The HYP init code can't be more than a page long, - * and should not cross a page boundary. - * The above comment applies as well. - */ -ASSERT(__hyp_idmap_text_end - (__hyp_idmap_text_start & PAGE_MASK) <= PAGE_SIZE, - "HYP init code too big or misaligned") - #ifdef CONFIG_XIP_DEFLATED_DATA /* * The .bss is used as a stack area for __inflate_kernel_data() whose stack
arch/arm/kernel/vmlinux.lds.S +0 -8
@@ -170,12 +170,4 @@ __start_rodata_section_aligned = ALIGN(__start_rodata, 1 << SECTION_SHIFT); ASSERT((__proc_info_end - __proc_info_begin), "missing CPU support") ASSERT((__arch_info_end - __arch_info_begin), "no machine record defined") -/* - * The HYP init code can't be more than a page long, - * and should not cross a page boundary. - * The above comment applies as well. - */ -ASSERT(__hyp_idmap_text_end - (__hyp_idmap_text_start & PAGE_MASK) <= PAGE_SIZE, - "HYP init code too big or misaligned") - #endif /* CONFIG_XIP_KERNEL */
arch/arm/kernel/vmlinux.lds.h +0 -10
@@ -31,20 +31,11 @@ *(.proc.info.init) \ __proc_info_end = .; -#define HYPERVISOR_TEXT \ - __hyp_text_start = .; \ - *(.hyp.text) \ - __hyp_text_end = .; -#define IDMAP_TEXT \ ALIGN_FUNCTION(); \ __idmap_text_start = .; \ *(.idmap.text) \ __idmap_text_end = .; \ - . = ALIGN(PAGE_SIZE); \ - __hyp_idmap_text_start = .; \ - *(.hyp.idmap.text) \ - __hyp_idmap_text_end = .;#define ARM_DISCARD \ *(.ARM.exidx.exit.text) \
@@ -72,7 +63,6 @@SCHED_TEXT \ CPUIDLE_TEXT \LOCK_TEXT \ - HYPERVISOR_TEXT \ KPROBES_TEXT \ *(.gnu.warning) \ *(.glue_7) \
arch/arm/mm/mmu.c +0 -26
@@ -63,9 +63,6 @@ static unsigned int cachepolicy __initdata = CPOLICY_WRITEBACK;static unsigned int ecc_mask__initdata =0 ;pgprot_t pgprot_user;pgprot_t pgprot_kernel; -pgprot_t pgprot_hyp_device; -pgprot_t pgprot_s2; -pgprot_t pgprot_s2_device;EXPORT_SYMBOL (pgprot_user);EXPORT_SYMBOL (pgprot_kernel);
@@ -75,15 +72,8 @@ struct cachepolicy {unsigned int cr_mask;pmdval_t pmd;pteval_t pte; -pteval_t pte_s2; }; -#ifdef CONFIG_ARM_LPAE -#define s2_policy (policy) policy -#else -#define s2_policy (policy) 0 -#endif -unsigned long kimage_voffset__ro_after_init ;static struct cachepolicy cache_policies[]__initdata = {
@@ -92,31 +82,26 @@ static struct cachepolicy cache_policies[] __initdata = { .cr_mask = CR_W|CR_C, .pmd = PMD_SECT_UNCACHED, .pte = L_PTE_MT_UNCACHED, - .pte_s2 = s2_policy(L_PTE_S2_MT_UNCACHED), }, { .policy = "buffered", .cr_mask = CR_C, .pmd = PMD_SECT_BUFFERED, .pte = L_PTE_MT_BUFFERABLE, - .pte_s2 = s2_policy(L_PTE_S2_MT_UNCACHED), }, { .policy = "writethrough", .cr_mask = 0, .pmd = PMD_SECT_WT, .pte = L_PTE_MT_WRITETHROUGH, - .pte_s2 = s2_policy(L_PTE_S2_MT_WRITETHROUGH), }, { .policy = "writeback", .cr_mask = 0, .pmd = PMD_SECT_WB, .pte = L_PTE_MT_WRITEBACK, - .pte_s2 = s2_policy(L_PTE_S2_MT_WRITEBACK), }, { .policy = "writealloc", .cr_mask = 0, .pmd = PMD_SECT_WBWA, .pte = L_PTE_MT_WRITEALLOC, - .pte_s2 = s2_policy(L_PTE_S2_MT_WRITEBACK), } };
@@ -246,9 +231,6 @@ static struct mem_type mem_types[] __ro_after_init = { [MT_DEVICE] = { /* Strongly ordered / ARMv6 shared device */ .prot_pte =PROT_PTE_DEVICE |L_PTE_MT_DEV_SHARED | L_PTE_SHARED, - .prot_pte_s2 =s2_policy (PROT_PTE_S2_DEVICE ) | -s2_policy (L_PTE_S2_MT_DEV_SHARED ) | - L_PTE_SHARED, .prot_l1 = PMD_TYPE_TABLE, .prot_sect = PROT_SECT_DEVICE | PMD_SECT_S, .domain = DOMAIN_IO,
@@ -434,7 +416,6 @@ static void __init build_mem_type_table(void)struct cachepolicy *cp;unsigned int cr =get_cr ();pteval_t user_pgprot, kern_pgprot, vecs_pgprot; -pteval_t hyp_device_pgprot, s2_pgprot, s2_device_pgprot;int cpu_arch =cpu_architecture ();int i;
@@ -558,9 +539,6 @@ static void __init build_mem_type_table(void)*/ cp = &cache_policies[cachepolicy]; vecs_pgprot = kern_pgprot = user_pgprot = cp->pte; - s2_pgprot = cp->pte_s2; - hyp_device_pgprot = mem_types[MT_DEVICE ].prot_pte; - s2_device_pgprot = mem_types[MT_DEVICE ].prot_pte_s2;#ifndef CONFIG_ARM_LPAE /*
@@ -604,7 +582,6 @@ static void __init build_mem_type_table(void) user_pgprot |=L_PTE_SHARED ; kern_pgprot |=L_PTE_SHARED ; vecs_pgprot |=L_PTE_SHARED ; - s2_pgprot |=L_PTE_SHARED ; mem_types[MT_DEVICE_WC ].prot_sect |=PMD_SECT_S ; mem_types[MT_DEVICE_WC ].prot_pte |=L_PTE_SHARED ; mem_types[MT_DEVICE_CACHED ].prot_sect |=PMD_SECT_S ;
@@ -666,9 +643,6 @@ static void __init build_mem_type_table(void) pgprot_user =__pgprot (L_PTE_PRESENT |L_PTE_YOUNG | user_pgprot); pgprot_kernel =__pgprot (L_PTE_PRESENT |L_PTE_YOUNG |L_PTE_DIRTY | kern_pgprot); - pgprot_s2 =__pgprot (L_PTE_PRESENT |L_PTE_YOUNG | s2_pgprot); - pgprot_s2_device =__pgprot (s2_device_pgprot); - pgprot_hyp_device =__pgprot (hyp_device_pgprot); mem_types[MT_LOW_VECTORS ].prot_l1 |= ecc_mask; mem_types[MT_HIGH_VECTORS ].prot_l1 |= ecc_mask;
Signature · 1 line
2.25.0
Marc Zyngier
maintainerPATCH v2 5/7 arm: Remove GICv3 vgic compatibility macros
In reply to Marc ZyngierWe used to use a set of macros to provide support of vgic-v3 to 32bit without duplicating everything. We don't need it anymore, so drop it.
--- arch/arm/include/asm/arch_gicv3.h | 114 ------------------------------ 1 file changed, 114 deletions(-)
arch/arm/include/asm/arch_gicv3.h +0 -114
@@ -38,71 +38,6 @@#define ICC_AP1R2 __ICC_AP1Rx(2)#define ICC_AP1R3 __ICC_AP1Rx(3) -#define ICC_HSRE __ACCESS_CP15(c12, 4, c9, 5) - -#define ICH_VSEIR __ACCESS_CP15(c12, 4, c9, 4) -#define ICH_HCR __ACCESS_CP15(c12, 4, c11, 0) -#define ICH_VTR __ACCESS_CP15(c12, 4, c11, 1) -#define ICH_MISR __ACCESS_CP15(c12, 4, c11, 2) -#define ICH_EISR __ACCESS_CP15(c12, 4, c11, 3) -#define ICH_ELRSR __ACCESS_CP15(c12, 4, c11, 5) -#define ICH_VMCR __ACCESS_CP15(c12, 4, c11, 7) - -#define __LR0 (x) __ACCESS_CP15(c12, 4, c12, x) -#define __LR8 (x) __ACCESS_CP15(c12, 4, c13, x) - -#define ICH_LR0 __LR0(0) -#define ICH_LR1 __LR0(1) -#define ICH_LR2 __LR0(2) -#define ICH_LR3 __LR0(3) -#define ICH_LR4 __LR0(4) -#define ICH_LR5 __LR0(5) -#define ICH_LR6 __LR0(6) -#define ICH_LR7 __LR0(7) -#define ICH_LR8 __LR8(0) -#define ICH_LR9 __LR8(1) -#define ICH_LR10 __LR8(2) -#define ICH_LR11 __LR8(3) -#define ICH_LR12 __LR8(4) -#define ICH_LR13 __LR8(5) -#define ICH_LR14 __LR8(6) -#define ICH_LR15 __LR8(7) - -/* LR top half */ -#define __LRC0 (x) __ACCESS_CP15(c12, 4, c14, x) -#define __LRC8 (x) __ACCESS_CP15(c12, 4, c15, x) - -#define ICH_LRC0 __LRC0(0) -#define ICH_LRC1 __LRC0(1) -#define ICH_LRC2 __LRC0(2) -#define ICH_LRC3 __LRC0(3) -#define ICH_LRC4 __LRC0(4) -#define ICH_LRC5 __LRC0(5) -#define ICH_LRC6 __LRC0(6) -#define ICH_LRC7 __LRC0(7) -#define ICH_LRC8 __LRC8(0) -#define ICH_LRC9 __LRC8(1) -#define ICH_LRC10 __LRC8(2) -#define ICH_LRC11 __LRC8(3) -#define ICH_LRC12 __LRC8(4) -#define ICH_LRC13 __LRC8(5) -#define ICH_LRC14 __LRC8(6) -#define ICH_LRC15 __LRC8(7) - -#define __ICH_AP0Rx (x) __ACCESS_CP15(c12, 4, c8, x) -#define ICH_AP0R0 __ICH_AP0Rx(0) -#define ICH_AP0R1 __ICH_AP0Rx(1) -#define ICH_AP0R2 __ICH_AP0Rx(2) -#define ICH_AP0R3 __ICH_AP0Rx(3) - -#define __ICH_AP1Rx (x) __ACCESS_CP15(c12, 4, c9, x) -#define ICH_AP1R0 __ICH_AP1Rx(0) -#define ICH_AP1R1 __ICH_AP1Rx(1) -#define ICH_AP1R2 __ICH_AP1Rx(2) -#define ICH_AP1R3 __ICH_AP1Rx(3) - -/* A32-to-A64 mappings used by VGIC save/restore */ -#define CPUIF_MAP (a32, a64) \ static inline void write_ ## a64(u32 val) \ { \
@@ -113,21 +48,6 @@ static inline u32 read_ ## a64(void) \return read_sysreg (a32); \ } \ -#define CPUIF_MAP_LO_HI (a32lo, a32hi, a64) \ -static inline void write_ ## a64(u64 val) \ -{ \ - write_sysreg(lower_32_bits(val), a32lo);\ - write_sysreg(upper_32_bits(val), a32hi);\ -} \ -static inline u64 read_ ## a64(void) \ -{ \ - u64 val = read_sysreg(a32lo); \ - \ - val |= (u64)read_sysreg(a32hi) << 32; \ - \ - return val; \ -} - CPUIF_MAP(ICC_PMR, ICC_PMR_EL1) CPUIF_MAP(ICC_AP0R0, ICC_AP0R0_EL1)CPUIF_MAP (ICC_AP0R1 ,ICC_AP0R1_EL1 )
@@ -138,40 +58,6 @@ CPUIF_MAP(ICC_AP1R1, ICC_AP1R1_EL1) CPUIF_MAP(ICC_AP1R2, ICC_AP1R2_EL1) CPUIF_MAP(ICC_AP1R3, ICC_AP1R3_EL1) -CPUIF_MAP(ICH_HCR, ICH_HCR_EL2) -CPUIF_MAP(ICH_VTR, ICH_VTR_EL2) -CPUIF_MAP(ICH_MISR, ICH_MISR_EL2) -CPUIF_MAP(ICH_EISR, ICH_EISR_EL2) -CPUIF_MAP(ICH_ELRSR, ICH_ELRSR_EL2) -CPUIF_MAP(ICH_VMCR, ICH_VMCR_EL2) -CPUIF_MAP(ICH_AP0R3, ICH_AP0R3_EL2) -CPUIF_MAP(ICH_AP0R2, ICH_AP0R2_EL2) -CPUIF_MAP(ICH_AP0R1, ICH_AP0R1_EL2) -CPUIF_MAP(ICH_AP0R0, ICH_AP0R0_EL2) -CPUIF_MAP(ICH_AP1R3, ICH_AP1R3_EL2) -CPUIF_MAP(ICH_AP1R2, ICH_AP1R2_EL2) -CPUIF_MAP(ICH_AP1R1, ICH_AP1R1_EL2) -CPUIF_MAP(ICH_AP1R0, ICH_AP1R0_EL2) -CPUIF_MAP(ICC_HSRE, ICC_SRE_EL2) -CPUIF_MAP(ICC_SRE, ICC_SRE_EL1) - -CPUIF_MAP_LO_HI(ICH_LR15, ICH_LRC15, ICH_LR15_EL2) -CPUIF_MAP_LO_HI(ICH_LR14, ICH_LRC14, ICH_LR14_EL2) -CPUIF_MAP_LO_HI(ICH_LR13, ICH_LRC13, ICH_LR13_EL2) -CPUIF_MAP_LO_HI(ICH_LR12, ICH_LRC12, ICH_LR12_EL2) -CPUIF_MAP_LO_HI(ICH_LR11, ICH_LRC11, ICH_LR11_EL2) -CPUIF_MAP_LO_HI(ICH_LR10, ICH_LRC10, ICH_LR10_EL2) -CPUIF_MAP_LO_HI(ICH_LR9, ICH_LRC9, ICH_LR9_EL2) -CPUIF_MAP_LO_HI(ICH_LR8, ICH_LRC8, ICH_LR8_EL2) -CPUIF_MAP_LO_HI(ICH_LR7, ICH_LRC7, ICH_LR7_EL2) -CPUIF_MAP_LO_HI(ICH_LR6, ICH_LRC6, ICH_LR6_EL2) -CPUIF_MAP_LO_HI(ICH_LR5, ICH_LRC5, ICH_LR5_EL2) -CPUIF_MAP_LO_HI(ICH_LR4, ICH_LRC4, ICH_LR4_EL2) -CPUIF_MAP_LO_HI(ICH_LR3, ICH_LRC3, ICH_LR3_EL2) -CPUIF_MAP_LO_HI(ICH_LR2, ICH_LRC2, ICH_LR2_EL2) -CPUIF_MAP_LO_HI(ICH_LR1, ICH_LRC1, ICH_LR1_EL2) -CPUIF_MAP_LO_HI(ICH_LR0, ICH_LRC0, ICH_LR0_EL2) -#define read_gicreg (r) read_##r()#define write_gicreg (v, r) write_##r(v)
Signature · 1 line
2.25.0
Marc Zyngier
maintainerPATCH v2 6/7 arm: Remove the ability to set HYP vectors outside of the decompressor
In reply to Marc ZyngierAlthough we have to bounce between HYP and SVC to decompress and relocate the kernel, we don't need to be able to use it in the kernel itself. So let's drop the functionnality.
Since the vectors are never changed, there is no need to reset them either, and nobody calls that stub anyway. The last function (SOFT_RESTART) is still present in order to support kexec.
--- arch/arm/include/asm/virt.h | 5 ----- arch/arm/kernel/hyp-stub.S | 39 ++++++++----------------------------- 2 files changed, 8 insertions(+), 36 deletions(-)
arch/arm/include/asm/virt.h +0 -5
@@ -39,8 +39,6 @@ static inline void sync_boot_mode(void) sync_cache_r(&__boot_cpu_mode); } -void __hyp_set_vectors (unsigned long phys_vector_base); -void __hyp_reset_vectors (void );#else #define __boot_cpu_mode (SVC_MODE)#define sync_boot_mode ()
@@ -75,9 +73,6 @@ static inline bool is_kernel_in_hyp_mode(void)#define HVC_SET_VECTORS 0#define HVC_SOFT_RESTART 1 -#define HVC_RESET_VECTORS 2 - -#define HVC_STUB_HCALL_NR 3#endif /* __ASSEMBLY__ */
arch/arm/kernel/hyp-stub.S +8 -31
@@ -189,19 +189,19 @@ ARM_BE8(orr r7, r7, #(1 << 25)) @ HSCTLR.EE ENDPROC(__hyp_stub_install_secondary) __hyp_stub_do_trap: +#ifdef ZIMAGE teq r0, #HVC_SET_VECTORS bne 1f + /* Only the ZIMAGE stubs can change the HYP vectors */ mcr p15, 4, r1, c12, c0, 0 @ set HVBAR b __hyp_stub_exit +#endif 1: teq r0, #HVC_SOFT_RESTART - bne 1f + bne 2f bx r1 -1: teq r0, #HVC_RESET_VECTORS - beq __hyp_stub_exit - - ldr r0, =HVC_STUB_ERR +2: ldr r0, =HVC_STUB_ERR __ERET __hyp_stub_exit:
@@ -210,26 +210,9 @@ __hyp_stub_exit: ENDPROC(__hyp_stub_do_trap) /* - * __hyp_set_vectors: Call this after boot to set the initial hypervisor - * vectors as part of hypervisor installation. On an SMP system, this should - * be called on each CPU. - * - * r0 must be the physical address of the new vector table (which must lie in - * the bottom 4GB of physical address space. - * - * r0 must be 32-byte aligned. - * - * Before calling this, you must check that the stub hypervisor is installed - * everywhere, by waiting for any secondary CPUs to be brought up and then - * checking that BOOT_CPU_MODE_HAVE_HYP(__boot_cpu_mode) is true. - * - * If not, there is a pre-existing hypervisor, some CPUs failed to boot, or - * something else went wrong... in such cases, trying to install a new - * hypervisor is unlikely to work as desired. - * - * When you call into your shiny new hypervisor, sp_hyp will contain junk, - * so you will need to set that to something sensible at the new hypervisor's - * initialisation entry point. + * __hyp_set_vectors is only used when ZIMAGE must bounce between HYP + * and SVC. For the kernel itself, the vectors are set once and for + * all by the stubs. */ ENTRY(__hyp_set_vectors) mov r1, r0
@@ -245,12 +228,6 @@ ENTRY(__hyp_soft_restart) ret lr ENDPROC(__hyp_soft_restart) -ENTRY(__hyp_reset_vectors) - mov r0, #HVC_RESET_VECTORS - __HVC(0) - ret lr -ENDPROC(__hyp_reset_vectors) - #ifndef ZIMAGE .align 2 .L__boot_cpu_mode_offset:
Signature · 1 line
2.25.0
Marc Zyngier
maintainerPATCH v2 7/7 MAINTAINERS: RIP KVM/arm
In reply to Marc ZyngierDrop the KVM/arm entries from the MAINTAINERS file.
--- MAINTAINERS | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)
MAINTAINERS +1 -4
@@ -9164,7 +9164,7 @@ F: virt/kvm/* F: tools/kvm/ F: tools/testing/selftests/kvm/ -KERNEL VIRTUAL MACHINE FOR ARM/ARM64 (KVM/arm, KVM/arm64) +KERNEL VIRTUAL MACHINE FOR ARM64 (KVM/arm64) M: Marc Zyngier <[email protected]> R: James Morse <[email protected]> R: Julien Thierry <[email protected]>
@@ -9173,9 +9173,6 @@ L: [email protected] (moderated for non-subscribers) L: [email protected] T: git git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm.git S: Maintained -F: arch/arm/include/uapi/asm/kvm* -F: arch/arm/include/asm/kvm* -F: arch/arm/kvm/ F: arch/arm64/include/uapi/asm/kvm* F: arch/arm64/include/asm/kvm* F: arch/arm64/kvm/
Signature · 1 line
2.25.0
Hi Marc,
Quoted 8 lines · Marc Zyngier
Marc Zyngier (7):
arm: Unplug KVM from the build system
arm: Remove KVM from config files
arm: Remove 32bit KVM host support
arm: Remove HYP/Stage-2 page-table support
arm: Remove GICv3 vgic compatibility macros
arm: Remove the ability to set HYP vectors outside of the decompressor
MAINTAINERS: RIP KVM/arm
I've been staring at these patches for some time now and all looks good to me. So, for the entire series:
FWIW, as mentioned in a previous thread, I'm currently working with Will on an extension of KVM to support guest isolation, and the arm32 port was unfortunately making it really hard to do intrusive changes, so this is much appreciated!
Thanks,
Quentin