[PATCH] Fix fallout from DOMID_ANY ABI breakage

Andrew Cooper posted 1 patch 2 days, 17 hours ago
Patches applied successfully (tree, apply log)
git fetch https://gitlab.com/xen-project/patchew/xen tags/patchew/20260527165758.2346373-1-andrew.cooper3@citrix.com
There is a newer version of this series
CHANGELOG.md                         | 4 ++++
tools/helpers/init-xenstore-domain.c | 2 +-
tools/python/xen/lowlevel/xc/xc.c    | 2 +-
3 files changed, 6 insertions(+), 2 deletions(-)
[PATCH] Fix fallout from DOMID_ANY ABI breakage
Posted by Andrew Cooper 2 days, 17 hours ago
Commit 23e2479ff9de ("xen/domain: introduce DOMID_ANY") broke at least:

 * xenstored domains
 * The Python bindings
 * The Ocaml bindings (i.e XAPI, and therefore XenServer/XCP-ng)

by causing Xen to reject 0 (the wildcard sentinel for decades) and
DOMID_INVALID (a recently introduced wildcard sentinel) without adjusting the
callers of xc_domain_create().

Under other circumstances I'd revert, but xenstored has gained a dependent use
of DOMID_ANY.

Fix up the remaining in-tree callers, which covers init-xenstore-domain and
the python bindings.  The Ocaml bindings, like libxc itself, expose this ABI
detail to their caller, so need fixing individually.

Leave a very clear message in CHANGELOG.md that all external callers need
altering.

Fixes: 23e2479ff9de ("xen/domain: introduce DOMID_ANY")
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
CC: Anthony PERARD <anthony.perard@vates.tech>
CC: Michal Orzel <michal.orzel@amd.com>
CC: Jan Beulich <jbeulich@suse.com>
CC: Julien Grall <julien@xen.org>
CC: Roger Pau Monné <roger.pau@citrix.com>
CC: Stefano Stabellini <sstabellini@kernel.org>
CC: Juergen Gross <jgross@suse.com>
CC: Denis Mukhin <dmukhin@ford.com>
CC: Oleksii Kurochko <oleksii.kurochko@gmail.com>

Both Roger and I said no to the DOMID_ANY change.  We both think that there is
still insufficient justification to be adding it as a new constant.  Next time
it's going to be a straight nack.
---
 CHANGELOG.md                         | 4 ++++
 tools/helpers/init-xenstore-domain.c | 2 +-
 tools/python/xen/lowlevel/xc/xc.c    | 2 +-
 3 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 25f5a192ed48..1b54acf912a5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
 ## [4.22.0 UNRELEASED](https://xenbits.xenproject.org/gitweb/?p=xen.git;a=shortlog;h=staging) - TBD
 
 ### Changed
+ - Users of xc_domain_create() must now pass DOMID_ANY to obtain an
+   automatically allocated domid.  The prior sentinel values (0 since the
+   birth of Xen, and DOMID_INVALID since Xen 4.21) now no longer represent a
+   wildcard input.
  - On x86:
    - Enable pf-fixup option by default for PVH dom0.
 
diff --git a/tools/helpers/init-xenstore-domain.c b/tools/helpers/init-xenstore-domain.c
index 01ca667d25d1..2be5831a578d 100644
--- a/tools/helpers/init-xenstore-domain.c
+++ b/tools/helpers/init-xenstore-domain.c
@@ -21,7 +21,7 @@
 
 #define LAPIC_BASE_ADDRESS  0xfee00000UL
 
-static uint32_t domid = ~0;
+static uint32_t domid = DOMID_ANY;
 static char *kernel;
 static char *ramdisk;
 static char *flask;
diff --git a/tools/python/xen/lowlevel/xc/xc.c b/tools/python/xen/lowlevel/xc/xc.c
index 9feb12ae2b16..a94f01d40b58 100644
--- a/tools/python/xen/lowlevel/xc/xc.c
+++ b/tools/python/xen/lowlevel/xc/xc.c
@@ -118,7 +118,7 @@ static PyObject *pyxc_domain_create(XcObject *self,
                                     PyObject *args,
                                     PyObject *kwds)
 {
-    uint32_t dom = 0, target = 0, max_grant_version = 2;
+    uint32_t dom = DOMID_ANY, target = 0, max_grant_version = 2;
     int      ret;
     size_t   i;
     PyObject *pyhandle = NULL;

base-commit: e63ba93511b33c0d3bb8cc5870f946f41e1d2655
-- 
2.39.5


Re: [PATCH] Fix fallout from DOMID_ANY ABI breakage
Posted by Roger Pau Monné 2 days, 17 hours ago
On Wed, May 27, 2026 at 05:57:58PM +0100, Andrew Cooper wrote:
> Commit 23e2479ff9de ("xen/domain: introduce DOMID_ANY") broke at least:
> 
>  * xenstored domains
>  * The Python bindings
>  * The Ocaml bindings (i.e XAPI, and therefore XenServer/XCP-ng)
> 
> by causing Xen to reject 0 (the wildcard sentinel for decades) and
> DOMID_INVALID (a recently introduced wildcard sentinel) without adjusting the
> callers of xc_domain_create().
> 
> Under other circumstances I'd revert, but xenstored has gained a dependent use
> of DOMID_ANY.
> 
> Fix up the remaining in-tree callers, which covers init-xenstore-domain and
> the python bindings.  The Ocaml bindings, like libxc itself, expose this ABI
> detail to their caller, so need fixing individually.

I think this will also affect the rust crate(s), even when those don't
use the libxc bindings.

> 
> Leave a very clear message in CHANGELOG.md that all external callers need
> altering.
> 
> Fixes: 23e2479ff9de ("xen/domain: introduce DOMID_ANY")
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>

Acked-by: Roger Pau Monné <roger.pau@citrix.com>

> ---
> CC: Anthony PERARD <anthony.perard@vates.tech>
> CC: Michal Orzel <michal.orzel@amd.com>
> CC: Jan Beulich <jbeulich@suse.com>
> CC: Julien Grall <julien@xen.org>
> CC: Roger Pau Monné <roger.pau@citrix.com>
> CC: Stefano Stabellini <sstabellini@kernel.org>
> CC: Juergen Gross <jgross@suse.com>
> CC: Denis Mukhin <dmukhin@ford.com>
> CC: Oleksii Kurochko <oleksii.kurochko@gmail.com>
> 
> Both Roger and I said no to the DOMID_ANY change.  We both think that there is
> still insufficient justification to be adding it as a new constant.  Next time
> it's going to be a straight nack.
> ---
>  CHANGELOG.md                         | 4 ++++
>  tools/helpers/init-xenstore-domain.c | 2 +-
>  tools/python/xen/lowlevel/xc/xc.c    | 2 +-
>  3 files changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/CHANGELOG.md b/CHANGELOG.md
> index 25f5a192ed48..1b54acf912a5 100644
> --- a/CHANGELOG.md
> +++ b/CHANGELOG.md
> @@ -7,6 +7,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
>  ## [4.22.0 UNRELEASED](https://xenbits.xenproject.org/gitweb/?p=xen.git;a=shortlog;h=staging) - TBD
>  
>  ### Changed
> + - Users of xc_domain_create() must now pass DOMID_ANY to obtain an
> +   automatically allocated domid.  The prior sentinel values (0 since the
> +   birth of Xen, and DOMID_INVALID since Xen 4.21) now no longer represent a
> +   wildcard input.

Maybe also mention XEN_DOMCTL_createdomain explicitly, to notice is
not only the callers of libxc that needs adjustment, but also users of
the hypercall itself not going through libxc.

Thanks, Roger.

Re: [PATCH] Fix fallout from DOMID_ANY ABI breakage
Posted by Andrew Cooper 2 days, 17 hours ago
On 27/05/2026 6:08 pm, Roger Pau Monné wrote:
> On Wed, May 27, 2026 at 05:57:58PM +0100, Andrew Cooper wrote:
>> Commit 23e2479ff9de ("xen/domain: introduce DOMID_ANY") broke at least:
>>
>>  * xenstored domains
>>  * The Python bindings
>>  * The Ocaml bindings (i.e XAPI, and therefore XenServer/XCP-ng)
>>
>> by causing Xen to reject 0 (the wildcard sentinel for decades) and
>> DOMID_INVALID (a recently introduced wildcard sentinel) without adjusting the
>> callers of xc_domain_create().
>>
>> Under other circumstances I'd revert, but xenstored has gained a dependent use
>> of DOMID_ANY.
>>
>> Fix up the remaining in-tree callers, which covers init-xenstore-domain and
>> the python bindings.  The Ocaml bindings, like libxc itself, expose this ABI
>> detail to their caller, so need fixing individually.
> I think this will also affect the rust crate(s), even when those don't
> use the libxc bindings.
>
>> Leave a very clear message in CHANGELOG.md that all external callers need
>> altering.
>>
>> Fixes: 23e2479ff9de ("xen/domain: introduce DOMID_ANY")
>> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
> Acked-by: Roger Pau Monné <roger.pau@citrix.com>

Thanks.

>
>> ---
>> CC: Anthony PERARD <anthony.perard@vates.tech>
>> CC: Michal Orzel <michal.orzel@amd.com>
>> CC: Jan Beulich <jbeulich@suse.com>
>> CC: Julien Grall <julien@xen.org>
>> CC: Roger Pau Monné <roger.pau@citrix.com>
>> CC: Stefano Stabellini <sstabellini@kernel.org>
>> CC: Juergen Gross <jgross@suse.com>
>> CC: Denis Mukhin <dmukhin@ford.com>
>> CC: Oleksii Kurochko <oleksii.kurochko@gmail.com>
>>
>> Both Roger and I said no to the DOMID_ANY change.  We both think that there is
>> still insufficient justification to be adding it as a new constant.  Next time
>> it's going to be a straight nack.
>> ---
>>  CHANGELOG.md                         | 4 ++++
>>  tools/helpers/init-xenstore-domain.c | 2 +-
>>  tools/python/xen/lowlevel/xc/xc.c    | 2 +-
>>  3 files changed, 6 insertions(+), 2 deletions(-)
>>
>> diff --git a/CHANGELOG.md b/CHANGELOG.md
>> index 25f5a192ed48..1b54acf912a5 100644
>> --- a/CHANGELOG.md
>> +++ b/CHANGELOG.md
>> @@ -7,6 +7,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
>>  ## [4.22.0 UNRELEASED](https://xenbits.xenproject.org/gitweb/?p=xen.git;a=shortlog;h=staging) - TBD
>>  
>>  ### Changed
>> + - Users of xc_domain_create() must now pass DOMID_ANY to obtain an
>> +   automatically allocated domid.  The prior sentinel values (0 since the
>> +   birth of Xen, and DOMID_INVALID since Xen 4.21) now no longer represent a
>> +   wildcard input.
> Maybe also mention XEN_DOMCTL_createdomain explicitly, to notice is
> not only the callers of libxc that needs adjustment, but also users of
> the hypercall itself not going through libxc.

Good point.  I'll adjust to XEN_DOMCTL_createdomain/xc_domain_create()
locally.

~Andrew