Introduce CONFIG_XEN_PVHVM compile option
This patch introduce a CONFIG_XEN_PVHVM compile time option to enable/disable Xen PV on HVM support. Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
This commit is contained in:
parent
b98a409b80
commit
ca65f9fc0c
|
@ -34,7 +34,7 @@ static const __initconst struct hypervisor_x86 * const hypervisors[] =
|
||||||
{
|
{
|
||||||
&x86_hyper_vmware,
|
&x86_hyper_vmware,
|
||||||
&x86_hyper_ms_hyperv,
|
&x86_hyper_ms_hyperv,
|
||||||
#ifdef CONFIG_XEN
|
#ifdef CONFIG_XEN_PVHVM
|
||||||
&x86_hyper_xen_hvm,
|
&x86_hyper_xen_hvm,
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
|
@ -13,6 +13,11 @@ config XEN
|
||||||
kernel to boot in a paravirtualized environment under the
|
kernel to boot in a paravirtualized environment under the
|
||||||
Xen hypervisor.
|
Xen hypervisor.
|
||||||
|
|
||||||
|
config XEN_PVHVM
|
||||||
|
def_bool y
|
||||||
|
depends on XEN
|
||||||
|
depends on X86_LOCAL_APIC
|
||||||
|
|
||||||
config XEN_MAX_DOMAIN_MEMORY
|
config XEN_MAX_DOMAIN_MEMORY
|
||||||
int "Maximum allowed size of a domain in gigabytes"
|
int "Maximum allowed size of a domain in gigabytes"
|
||||||
default 8 if X86_32
|
default 8 if X86_32
|
||||||
|
|
|
@ -1282,6 +1282,7 @@ void xen_hvm_init_shared_info(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_XEN_PVHVM
|
||||||
static int __cpuinit xen_hvm_cpu_notify(struct notifier_block *self,
|
static int __cpuinit xen_hvm_cpu_notify(struct notifier_block *self,
|
||||||
unsigned long action, void *hcpu)
|
unsigned long action, void *hcpu)
|
||||||
{
|
{
|
||||||
|
@ -1338,3 +1339,4 @@ const __refconst struct hypervisor_x86 x86_hyper_xen_hvm = {
|
||||||
.init_platform = xen_hvm_guest_init,
|
.init_platform = xen_hvm_guest_init,
|
||||||
};
|
};
|
||||||
EXPORT_SYMBOL(x86_hyper_xen_hvm);
|
EXPORT_SYMBOL(x86_hyper_xen_hvm);
|
||||||
|
#endif
|
||||||
|
|
|
@ -1942,6 +1942,7 @@ void __init xen_init_mmu_ops(void)
|
||||||
pv_mmu_ops = xen_mmu_ops;
|
pv_mmu_ops = xen_mmu_ops;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_XEN_PVHVM
|
||||||
static void xen_hvm_exit_mmap(struct mm_struct *mm)
|
static void xen_hvm_exit_mmap(struct mm_struct *mm)
|
||||||
{
|
{
|
||||||
struct xen_hvm_pagetable_dying a;
|
struct xen_hvm_pagetable_dying a;
|
||||||
|
@ -1973,6 +1974,7 @@ void __init xen_hvm_init_mmu_ops(void)
|
||||||
if (is_pagetable_dying_supported())
|
if (is_pagetable_dying_supported())
|
||||||
pv_mmu_ops.exit_mmap = xen_hvm_exit_mmap;
|
pv_mmu_ops.exit_mmap = xen_hvm_exit_mmap;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_XEN_DEBUG_FS
|
#ifdef CONFIG_XEN_DEBUG_FS
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
/* store the value of xen_emul_unplug after the unplug is done */
|
/* store the value of xen_emul_unplug after the unplug is done */
|
||||||
int xen_platform_pci_unplug;
|
int xen_platform_pci_unplug;
|
||||||
EXPORT_SYMBOL_GPL(xen_platform_pci_unplug);
|
EXPORT_SYMBOL_GPL(xen_platform_pci_unplug);
|
||||||
|
#ifdef CONFIG_XEN_PVHVM
|
||||||
static int xen_emul_unplug;
|
static int xen_emul_unplug;
|
||||||
|
|
||||||
static int __init check_platform_magic(void)
|
static int __init check_platform_magic(void)
|
||||||
|
@ -133,3 +134,4 @@ static int __init parse_xen_emul_unplug(char *arg)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
early_param("xen_emul_unplug", parse_xen_emul_unplug);
|
early_param("xen_emul_unplug", parse_xen_emul_unplug);
|
||||||
|
#endif
|
||||||
|
|
|
@ -516,6 +516,7 @@ __init void xen_init_time_ops(void)
|
||||||
x86_platform.set_wallclock = xen_set_wallclock;
|
x86_platform.set_wallclock = xen_set_wallclock;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_XEN_PVHVM
|
||||||
static void xen_hvm_setup_cpu_clockevents(void)
|
static void xen_hvm_setup_cpu_clockevents(void)
|
||||||
{
|
{
|
||||||
int cpu = smp_processor_id();
|
int cpu = smp_processor_id();
|
||||||
|
@ -544,4 +545,4 @@ __init void xen_hvm_init_time_ops(void)
|
||||||
x86_platform.get_wallclock = xen_get_wallclock;
|
x86_platform.get_wallclock = xen_get_wallclock;
|
||||||
x86_platform.set_wallclock = xen_set_wallclock;
|
x86_platform.set_wallclock = xen_set_wallclock;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
|
@ -64,7 +64,7 @@ config XEN_SYS_HYPERVISOR
|
||||||
|
|
||||||
config XEN_PLATFORM_PCI
|
config XEN_PLATFORM_PCI
|
||||||
tristate "xen platform pci device driver"
|
tristate "xen platform pci device driver"
|
||||||
depends on XEN
|
depends on XEN_PVHVM
|
||||||
default m
|
default m
|
||||||
help
|
help
|
||||||
Driver for the Xen PCI Platform device: it is responsible for
|
Driver for the Xen PCI Platform device: it is responsible for
|
||||||
|
|
|
@ -973,6 +973,7 @@ int xen_set_callback_via(uint64_t via)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(xen_set_callback_via);
|
EXPORT_SYMBOL_GPL(xen_set_callback_via);
|
||||||
|
|
||||||
|
#ifdef CONFIG_XEN_PVHVM
|
||||||
/* Vector callbacks are better than PCI interrupts to receive event
|
/* Vector callbacks are better than PCI interrupts to receive event
|
||||||
* channel notifications because we can receive vector callbacks on any
|
* channel notifications because we can receive vector callbacks on any
|
||||||
* vcpu and we don't need PCI support or APIC interactions. */
|
* vcpu and we don't need PCI support or APIC interactions. */
|
||||||
|
@ -996,6 +997,9 @@ void xen_callback_vector(void)
|
||||||
alloc_intr_gate(XEN_HVM_EVTCHN_CALLBACK, xen_hvm_callback_vector);
|
alloc_intr_gate(XEN_HVM_EVTCHN_CALLBACK, xen_hvm_callback_vector);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
void xen_callback_vector(void) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
void __init xen_init_IRQ(void)
|
void __init xen_init_IRQ(void)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue