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

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
	bool
	select KVM_MMIO
	select MMU_NOTIFIER

config KVM_BOOK3S_32
	tristate "KVM support for PowerPC book3s_32 processors"
	depends on EXPERIMENTAL && PPC_BOOK3S_32 && !SMP && !PTE_64BIT
	select KVM
	select KVM_BOOK3S_32_HANDLER
	select KVM_BOOK3S_PR
	---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 EXPERIMENTAL && PPC_BOOK3S_64
	select KVM_BOOK3S_64_HANDLER
	select KVM
	---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
	bool "KVM support for POWER7 and PPC970 using hypervisor mode in host"
	depends on KVM_BOOK3S_64
	select MMU_NOTIFIER
	---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
	def_bool y
	depends on KVM_BOOK3S_64 && !KVM_BOOK3S_64_HV
	select KVM_BOOK3S_PR

config KVM_BOOKE_HV
	bool

config KVM_440
	bool "KVM support for PowerPC 440 processors"
	depends on EXPERIMENTAL && 44x
	select KVM
	select KVM_MMIO
	---help---
	  Support running unmodified 440 guest kernels in virtual machines on
	  440 host processors.

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

	  If unsure, say N.

config KVM_EXIT_TIMING
	bool "Detailed exit timing"
	depends on KVM_440 || 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 EXPERIMENTAL && 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 processors"
	depends on EXPERIMENTAL && PPC_E500MC
	select KVM
	select KVM_MMIO
	select KVM_BOOKE_HV
	select MMU_NOTIFIER
	---help---
	  Support running unmodified E500MC/E5500 (32-bit) guest kernels in
	  virtual machines on E500MC/E5500 host processors.

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

	  If unsure, say N.

source drivers/vhost/Kconfig

endif # VIRTUALIZATION
