|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3] xen/domain: introduce DOMID_ANY
On Tue, 23 Sep 2025, dmukhin@xxxxxxx wrote:
> From: Denis Mukhin <dmukhin@xxxxxxxx>
>
> Add a new symbol DOMID_ANY aliasing DOMID_INVALID to improve the readability
> of the code.
>
> Update all relevant domid_alloc() call sites.
>
> Amends: 2d5065060710 ("xen/domain: unify domain ID allocation")
> Signed-off-by: Denis Mukhin <dmukhin@xxxxxxxx>
Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
> ---
> Changes since v2:
> - move DOMID_ANY back to the public header; add proper guards
> - CI: https://gitlab.com/xen-project/people/dmukhin/xen/-/pipelines/2056319227
> - Link to v2:
> https://lore.kernel.org/xen-devel/20250920174732.1207847-2-dmukhin@xxxxxxxx/
> ---
> tools/tests/domid/harness.h | 1 +
> tools/tests/domid/test-domid.c | 12 ++++++------
> xen/common/device-tree/dom0less-build.c | 2 +-
> xen/common/domctl.c | 2 +-
> xen/common/domid.c | 2 +-
> xen/include/public/xen.h | 5 +++++
> 6 files changed, 15 insertions(+), 9 deletions(-)
>
> diff --git a/tools/tests/domid/harness.h b/tools/tests/domid/harness.h
> index 17eb22a9a854..610b564d4061 100644
> --- a/tools/tests/domid/harness.h
> +++ b/tools/tests/domid/harness.h
> @@ -41,6 +41,7 @@ extern unsigned long find_next_zero_bit(const unsigned long
> *addr,
>
> #define DOMID_FIRST_RESERVED (100)
> #define DOMID_INVALID (101)
> +#define DOMID_ANY DOMID_INVALID
>
> #endif /* _TEST_HARNESS_ */
>
> diff --git a/tools/tests/domid/test-domid.c b/tools/tests/domid/test-domid.c
> index 5915c4699a5c..71cc4e7fd86d 100644
> --- a/tools/tests/domid/test-domid.c
> +++ b/tools/tests/domid/test-domid.c
> @@ -41,20 +41,20 @@ int main(int argc, char **argv)
> domid_free(expected);
>
> /*
> - * Test that that two consecutive calls of domid_alloc(DOMID_INVALID)
> + * Test that that two consecutive calls of domid_alloc(DOMID_ANY)
> * will never return the same ID.
> * NB: ID#0 is reserved and shall not be allocated by
> - * domid_alloc(DOMID_INVALID).
> + * domid_alloc(DOMID_ANY).
> */
> for ( expected = 1; expected < DOMID_FIRST_RESERVED; expected++ )
> {
> - allocated = domid_alloc(DOMID_INVALID);
> + allocated = domid_alloc(DOMID_ANY);
> verify(allocated == expected,
> "TEST 3: expected %u allocated %u\n", expected, allocated);
> }
> for ( expected = 1; expected < DOMID_FIRST_RESERVED; expected++ )
> {
> - allocated = domid_alloc(DOMID_INVALID);
> + allocated = domid_alloc(DOMID_ANY);
> verify(allocated == DOMID_INVALID,
> "TEST 4: expected %u allocated %u\n", DOMID_INVALID,
> allocated);
> }
> @@ -64,7 +64,7 @@ int main(int argc, char **argv)
> domid_free(expected);
> for ( expected = 1; expected < DOMID_FIRST_RESERVED / 2; expected++ )
> {
> - allocated = domid_alloc(DOMID_INVALID);
> + allocated = domid_alloc(DOMID_ANY);
> verify(allocated == expected,
> "TEST 5: expected %u allocated %u\n", expected, allocated);
> }
> @@ -72,7 +72,7 @@ int main(int argc, char **argv)
> /* Re-allocate last ID from [1..DOMID_FIRST_RESERVED - 1]. */
> expected = DOMID_FIRST_RESERVED - 1;
> domid_free(DOMID_FIRST_RESERVED - 1);
> - allocated = domid_alloc(DOMID_INVALID);
> + allocated = domid_alloc(DOMID_ANY);
> verify(allocated == expected,
> "TEST 6: expected %u allocated %u\n", expected, allocated);
>
> diff --git a/xen/common/device-tree/dom0less-build.c
> b/xen/common/device-tree/dom0less-build.c
> index 9fd004c42af7..e2764768c983 100644
> --- a/xen/common/device-tree/dom0less-build.c
> +++ b/xen/common/device-tree/dom0less-build.c
> @@ -848,7 +848,7 @@ void __init create_domUs(void)
> if ( (max_init_domid + 1) >= DOMID_FIRST_RESERVED )
> panic("No more domain IDs available\n");
>
> - domid = domid_alloc(DOMID_INVALID);
> + domid = domid_alloc(DOMID_ANY);
> if ( domid == DOMID_INVALID )
> panic("Error allocating ID for domain %s\n", dt_node_name(node));
>
> diff --git a/xen/common/domctl.c b/xen/common/domctl.c
> index 954d79022645..ca91686a03d8 100644
> --- a/xen/common/domctl.c
> +++ b/xen/common/domctl.c
> @@ -410,7 +410,7 @@ long do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t)
> u_domctl)
> case XEN_DOMCTL_createdomain:
> {
> /* NB: ID#0 is reserved, find the first suitable ID instead. */
> - domid_t domid = domid_alloc(op->domain ?: DOMID_INVALID);
> + domid_t domid = domid_alloc(op->domain ?: DOMID_ANY);
>
> if ( domid == DOMID_INVALID )
> {
> diff --git a/xen/common/domid.c b/xen/common/domid.c
> index 2387ddb08300..76b7f3e7ae6e 100644
> --- a/xen/common/domid.c
> +++ b/xen/common/domid.c
> @@ -19,7 +19,7 @@ static DECLARE_BITMAP(domid_bitmap, DOMID_FIRST_RESERVED);
> * @param domid Domain ID hint:
> * - If an explicit domain ID is provided, verify its availability and use it
> * if ID is not used;
> - * - If DOMID_INVALID is provided, search [1..DOMID_FIRST_RESERVED-1] range,
> + * - If DOMID_ANY is provided, search [1..DOMID_FIRST_RESERVED-1] range,
> * starting from the last used ID. Implementation guarantees that two
> * consecutive calls will never return the same ID. ID#0 is reserved for
> * the first boot domain (currently, dom0) and excluded from the allocation
> diff --git a/xen/include/public/xen.h b/xen/include/public/xen.h
> index 82b9c05a76b7..29b7c81ba1bb 100644
> --- a/xen/include/public/xen.h
> +++ b/xen/include/public/xen.h
> @@ -608,6 +608,11 @@ DEFINE_XEN_GUEST_HANDLE(mmuext_op_t);
> /* DOMID_INVALID is used to identify pages with unknown owner. */
> #define DOMID_INVALID xen_mk_uint(0x7FF4)
>
> +#if defined(__XEN__) || defined(__XEN_TOOLS__)
> +/* Domain ID allocator: search [1..DOMID_FIRST_RESERVED-1] range. */
> +#define DOMID_ANY DOMID_INVALID
> +#endif
> +
> /* Idle domain. */
> #define DOMID_IDLE xen_mk_uint(0x7FFF)
>
> --
> 2.51.0
>
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |