[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [RFC PATCH 1/4] xen: Introduce physaddr_abi CDF flag
Introduce the physaddr_abi flag to indicate that the guest uses physical addresses (gpaddr) instead of virtual addresses when performing hypercalls. Signed-off-by: Teddy Astie <teddy.astie@xxxxxxxxxx> --- xen/common/domain.c | 10 +++++++++- xen/include/public/domctl.h | 4 +++- xen/include/xen/sched.h | 6 ++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/xen/common/domain.c b/xen/common/domain.c index 585fd726a9..1a1e51c32d 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -716,12 +716,14 @@ static int sanitise_domain_config(struct xen_domctl_createdomain *config) bool hap = config->flags & XEN_DOMCTL_CDF_hap; bool iommu = config->flags & XEN_DOMCTL_CDF_iommu; bool vpmu = config->flags & XEN_DOMCTL_CDF_vpmu; + bool physaddr_abi = config->flags & XEN_DOMCTL_CDF_physaddr_abi; if ( config->flags & ~(XEN_DOMCTL_CDF_hvm | XEN_DOMCTL_CDF_hap | XEN_DOMCTL_CDF_s3_integrity | XEN_DOMCTL_CDF_oos_off | XEN_DOMCTL_CDF_xs_domain | XEN_DOMCTL_CDF_iommu | - XEN_DOMCTL_CDF_nested_virt | XEN_DOMCTL_CDF_vpmu) ) + XEN_DOMCTL_CDF_nested_virt | XEN_DOMCTL_CDF_vpmu | + XEN_DOMCTL_CDF_physaddr_abi) ) { dprintk(XENLOG_INFO, "Unknown CDF flags %#x\n", config->flags); return -EINVAL; @@ -745,6 +747,12 @@ static int sanitise_domain_config(struct xen_domctl_createdomain *config) return -EINVAL; } + if ( physaddr_abi && !hvm ) + { + dprintk(XENLOG_INFO, "Physical address ABI requested for non-HVM guest"); + return -EINVAL; + } + if ( iommu ) { if ( config->iommu_opts & ~XEN_DOMCTL_IOMMU_no_sharept ) diff --git a/xen/include/public/domctl.h b/xen/include/public/domctl.h index 5b2063eed9..3a77efe673 100644 --- a/xen/include/public/domctl.h +++ b/xen/include/public/domctl.h @@ -66,9 +66,11 @@ struct xen_domctl_createdomain { #define XEN_DOMCTL_CDF_nested_virt (1U << _XEN_DOMCTL_CDF_nested_virt) /* Should we expose the vPMU to the guest? */ #define XEN_DOMCTL_CDF_vpmu (1U << 7) +/* Do the guest use physical addresses for hypercalls ? */ +#define XEN_DOMCTL_CDF_physaddr_abi (1U << 8) /* Max XEN_DOMCTL_CDF_* constant. Used for ABI checking. */ -#define XEN_DOMCTL_CDF_MAX XEN_DOMCTL_CDF_vpmu +#define XEN_DOMCTL_CDF_MAX XEN_DOMCTL_CDF_physaddr_abi uint32_t flags; diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h index 559d201e0c..a29c63c737 100644 --- a/xen/include/xen/sched.h +++ b/xen/include/xen/sched.h @@ -1201,6 +1201,12 @@ static always_inline bool hap_enabled(const struct domain *d) evaluate_nospec(d->options & XEN_DOMCTL_CDF_hap); } +static always_inline bool is_hvm_physaddr_abi(const struct domain *d) +{ + return IS_ENABLED(CONFIG_HVM) && + evaluate_nospec(d->options & XEN_DOMCTL_CDF_physaddr_abi); +} + static inline bool is_hwdom_pinned_vcpu(const struct vcpu *v) { return (is_hardware_domain(v->domain) && -- 2.47.2 Teddy Astie | Vates XCP-ng Developer XCP-ng & Xen Orchestra - Vates solutions web: https://vates.tech
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |