Kernel KVM virtualization development
 help / color / mirror / Atom feed
* [PATCH 1/2] kvm: rework memory prefault
@ 2026-05-26 12:52 Arnd Bergmann
  2026-05-26 12:52 ` [PATCH 2/2] s390: kvm: arm64: add HAS_IOMEM dependency Arnd Bergmann
  2026-05-26 17:05 ` [PATCH 1/2] kvm: rework memory prefault Steffen Eiden
  0 siblings, 2 replies; 5+ messages in thread
From: Arnd Bergmann @ 2026-05-26 12:52 UTC (permalink / raw)
  To: Steffen Eiden, Claudio Imbrenda, Christian Borntraeger,
	Andreas Grapentin, Nina Schoetterl-Glausch
  Cc: Janosch Frank, David Hildenbrand, kvm, Arnd Bergmann

From: Arnd Bergmann <arnd@arndb.de>

When both s390 and arm64 KVM modules are enabled on s390,
the latter fails to link against the s390 version of
kvm_arch_vcpu_pre_fault_memory():

ERROR: modpost: "kvm_arch_vcpu_pre_fault_memory" [arch/s390/kvm/arm64/kvm-arm64.ko] undefined!

Change the logic to reference this based on a target
specific macro rather than a global Kconfig symbol.

Fixes: f67bba50ef56 ("KVM: s390: arm64: Enable KVM_ARM64 config and Kbuild")
Fixes: 927ce4dee94f ("KVM: s390: Implement KVM_PRE_FAULT_MEMORY")

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
This is not yet an actual problem, but will be when both
the experimental 'sae' branch and the 7.2 contents from
current linux-next are merged.

Not sure who should carry this patch in the meantime, but
it would be possible to add it to kvm-next already in
preparation for the upcoming sae support.
---
 arch/s390/include/asm/kvm_host_s390.h | 4 ++++
 arch/s390/kvm/s390/Kconfig            | 1 -
 arch/x86/include/asm/kvm_host.h       | 4 ++++
 arch/x86/kvm/Kconfig                  | 1 -
 include/linux/kvm_host.h              | 5 -----
 virt/kvm/Kconfig                      | 3 ---
 virt/kvm/kvm_main.c                   | 4 ++--
 7 files changed, 10 insertions(+), 12 deletions(-)

diff --git a/arch/s390/include/asm/kvm_host_s390.h b/arch/s390/include/asm/kvm_host_s390.h
index d4bf6d0df49f..9532dc680c5a 100644
--- a/arch/s390/include/asm/kvm_host_s390.h
+++ b/arch/s390/include/asm/kvm_host_s390.h
@@ -742,6 +742,10 @@ static inline void kvm_arch_vcpu_unblocking(struct kvm_vcpu *vcpu) {}
 #define __KVM_HAVE_ARCH_VM_FREE
 void kvm_arch_free_vm(struct kvm *kvm);
 
+#define __KVM_HAVE_ARCH_PRE_FAULT_MEMORY
+long kvm_arch_vcpu_pre_fault_memory(struct kvm_vcpu *vcpu,
+				    struct kvm_pre_fault_memory *range);
+
 struct zpci_kvm_hook {
 	int (*kvm_register)(void *opaque, struct kvm *kvm);
 	void (*kvm_unregister)(void *opaque);
diff --git a/arch/s390/kvm/s390/Kconfig b/arch/s390/kvm/s390/Kconfig
index 5777663e44b9..263ff29b9c9c 100644
--- a/arch/s390/kvm/s390/Kconfig
+++ b/arch/s390/kvm/s390/Kconfig
@@ -18,7 +18,6 @@ config KVM_S390
 	select KVM_VFIO
 	select VIRT_XFER_TO_GUEST_WORK
 	select KVM_MMU_LOCKLESS_AGING
-	select KVM_GENERIC_PRE_FAULT_MEMORY
 	help
 	  Support hosting paravirtualized s390 guest machines using the SIE
 	  virtualization capability on the mainframe. This should work
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
index 809b285161d9..dfb8d7e67db9 100644
--- a/arch/x86/include/asm/kvm_host.h
+++ b/arch/x86/include/asm/kvm_host.h
@@ -2077,6 +2077,10 @@ extern struct kvm_x86_ops kvm_x86_ops;
 int kvm_x86_vendor_init(struct kvm_x86_init_ops *ops);
 void kvm_x86_vendor_exit(void);
 
+#define __KVM_HAVE_ARCH_PRE_FAULT_MEMORY
+long kvm_arch_vcpu_pre_fault_memory(struct kvm_vcpu *vcpu,
+				    struct kvm_pre_fault_memory *range);
+
 #define __KVM_HAVE_ARCH_VM_ALLOC
 static inline struct kvm *kvm_arch_alloc_vm(void)
 {
diff --git a/arch/x86/kvm/Kconfig b/arch/x86/kvm/Kconfig
index a6824b6fbf10..1856dc502b07 100644
--- a/arch/x86/kvm/Kconfig
+++ b/arch/x86/kvm/Kconfig
@@ -45,7 +45,6 @@ config KVM_X86
 	select KVM_VFIO
 	select HAVE_KVM_PM_NOTIFIER if PM
 	select KVM_GENERIC_HARDWARE_ENABLING
-	select KVM_GENERIC_PRE_FAULT_MEMORY
 	select KVM_WERROR if WERROR
 	select KVM_GUEST_MEMFD if X86_64
 
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
index 690e34587414..70a1174df996 100644
--- a/include/linux/kvm_host.h
+++ b/include/linux/kvm_host.h
@@ -2605,9 +2605,4 @@ long kvm_gmem_populate(struct kvm *kvm, gfn_t gfn, void __user *src, long npages
 void kvm_arch_gmem_invalidate(kvm_pfn_t start, kvm_pfn_t end);
 #endif
 
-#ifdef CONFIG_KVM_GENERIC_PRE_FAULT_MEMORY
-long kvm_arch_vcpu_pre_fault_memory(struct kvm_vcpu *vcpu,
-				    struct kvm_pre_fault_memory *range);
-#endif
-
 #endif
diff --git a/virt/kvm/Kconfig b/virt/kvm/Kconfig
index c4a983e41765..fefdf5d44646 100644
--- a/virt/kvm/Kconfig
+++ b/virt/kvm/Kconfig
@@ -65,9 +65,6 @@ config HAVE_KVM_INVALID_WAKEUPS
 config KVM_GENERIC_DIRTYLOG_READ_PROTECT
        bool
 
-config KVM_GENERIC_PRE_FAULT_MEMORY
-       bool
-
 config KVM_COMPAT
        def_bool y
        depends on KVM && COMPAT && !(S390 || ARM64 || RISCV)
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 0d36e4d264f5..10f0748ad077 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -4309,7 +4309,7 @@ static int kvm_vcpu_ioctl_get_stats_fd(struct kvm_vcpu *vcpu)
 	return fd;
 }
 
-#ifdef CONFIG_KVM_GENERIC_PRE_FAULT_MEMORY
+#ifdef __KVM_HAVE_ARCH_PRE_FAULT_MEMORY
 static int kvm_vcpu_pre_fault_memory(struct kvm_vcpu *vcpu,
 				     struct kvm_pre_fault_memory *range)
 {
@@ -4608,7 +4608,7 @@ static long kvm_vcpu_ioctl(struct file *filp,
 		r = kvm_vcpu_ioctl_get_stats_fd(vcpu);
 		break;
 	}
-#ifdef CONFIG_KVM_GENERIC_PRE_FAULT_MEMORY
+#ifdef __KVM_HAVE_ARCH_PRE_FAULT_MEMORY
 	case KVM_PRE_FAULT_MEMORY: {
 		struct kvm_pre_fault_memory range;
 
-- 
2.39.5


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/2] s390: kvm: arm64: add HAS_IOMEM dependency
  2026-05-26 12:52 [PATCH 1/2] kvm: rework memory prefault Arnd Bergmann
@ 2026-05-26 12:52 ` Arnd Bergmann
  2026-05-26 17:08   ` Steffen Eiden
  2026-05-26 17:05 ` [PATCH 1/2] kvm: rework memory prefault Steffen Eiden
  1 sibling, 1 reply; 5+ messages in thread
From: Arnd Bergmann @ 2026-05-26 12:52 UTC (permalink / raw)
  To: Steffen Eiden, Claudio Imbrenda, Christian Borntraeger,
	Andreas Grapentin, Nina Schoetterl-Glausch
  Cc: Janosch Frank, David Hildenbrand, kvm, Arnd Bergmann

From: Arnd Bergmann <arnd@arndb.de>

The arm64 kvm driver can only be enabled when MMIO support is part of
the host kernel:

arch/s390/kvm/arm64/../../../../virt/kvm/arm64/mmio.c:120:27: error: 'struct kvm_vcpu' has no member named 'mmio_needed'

s390 does not support MMIO if PCI is disabled, but in practice one
would not actually need kvm support in those configurations either.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
This is currently needed for randconfig build testing the
'sae' branch, it is not yet in linux-next
---
 arch/s390/kvm/arm64/Kconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/s390/kvm/arm64/Kconfig b/arch/s390/kvm/arm64/Kconfig
index 42a1be50f6e1..65b9dc25fe62 100644
--- a/arch/s390/kvm/arm64/Kconfig
+++ b/arch/s390/kvm/arm64/Kconfig
@@ -3,6 +3,7 @@
 config KVM_ARM64
 	def_tristate y
 	prompt "Kernel-based Virtual Machine (KVM) support for arm64 guests"
+	depends on HAS_IOMEM
 	select KVM
 	select KVM_VFIO
 	select IRQ_BYPASS_MANAGER
-- 
2.39.5


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/2] kvm: rework memory prefault
  2026-05-26 12:52 [PATCH 1/2] kvm: rework memory prefault Arnd Bergmann
  2026-05-26 12:52 ` [PATCH 2/2] s390: kvm: arm64: add HAS_IOMEM dependency Arnd Bergmann
@ 2026-05-26 17:05 ` Steffen Eiden
  1 sibling, 0 replies; 5+ messages in thread
From: Steffen Eiden @ 2026-05-26 17:05 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: Claudio Imbrenda, Christian Borntraeger, Andreas Grapentin,
	Nina Schoetterl-Glausch, Janosch Frank, David Hildenbrand, kvm,
	Arnd Bergmann

On Tue, May 26, 2026 at 02:52:19PM +0200, Arnd Bergmann wrote:
> From: Arnd Bergmann <arnd@arndb.de>
> 
> When both s390 and arm64 KVM modules are enabled on s390,
> the latter fails to link against the s390 version of
> kvm_arch_vcpu_pre_fault_memory():
> 
> ERROR: modpost: "kvm_arch_vcpu_pre_fault_memory" [arch/s390/kvm/arm64/kvm-arm64.ko] undefined!
> 
> Change the logic to reference this based on a target
> specific macro rather than a global Kconfig symbol.
> 
> Fixes: f67bba50ef56 ("KVM: s390: arm64: Enable KVM_ARM64 config and Kbuild")
> Fixes: 927ce4dee94f ("KVM: s390: Implement KVM_PRE_FAULT_MEMORY")
> 

Thanks for looking into this.

An alternative solution could be for the kvm-arm64 module to just implement the
function as well. The s390 implementation is purely gmap based and has no
dependencies to s390-kvm beside that. arm on s390 kvm could use the exact same
implementation as well. 

I guess this is probably dead code as (I assume) qemu-aarch64 does not use the feature.
But I saw some proposals regarding this feature for KVM/arm64 on the list.

> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
> This is not yet an actual problem, but will be when both
> the experimental 'sae' branch and the 7.2 contents from
> current linux-next are merged.
> 
> Not sure who should carry this patch in the meantime, but
> it would be possible to add it to kvm-next already in
> preparation for the upcoming sae support.

I would prefer if you put it in next now. Less patches to carry around.

But If that is not feasible I can add it to series 1 once Claudios patches are
in 7.2.

	Steffen


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 2/2] s390: kvm: arm64: add HAS_IOMEM dependency
  2026-05-26 12:52 ` [PATCH 2/2] s390: kvm: arm64: add HAS_IOMEM dependency Arnd Bergmann
@ 2026-05-26 17:08   ` Steffen Eiden
  2026-05-26 21:20     ` Arnd Bergmann
  0 siblings, 1 reply; 5+ messages in thread
From: Steffen Eiden @ 2026-05-26 17:08 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: Claudio Imbrenda, Christian Borntraeger, Andreas Grapentin,
	Nina Schoetterl-Glausch, Janosch Frank, David Hildenbrand, kvm,
	Arnd Bergmann

On Tue, May 26, 2026 at 02:52:20PM +0200, Arnd Bergmann wrote:
> From: Arnd Bergmann <arnd@arndb.de>
> 
> The arm64 kvm driver can only be enabled when MMIO support is part of
> the host kernel:
> 
> arch/s390/kvm/arm64/../../../../virt/kvm/arm64/mmio.c:120:27: error: 'struct kvm_vcpu' has no member named 'mmio_needed'
> 
> s390 does not support MMIO if PCI is disabled, but in practice one
> would not actually need kvm support in those configurations either.
> 
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
> This is currently needed for randconfig build testing the
> 'sae' branch, it is not yet in linux-next
> ---
>  arch/s390/kvm/arm64/Kconfig | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/arch/s390/kvm/arm64/Kconfig b/arch/s390/kvm/arm64/Kconfig
> index 42a1be50f6e1..65b9dc25fe62 100644
> --- a/arch/s390/kvm/arm64/Kconfig
> +++ b/arch/s390/kvm/arm64/Kconfig
> @@ -3,6 +3,7 @@
>  config KVM_ARM64
>  	def_tristate y
>  	prompt "Kernel-based Virtual Machine (KVM) support for arm64 guests"
> +	depends on HAS_IOMEM
>  	select KVM
>  	select KVM_VFIO
>  	select IRQ_BYPASS_MANAGER
> -- 
> 2.39.5
>

Thank you, 

I would squash this in v3 into the patch that creates this config:
KVM: s390: arm64: Enable KVM_ARM64 config and Kbuild

if that is OK for you.

	Steffen

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 2/2] s390: kvm: arm64: add HAS_IOMEM dependency
  2026-05-26 17:08   ` Steffen Eiden
@ 2026-05-26 21:20     ` Arnd Bergmann
  0 siblings, 0 replies; 5+ messages in thread
From: Arnd Bergmann @ 2026-05-26 21:20 UTC (permalink / raw)
  To: Steffen Eiden, Arnd Bergmann
  Cc: Claudio Imbrenda, Christian Borntraeger, Andreas Grapentin,
	Nina Schoetterl-Glausch, Janosch Frank,
	David Hildenbrand (Red Hat), kvm

On Tue, May 26, 2026, at 19:08, Steffen Eiden wrote:
>
> I would squash this in v3 into the patch that creates this config:
> KVM: s390: arm64: Enable KVM_ARM64 config and Kbuild
>
> if that is OK for you.

Yes, please do.

     Arnd

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2026-05-26 21:21 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-26 12:52 [PATCH 1/2] kvm: rework memory prefault Arnd Bergmann
2026-05-26 12:52 ` [PATCH 2/2] s390: kvm: arm64: add HAS_IOMEM dependency Arnd Bergmann
2026-05-26 17:08   ` Steffen Eiden
2026-05-26 21:20     ` Arnd Bergmann
2026-05-26 17:05 ` [PATCH 1/2] kvm: rework memory prefault Steffen Eiden

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox