[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v3 12/16] x86/hyperlaunch: add domain id parsing to domain config


  • To: Jan Beulich <jbeulich@xxxxxxxx>
  • From: Alejandro Vallejo <agarciav@xxxxxxx>
  • Date: Tue, 15 Apr 2025 13:05:00 +0100
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=suse.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0)
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=pt8cr6tCOMgT0yokO7uoWMtfj1MPWDXknFgNHtF+tmU=; b=trrPXZiYOi9xIHctVjKdXhwDSngJmAh3OrBBGw2hyvfIFGgHplxK8DH8zYjlfzHU31A9CjG7pkySuoI4Z4ULFUzyaeF41aOBvC8gMrOCAChYAYQVmfQizFtf0vOUa0nffFIscjIhmoDN8LIbDfpDY/9Nyh1xyRKmdDS2XmWVDGc96orZyPBgpKUNN3qFqLMDg5ra3kagjDdvareDQarfCkk6Ufn4HEncXG763uIu4ELptdl47DTtIx735IdD0D0sJeaSZkUPknEO7XDvcIOf15SqcpyvM9LneiOofSUU6Zu4g1KG189JacIlcQKS1wzzTlg1f66dFUCHRMDN9x7+sA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=lUZlHaxhLu6CgDVi7nBluj9xr6WlvE/HjjM1hUd6GuTWp8HmZOHh4sZOvi6IkPIdgVKP/u8OLQ4MMGQhmpePbCQcTlPmp/wqzixIbGNJW/5LFGj8h8ZUy5ACgI4IcmiR+heaJLURHr+zPkhzFWg5C/12UNc5FTA0WEq1btJRlXwujnvQ4oTPHWRbn41DUcziKbBGEYL52Fc8zjIPbyrFViD0MelwZ1lr9O86ewq5TQSRh4dubjy4PO1fGkyHgHXfcK8X1xgE7VOM9Pcn6V4FyUYOvbGMwh+SGRuZME1i2znmx5zUz9jUtAJfLRvrL8HI0G+WcyDJPqbQPQbWqwnulQ==
  • Cc: "Daniel P. Smith" <dpsmith@xxxxxxxxxxxxxxxxxxxx>, Jason Andryuk <jason.andryuk@xxxxxxx>, Xenia Ragiadakou <xenia.ragiadakou@xxxxxxx>, "Stefano Stabellini" <sstabellini@xxxxxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>, <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • Delivery-date: Tue, 15 Apr 2025 12:05:16 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On Tue Apr 15, 2025 at 7:27 AM BST, Jan Beulich wrote:
> On 14.04.2025 20:35, Alejandro Vallejo wrote:
>> On Thu Apr 10, 2025 at 12:49 PM BST, Jan Beulich wrote:
>>> On 08.04.2025 18:07, Alejandro Vallejo wrote:
>>>> From: "Daniel P. Smith" <dpsmith@xxxxxxxxxxxxxxxxxxxx>
>>>> @@ -158,12 +159,42 @@ 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;
>>>> +
>>>> +        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) == 0 )
>>>> +        {
>>>> +            uint32_t val = DOMID_INVALID;
>>>> +            if ( fdt_prop_as_u32(prop, &val) != 0 )
>>>> +            {
>>>> +                printk("  failed processing domain id for domain %s\n", 
>>>> name);
>>>> +                return -EINVAL;
>>>> +            }
>>>> +            if ( val >= DOMID_FIRST_RESERVED )
>>>> +            {
>>>> +                printk("  invalid domain id for domain %s\n", name);
>>>> +                return -EINVAL;
>>>> +            }
>>>> +            bd->domid = (domid_t)val;
>>>
>>> And a conflict with other domains' IDs will not be complained about?
>> 
>> Hmmm... sure, I can iterate the domlist and check.
>
> Well, just to clarify: The checking doesn't necessarily need to happen here
> and now. It may also happen as domains are actually created. Yet then I
> think a pointer there (in a code comment) would be helpful here.

That'd be fairly unsafe. In the case of parallel boot it'd be
indeterminate which VMs end up running if they happen to have a domid
clash. It's better to detect the error earlier and crash before any get
to start up.

>
>>>> @@ -233,6 +264,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
>>>> +               "WARN: Booting without initial domid not supported.\n");
>>>
>>> I'm not a native speaker, but (or perhaps because of that) "without" feels
>>> wrong here.
>> 
>> It's probably the compound effect of without and "not supported". The
>> statement is correct, but it's arguably a bit obtuse.
>> 
>> I'll replace it with "WARN: Unsupported boot with missing initial domid.".
>
> But that still doesn't fit the check, which compares the given ID (i.e.
> there's nothing "missing" here) with the expected one. The "no ID given"
> is handled by the plain if() that's first.

It's not that the domid is missing from the node, but that the domid in
the node doesn't match the initial domid. Maybe s/domid/domain, then?

  "Warning: Unsupported boot with missing initial domain"

Cheers,
Alejandro



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.