#
# 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

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
	---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 support for POWER7 and PPC970 using hypervisor mode in host"
	depends on KVM_BOOK3S_64
	select KVM_BOOK3S_HV_POSSIBLE
	select MMU_NOTIFIER
	select CMA
	---help---
	  Support running unmodified book3s_64 guest kernels in
	  virtual machines on POWER7 and PPC970 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 PPC970-family 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_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.

source drivers/vhost/Kconfig

endif # VIRTUALIZATION
