The current implementation of make_chosen_node() does not contain any
architecture-specific logic. Therefore, move it from arch-specific
files to common code.
At this stage, there is no need to introduce an arch_make_chosen_node(),
as no architecture-specific customization is required.
This change avoids duplication and simplifies future maintenance for
architectures like RISC-V and ARM.
Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
---
xen/arch/arm/domain_build.c | 46 -------------------------
xen/common/device-tree/dom0less-build.c | 46 +++++++++++++++++++++++++
2 files changed, 46 insertions(+), 46 deletions(-)
diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
index b189a7cfae..9e71cc8cef 100644
--- a/xen/arch/arm/domain_build.c
+++ b/xen/arch/arm/domain_build.c
@@ -1470,52 +1470,6 @@ int __init make_timer_node(const struct kernel_info *kinfo)
return res;
}
-/*
- * This function is used as part of the device tree generation for Dom0
- * on ACPI systems, and DomUs started directly from Xen based on device
- * tree information.
- */
-int __init make_chosen_node(const struct kernel_info *kinfo)
-{
- int res;
- const char *bootargs = NULL;
- const struct bootmodule *initrd = kinfo->initrd_bootmodule;
- void *fdt = kinfo->fdt;
-
- dt_dprintk("Create chosen node\n");
- res = fdt_begin_node(fdt, "chosen");
- if ( res )
- return res;
-
- if ( kinfo->cmdline && kinfo->cmdline[0] )
- {
- bootargs = &kinfo->cmdline[0];
- res = fdt_property(fdt, "bootargs", bootargs, strlen(bootargs) + 1);
- if ( res )
- return res;
- }
-
- /*
- * If the bootloader provides an initrd, we must create a placeholder
- * for the initrd properties. The values will be replaced later.
- */
- if ( initrd && initrd->size )
- {
- u64 a = 0;
- res = fdt_property(kinfo->fdt, "linux,initrd-start", &a, sizeof(a));
- if ( res )
- return res;
-
- res = fdt_property(kinfo->fdt, "linux,initrd-end", &a, sizeof(a));
- if ( res )
- return res;
- }
-
- res = fdt_end_node(fdt);
-
- return res;
-}
-
static int __init handle_node(struct domain *d, struct kernel_info *kinfo,
struct dt_device_node *node,
p2m_type_t p2mt)
diff --git a/xen/common/device-tree/dom0less-build.c b/xen/common/device-tree/dom0less-build.c
index f6aabc2093..1265cadf94 100644
--- a/xen/common/device-tree/dom0less-build.c
+++ b/xen/common/device-tree/dom0less-build.c
@@ -434,6 +434,52 @@ static int __init domain_handle_dtb_bootmodule(struct domain *d,
return res;
}
+/*
+ * This function is used as part of the device tree generation for Dom0
+ * on ACPI systems, and DomUs started directly from Xen based on device
+ * tree information.
+ */
+int __init make_chosen_node(const struct kernel_info *kinfo)
+{
+ int res;
+ const char *bootargs = NULL;
+ const struct bootmodule *initrd = kinfo->initrd_bootmodule;
+ void *fdt = kinfo->fdt;
+
+ dt_dprintk("Create chosen node\n");
+ res = fdt_begin_node(fdt, "chosen");
+ if ( res )
+ return res;
+
+ if ( kinfo->cmdline && kinfo->cmdline[0] )
+ {
+ bootargs = &kinfo->cmdline[0];
+ res = fdt_property(fdt, "bootargs", bootargs, strlen(bootargs) + 1);
+ if ( res )
+ return res;
+ }
+
+ /*
+ * If the bootloader provides an initrd, we must create a placeholder
+ * for the initrd properties. The values will be replaced later.
+ */
+ if ( initrd && initrd->size )
+ {
+ u64 a = 0;
+ res = fdt_property(kinfo->fdt, "linux,initrd-start", &a, sizeof(a));
+ if ( res )
+ return res;
+
+ res = fdt_property(kinfo->fdt, "linux,initrd-end", &a, sizeof(a));
+ if ( res )
+ return res;
+ }
+
+ res = fdt_end_node(fdt);
+
+ return res;
+}
+
/*
* The max size for DT is 2MB. However, the generated DT is small (not including
* domU passthrough DT nodes whose size we account separately), 4KB are enough
--
2.49.0
On 13/05/2025 16:29, Oleksii Kurochko wrote: > The current implementation of make_chosen_node() does not contain any > architecture-specific logic. Therefore, move it from arch-specific > files to common code. > > At this stage, there is no need to introduce an arch_make_chosen_node(), > as no architecture-specific customization is required. > > This change avoids duplication and simplifies future maintenance for > architectures like RISC-V and ARM. > > Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com> Reviewed-by: Michal Orzel <michal.orzel@amd.com> [snip] > +/* > + * This function is used as part of the device tree generation for Dom0 > + * on ACPI systems, and DomUs started directly from Xen based on device Might be worth adding (on Arm) after 'ACPI systems'. Could be done on commit. ~Michal
Hi Michal, On 13/05/2025 15:45, Orzel, Michal wrote: > > > On 13/05/2025 16:29, Oleksii Kurochko wrote: >> The current implementation of make_chosen_node() does not contain any >> architecture-specific logic. Therefore, move it from arch-specific >> files to common code. >> >> At this stage, there is no need to introduce an arch_make_chosen_node(), >> as no architecture-specific customization is required. >> >> This change avoids duplication and simplifies future maintenance for >> architectures like RISC-V and ARM. >> >> Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com> > Reviewed-by: Michal Orzel <michal.orzel@amd.com> > > [snip] > >> +/* >> + * This function is used as part of the device tree generation for Dom0 >> + * on ACPI systems, and DomUs started directly from Xen based on device > Might be worth adding (on Arm) after 'ACPI systems'. Could be done on commit. Please don't. This will become stale otherwise as soon as RISC-V is started to use it. Instead, we should say (on platform where CONFIG_ACPI=y). Cheers, -- Julien Grall
© 2016 - 2025 Red Hat, Inc.