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

Re: [PATCH for-4.22 v2 2/5] tools/macros: adjust ROUNDUP() interface to match hypervisor


  • To: Roger Pau Monne <roger.pau@xxxxxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxxx
  • From: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
  • Date: Fri, 5 Jun 2026 16:24:27 +0100
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
  • 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=na8l7212p//wRHMekjmsrpv0pViG9B6bmFyVzEzPd9c=; b=PCXL5NwPBnobwZc4e7YlI2/KAhZOrIyd/rhbwqYk3wx81lFz5VmYHGq60XoqWRsYQQAX45v29JDChad6IlHFFc1eA0NhYP+41kcuc0p/9sJvMZntV4YvV9mw8lXtbSbbk96KYivoxlrkTCR3n2uhv97cpbHnDCCQA+nM6XYMJtvp8ejRQG9xbmAJG8lzWkCroC51kbQV3nLa5zmT4zdGlitrMXHB6gCZpPePhNaNtLBE77QIc6CI8IsJ/YSqyrPGwRC86ncCp8DHFi2uJTgZJip77V+9SS0apwNSK3/3U/LAexojRdQpJZnFCV2YTwQJCMFktJioAOTtnddVGiKwQw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=bHuwD6/ISEaFaddhFz2iNmgBzfXlNtA+Y05ee4i3Q8725Xh648kqsvmoZjUXKnH5IRgbVgWDE6Uij72y41dsDYHaSSqEAVfXc00bUki8NLCFPG8FXPGVdV2YcgCZCR157gU3VYxBXzPc9s0gxY3a78bk2leiuf/N05dfemPsoShtcwcmf6uOas2sQ9enZRvuOKN9N0a4mwIqZTbRVE+aoQywTDwKx8Z9ijpzOUQrBJ7dhKs7aGN3FFiYQ8BVl5aH1cbSJaKyppAPzr6ol63lCfgWHbcZBuu/Q2WC659am9Rgbx8fZum4pCrs2wMMZyziSJCwOAc75+9dZyDqFp8aRw==
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck"
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com;
  • Autocrypt: addr=andrew.cooper3@xxxxxxxxxx; keydata= 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 6+ahAA==
  • Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Anthony PERARD <anthony.perard@xxxxxxxxxx>, Juergen Gross <jgross@xxxxxxxx>, Julien Grall <julien@xxxxxxx>
  • Delivery-date: Fri, 05 Jun 2026 15:24:38 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 03/06/2026 8:18 pm, Roger Pau Monne wrote:
> Adjust user-space callers to use the new interface.  No functional change
> intended.
>
> Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
> Reviewed-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>

Yeah, libxl's choice to use order was always bizarre...  I'm glad we're
getting rid of this.

> diff --git a/tools/libs/guest/xg_dom_x86.c b/tools/libs/guest/xg_dom_x86.c
> index 268936efe25b..9af83535944a 100644
> --- a/tools/libs/guest/xg_dom_x86.c
> +++ b/tools/libs/guest/xg_dom_x86.c
> @@ -678,7 +678,7 @@ static int alloc_magic_pages_hvm(struct xc_dom_image *dom)
>      {
>          if ( dom->cmdline )
>          {
> -            dom->cmdline_size = ROUNDUP(strlen(dom->cmdline) + 1, 3);
> +            dom->cmdline_size = ROUNDUP(strlen(dom->cmdline) + 1, 1U << 3);
>              start_info_size += dom->cmdline_size;
>          }
>      }

I think this would be better as a literal 8.

> diff --git a/tools/libs/guest/xg_sr_common.c b/tools/libs/guest/xg_sr_common.c
> index 7ccdc3b1f6aa..54dde924a7c0 100644
> --- a/tools/libs/guest/xg_sr_common.c
> +++ b/tools/libs/guest/xg_sr_common.c
> @@ -56,11 +56,11 @@ const char *rec_type_to_str(uint32_t type)
>  int write_split_record(struct xc_sr_context *ctx, struct xc_sr_record *rec,
>                         void *buf, size_t sz)
>  {
> -    static const char zeroes[(1u << REC_ALIGN_ORDER) - 1] = { 0 };
> +    static const char zeroes[REC_ALIGN - 1] = { 0 };

= {} as you're editing the line.

I have no idea why this is 7 in libxg, but 8 in libxl, but dropping the
-1 here is probably wise.

> diff --git a/tools/libs/guest/xg_sr_stream_format.h 
> b/tools/libs/guest/xg_sr_stream_format.h
> index 8a0da26f7543..4310f4311e65 100644
> --- a/tools/libs/guest/xg_sr_stream_format.h
> +++ b/tools/libs/guest/xg_sr_stream_format.h
> @@ -53,7 +53,7 @@ struct xc_sr_rhdr
>  };
>  
>  /* All records must be aligned up to an 8 octet boundary */
> -#define REC_ALIGN_ORDER               (3U)
> +#define REC_ALIGN                     (1U << 3)

This really does want to be 8 rather than a shift.

>  /* Somewhat arbitrary - 128MB */
>  #define REC_LENGTH_MAX                (128U << 20)
>  
> diff --git a/tools/libs/light/libxl_arm_acpi.c 
> b/tools/libs/light/libxl_arm_acpi.c
> index ba874c3d3224..ac8165de15b6 100644
> --- a/tools/libs/light/libxl_arm_acpi.c
> +++ b/tools/libs/light/libxl_arm_acpi.c
> @@ -107,12 +107,12 @@ int libxl__get_acpi_size(libxl__gc *gc,
>      if (rc < 0)
>          goto out;
>  
> -    *out = ROUNDUP(size, 3) +
> -           ROUNDUP(sizeof(struct acpi_table_rsdp), 3) +
> -           ROUNDUP(sizeof(struct acpi_table_xsdt), 3) +
> -           ROUNDUP(sizeof(struct acpi_table_gtdt), 3) +
> -           ROUNDUP(sizeof(struct acpi_table_fadt), 3) +
> -           ROUNDUP(sizeof(dsdt_anycpu_arm_len), 3);
> +    *out = ROUNDUP(size, 1U << 3) +
> +           ROUNDUP(sizeof(struct acpi_table_rsdp), 1U << 3) +
> +           ROUNDUP(sizeof(struct acpi_table_xsdt), 1U << 3) +
> +           ROUNDUP(sizeof(struct acpi_table_gtdt), 1U << 3) +
> +           ROUNDUP(sizeof(struct acpi_table_fadt), 1U << 3) +
> +           ROUNDUP(sizeof(dsdt_anycpu_arm_len), 1U << 3);
>  
>  out:
>      return rc;
> @@ -128,7 +128,7 @@ static int libxl__allocate_acpi_tables(libxl__gc *gc,
>  
>      acpitables[RSDP].addr = GUEST_ACPI_BASE;
>      acpitables[RSDP].size = sizeof(struct acpi_table_rsdp);
> -    dom->acpi_modules[0].length += ROUNDUP(acpitables[RSDP].size, 3);
> +    dom->acpi_modules[0].length += ROUNDUP(acpitables[RSDP].size, 1U << 3);
>  
>      acpitables[XSDT].addr = GUEST_ACPI_BASE + dom->acpi_modules[0].length;
>      /*
> @@ -137,11 +137,11 @@ static int libxl__allocate_acpi_tables(libxl__gc *gc,
>       */
>      acpitables[XSDT].size = sizeof(struct acpi_table_xsdt) +
>                              sizeof(uint64_t) * 2;
> -    dom->acpi_modules[0].length += ROUNDUP(acpitables[XSDT].size, 3);
> +    dom->acpi_modules[0].length += ROUNDUP(acpitables[XSDT].size, 1U << 3);
>  
>      acpitables[GTDT].addr = GUEST_ACPI_BASE + dom->acpi_modules[0].length;
>      acpitables[GTDT].size = sizeof(struct acpi_table_gtdt);
> -    dom->acpi_modules[0].length += ROUNDUP(acpitables[GTDT].size, 3);
> +    dom->acpi_modules[0].length += ROUNDUP(acpitables[GTDT].size, 1U << 3);
>  
>      acpitables[MADT].addr = GUEST_ACPI_BASE + dom->acpi_modules[0].length;
>  
> @@ -150,15 +150,15 @@ static int libxl__allocate_acpi_tables(libxl__gc *gc,
>          goto out;
>  
>      acpitables[MADT].size = size;
> -    dom->acpi_modules[0].length += ROUNDUP(acpitables[MADT].size, 3);
> +    dom->acpi_modules[0].length += ROUNDUP(acpitables[MADT].size, 1U << 3);
>  
>      acpitables[FADT].addr = GUEST_ACPI_BASE + dom->acpi_modules[0].length;
>      acpitables[FADT].size = sizeof(struct acpi_table_fadt);
> -    dom->acpi_modules[0].length += ROUNDUP(acpitables[FADT].size, 3);
> +    dom->acpi_modules[0].length += ROUNDUP(acpitables[FADT].size, 1U << 3);
>  
>      acpitables[DSDT].addr = GUEST_ACPI_BASE + dom->acpi_modules[0].length;
>      acpitables[DSDT].size = dsdt_anycpu_arm_len;
> -    dom->acpi_modules[0].length += ROUNDUP(acpitables[DSDT].size, 3);
> +    dom->acpi_modules[0].length += ROUNDUP(acpitables[DSDT].size, 1U << 3);

And all of these.

> diff --git a/tools/libs/light/libxl_sr_stream_format.h 
> b/tools/libs/light/libxl_sr_stream_format.h
> index f8f4723c2e91..b02c954a388e 100644
> --- a/tools/libs/light/libxl_sr_stream_format.h
> +++ b/tools/libs/light/libxl_sr_stream_format.h
> @@ -29,7 +29,7 @@ typedef struct libxl__sr_rec_hdr
>  } libxl__sr_rec_hdr;
>  
>  /* All records must be aligned up to an 8 octet boundary */
> -#define REC_ALIGN_ORDER              3U
> +#define REC_ALIGN                    (1U << 3)
>  
>  #define REC_TYPE_END                    0x00000000U
>  #define REC_TYPE_LIBXC_CONTEXT          0x00000001U
> diff --git a/tools/libs/light/libxl_stream_write.c 
> b/tools/libs/light/libxl_stream_write.c
> index 98d44597a732..9ea64369352f 100644
> --- a/tools/libs/light/libxl_stream_write.c
> +++ b/tools/libs/light/libxl_stream_write.c
> @@ -119,7 +119,7 @@ static void setup_generic_write(libxl__egc *egc,
>                                  void *body,
>                                  sws_record_done_cb cb)
>  {
> -    static const uint8_t zero_padding[1U << REC_ALIGN_ORDER] = { 0 };
> +    static const uint8_t zero_padding[REC_ALIGN] = { 0 };

These want the same adjustments as the libxg side.

> diff --git a/tools/xenstored/core.c b/tools/xenstored/core.c
> index d6d462b7bc82..86c86b3e9a77 100644
> --- a/tools/xenstored/core.c
> +++ b/tools/xenstored/core.c
> @@ -3067,7 +3067,7 @@ static int dump_state_node(const void *ctx, struct 
> connection *conn,
>       head.length += node->hdr.num_perms * sizeof(*sn.perms);
>       head.length += pathlen;
>       head.length += node->hdr.datalen;
> -     head.length = ROUNDUP(head.length, 3);
> +     head.length = ROUNDUP(head.length, 1U << 3);
>  
>       if (fwrite(&head, sizeof(head), 1, fp) != 1)
>               return dump_state_node_err(data, "Dump node head error");
> diff --git a/tools/xenstored/domain.c b/tools/xenstored/domain.c
> index 2db452144dd4..a880ff678ef9 100644
> --- a/tools/xenstored/domain.c
> +++ b/tools/xenstored/domain.c
> @@ -2159,7 +2159,7 @@ const char *dump_state_connections(FILE *fp)
>               if (ret)
>                       return ret;
>               head.length += sc.data_in_len + sc.data_out_len;
> -             head.length = ROUNDUP(head.length, 3);
> +             head.length = ROUNDUP(head.length, 1U << 3);
>               if (c->domain) {
>                       sc.fields |= XS_STATE_CONN_FIELDS_UNIQ_ID;
>                       head.length += sizeof(uint64_t);
> @@ -2232,7 +2232,8 @@ void read_state_connection(const void *ctx, const void 
> *state)
>               unsigned long off;
>  
>               off = sizeof(*sc) + sc->data_in_len + sc->data_out_len;
> -             domain->unique_id = *(uint64_t *)(state + ROUNDUP(off, 3));
> +             domain->unique_id =
> +                 *(uint64_t *)(state + ROUNDUP(off, 1U << 3));
>       }
>  }
>  
> @@ -2308,7 +2309,7 @@ static int dump_state_domain(const void *k, void *v, 
> void *arg)
>       n_quota = get_quota_size(domain->acc, &rec_len);
>       rec_len += n_quota * sizeof(sd->quota_val[0]);
>       rec_len += sizeof(*sd);
> -     rec_len = ROUNDUP(rec_len, 3);
> +     rec_len = ROUNDUP(rec_len, 1U << 3);
>  
>       record = talloc_size(NULL, rec_len + sizeof(*head));
>       if (!record)
> @@ -2372,7 +2373,7 @@ const char *dump_state_glb_quota(FILE *fp)
>       n_quota = get_quota_size(quotas, &rec_len);
>       rec_len += n_quota * sizeof(glb->quota_val[0]);
>       rec_len += sizeof(*glb);
> -     rec_len = ROUNDUP(rec_len, 3);
> +     rec_len = ROUNDUP(rec_len, 1U << 3);
>  
>       record = talloc_size(NULL, rec_len + sizeof(*head));
>       if (!record)
> diff --git a/tools/xenstored/watch.c b/tools/xenstored/watch.c
> index a9a06e9e4816..309c5bb66bef 100644
> --- a/tools/xenstored/watch.c
> +++ b/tools/xenstored/watch.c
> @@ -349,7 +349,7 @@ const char *dump_state_watches(FILE *fp, struct 
> connection *conn,
>               }
>  
>               head.length += path_len + token_len;
> -             head.length = ROUNDUP(head.length, 3);
> +             head.length = ROUNDUP(head.length, 1U << 3);
>               if (fwrite(&head, sizeof(head), 1, fp) != 1)
>                       return "Dump watch state error";
>  

And these want to be 8 as well I think.

Definitely with the migration formation adjustments, and preferably with
the others too, Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>

~Andrew




 


Rackspace

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