|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 4/4] x86/PoD: Command line option to prohibit any PoD operations
PoD is only needed to cover a corner case with memory overcommit
(rebooting a ballooned down VM with insufficient host RAM available).
Its use comes with a performance hit, and inoperability with other
technologies such as PCI Passthrough.
Offer a command line option for administrators who want to be certain
that PoD is not in use for their VMs.
Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
CC: Jan Beulich <JBeulich@xxxxxxxx>
CC: George Dunlap <george.dunlap@xxxxxxxxxxxxx>
---
docs/misc/xen-command-line.markdown | 8 ++++++++
xen/arch/x86/hvm/hvm.c | 3 +++
xen/arch/x86/mm.c | 6 ++++++
xen/common/memory.c | 4 ++++
xen/include/asm-x86/hvm/hvm.h | 2 ++
5 files changed, 23 insertions(+)
diff --git a/docs/misc/xen-command-line.markdown
b/docs/misc/xen-command-line.markdown
index 416e559..aaf8a4f 100644
--- a/docs/misc/xen-command-line.markdown
+++ b/docs/misc/xen-command-line.markdown
@@ -1173,6 +1173,14 @@ This option can be specified more than once (up to 8
times at present).
### ple\_window
> `= <integer>`
+### pod
+> `= <boolean>`
+
+Default: `true`
+
+Permit or deny the use of Populate on Demand with x86 HVM guests. If
+disabled, attempts to create VMs with `memory < maxmem` will fail.
+
### psr (Intel)
> `= List of ( cmt:<boolean> | rmid_max:<integer> | cat:<boolean> |
> cos_max:<integer> | cdp:<boolean> )`
diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c
index 21f42a7..cf895a7 100644
--- a/xen/arch/x86/hvm/hvm.c
+++ b/xen/arch/x86/hvm/hvm.c
@@ -92,6 +92,9 @@ unsigned long __section(".bss.page_aligned")
static bool_t __initdata opt_hap_enabled = 1;
boolean_param("hap", opt_hap_enabled);
+bool_t opt_pod_enabled = 1;
+boolean_param("pod", opt_pod_enabled);
+
#ifndef opt_hvm_fep
bool_t opt_hvm_fep;
boolean_param("hvm_fep", opt_hvm_fep);
diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c
index 92df36f..90270ba 100644
--- a/xen/arch/x86/mm.c
+++ b/xen/arch/x86/mm.c
@@ -4929,6 +4929,12 @@ long arch_memory_op(unsigned long cmd,
XEN_GUEST_HANDLE_PARAM(void) arg)
if ( cmd == XENMEM_set_pod_target )
{
+ if ( unlikely(!opt_pod_enabled) )
+ {
+ rc = -EOPNOTSUPP;
+ goto pod_target_out_unlock;
+ }
+
if ( target.target_pages > d->max_pages )
{
rc = -EINVAL;
diff --git a/xen/common/memory.c b/xen/common/memory.c
index a3bffb7..f5ed66e 100644
--- a/xen/common/memory.c
+++ b/xen/common/memory.c
@@ -818,6 +818,10 @@ long do_memory_op(unsigned long cmd,
XEN_GUEST_HANDLE_PARAM(void) arg)
if ( unlikely(start_extent >= reservation.nr_extents) )
return start_extent;
+ if ( unlikely(!opt_pod_enabled) &&
+ (reservation.mem_flags & XENMEMF_populate_on_demand) )
+ return start_extent;
+
d = rcu_lock_domain_by_any_id(reservation.domid);
if ( d == NULL )
return start_extent;
diff --git a/xen/include/asm-x86/hvm/hvm.h b/xen/include/asm-x86/hvm/hvm.h
index 0cf7da1..0341ba6 100644
--- a/xen/include/asm-x86/hvm/hvm.h
+++ b/xen/include/asm-x86/hvm/hvm.h
@@ -555,6 +555,8 @@ extern bool_t opt_hvm_fep;
#define opt_hvm_fep 0
#endif
+extern bool_t opt_pod_enabled;
+
/* updates the current hardware p2m */
void altp2m_vcpu_update_p2m(struct vcpu *v);
--
2.1.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |