# SPDX-License-Identifier: GPL-2.0
#
# KVM configuration
#

source "virt/kvm/Kconfig"

menuconfig VIRTUALIZATION
	bool "Virtualization"
	---help---
	  Say Y here to get to see options for using your Linux host to run
	  other operating systems inside virtual machines (guests).
	  This option alone does not add any kernel code.

	  If you say N, all options in this submenu will be skipped and
	  disabled.

if VIRTUALIZATION

config KVM
	bool
	select PREEMPT_NOTIFIERS
	select ANON_INODES
	select HAVE_KVM_EVENTFD
	select HAVE_KVM_VCPU_ASYNC_IOCTL
	select SRCU
	select KVM_VFIO
	select IRQ_BYPASS_MANAGER
	select HAVE_KVM_IRQ_BYPASS

config KVM_BOOK3S_HANDLER
	bool

config KVM_BOOK3S_32_HANDLER
	bool
	select KVM_BOOK3S_HANDLER
	select KVM_MMIO

config KVM_BOOK3S_64_HANDLER
	bool
	select KVM_BOOK3S_HANDLER

config KVM_BOOK3S_PR_POSSIBLE
	bool
	select KVM_MMIO
	select MMU_NOTIFIER

config KVM_BOOK3S_HV_POSSIBLE
	bool

config KVM_BOOK3S_32
	tristate "KVM support for PowerPC book3s_32 processors"
	depends on PPC_BOOK3S_32 && !SMP && !PTE_64BIT
	select KVM
	select KVM_BOOK3S_32_HANDLER
	select KVM_BOOK3S_PR_POSSIBLE
	---help---
	  Support running unmodified book3s_32 guest kernels
	  in virtual machines on book3s_32 host processors.

	  This module provides access to the hardware capabilities through
	  a character device node named /dev/kvm.

	  If unsure, say N.

config KVM_BOOK3S_64
	tristate "KVM support for PowerPC book3s_64 processors"
	depends on PPC_BOOK3S_64
	select KVM_BOOK3S_64_HANDLER
	select KVM
	select KVM_BOOK3S_PR_POSSIBLE if !KVM_BOOK3S_HV_POSSIBLE
	select SPAPR_TCE_IOMMU if IOMMU_SUPPORT && (PPC_PSERIES || PPC_POWERNV)
	---help---
	  Support running unmodified book3s_64 and book3s_32 guest kernels
	  in virtual machines on book3s_64 host processors.

	  This module provides access to the hardware capabilities through
	  a character device node named /dev/kvm.

	  If unsure, say N.

config KVM_BOOK3S_64_HV
	tristate "KVM for POWER7 and later using hypervisor mode in host"
	depends on KVM_BOOK3S_64 && PPC_POWERNV
	select KVM_BOOK3S_HV_POSSIBLE
	select MMU_NOTIFIER
	select CMA
	---help---
	  Support running unmodified book3s_64 guest kernels in
	  virtual machines on POWER7 and newer processors that have
	  hypervisor mode available to the host.

	  If you say Y here, KVM will use the hardware virtualization
	  facilities of POWER7 (and later) processors, meaning that
	  guest operating systems will run at full hardware speed
	  using supervisor and user modes.  However, this also means
	  that KVM is not usable under PowerVM (pHyp), is only usable
	  on POWER7 or later processors, and cannot emulate a
	  different processor from the host processor.

	  If unsure, say N.

config KVM_BOOK3S_64_PR
	tristate "KVM support without using hypervisor mode in host"
	depends on KVM_BOOK3S_64
	select KVM_BOOK3S_PR_POSSIBLE
	---help---
	  Support running guest kernels in virtual machines on processors
	  without using hypervisor mode in the host, by running the
	  guest in user mode (problem state) and emulating all
	  privileged instructions and registers.

	  This is not as fast as using hypervisor mode, but works on
	  machines where hypervisor mode is not available or not usable,
	  and can emulate processors that are different from the host
	  processor, including emulating 32-bit processors on a 64-bit
	  host.

config KVM_BOOK3S_HV_EXIT_TIMING
	bool "Detailed timing for hypervisor real-mode code"
	depends on KVM_BOOK3S_HV_POSSIBLE && DEBUG_FS
	---help---
	  Calculate time taken for each vcpu in the real-mode guest entry,
	  exit, and interrupt handling code, plus time spent in the guest
	  and in nap mode due to idle (cede) while other threads are still
	  in the guest.  The total, minimum and maximum times in nanoseconds
	  together with the number of executions are reported in debugfs in
	  kvm/vm#/vcpu#/timings.  The overhead is of the order of 30 - 40
	  ns per exit on POWER8.

	  If unsure, say N.

config KVM_BOOKE_HV
	bool

config KVM_EXIT_TIMING
	bool "Detailed exit timing"
	depends on KVM_E500V2 || KVM_E500MC
	---help---
	  Calculate elapsed time for every exit/enter cycle. A per-vcpu
	  report is available in debugfs kvm/vm#_vcpu#_timing.
	  The overhead is relatively small, however it is not recommended for
	  production environments.

	  If unsure, say N.

config KVM_E500V2
	bool "KVM support for PowerPC E500v2 processors"
	depends on E500 && !PPC_E500MC
	select KVM
	select KVM_MMIO
	select MMU_NOTIFIER
	---help---
	  Support running unmodified E500 guest kernels in virtual machines on
	  E500v2 host processors.

	  This module provides access to the hardware capabilities through
	  a character device node named /dev/kvm.

	  If unsure, say N.

config KVM_E500MC
	bool "KVM support for PowerPC E500MC/E5500/E6500 processors"
	depends on PPC_E500MC
	select KVM
	select KVM_MMIO
	select KVM_BOOKE_HV
	select MMU_NOTIFIER
	---help---
	  Support running unmodified E500MC/E5500/E6500 guest kernels in
	  virtual machines on E500MC/E5500/E6500 host processors.

	  This module provides access to the hardware capabilities through
	  a character device node named /dev/kvm.

	  If unsure, say N.

config KVM_MPIC
	bool "KVM in-kernel MPIC emulation"
	depends on KVM && E500
	select HAVE_KVM_IRQCHIP
	select HAVE_KVM_IRQFD
	select HAVE_KVM_IRQ_ROUTING
	select HAVE_KVM_MSI
	help
	  Enable support for emulating MPIC devices inside the
          host kernel, rather than relying on userspace to emulate.
          Currently, support is limited to certain versions of
          Freescale's MPIC implementation.

config KVM_XICS
	bool "KVM in-kernel XICS emulation"
	depends on KVM_BOOK3S_64 && !KVM_MPIC
	select HAVE_KVM_IRQCHIP
	select HAVE_KVM_IRQFD
	default y
	---help---
	  Include support for the XICS (eXternal Interrupt Controller
	  Specification) interrupt controller architecture used on
	  IBM POWER (pSeries) servers.

config KVM_XIVE
	bool
	default y
	depends on KVM_XICS && PPC_XIVE_NATIVE && KVM_BOOK3S_HV_POSSIBLE

source drivers/vhost/Kconfig

endif # VIRTUALIZATION
