On 10.03.2026 18:08, Oleksii Kurochko wrote:
> --- /dev/null
> +++ b/xen/arch/riscv/domain-build.c
> @@ -0,0 +1,46 @@
> +/* 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)
Are you actually altering what kinfo points to?
> +{
> + struct vcpu *v = d->vcpu[0];
> + struct cpu_user_regs *regs = vcpu_guest_cpu_user_regs(v);
> +
> + BUG_ON(d->vcpu[0] == NULL);
Why not simply "!v"?
Also, while in the cover letter you state a dependency on another series,
this is somewhat unwieldy here. From the titles there I can't deduce which
of the patches would introduce vcpu_guest_cpu_user_regs(). Yet I would
have wanted to double check that it doesn't de-reference v already.
> + BUG_ON(v->is_initialised);
> +
> + kernel_load(kinfo);
> + initrd_load(kinfo, copy_to_guest_phys);
> + dtb_load(kinfo, copy_to_guest_phys);
These all return void, despite this also being used for non-Dom0. Is it
really fatal to a dom0less system if one out of many domains fail to be
built? Especially when, despite the name, there is a Dom0?
> + 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++ )
> + {
> + if ( vcpu_create(d, i) == NULL )
> + {
> + printk("Failed to allocate %pd v%d\n", d, i);
> + break;
And no error is indicated to the caller?
> + }
> +
> + printk("Created vcpu %d for %pd\n", i, d);
dprintk() at most, and if so, then please use %pv.
> + }
> +
> + domain_update_node_affinity(d);
> +
> + v->is_initialised = 1;
This is a boolean field, so the rhs wants to be "true".
Jan