From: Doug Goldstein Date: Wed, 16 Mar 2016 14:11:01 +0000 (-0500) Subject: tmem: allow tmem to be disabled with Kconfig X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~1541 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=6ea2dc59a78ebf24ecdf20193144dada90b0512b;p=xen.git tmem: allow tmem to be disabled with Kconfig Wrap the various tmem functions with the Kconfig generated CONFIG_TMEM option allowing users to build Xen without tmem support. Note that you have to use XEN_CONFIG_EXPERT to see this option. Signed-off-by: Doug Goldstein Acked-by: Jan Beulich Signed-off-by: Konrad Rzeszutek Wilk --- diff --git a/xen/arch/x86/x86_64/compat/entry.S b/xen/arch/x86/x86_64/compat/entry.S index 927439ddd4..5218f8aed7 100644 --- a/xen/arch/x86/x86_64/compat/entry.S +++ b/xen/arch/x86/x86_64/compat/entry.S @@ -345,6 +345,10 @@ compat_crash_page_fault: #define compat_kexec_op do_ni_hypercall #endif +#ifndef CONFIG_TMEM +#define do_tmem_op do_ni_hypercall +#endif + #ifndef CONFIG_XENOPROF #define compat_xenoprof_op do_ni_hypercall #endif diff --git a/xen/arch/x86/x86_64/entry.S b/xen/arch/x86/x86_64/entry.S index dd7f1149d7..cab976313e 100644 --- a/xen/arch/x86/x86_64/entry.S +++ b/xen/arch/x86/x86_64/entry.S @@ -681,6 +681,10 @@ ENTRY(exception_table) #define do_kexec_op do_ni_hypercall #endif +#ifndef CONFIG_TMEM +#define do_tmem_op do_ni_hypercall +#endif + #ifndef CONFIG_XENOPROF #define do_xenoprof_op do_ni_hypercall #endif diff --git a/xen/common/Kconfig b/xen/common/Kconfig index 8fbc46d4af..3522ecb8d6 100644 --- a/xen/common/Kconfig +++ b/xen/common/Kconfig @@ -87,6 +87,20 @@ config LATE_HWDOM If unsure, say N. +# Enables transcendent memory support +config TMEM + def_bool y + prompt "Transcendent Memory Support" if EXPERT = "y" + ---help--- + Transcendent memory allows PV-aware guests to collaborate on memory + usage. Guests can 'swap' their memory to the hypervisor or have an + collective pool of memory shared across guests. The end result is + less memory usage by guests allowing higher guest density. + + You also have to enable it on the Xen commandline by using tmem=1 + + If unsure, say Y. + # Adds support for Xenoprof config XENOPROF def_bool y diff --git a/xen/common/Makefile b/xen/common/Makefile index 82625a5c96..77de27ed17 100644 --- a/xen/common/Makefile +++ b/xen/common/Makefile @@ -49,8 +49,6 @@ obj-y += sysctl.o obj-y += tasklet.o obj-y += time.o obj-y += timer.o -obj-y += tmem.o -obj-y += tmem_xen.o obj-y += trace.o obj-y += version.o obj-y += vm_event.o @@ -65,7 +63,11 @@ obj-bin-$(CONFIG_X86) += $(foreach n,decompress bunzip2 unxz unlzma unlzo unlz4 obj-$(perfc) += perfc.o obj-$(crash_debug) += gdbstub.o -obj-$(CONFIG_COMPAT) += $(addprefix compat/,domain.o kernel.o memory.o multicall.o tmem_xen.o xlat.o) +obj-$(CONFIG_COMPAT) += $(addprefix compat/,domain.o kernel.o memory.o multicall.o xlat.o) + +tmem-y := tmem.o tmem_xen.o +tmem-$(CONFIG_COMPAT) += compat/tmem_xen.o +obj-$(CONFIG_TMEM) += $(tmem-y) subdir-$(CONFIG_X86) += hvm diff --git a/xen/include/xen/hypercall.h b/xen/include/xen/hypercall.h index 26cb615d55..0c8ae0e5df 100644 --- a/xen/include/xen/hypercall.h +++ b/xen/include/xen/hypercall.h @@ -133,9 +133,13 @@ extern long do_xsm_op( XEN_GUEST_HANDLE_PARAM(xsm_op_t) u_xsm_op); +#ifdef CONFIG_TMEM extern long do_tmem_op( XEN_GUEST_HANDLE_PARAM(tmem_op_t) uops); +#else +#define do_tmem_op do_ni_hypercall +#endif extern long do_xenoprof_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg); diff --git a/xen/include/xen/tmem.h b/xen/include/xen/tmem.h index 32a542a5dd..414a14d808 100644 --- a/xen/include/xen/tmem.h +++ b/xen/include/xen/tmem.h @@ -11,9 +11,35 @@ struct xen_sysctl_tmem_op; +#ifdef CONFIG_TMEM extern int tmem_control(struct xen_sysctl_tmem_op *op); extern void tmem_destroy(void *); extern void *tmem_relinquish_pages(unsigned int, unsigned int); extern unsigned long tmem_freeable_pages(void); +#else +static inline int +tmem_control(struct xen_sysctl_tmem_op *op) +{ + return -ENOSYS; +} + +static inline void +tmem_destroy(void *p) +{ + return; +} + +static inline void * +tmem_relinquish_pages(unsigned int x, unsigned int y) +{ + return NULL; +} + +static inline unsigned long +tmem_freeable_pages(void) +{ + return 0; +} +#endif /* CONFIG_TMEM */ #endif /* __XEN_TMEM_H__ */ diff --git a/xen/include/xen/tmem_xen.h b/xen/include/xen/tmem_xen.h index f516bbefc8..19ed83508a 100644 --- a/xen/include/xen/tmem_xen.h +++ b/xen/include/xen/tmem_xen.h @@ -63,6 +63,7 @@ static inline bool_t tmem_shared_auth(void) return opt_tmem_shared_auth; } +#ifdef CONFIG_TMEM extern bool_t opt_tmem; static inline bool_t tmem_enabled(void) { @@ -73,6 +74,16 @@ static inline void tmem_disable(void) { opt_tmem = 0; } +#else +static inline bool_t tmem_enabled(void) +{ + return 0; +} + +static inline void tmem_disable(void) +{ +} +#endif /* CONFIG_TMEM */ /* * Memory free page list management