From ce17dc6742507d5d78caea9f3cf089f5fdb92c5e Mon Sep 17 00:00:00 2001 From: Roger Pau Monne Date: Fri, 29 May 2026 13:23:50 +0200 Subject: [PATCH] tools/macros: adjust ROUNDUP() interface to match hypervisor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adjust user-space callers to use the new interface. No functional change intended. Signed-off-by: Roger Pau Monné Reviewed-by: Anthony PERARD Reviewed-by: Andrew Cooper Release-Acked-by: Oleksii Kurochko --- tools/console/daemon/io.c | 2 +- tools/include/xen-tools/common-macros.h | 4 +--- tools/libs/call/buffer.c | 3 ++- tools/libs/foreignmemory/linux.c | 2 +- tools/libs/gnttab/freebsd.c | 2 +- tools/libs/gnttab/linux.c | 2 +- tools/libs/guest/xg_core.c | 2 +- tools/libs/guest/xg_dom_arm.c | 6 +++--- tools/libs/guest/xg_dom_x86.c | 2 +- tools/libs/guest/xg_private.h | 4 ++-- tools/libs/guest/xg_sr_common.c | 6 +++--- tools/libs/guest/xg_sr_stream_format.h | 2 +- tools/libs/light/libxl_arm_acpi.c | 24 +++++++++++------------ tools/libs/light/libxl_create.c | 2 +- tools/libs/light/libxl_sr_stream_format.h | 2 +- tools/libs/light/libxl_stream_read.c | 2 +- tools/libs/light/libxl_stream_write.c | 4 ++-- tools/misc/xen-mfndump.c | 2 +- tools/ocaml/libs/xc/xenctrl_stubs.c | 2 +- tools/xenstored/core.c | 4 ++-- tools/xenstored/domain.c | 9 +++++---- tools/xenstored/watch.c | 2 +- 22 files changed, 45 insertions(+), 45 deletions(-) diff --git a/tools/console/daemon/io.c b/tools/console/daemon/io.c index 43d4973c24..b6c46d11de 100644 --- a/tools/console/daemon/io.c +++ b/tools/console/daemon/io.c @@ -1233,7 +1233,7 @@ static int set_fds(int fd, short events) /* Round up to 2^8 boundary, in practice this just * make newsize larger than current_array_size. */ - newsize = ROUNDUP(nr_fds + 1, 8); + newsize = ROUNDUP(nr_fds + 1, 1U << 8); new_fds = realloc(fds, sizeof(struct pollfd)*newsize); if (!new_fds) diff --git a/tools/include/xen-tools/common-macros.h b/tools/include/xen-tools/common-macros.h index 9838a108aa..9e27991782 100644 --- a/tools/include/xen-tools/common-macros.h +++ b/tools/include/xen-tools/common-macros.h @@ -68,9 +68,7 @@ }) #endif -#ifndef ROUNDUP -#define ROUNDUP(_x,_w) (((unsigned long)(_x)+(1UL<<(_w))-1) & ~((1UL<<(_w))-1)) -#endif +#define ROUNDUP(x, a) (((x) + (a) - 1) & ~((a) - 1)) #define MASK_EXTR(v, m) (((v) & (m)) / ((m) & -(m))) #define MASK_INSR(v, m) (((v) * ((m) & -(m))) & (m)) diff --git a/tools/libs/call/buffer.c b/tools/libs/call/buffer.c index 2579b8c719..155e4f9d43 100644 --- a/tools/libs/call/buffer.c +++ b/tools/libs/call/buffer.c @@ -155,7 +155,8 @@ struct allocation_header { void *xencall_alloc_buffer(xencall_handle *xcall, size_t size) { - size_t actual_size = ROUNDUP(size + sizeof(struct allocation_header), PAGE_SHIFT); + size_t actual_size = ROUNDUP(size + sizeof(struct allocation_header), + PAGE_SIZE); int nr_pages = actual_size >> PAGE_SHIFT; struct allocation_header *hdr; diff --git a/tools/libs/foreignmemory/linux.c b/tools/libs/foreignmemory/linux.c index 12f959765a..6d2f30cdf1 100644 --- a/tools/libs/foreignmemory/linux.c +++ b/tools/libs/foreignmemory/linux.c @@ -198,7 +198,7 @@ void *osdep_xenforeignmemory_map(xenforeignmemory_handle *fmem, */ privcmd_mmapbatch_t ioctlx; xen_pfn_t *pfn; - unsigned int pfn_arr_size = ROUNDUP((num * sizeof(*pfn)), XC_PAGE_SHIFT); + unsigned int pfn_arr_size = ROUNDUP(num * sizeof(*pfn), XC_PAGE_SIZE); int os_page_size = sysconf(_SC_PAGESIZE); if ( pfn_arr_size <= os_page_size ) diff --git a/tools/libs/gnttab/freebsd.c b/tools/libs/gnttab/freebsd.c index d69d928a16..8012744782 100644 --- a/tools/libs/gnttab/freebsd.c +++ b/tools/libs/gnttab/freebsd.c @@ -74,7 +74,7 @@ void *osdep_gnttab_grant_map(xengnttab_handle *xgt, int domids_stride; unsigned int refs_size = ROUNDUP(count * sizeof(struct ioctl_gntdev_grant_ref), - XC_PAGE_SHIFT); + XC_PAGE_SIZE); int os_page_size = getpagesize(); domids_stride = (flags & XENGNTTAB_GRANT_MAP_SINGLE_DOMAIN) ? 0 : 1; diff --git a/tools/libs/gnttab/linux.c b/tools/libs/gnttab/linux.c index 7286c1d4fe..829877e64b 100644 --- a/tools/libs/gnttab/linux.c +++ b/tools/libs/gnttab/linux.c @@ -101,7 +101,7 @@ void *osdep_gnttab_grant_map(xengnttab_handle *xgt, map = alloca(map_size); else { - map_size = ROUNDUP(map_size, XC_PAGE_SHIFT); + map_size = ROUNDUP(map_size, XC_PAGE_SIZE); map = mmap(NULL, map_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON | MAP_POPULATE, -1, 0); if ( map == MAP_FAILED ) diff --git a/tools/libs/guest/xg_core.c b/tools/libs/guest/xg_core.c index f83436d6cb..d3640f0ef8 100644 --- a/tools/libs/guest/xg_core.c +++ b/tools/libs/guest/xg_core.c @@ -696,7 +696,7 @@ xc_domain_dumpcore_via_callback(xc_interface *xch, for ( i = 1; i < sheaders->num; i++ ) sheaders->shdrs[i].sh_offset += fixup; offset += fixup; - dummy_len = ROUNDUP(offset, PAGE_SHIFT) - offset; /* padding length */ + dummy_len = ROUNDUP(offset, PAGE_SIZE) - offset; /* padding length */ offset += dummy_len; /* pages */ diff --git a/tools/libs/guest/xg_dom_arm.c b/tools/libs/guest/xg_dom_arm.c index c8d0918506..739ec1c338 100644 --- a/tools/libs/guest/xg_dom_arm.c +++ b/tools/libs/guest/xg_dom_arm.c @@ -364,12 +364,12 @@ static int meminit(struct xc_dom_image *dom) /* Convenient */ const uint64_t kernbase = dom->kernel_seg.vstart; - const uint64_t kernend = ROUNDUP(dom->kernel_seg.vend, 21/*2MB*/); + const uint64_t kernend = ROUNDUP(dom->kernel_seg.vend, MB(2)); const uint64_t kernsize = kernend - kernbase; const uint64_t dtb_size = dom->devicetree_blob ? - ROUNDUP(dom->devicetree_size, XC_PAGE_SHIFT) : 0; + ROUNDUP(dom->devicetree_size, XC_PAGE_SIZE) : 0; const uint64_t ramdisk_size = dom->modules[0].blob ? - ROUNDUP(dom->modules[0].size, XC_PAGE_SHIFT) : 0; + ROUNDUP(dom->modules[0].size, XC_PAGE_SIZE) : 0; const uint64_t modsize = dtb_size + ramdisk_size; const uint64_t ram128mb = bankbase[0] + (128<<20); diff --git a/tools/libs/guest/xg_dom_x86.c b/tools/libs/guest/xg_dom_x86.c index 268936efe2..1dc19529f5 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, 8); start_info_size += dom->cmdline_size; } } diff --git a/tools/libs/guest/xg_private.h b/tools/libs/guest/xg_private.h index 285229cf82..31a79bccf7 100644 --- a/tools/libs/guest/xg_private.h +++ b/tools/libs/guest/xg_private.h @@ -135,7 +135,7 @@ typedef uint64_t x86_pgentry_t; #define PAGE_SIZE_X86 (1UL << PAGE_SHIFT_X86) #define PAGE_MASK_X86 (~(PAGE_SIZE_X86-1)) -#define NRPAGES(x) (ROUNDUP(x, PAGE_SHIFT) >> PAGE_SHIFT) +#define NRPAGES(x) (ROUNDUP(x, PAGE_SIZE) >> PAGE_SHIFT) static inline xen_pfn_t xc_pfn_to_mfn(xen_pfn_t pfn, xen_pfn_t *p2m, unsigned gwidth) @@ -167,7 +167,7 @@ int pin_table(xc_interface *xch, unsigned int type, unsigned long mfn, */ #define M2P_SHIFT L2_PAGETABLE_SHIFT_PAE #define M2P_CHUNK_SIZE (1 << M2P_SHIFT) -#define M2P_SIZE(_m) ROUNDUP(((_m) * sizeof(xen_pfn_t)), M2P_SHIFT) +#define M2P_SIZE(_m) ROUNDUP(((_m) * sizeof(xen_pfn_t)), M2P_CHUNK_SIZE) #define M2P_CHUNKS(_m) (M2P_SIZE((_m)) >> M2P_SHIFT) #if defined(__x86_64__) || defined(__i386__) diff --git a/tools/libs/guest/xg_sr_common.c b/tools/libs/guest/xg_sr_common.c index 7ccdc3b1f6..c7b3c6f3bc 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] = {}; xc_interface *xch = ctx->xch; typeof(rec->length) combined_length = rec->length + sz; - size_t record_length = ROUNDUP(combined_length, REC_ALIGN_ORDER); + size_t record_length = ROUNDUP(combined_length, REC_ALIGN); struct iovec parts[] = { { &rec->type, sizeof(rec->type) }, { &combined_length, sizeof(combined_length) }, @@ -110,7 +110,7 @@ int read_record(struct xc_sr_context *ctx, int fd, struct xc_sr_record *rec) return -1; } - datasz = ROUNDUP(rhdr.length, REC_ALIGN_ORDER); + datasz = ROUNDUP(rhdr.length, REC_ALIGN); if ( datasz ) { diff --git a/tools/libs/guest/xg_sr_stream_format.h b/tools/libs/guest/xg_sr_stream_format.h index 8a0da26f75..99dca5d490 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 8 /* 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 ba874c3d32..690fa227a5 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, 8) + + ROUNDUP(sizeof(struct acpi_table_rsdp), 8) + + ROUNDUP(sizeof(struct acpi_table_xsdt), 8) + + ROUNDUP(sizeof(struct acpi_table_gtdt), 8) + + ROUNDUP(sizeof(struct acpi_table_fadt), 8) + + ROUNDUP(sizeof(dsdt_anycpu_arm_len), 8); 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, 8); 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, 8); 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, 8); 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, 8); 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, 8); 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, 8); assert(dom->acpi_modules[0].length <= GUEST_ACPI_SIZE); dom->acpi_modules[0].data = libxl__zalloc(gc, dom->acpi_modules[0].length); diff --git a/tools/libs/light/libxl_create.c b/tools/libs/light/libxl_create.c index 6fd62d1403..a8b0c8c500 100644 --- a/tools/libs/light/libxl_create.c +++ b/tools/libs/light/libxl_create.c @@ -600,7 +600,7 @@ int libxl__domain_make(libxl__gc *gc, libxl_domain_config *d_config, .opts = 0, /* .opts will be set below */ .nr = b_info->altp2m_count, }, - .vmtrace_size = ROUNDUP(b_info->vmtrace_buf_kb << 10, XC_PAGE_SHIFT), + .vmtrace_size = ROUNDUP(b_info->vmtrace_buf_kb << 10, XC_PAGE_SIZE), .cpupool_id = info->poolid, }; diff --git a/tools/libs/light/libxl_sr_stream_format.h b/tools/libs/light/libxl_sr_stream_format.h index f8f4723c2e..118428e989 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 8 #define REC_TYPE_END 0x00000000U #define REC_TYPE_LIBXC_CONTEXT 0x00000001U diff --git a/tools/libs/light/libxl_stream_read.c b/tools/libs/light/libxl_stream_read.c index e64e8f0ead..99c7607b6c 100644 --- a/tools/libs/light/libxl_stream_read.c +++ b/tools/libs/light/libxl_stream_read.c @@ -511,7 +511,7 @@ static void record_header_done(libxl__egc *egc, return; } - size_t bytes_to_read = ROUNDUP(rec->hdr.length, REC_ALIGN_ORDER); + size_t bytes_to_read = ROUNDUP(rec->hdr.length, REC_ALIGN); rec->body = libxl__malloc(NOGC, bytes_to_read); rc = setup_read(stream, "record body", diff --git a/tools/libs/light/libxl_stream_write.c b/tools/libs/light/libxl_stream_write.c index 98d44597a7..d26f281faa 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] = {}; libxl__datacopier_state *dc = &stream->dc; int rc; @@ -136,7 +136,7 @@ static void setup_generic_write(libxl__egc *egc, return; } - size_t padsz = ROUNDUP(hdr->length, REC_ALIGN_ORDER) - hdr->length; + size_t padsz = ROUNDUP(hdr->length, REC_ALIGN) - hdr->length; uint32_t length = hdr->length; /* Insert header */ diff --git a/tools/misc/xen-mfndump.c b/tools/misc/xen-mfndump.c index 28687afbf0..99a0b1d3b5 100644 --- a/tools/misc/xen-mfndump.c +++ b/tools/misc/xen-mfndump.c @@ -10,7 +10,7 @@ #include -#define M2P_SIZE(_m) ROUNDUP(((_m) * sizeof(xen_pfn_t)), 21) +#define M2P_SIZE(_m) ROUNDUP(((_m) * sizeof(xen_pfn_t)), MB(2)) #define is_mapped(pfn_type) (!((pfn_type) & 0x80000000UL)) #define ERROR(msg, args...) fprintf(stderr, msg, ## args) diff --git a/tools/ocaml/libs/xc/xenctrl_stubs.c b/tools/ocaml/libs/xc/xenctrl_stubs.c index c55f73b265..7f6381cdd2 100644 --- a/tools/ocaml/libs/xc/xenctrl_stubs.c +++ b/tools/ocaml/libs/xc/xenctrl_stubs.c @@ -221,7 +221,7 @@ CAMLprim value stub_xc_domain_create(value xch_val, value wanted_domid, value co if ( altp2m_nr != (uint16_t)altp2m_nr ) caml_invalid_argument("altp2m_count"); - vmtrace_size = ROUNDUP(vmtrace_size << 10, XC_PAGE_SHIFT); + vmtrace_size = ROUNDUP(vmtrace_size << 10, XC_PAGE_SIZE); if ( vmtrace_size != (uint32_t)vmtrace_size ) caml_invalid_argument("vmtrace_buf_kb"); diff --git a/tools/xenstored/core.c b/tools/xenstored/core.c index d6d462b7bc..769e2c19cc 100644 --- a/tools/xenstored/core.c +++ b/tools/xenstored/core.c @@ -466,7 +466,7 @@ int set_fd(int fd, short events) /* Round up to 2^8 boundary, in practice this just * make newsize larger than current_array_size. */ - newsize = ROUNDUP(nr_fds + 1, 8); + newsize = ROUNDUP(nr_fds + 1, 1U << 8); new_fds = realloc(poll_fds, sizeof(struct pollfd)*newsize); if (!new_fds) @@ -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, 8); 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 2db452144d..429868928e 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, 8); 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, 8)); } } @@ -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, 8); 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, 8); record = talloc_size(NULL, rec_len + sizeof(*head)); if (!record) diff --git a/tools/xenstored/watch.c b/tools/xenstored/watch.c index a9a06e9e48..c143e6fbcf 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, 8); if (fwrite(&head, sizeof(head), 1, fp) != 1) return "Dump watch state error";