# SPDX-License-Identifier: GPL-2.0
#
# This Kconfig describes xen options
#

config XEN
	bool "Xen guest support"
	depends on PARAVIRT
	select PARAVIRT_CLOCK
	select X86_HV_CALLBACK_VECTOR
	depends on X86_64 || (X86_32 && X86_PAE)
	depends on X86_64 || (X86_GENERIC || MPENTIUM4 || MATOM)
	depends on X86_LOCAL_APIC && X86_TSC
	help
	  This is the Linux Xen port.  Enabling this will allow the
	  kernel to boot in a paravirtualized environment under the
	  Xen hypervisor.

config XEN_PV
	bool "Xen PV guest support"
	default y
	depends on XEN
	depends on X86_64
	select PARAVIRT_XXL
	select XEN_HAVE_PVMMU
	select XEN_HAVE_VPMU
	select GUEST_PERF_EVENTS
	help
	  Support running as a Xen PV guest.

config XEN_512GB
	bool "Limit Xen pv-domain memory to 512GB"
	depends on XEN_PV
	default y
	help
	  Limit paravirtualized user domains to 512GB of RAM.

	  The Xen tools and crash dump analysis tools might not support
	  pv-domains with more than 512 GB of RAM. This option controls the
	  default setting of the kernel to use only up to 512 GB or more.
	  It is always possible to change the default via specifying the
	  boot parameter "xen_512gb_limit".

config XEN_PV_SMP
	def_bool y
	depends on XEN_PV && SMP

config XEN_PV_DOM0
	def_bool y
	depends on XEN_PV && XEN_DOM0

config XEN_PVHVM
	def_bool y
	depends on XEN && X86_LOCAL_APIC

config XEN_PVHVM_SMP
	def_bool y
	depends on XEN_PVHVM && SMP

config XEN_PVHVM_GUEST
	bool "Xen PVHVM guest support"
	default y
	depends on XEN_PVHVM && PCI
	help
	  Support running as a Xen PVHVM guest.

config XEN_SAVE_RESTORE
	bool
	depends on XEN
	select HIBERNATE_CALLBACKS
	default y

config XEN_DEBUG_FS
	bool "Enable Xen debug and tuning parameters in debugfs"
	depends on XEN && DEBUG_FS
	help
	  Enable statistics output and various tuning options in debugfs.
	  Enabling this option may incur a significant performance overhead.

config XEN_PVH
	bool "Xen PVH guest support"
	depends on XEN && XEN_PVHVM && ACPI
	select PVH
	help
	  Support for running as a Xen PVH guest.

config XEN_DOM0
	bool "Xen Dom0 support"
	default XEN_PV
	depends on (XEN_PV && SWIOTLB_XEN) || (XEN_PVH && X86_64)
	depends on X86_IO_APIC && ACPI && PCI
	select X86_X2APIC if XEN_PVH && X86_64
	help
	  Support running as a Xen Dom0 guest.

config XEN_PV_MSR_SAFE
	bool "Always use safe MSR accesses in PV guests"
	default y
	depends on XEN_PV
	help
	  Use safe (not faulting) MSR access functions even if the MSR access
	  should not fault anyway.
	  The default can be changed by using the "xen_msr_safe" boot parameter.
