Skip to content

Commit

Permalink
x86: Make Linux guest support optional
Browse files Browse the repository at this point in the history
Put all config options needed to run Linux as a guest behind a
CONFIG_HYPERVISOR_GUEST menu so that they don't get built-in by default
but be selectable by the user. Also, make all units which depend on
x86_hyper, depend on this new symbol so that compilation doesn't fail
when CONFIG_HYPERVISOR_GUEST is disabled but those units assume its
presence.

Sort options in the new HYPERVISOR_GUEST menu, adapt config text and
drop redundant select.

Signed-off-by: Borislav Petkov <[email protected]>
Link: http://lkml.kernel.org/r/[email protected]
Cc: Dmitry Torokhov <[email protected]>
Cc: K. Y. Srinivasan <[email protected]>
Cc: Haiyang Zhang <[email protected]>
Signed-off-by: H. Peter Anvin <[email protected]>
  • Loading branch information
suryasaimadhu authored and H. Peter Anvin committed Mar 4, 2013
1 parent 2c59cad commit 6276a07
Show file tree
Hide file tree
Showing 7 changed files with 62 additions and 55 deletions.
89 changes: 45 additions & 44 deletions arch/x86/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -389,7 +389,7 @@ config X86_NUMACHIP

config X86_VSMP
bool "ScaleMP vSMP"
select PARAVIRT_GUEST
select HYPERVISOR_GUEST
select PARAVIRT
depends on X86_64 && PCI
depends on X86_EXTENDED_PLATFORM
Expand Down Expand Up @@ -596,44 +596,17 @@ config SCHED_OMIT_FRAME_POINTER

If in doubt, say "Y".

menuconfig PARAVIRT_GUEST
bool "Paravirtualized guest support"
menuconfig HYPERVISOR_GUEST
bool "Linux guest support"
---help---
Say Y here to get to see options related to running Linux under
various hypervisors. This option alone does not add any kernel code.
Say Y here to enable options for running Linux under various hyper-
visors. This option enables basic hypervisor detection and platform
setup.

If you say N, all options in this submenu will be skipped and disabled.
If you say N, all options in this submenu will be skipped and
disabled, and Linux guest support won't be built in.

if PARAVIRT_GUEST

config PARAVIRT_TIME_ACCOUNTING
bool "Paravirtual steal time accounting"
select PARAVIRT
default n
---help---
Select this option to enable fine granularity task steal time
accounting. Time spent executing other tasks in parallel with
the current vCPU is discounted from the vCPU power. To account for
that, there can be a small performance impact.

If in doubt, say N here.

source "arch/x86/xen/Kconfig"

config KVM_GUEST
bool "KVM Guest support (including kvmclock)"
select PARAVIRT
select PARAVIRT
select PARAVIRT_CLOCK
default y if PARAVIRT_GUEST
---help---
This option enables various optimizations for running under the KVM
hypervisor. It includes a paravirtualized clock, so that instead
of relying on a PIT (or probably other) emulation by the
underlying device model, the host provides the guest with
timing infrastructure such as time of day, and system time

source "arch/x86/lguest/Kconfig"
if HYPERVISOR_GUEST

config PARAVIRT
bool "Enable paravirtualization code"
Expand All @@ -643,6 +616,13 @@ config PARAVIRT
over full virtualization. However, when run without a hypervisor
the kernel is theoretically slower and slightly larger.

config PARAVIRT_DEBUG
bool "paravirt-ops debugging"
depends on PARAVIRT && DEBUG_KERNEL
---help---
Enable to debug paravirt_ops internals. Specifically, BUG if
a paravirt_op is missing when it is called.

config PARAVIRT_SPINLOCKS
bool "Paravirtualization layer for spinlocks"
depends on PARAVIRT && SMP
Expand All @@ -656,17 +636,38 @@ config PARAVIRT_SPINLOCKS

If you are unsure how to answer this question, answer N.

config PARAVIRT_CLOCK
bool
source "arch/x86/xen/Kconfig"

config PARAVIRT_DEBUG
bool "paravirt-ops debugging"
depends on PARAVIRT && DEBUG_KERNEL
config KVM_GUEST
bool "KVM Guest support (including kvmclock)"
depends on PARAVIRT
select PARAVIRT_CLOCK
default y
---help---
Enable to debug paravirt_ops internals. Specifically, BUG if
a paravirt_op is missing when it is called.
This option enables various optimizations for running under the KVM
hypervisor. It includes a paravirtualized clock, so that instead
of relying on a PIT (or probably other) emulation by the
underlying device model, the host provides the guest with
timing infrastructure such as time of day, and system time

source "arch/x86/lguest/Kconfig"

config PARAVIRT_TIME_ACCOUNTING
bool "Paravirtual steal time accounting"
depends on PARAVIRT
default n
---help---
Select this option to enable fine granularity task steal time
accounting. Time spent executing other tasks in parallel with
the current vCPU is discounted from the vCPU power. To account for
that, there can be a small performance impact.

If in doubt, say N here.

config PARAVIRT_CLOCK
bool

endif #PARAVIRT_GUEST
endif #HYPERVISOR_GUEST

config NO_BOOTMEM
def_bool y
Expand Down
16 changes: 11 additions & 5 deletions arch/x86/include/asm/hypervisor.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,11 @@
#ifndef _ASM_X86_HYPERVISOR_H
#define _ASM_X86_HYPERVISOR_H

#ifdef CONFIG_HYPERVISOR_GUEST

#include <asm/kvm_para.h>
#include <asm/xen/hypervisor.h>

extern void init_hypervisor(struct cpuinfo_x86 *c);
extern void init_hypervisor_platform(void);
extern bool hypervisor_x2apic_available(void);

/*
* x86 hypervisor information
*/
Expand Down Expand Up @@ -55,4 +53,12 @@ extern const struct hypervisor_x86 x86_hyper_ms_hyperv;
extern const struct hypervisor_x86 x86_hyper_xen_hvm;
extern const struct hypervisor_x86 x86_hyper_kvm;

#endif
extern void init_hypervisor(struct cpuinfo_x86 *c);
extern void init_hypervisor_platform(void);
extern bool hypervisor_x2apic_available(void);
#else
static inline void init_hypervisor(struct cpuinfo_x86 *c) { }
static inline void init_hypervisor_platform(void) { }
static inline bool hypervisor_x2apic_available(void) { return false; }
#endif /* CONFIG_HYPERVISOR_GUEST */
#endif /* _ASM_X86_HYPERVISOR_H */
3 changes: 2 additions & 1 deletion arch/x86/kernel/cpu/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ CFLAGS_common.o := $(nostackp)

obj-y := intel_cacheinfo.o scattered.o topology.o
obj-y += proc.o capflags.o powerflags.o common.o
obj-y += vmware.o hypervisor.o mshyperv.o
obj-y += rdrand.o
obj-y += match.o

Expand Down Expand Up @@ -42,6 +41,8 @@ obj-$(CONFIG_MTRR) += mtrr/

obj-$(CONFIG_X86_LOCAL_APIC) += perfctr-watchdog.o perf_event_amd_ibs.o

obj-$(CONFIG_HYPERVISOR_GUEST) += vmware.o hypervisor.o mshyperv.o

quiet_cmd_mkcapflags = MKCAP $@
cmd_mkcapflags = $(PERL) $(srctree)/$(src)/mkcapflags.pl $< $@

Expand Down
3 changes: 1 addition & 2 deletions arch/x86/lguest/Kconfig
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
config LGUEST_GUEST
bool "Lguest guest support"
select PARAVIRT
depends on X86_32
depends on X86_32 && PARAVIRT
select TTY
select VIRTUALIZATION
select VIRTIO
Expand Down
2 changes: 1 addition & 1 deletion arch/x86/xen/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

config XEN
bool "Xen guest support"
select PARAVIRT
depends on PARAVIRT
select PARAVIRT_CLOCK
select XEN_HAVE_PVMMU
depends on X86_64 || (X86_32 && X86_PAE && !X86_VISWS)
Expand Down
2 changes: 1 addition & 1 deletion drivers/hv/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ menu "Microsoft Hyper-V guest support"

config HYPERV
tristate "Microsoft Hyper-V client drivers"
depends on X86 && ACPI && PCI && X86_LOCAL_APIC
depends on X86 && ACPI && PCI && X86_LOCAL_APIC && HYPERVISOR_GUEST
help
Select this option to run Linux as a Hyper-V client operating
system.
Expand Down
2 changes: 1 addition & 1 deletion drivers/misc/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -418,7 +418,7 @@ config TI_DAC7512

config VMWARE_BALLOON
tristate "VMware Balloon Driver"
depends on X86
depends on X86 && HYPERVISOR_GUEST
help
This is VMware physical memory management driver which acts
like a "balloon" that can be inflated to reclaim physical pages
Expand Down

0 comments on commit 6276a07

Please sign in to comment.