|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2 2/5] xen/domain: Introduce a new arch_sanitise_domain_config() helper
On the ARM side, lift the code to select the appropriate GIC version when
NATIVE is requested.
Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Acked-by: Jan Beulich <jbeulich@xxxxxxxx>
Reviewed-by: Julien Grall <julien.grall@xxxxxxx>
---
CC: Wei Liu <wei.liu2@xxxxxxxxxx>
CC: Stefano Stabellini <sstabellini@xxxxxxxxxx>
v2:
* Rename to arch_sanitise_domain_config()
* Use ASSERT_UNREACHABLE() in preference to BUG()
---
xen/arch/arm/domain.c | 45 +++++++++++++++++++++++++--------------------
xen/arch/x86/domain.c | 5 +++++
xen/common/domain.c | 2 +-
xen/include/xen/sched.h | 6 ++++++
4 files changed, 37 insertions(+), 21 deletions(-)
diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c
index 8043287..c24ace6 100644
--- a/xen/arch/arm/domain.c
+++ b/xen/arch/arm/domain.c
@@ -599,6 +599,30 @@ void vcpu_switch_to_aarch64_mode(struct vcpu *v)
v->arch.hcr_el2 |= HCR_RW;
}
+int arch_sanitise_domain_config(struct xen_domctl_createdomain *config)
+{
+ /* Fill in the native GIC version, passed back to the toolstack. */
+ if ( config->arch.gic_version == XEN_DOMCTL_CONFIG_GIC_NATIVE )
+ {
+ switch ( gic_hw_version() )
+ {
+ case GIC_V2:
+ config->arch.gic_version = XEN_DOMCTL_CONFIG_GIC_V2;
+ break;
+
+ case GIC_V3:
+ config->arch.gic_version = XEN_DOMCTL_CONFIG_GIC_V3;
+ break;
+
+ default:
+ ASSERT_UNREACHABLE();
+ return -EINVAL;
+ }
+ }
+
+ return 0;
+}
+
int arch_domain_create(struct domain *d,
struct xen_domctl_createdomain *config)
{
@@ -629,24 +653,6 @@ int arch_domain_create(struct domain *d,
switch ( config->arch.gic_version )
{
- case XEN_DOMCTL_CONFIG_GIC_NATIVE:
- switch ( gic_hw_version () )
- {
- case GIC_V2:
- config->arch.gic_version = XEN_DOMCTL_CONFIG_GIC_V2;
- d->arch.vgic.version = GIC_V2;
- break;
-
- case GIC_V3:
- config->arch.gic_version = XEN_DOMCTL_CONFIG_GIC_V3;
- d->arch.vgic.version = GIC_V3;
- break;
-
- default:
- BUG();
- }
- break;
-
case XEN_DOMCTL_CONFIG_GIC_V2:
d->arch.vgic.version = GIC_V2;
break;
@@ -656,8 +662,7 @@ int arch_domain_create(struct domain *d,
break;
default:
- rc = -EOPNOTSUPP;
- goto fail;
+ BUG();
}
if ( (rc = domain_vgic_register(d, &count)) != 0 )
diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
index f6fe954..28a145a 100644
--- a/xen/arch/x86/domain.c
+++ b/xen/arch/x86/domain.c
@@ -418,6 +418,11 @@ void arch_vcpu_destroy(struct vcpu *v)
pv_vcpu_destroy(v);
}
+int arch_sanitise_domain_config(struct xen_domctl_createdomain *config)
+{
+ return 0;
+}
+
static bool emulation_flags_ok(const struct domain *d, uint32_t emflags)
{
#ifdef CONFIG_HVM
diff --git a/xen/common/domain.c b/xen/common/domain.c
index 22aa634..ddaf74a 100644
--- a/xen/common/domain.c
+++ b/xen/common/domain.c
@@ -300,7 +300,7 @@ static int sanitise_domain_config(struct
xen_domctl_createdomain *config)
return -EINVAL;
}
- return 0;
+ return arch_sanitise_domain_config(config);
}
struct domain *domain_create(domid_t domid,
diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h
index 3171eab..d66fdb4 100644
--- a/xen/include/xen/sched.h
+++ b/xen/include/xen/sched.h
@@ -539,6 +539,12 @@ int domain_set_node_affinity(struct domain *d, const
nodemask_t *affinity);
void domain_update_node_affinity(struct domain *d);
/*
+ * To be implemented by each architecture, sanity checking the configuration
+ * and filling in any appropriate defaults.
+ */
+int arch_sanitise_domain_config(struct xen_domctl_createdomain *config);
+
+/*
* Create a domain: the configuration is only necessary for real domain
* (domid < DOMID_FIRST_RESERVED).
*/
--
2.1.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |