mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
KVM: Replace CONFIG_KVM_MMIO with __KVM_NO_MMIO
Defining KVM_MMIO is not flexible enough for multi-KVM systems where one KVM implements MMIO but others do not. Therefore, remove KVM_MMIO from the config space and use the macro __KVM_NO_MMIO instead. Define __KVM_NO_MMIO for KVM/s390 and for HV-only 64-bit Book3s (aka pSeries/sPAPR) configurations. In particular, for PowerPC configurations: * KVM_BOOK3S_32 got KVM_MMIO via KVM_BOOK3S_32_HANDLER and KVM_BOOK3S_PR_POSSIBLE * KVM_BOOK3S_64 got KVM_MMIO via KVM_BOOK3S_PR_POSSIBLE if !KVM_BOOK3S_HV_POSSIBLE * KVM_BOOK3S_64 + KVM_BOOK3S_64_PR got KVM_MMIO via KVM_BOOK3S_PR_POSSIBLE * likewise for KVM_BOOK3S_64 + KVM_BOOK3S_64_PR + KVM_BOOK3S_64_HV * KVM_E500V2 and KVM_E500MC directly selected KVM_MMIO but KVM_BOOK3S_64 + KVM_BOOK3S_64_HV didn't and therefore needs __KVM_NO_MMIO. coalesced_mmio.c is now always compiled and linked. However, for architectures/configurations defining __KVM_NO_MMIO this effectively collapses to an empty object with no mmio code. No functional changes. Suggested-by: Marc Zyngier <maz@kernel.org> Signed-off-by: Steffen Eiden <seiden@linux.ibm.com> Link: https://patch.msgid.link/20260930173441.66762-4-seiden@linux.ibm.com [Simplify powerpc condition, add underscores. - Paolo] Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
1499fd7cd2
commit
b62a0bf958
|
|
@ -22,7 +22,6 @@ menuconfig KVM
|
|||
select KVM_COMMON
|
||||
select KVM_GENERIC_HARDWARE_ENABLING
|
||||
select HAVE_KVM_CPU_RELAX_INTERCEPT
|
||||
select KVM_MMIO
|
||||
select KVM_GENERIC_DIRTYLOG_READ_PROTECT
|
||||
select VIRT_XFER_TO_GUEST_WORK
|
||||
select KVM_VFIO
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@ config KVM
|
|||
select KVM_COMMON
|
||||
select KVM_GENERIC_DIRTYLOG_READ_PROTECT
|
||||
select KVM_GENERIC_HARDWARE_ENABLING
|
||||
select KVM_MMIO
|
||||
select VIRT_XFER_TO_GUEST_WORK
|
||||
select SCHED_INFO
|
||||
select GUEST_PERF_EVENTS if PERF_EVENTS
|
||||
|
|
|
|||
|
|
@ -22,7 +22,6 @@ config KVM
|
|||
select EXPORT_UASM
|
||||
select KVM_COMMON
|
||||
select KVM_GENERIC_DIRTYLOG_READ_PROTECT
|
||||
select KVM_MMIO
|
||||
select KVM_GENERIC_HARDWARE_ENABLING
|
||||
help
|
||||
Support for hosting Guest kernels.
|
||||
|
|
|
|||
|
|
@ -29,6 +29,10 @@
|
|||
|
||||
#define __KVM_HAVE_ARCH_VCPU_DEBUGFS
|
||||
|
||||
#if defined(CONFIG_KVM_BOOK3S_HV_POSSIBLE) && !defined(CONFIG_KVM_BOOK3S_PR_POSSIBLE)
|
||||
#define __KVM_NO_MMIO
|
||||
#endif
|
||||
|
||||
#define KVM_MAX_VCPUS NR_CPUS
|
||||
#define KVM_MAX_VCORES NR_CPUS
|
||||
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@ config KVM_BOOK3S_HANDLER
|
|||
config KVM_BOOK3S_32_HANDLER
|
||||
bool
|
||||
select KVM_BOOK3S_HANDLER
|
||||
select KVM_MMIO
|
||||
|
||||
config KVM_BOOK3S_64_HANDLER
|
||||
bool
|
||||
|
|
@ -38,7 +37,6 @@ config KVM_BOOK3S_64_HANDLER
|
|||
|
||||
config KVM_BOOK3S_PR_POSSIBLE
|
||||
bool
|
||||
select KVM_MMIO
|
||||
|
||||
config KVM_BOOK3S_HV_POSSIBLE
|
||||
bool
|
||||
|
|
@ -201,7 +199,6 @@ config KVM_E500V2
|
|||
depends on PPC_E500 && !PPC_E500MC
|
||||
depends on !CONTEXT_TRACKING_USER
|
||||
select KVM
|
||||
select KVM_MMIO
|
||||
help
|
||||
Support running unmodified E500 guest kernels in virtual machines on
|
||||
E500v2 host processors.
|
||||
|
|
@ -216,7 +213,6 @@ config KVM_E500MC
|
|||
depends on PPC_E500MC
|
||||
depends on !CONTEXT_TRACKING_USER
|
||||
select KVM
|
||||
select KVM_MMIO
|
||||
select KVM_BOOKE_HV
|
||||
help
|
||||
Support running unmodified E500MC/E5500/E6500 guest kernels in
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@ config KVM
|
|||
select KVM_COMMON
|
||||
select KVM_GENERIC_DIRTYLOG_READ_PROTECT
|
||||
select KVM_GENERIC_HARDWARE_ENABLING
|
||||
select KVM_MMIO
|
||||
select VIRT_XFER_TO_GUEST_WORK
|
||||
select SCHED_INFO
|
||||
select GUEST_PERF_EVENTS if PERF_EVENTS
|
||||
|
|
|
|||
|
|
@ -39,6 +39,8 @@
|
|||
|
||||
#define KVM_S390_MANAGES_S390_GUEST 1
|
||||
|
||||
#define __KVM_NO_MMIO
|
||||
|
||||
/*
|
||||
* These seem to be used for allocating ->chip in the routing table, which we
|
||||
* don't use. 1 is as small as we can get to reduce the needed memory. If we
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@ config KVM_X86
|
|||
select VHOST_TASK
|
||||
select KVM_ASYNC_PF
|
||||
select USER_RETURN_NOTIFIER
|
||||
select KVM_MMIO
|
||||
select SCHED_INFO
|
||||
select PERF_EVENTS
|
||||
select GUEST_PERF_EVENTS
|
||||
|
|
|
|||
|
|
@ -847,7 +847,7 @@ struct kvm {
|
|||
struct kvm_vm_stat stat;
|
||||
struct kvm_arch arch;
|
||||
refcount_t users_count;
|
||||
#ifdef CONFIG_KVM_MMIO
|
||||
#ifndef __KVM_NO_MMIO
|
||||
struct kvm_coalesced_mmio_ring *coalesced_mmio_ring;
|
||||
spinlock_t ring_lock;
|
||||
struct list_head coalesced_zones;
|
||||
|
|
|
|||
|
|
@ -40,9 +40,6 @@ config NEED_KVM_DIRTY_RING_WITH_BITMAP
|
|||
bool
|
||||
depends on HAVE_KVM_DIRTY_RING
|
||||
|
||||
config KVM_MMIO
|
||||
bool
|
||||
|
||||
config KVM_ASYNC_PF
|
||||
bool
|
||||
|
||||
|
|
|
|||
|
|
@ -10,9 +10,9 @@ KVM_DEV_MINOR ?= KVM_MINOR
|
|||
|
||||
ccflags-y +=-DKVM_DEV_NAME=$(KVM_DEV_NAME) -DKVM_DEV_MINOR=$(KVM_DEV_MINOR)
|
||||
|
||||
kvm-y := $(KVM)/kvm_main.o $(KVM)/eventfd.o $(KVM)/binary_stats.o
|
||||
kvm-y := $(KVM)/kvm_main.o $(KVM)/eventfd.o $(KVM)/binary_stats.o \
|
||||
$(KVM)/coalesced_mmio.o
|
||||
kvm-$(CONFIG_KVM_VFIO) += $(KVM)/vfio.o
|
||||
kvm-$(CONFIG_KVM_MMIO) += $(KVM)/coalesced_mmio.o
|
||||
kvm-$(CONFIG_KVM_ASYNC_PF) += $(KVM)/async_pf.o
|
||||
kvm-$(CONFIG_HAVE_KVM_IRQ_ROUTING) += $(KVM)/irqchip.o
|
||||
kvm-$(CONFIG_HAVE_KVM_DIRTY_RING) += $(KVM)/dirty_ring.o
|
||||
|
|
|
|||
|
|
@ -15,6 +15,8 @@
|
|||
#include <linux/slab.h>
|
||||
#include <linux/kvm.h>
|
||||
|
||||
#ifndef __KVM_NO_MMIO
|
||||
|
||||
#include "coalesced_mmio.h"
|
||||
|
||||
static inline struct kvm_coalesced_mmio_dev *to_mmio(struct kvm_io_device *dev)
|
||||
|
|
@ -188,3 +190,5 @@ int kvm_vm_ioctl_unregister_coalesced_mmio(struct kvm *kvm,
|
|||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* !__KVM_NO_MMIO */
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_KVM_MMIO
|
||||
#ifndef __KVM_NO_MMIO
|
||||
|
||||
#include <linux/list.h>
|
||||
|
||||
|
|
|
|||
|
|
@ -4073,7 +4073,7 @@ static vm_fault_t kvm_vcpu_fault(struct vm_fault *vmf)
|
|||
else if (vmf->pgoff == KVM_PIO_PAGE_OFFSET)
|
||||
page = virt_to_page(vcpu->arch.pio_data);
|
||||
#endif
|
||||
#ifdef CONFIG_KVM_MMIO
|
||||
#ifndef __KVM_NO_MMIO
|
||||
else if (vmf->pgoff == KVM_COALESCED_MMIO_PAGE_OFFSET)
|
||||
page = virt_to_page(vcpu->kvm->coalesced_mmio_ring);
|
||||
#endif
|
||||
|
|
@ -4914,7 +4914,7 @@ static int kvm_vm_ioctl_check_extension_generic(struct kvm *kvm, long arg)
|
|||
case KVM_CAP_ENABLE_CAP_VM:
|
||||
case KVM_CAP_HALT_POLL:
|
||||
return 1;
|
||||
#ifdef CONFIG_KVM_MMIO
|
||||
#ifndef __KVM_NO_MMIO
|
||||
case KVM_CAP_COALESCED_MMIO:
|
||||
return KVM_COALESCED_MMIO_PAGE_OFFSET;
|
||||
case KVM_CAP_COALESCED_PIO:
|
||||
|
|
@ -5255,7 +5255,7 @@ static long kvm_vm_ioctl(struct file *filp,
|
|||
break;
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_KVM_MMIO
|
||||
#ifndef __KVM_NO_MMIO
|
||||
case KVM_REGISTER_COALESCED_MMIO: {
|
||||
struct kvm_coalesced_mmio_zone zone;
|
||||
|
||||
|
|
@ -5584,7 +5584,7 @@ static long kvm_dev_ioctl(struct file *filp,
|
|||
#ifdef CONFIG_X86
|
||||
r += PAGE_SIZE; /* pio data page */
|
||||
#endif
|
||||
#ifdef CONFIG_KVM_MMIO
|
||||
#ifndef __KVM_NO_MMIO
|
||||
r += PAGE_SIZE; /* coalesced mmio ring page */
|
||||
#endif
|
||||
break;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user