|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] xen/riscv: Implement construct_domain()
commit a83e5b41c4bae62fa21b4b6ffe69a2e5a7c40b5f
Author: Oleksii Kurochko <oleksii.kurochko@xxxxxxxxx>
AuthorDate: Wed Sep 9 17:07:21 2026 +0200
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Mon Sep 21 10:06:12 2026 +0200
xen/riscv: Implement construct_domain()
Implement construct_domain() function for RISC-V, which performs initial
setup
for the domain's first vCPU, loads the kernel, initrd, and device tree,
and sets up guest CPU registers for boot.
It also creates additional vCPUs up to max_vcpus and assigns the device tree
address and boot cpuid in registers.
Signed-off-by: Oleksii Kurochko <oleksii.kurochko@xxxxxxxxx>
Acked-by: Jan Beulich <jbeulich@xxxxxxxx>
---
xen/arch/riscv/Makefile | 1 +
xen/arch/riscv/domain-build.c | 50 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 51 insertions(+)
diff --git a/xen/arch/riscv/Makefile b/xen/arch/riscv/Makefile
index 4fcdcf9e24..2d24670dfc 100644
--- a/xen/arch/riscv/Makefile
+++ b/xen/arch/riscv/Makefile
@@ -1,6 +1,7 @@
obj-y += aplic.o
obj-y += cpufeature.o
obj-y += domain.o
+obj-y += domain-build.init.o
obj-$(CONFIG_DOM0LESS_BOOT) += dom0less-build.init.o
obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
obj-y += entry.o
diff --git a/xen/arch/riscv/domain-build.c b/xen/arch/riscv/domain-build.c
new file mode 100644
index 0000000000..5f6f4b6248
--- /dev/null
+++ b/xen/arch/riscv/domain-build.c
@@ -0,0 +1,50 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#include <xen/fdt-domain-build.h>
+#include <xen/fdt-kernel.h>
+#include <xen/init.h>
+#include <xen/sched.h>
+
+#include <asm/current.h>
+#include <asm/guest_access.h>
+
+int __init construct_domain(struct domain *d, struct kernel_info *kinfo)
+{
+ struct vcpu *v = d->vcpu[0];
+ struct cpu_user_regs *regs = vcpu_guest_cpu_user_regs(v);
+
+ BUG_ON(v->is_initialised);
+
+ /*
+ * At the moment *_load() don't return value and will just panic()
+ * inside.
+ * TODO: it will be good to change that.
+ */
+ kernel_load(kinfo);
+ initrd_load(kinfo, copy_to_guest_phys);
+ dtb_load(kinfo, copy_to_guest_phys);
+
+ regs->sepc = kinfo->entry;
+
+ /* Guest boot cpuid = 0 */
+ regs->a0 = 0;
+ regs->a1 = kinfo->dtb_paddr;
+
+ for ( unsigned int i = 1; i < d->max_vcpus; i++ )
+ {
+ const struct vcpu *tmp_v = vcpu_create(d, i);
+
+ if ( !tmp_v )
+ {
+ printk("Failed to allocate %pdv%u\n", d, i);
+ break;
+ }
+ }
+
+ domain_update_node_affinity(d);
+
+ v->is_initialised = true;
+ clear_bit(_VPF_down, &v->pause_flags);
+
+ return 0;
+}
--
generated by git-patchbot for /home/xen/git/xen.git#staging
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |