|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] x86/hvm: Obsolete the use of HVM_PARAM_NESTEDHVM
commit f5bdb4aaa165c6fe1d2c42e1d67619e7d8217cdd
Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
AuthorDate: Tue Sep 29 16:51:07 2020 +0100
Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CommitDate: Tue Oct 6 12:28:37 2020 +0100
x86/hvm: Obsolete the use of HVM_PARAM_NESTEDHVM
With XEN_DOMCTL_CDF_nested_virt now passed properly to domain_create(),
reimplement nestedhvm_enabled() to use the property which is fixed for the
lifetime of the domain.
This makes the call to nestedhvm_vcpu_initialise() from
hvm_vcpu_initialise()
no longer dead. It became logically dead with the Xend => XL transition, as
they initialise HVM_PARAM_NESTEDHVM in opposite orders with respect to
XEN_DOMCTL_max_vcpus.
There is one opencoded user of nestedhvm_enabled() in HVM_PARAM_ALTP2M's
safety check.
Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Reviewed-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
Reviewed-by: Wei Liu <wl@xxxxxxx>
---
tools/libs/light/libxl_x86.c | 5 -----
xen/arch/x86/hvm/hvm.c | 33 ++++-----------------------------
xen/include/asm-x86/hvm/nestedhvm.h | 5 ++---
xen/include/public/hvm/params.h | 4 +---
4 files changed, 7 insertions(+), 40 deletions(-)
diff --git a/tools/libs/light/libxl_x86.c b/tools/libs/light/libxl_x86.c
index 6ec6c27c83..e18274cc10 100644
--- a/tools/libs/light/libxl_x86.c
+++ b/tools/libs/light/libxl_x86.c
@@ -426,11 +426,6 @@ static int hvm_set_conf_params(libxl__gc *gc, uint32_t
domid,
LOG(ERROR, "Couldn't set HVM_PARAM_TIMER_MODE");
goto out;
}
- if (xc_hvm_param_set(xch, domid, HVM_PARAM_NESTEDHVM,
- libxl_defbool_val(info->nested_hvm))) {
- LOG(ERROR, "Couldn't set HVM_PARAM_NESTEDHVM");
- goto out;
- }
if (xc_hvm_param_set(xch, domid, HVM_PARAM_ALTP2M, altp2m)) {
LOG(ERROR, "Couldn't set HVM_PARAM_ALTP2M");
goto out;
diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c
index 2dfda93e09..101a739952 100644
--- a/xen/arch/x86/hvm/hvm.c
+++ b/xen/arch/x86/hvm/hvm.c
@@ -4086,6 +4086,7 @@ static int hvm_allow_set_param(struct domain *d,
case HVM_PARAM_MEMORY_EVENT_CR3:
case HVM_PARAM_MEMORY_EVENT_CR4:
case HVM_PARAM_MEMORY_EVENT_INT3:
+ case HVM_PARAM_NESTEDHVM:
case HVM_PARAM_MEMORY_EVENT_SINGLE_STEP:
case HVM_PARAM_BUFIOREQ_EVTCHN:
case HVM_PARAM_MEMORY_EVENT_MSR:
@@ -4204,39 +4205,12 @@ static int hvm_set_param(struct domain *d, uint32_t
index, uint64_t value)
case HVM_PARAM_ACPI_IOPORTS_LOCATION:
rc = pmtimer_change_ioport(d, value);
break;
- case HVM_PARAM_NESTEDHVM:
- rc = xsm_hvm_param_nested(XSM_PRIV, d);
- if ( rc )
- break;
- if ( value > 1 )
- rc = -EINVAL;
- /*
- * Remove the check below once we have
- * shadow-on-shadow.
- */
- if ( !paging_mode_hap(d) && value )
- rc = -EINVAL;
- if ( value &&
- d->arch.hvm.params[HVM_PARAM_ALTP2M] )
- rc = -EINVAL;
- /* Set up NHVM state for any vcpus that are already up. */
- if ( value &&
- !d->arch.hvm.params[HVM_PARAM_NESTEDHVM] )
- for_each_vcpu(d, v)
- if ( rc == 0 )
- rc = nestedhvm_vcpu_initialise(v);
- if ( !value || rc )
- for_each_vcpu(d, v)
- nestedhvm_vcpu_destroy(v);
- break;
case HVM_PARAM_ALTP2M:
rc = xsm_hvm_param_altp2mhvm(XSM_PRIV, d);
if ( rc )
break;
- if ( value > XEN_ALTP2M_limited )
- rc = -EINVAL;
- if ( value &&
- d->arch.hvm.params[HVM_PARAM_NESTEDHVM] )
+ if ( (value > XEN_ALTP2M_limited) ||
+ (value && nestedhvm_enabled(d)) )
rc = -EINVAL;
break;
case HVM_PARAM_TRIPLE_FAULT_REASON:
@@ -4390,6 +4364,7 @@ static int hvm_allow_get_param(struct domain *d,
case HVM_PARAM_MEMORY_EVENT_CR3:
case HVM_PARAM_MEMORY_EVENT_CR4:
case HVM_PARAM_MEMORY_EVENT_INT3:
+ case HVM_PARAM_NESTEDHVM:
case HVM_PARAM_MEMORY_EVENT_SINGLE_STEP:
case HVM_PARAM_BUFIOREQ_EVTCHN:
case HVM_PARAM_MEMORY_EVENT_MSR:
diff --git a/xen/include/asm-x86/hvm/nestedhvm.h
b/xen/include/asm-x86/hvm/nestedhvm.h
index d9784a2e0b..d263925786 100644
--- a/xen/include/asm-x86/hvm/nestedhvm.h
+++ b/xen/include/asm-x86/hvm/nestedhvm.h
@@ -34,10 +34,9 @@ enum nestedhvm_vmexits {
};
/* Nested HVM on/off per domain */
-static always_inline bool nestedhvm_enabled(const struct domain *d)
+static inline bool nestedhvm_enabled(const struct domain *d)
{
- return is_hvm_domain(d) && d->arch.hvm.params &&
- d->arch.hvm.params[HVM_PARAM_NESTEDHVM];
+ return IS_ENABLED(CONFIG_HVM) && (d->options & XEN_DOMCTL_CDF_nested_virt);
}
/* Nested VCPU */
diff --git a/xen/include/public/hvm/params.h b/xen/include/public/hvm/params.h
index 0a91bfa749..0e3fdca096 100644
--- a/xen/include/public/hvm/params.h
+++ b/xen/include/public/hvm/params.h
@@ -34,6 +34,7 @@
#define HVM_PARAM_MEMORY_EVENT_CR3 21
#define HVM_PARAM_MEMORY_EVENT_CR4 22
#define HVM_PARAM_MEMORY_EVENT_INT3 23
+#define HVM_PARAM_NESTEDHVM 24
#define HVM_PARAM_MEMORY_EVENT_SINGLE_STEP 25
#define HVM_PARAM_BUFIOREQ_EVTCHN 26
#define HVM_PARAM_MEMORY_EVENT_MSR 30
@@ -232,9 +233,6 @@
*/
#define HVM_PARAM_ACPI_IOPORTS_LOCATION 19
-/* Boolean: Enable nestedhvm (hvm only) */
-#define HVM_PARAM_NESTEDHVM 24
-
/* Params for the mem event rings */
#define HVM_PARAM_PAGING_RING_PFN 27
#define HVM_PARAM_MONITOR_RING_PFN 28
--
generated by git-patchbot for /home/xen/git/xen.git#master
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |