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

source "virt/lib/Kconfig"
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

menuconfig KVM
	bool "Kernel-based Virtual Machine (KVM) support"
	depends on HAVE_KVM
	select KVM_GENERIC_HARDWARE_ENABLING
	select MMU_NOTIFIER
	select PREEMPT_NOTIFIERS
	select HAVE_KVM_CPU_RELAX_INTERCEPT
	select KVM_MMIO
	select KVM_GENERIC_DIRTYLOG_READ_PROTECT
	select KVM_XFER_TO_GUEST_WORK
	select KVM_VFIO
	select HAVE_KVM_EVENTFD
	select HAVE_KVM_IRQFD
	select HAVE_KVM_DIRTY_RING_ACQ_REL
	select NEED_KVM_DIRTY_RING_WITH_BITMAP
	select HAVE_KVM_MSI
	select HAVE_KVM_IRQCHIP
	select HAVE_KVM_IRQ_ROUTING
	select IRQ_BYPASS_MANAGER
	select HAVE_KVM_IRQ_BYPASS
	select HAVE_KVM_VCPU_RUN_PID_CHANGE
	select SCHED_INFO
	select GUEST_PERF_EVENTS if PERF_EVENTS
	select INTERVAL_TREE
	select XARRAY_MULTI
	help
	  Support hosting virtualized guest machines.

	  If unsure, say N.

config NVHE_EL2_DEBUG
	bool "Debug mode for non-VHE EL2 object"
	depends on KVM
	help
	  Say Y here to enable the debug mode for the non-VHE KVM EL2 object.
	  Failure reports will BUG() in the hypervisor. This is intended for
	  local EL2 hypervisor development.

	  If unsure, say N.

config PROTECTED_NVHE_STACKTRACE
	bool "Protected KVM hypervisor stacktraces"
	depends on NVHE_EL2_DEBUG
	default n
	help
	  Say Y here to enable pKVM hypervisor stacktraces on hyp_panic()

	  If using protected nVHE mode, but cannot afford the associated
	  memory cost (less than 0.75 page per CPU) of pKVM stacktraces,
	  say N.

	  If unsure, or not using protected nVHE (pKVM), say N.

config PKVM_MODULE_PATH
	string "Path to pKVM modules"
	default ""
	help
	  Directory where the pKVM modules are found. If empty, the modules
	  will be searched into the default path /lib/modules/<uname>.

config PTDUMP_STAGE2_DEBUGFS
       bool "Present the stage-2 pagetables to debugfs"
       depends on KVM
       select PTDUMP_CORE
       default n
       help
         Say Y here if you want to show the stage-2 kernel pagetables
         layout in a debugfs file. This information is only useful for kernel developers
         who are working in architecture specific areas of the kernel.
         It is probably not a good idea to enable this feature in a production
         kernel.

         If in doubt, say N.

endif # VIRTUALIZATION
