# 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 || MCORE2 || MATOM || MK8)
	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.
