[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v4 09/13] x86/hyperlaunch: add domain id parsing to domain config
On Sat Apr 19, 2025 at 12:08 AM BST, dmkhn wrote: > On Thu, Apr 17, 2025 at 01:48:31PM +0100, Alejandro Vallejo wrote: >> From: "Daniel P. Smith" <dpsmith@xxxxxxxxxxxxxxxxxxxx> >> >> Introduce the ability to specify the desired domain id for the domain >> definition. The domain id will be populated in the domid property of the >> domain node in the device tree configuration. >> >> Signed-off-by: Daniel P. Smith <dpsmith@xxxxxxxxxxxxxxxxxxxx> >> Signed-off-by: Alejandro Vallejo <agarciav@xxxxxxx> >> --- >> v4: >> * Add missing newline >> * Adjusted printks >> * Checked domid node against list of outstanding domids. >> --- >> xen/arch/x86/setup.c | 5 ++-- >> xen/common/domain-builder/fdt.c | 51 ++++++++++++++++++++++++++++++++- >> 2 files changed, 53 insertions(+), 3 deletions(-) >> >> diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c >> index 76ceb5221f..04ad2d0937 100644 >> --- a/xen/arch/x86/setup.c >> +++ b/xen/arch/x86/setup.c >> @@ -1033,8 +1033,9 @@ static struct domain *__init create_dom0(struct >> boot_info *bi) >> if ( iommu_enabled ) >> dom0_cfg.flags |= XEN_DOMCTL_CDF_iommu; >> >> - /* Create initial domain. Not d0 for pvshim. */ >> - bd->domid = get_initial_domain_id(); >> + if ( bd->domid == DOMID_INVALID ) >> + /* Create initial domain. Not d0 for pvshim. */ >> + bd->domid = get_initial_domain_id(); >> d = domain_create(bd->domid, &dom0_cfg, pv_shim ? 0 : CDF_privileged); >> if ( IS_ERR(d) ) >> panic("Error creating d%u: %ld\n", bd->domid, PTR_ERR(d)); >> diff --git a/xen/common/domain-builder/fdt.c >> b/xen/common/domain-builder/fdt.c >> index c0f526a4ce..0d3c713041 100644 >> --- a/xen/common/domain-builder/fdt.c >> +++ b/xen/common/domain-builder/fdt.c >> @@ -2,6 +2,7 @@ >> /* >> * Copyright (C) 2024, Apertus Solutions, LLC >> */ >> +#include <xen/domain.h> >> #include <xen/err.h> >> #include <xen/init.h> >> #include <xen/lib.h> >> @@ -178,12 +179,54 @@ static int __init fdt_read_multiboot_module(const void >> *fdt, int node, >> static int __init process_domain_node( >> struct boot_info *bi, const void *fdt, int dom_node) >> { >> - int node; >> + int node, property; >> struct boot_domain *bd = &bi->domains[bi->nr_domains]; >> const char *name = fdt_get_name(fdt, dom_node, NULL) ?: "unknown"; >> int address_cells = fdt_address_cells(fdt, dom_node); >> int size_cells = fdt_size_cells(fdt, dom_node); >> >> + fdt_for_each_property_offset(property, fdt, dom_node) >> + { >> + const struct fdt_property *prop; >> + const char *prop_name; >> + int name_len, rc; >> + >> + prop = fdt_get_property_by_offset(fdt, property, NULL); >> + if ( !prop ) >> + continue; /* silently skip */ >> + >> + prop_name = fdt_get_string(fdt, fdt32_to_cpu(prop->nameoff), >> &name_len); >> + >> + if ( !strncmp(prop_name, "domid", name_len) ) >> + { >> + uint32_t val = DOMID_INVALID; >> + >> + if ( (rc = fdt_prop_as_u32(prop, &val)) ) >> + { >> + printk(XENLOG_ERR >> + " failed processing domain id for domain %s\n", >> name); >> + return rc; >> + } >> + if ( val >= DOMID_FIRST_RESERVED ) >> + { >> + printk(XENLOG_ERR " invalid domain id for domain %s\n", >> name); >> + return -EINVAL; >> + } >> + >> + for ( unsigned int i = 0; i < bi->nr_domains; i++ ) >> + { >> + if ( bi->domains[i].domid == val ) >> + { >> + printk(XENLOG_ERR " duplicate id for domain %s\n", >> name); >> + return -EINVAL; >> + } >> + } >> + >> + bd->domid = val; >> + printk(XENLOG_INFO " domid: %d\n", bd->domid); >> + } >> + } >> + >> fdt_for_each_subnode(node, fdt, dom_node) >> { >> if ( !fdt_node_check_compatible(fdt, node, "multiboot,kernel") ) >> @@ -249,6 +292,12 @@ static int __init process_domain_node( >> return -ENODATA; >> } >> >> + if ( bd->domid == DOMID_INVALID ) >> + bd->domid = get_initial_domain_id(); >> + else if ( bd->domid != get_initial_domain_id() ) >> + printk(XENLOG_WARNING >> + "Warning: Unsuported boot with missing initial domid\n"); > > s/Unsuported/Unsupported/ Ack > > Also, add bd->domid to the printout? Yes, I'll do a rundown of the error strings and ensure they have identifying tokens. Cheers, Alejandro
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |