|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [XEN][PATCH 2/8] xen/arm: move vcpu_switch_to_aarch64_mode() in arch_vcpu_create()
From: Grygorii Strashko <grygorii_strashko@xxxxxxxx>
Move vcpu_switch_to_aarch64_mode() in arch_vcpu_create() callback instead
of calling it manually from few different places after vcpu_create().
Before doing above ensure vcpu0 is created after kernel_probe() is done and
domain's guest execution mode (32-bit/64-bit) is set for dom0 and dom0less
domains.
Signed-off-by: Grygorii Strashko <grygorii_strashko@xxxxxxxx>
---
xen/arch/arm/domain.c | 3 +++
xen/arch/arm/domain_build.c | 13 +++++--------
xen/common/device-tree/dom0less-build.c | 6 +++---
xen/include/asm-generic/dom0less-build.h | 2 +-
4 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c
index 79a144e61be9..bbd4a764c696 100644
--- a/xen/arch/arm/domain.c
+++ b/xen/arch/arm/domain.c
@@ -586,6 +586,9 @@ int arch_vcpu_create(struct vcpu *v)
if ( get_ssbd_state() == ARM_SSBD_RUNTIME )
v->arch.cpu_info->flags |= CPUINFO_WORKAROUND_2_FLAG;
+ if ( is_64bit_domain(v->domain) )
+ vcpu_switch_to_aarch64_mode(v);
+
return rc;
fail:
diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
index d91a71acfd3b..af7e9d830ae1 100644
--- a/xen/arch/arm/domain_build.c
+++ b/xen/arch/arm/domain_build.c
@@ -1885,10 +1885,6 @@ int __init construct_domain(struct domain *d, struct
kernel_info *kinfo)
printk("SVE is not available for 32-bit domain\n");
return -EINVAL;
}
-
- if ( is_64bit_domain(d) )
- vcpu_switch_to_aarch64_mode(v);
-
#endif
/*
@@ -1941,9 +1937,6 @@ int __init construct_domain(struct domain *d, struct
kernel_info *kinfo)
printk("Failed to allocate d%dv%d\n", d->domain_id, i);
break;
}
-
- if ( is_64bit_domain(d) )
- vcpu_switch_to_aarch64_mode(d->vcpu[i]);
}
domain_update_node_affinity(d);
@@ -1995,9 +1988,13 @@ int __init construct_hwdom(struct kernel_info *kinfo,
iommu_hwdom_init(d);
#ifdef CONFIG_ARM_64
- /* type must be set before allocate_memory */
+ /* type must be set before allocate_memory or create cpu */
d->arch.type = kinfo->arch.type;
#endif
+
+ if ( vcpu_create(d, 0) == NULL )
+ panic("Error creating domain 0 vcpu0\n");
+
find_gnttab_region(d, kinfo);
if ( is_domain_direct_mapped(d) )
allocate_memory_11(d, kinfo);
diff --git a/xen/common/device-tree/dom0less-build.c
b/xen/common/device-tree/dom0less-build.c
index efa846da2a55..f02ce6c776de 100644
--- a/xen/common/device-tree/dom0less-build.c
+++ b/xen/common/device-tree/dom0less-build.c
@@ -771,9 +771,6 @@ static int __init construct_domU(struct domain *d,
else if ( rc == 0 && !strcmp(dom0less_enhanced, "no-xenstore") )
kinfo.dom0less_feature = DOM0LESS_ENHANCED_NO_XS;
- if ( vcpu_create(d, 0) == NULL )
- return -ENOMEM;
-
d->max_pages = ((paddr_t)mem * SZ_1K) >> PAGE_SHIFT;
kinfo.bd.d = d;
@@ -792,6 +789,9 @@ static int __init construct_domU(struct domain *d,
}
else
{
+ if ( vcpu_create(d, 0) == NULL )
+ return -ENOMEM;
+
if ( !dt_find_property(node, "xen,static-mem", NULL) )
allocate_memory(d, &kinfo);
else if ( !is_domain_direct_mapped(d) )
diff --git a/xen/include/asm-generic/dom0less-build.h
b/xen/include/asm-generic/dom0less-build.h
index 6b80ffbd8679..13616975b3ca 100644
--- a/xen/include/asm-generic/dom0less-build.h
+++ b/xen/include/asm-generic/dom0less-build.h
@@ -59,7 +59,7 @@ int make_arch_nodes(struct kernel_info *kinfo);
/*
* Set domain type from struct kernel_info which defines guest Execution
* State 32-bit/64-bit (for Arm AArch32/AArch64).
- * The domain type must be set before allocate_memory.
+ * The domain type must be set before allocate_memory or create vcpus.
*
* @d: pointer to the domain structure.
* @kinfo: pointer to the kinfo structure.
--
2.34.1
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |