|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 25/26] xen/riscv: add initial dom0less infrastructure support
On 08.05.2026 16:43, Oleksii Kurochko wrote:
> Enable dom0less support for RISC-V by selecting HAS_DOM0LESS and
> providing the minimal architecture hooks required by the common
> dom0less infrastructure.
>
> Add stub implementations for architecture-specific helpers used when
> building domains from the device tree. These currently perform no
> additional work but allow the generic dom0less code to build and run
> on RISC-V.
>
> Introduce max_init_domid as a runtime variable rather than a constant
> so that it can be updated during dom0less domain creation.
>
> Provide missing helpers and definitions required by the domain
> construction code, including domain bitness helpers and the
> p2m_set_allocation() prototype.
>
> Additionally define the guest magic memory region in the public
> RISC-V interface.
>
> As HAS_DOM0LESS is selected for RISC-V now it could be a compilation
> issue if CONFIG_STATIC_MEMORY=y as guest_physmap_add_pages() isn't
> yet provided.
>
> Signed-off-by: Oleksii Kurochko <oleksii.kurochko@xxxxxxxxx>
> ---
> Changes in v2:
> - Move declaration of p2m_set_allocation() to p2m-common.h.
> - Add __initdata for max_init_domid and drop initalizer for it.
> - Add CONFIG_STATIC_MEMORY=n to CI's randconfig to avoid
> compilation error because of guest_physmap_add_pages()
> isn't provided.
Yet another trap for people to fall into, and yet another item to clean
up before the port is really ready to use. Imo there want to be
HAS_STATIC_MEMORY, which RISC-V simply wouldn't select (for the time
being).
> --- a/xen/arch/riscv/dom0less-build.c
> +++ b/xen/arch/riscv/dom0less-build.c
> @@ -102,3 +102,9 @@ int __init arch_parse_dom0less_node(struct dt_device_node
> *node,
>
> return 0;
> }
> +
> +int __init arch_handle_passthrough_prop(struct kernel_info *kinfo,
> + struct dt_device_node *node)
> +{
> + return 0;
> +}
No FIXME comment or anything alike? That is, nothing is going to be needed
here even once pass-through is supported?
> --- a/xen/arch/riscv/domain-build.c
> +++ b/xen/arch/riscv/domain-build.c
> @@ -158,9 +158,22 @@ int __init make_cpus_node(const struct domain *d, struct
> kernel_info *kinfo)
> return fdt_end_node(fdt);
> }
>
> +int __init construct_hwdom(struct kernel_info *kinfo,
> + const struct dt_device_node *node)
> +{
> + return -EOPNOTSUPP;
> +}
> +
> int __init make_timer_node(const struct kernel_info *kinfo)
> {
> /* There is no need for timer node for RISC-V. */
>
> return 0;
> }
> +
> +int __init make_hypervisor_node(struct domain *d,
> + const struct kernel_info *kinfo,
> + int addrcells, int sizecells)
The last two parameters being of plain int type is, I suppose, dictated
by DT code?
> --- a/xen/arch/riscv/include/asm/guest-layout.h
> +++ b/xen/arch/riscv/include/asm/guest-layout.h
> @@ -24,4 +24,7 @@
> #define GUEST_RAM_BANK_BASES { GUEST_RAM0_BASE, GUEST_RAM1_BASE }
> #define GUEST_RAM_BANK_SIZES { GUEST_RAM0_SIZE, GUEST_RAM1_SIZE }
>
> +#define GUEST_MAGIC_BASE xen_mk_ullong(0x39000000)
> +#define GUEST_MAGIC_SIZE xen_mk_ullong(0x01000000)
Why xen_mk_ullong()? That's needed in the public headers only, iirc.
Also these are again two seemingly arbitrary numbers.
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |