[PATCH 1/2] xen/mm: Alter get_outstanding_claims() to return information by value
Andrew Cooper <[email protected]> Mon, 3 Aug 2026 13:17:38 +0100
| Newsgroups | org.xenproject.lists.xen-devel |
|---|---|
| Message-ID | <[email protected]> |
A void function with two output parameters is a weird choice. Instead, return a two-element structure. No functional change. Signed-off-by: Andrew Cooper <[email protected]> --- CC: Anthony PERARD <[email protected]> CC: Michal Orzel <[email protected]> CC: Jan Beulich <[email protected]> CC: Julien Grall <[email protected]> CC: Roger Pau Monné <[email protected]> CC: Stefano Stabellini <[email protected]> CC: Bernhard Kaindl <[email protected]> Slightly RFC. claim_info_t name subject to improvement, but see next patch. This is to help unwedge the XenServer patchqueue following commit 44adbac3c7a6 ("xen/mm: Introduce per-node free page counter"). --- xen/common/page_alloc.c | 10 +++++++--- xen/common/sysctl.c | 8 ++++++-- xen/include/xen/mm.h | 6 +++++- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/xen/common/page_alloc.c b/xen/common/page_alloc.c index 598222e2c2e1..900fcf5755c1 100644 --- a/xen/common/page_alloc.c +++ b/xen/common/page_alloc.c @@ -582,12 +582,16 @@ int domain_set_outstanding_pages(struct domain *d, unsigned long pages) } #ifdef CONFIG_SYSCTL -void get_outstanding_claims(uint64_t *free_pages, uint64_t *outstanding_pages) +claim_info_t get_outstanding_claims(void) { + claim_info_t info; + spin_lock(&heap_lock); - *outstanding_pages = outstanding_claims; - *free_pages = avail_heap_pages(MEMZONE_XEN + 1, NR_ZONES - 1, -1); + info.avail = avail_heap_pages(MEMZONE_XEN + 1, NR_ZONES - 1, -1); + info.claimed = outstanding_claims; spin_unlock(&heap_lock); + + return info; } #endif /* CONFIG_SYSCTL */ diff --git a/xen/common/sysctl.c b/xen/common/sysctl.c index 8fb5ff0af317..35c132564ef1 100644 --- a/xen/common/sysctl.c +++ b/xen/common/sysctl.c @@ -248,6 +248,7 @@ long do_sysctl(XEN_GUEST_HANDLE_PARAM(xen_sysctl_t) u_sysctl) case XEN_SYSCTL_physinfo: { struct xen_sysctl_physinfo *pi = &op->u.physinfo; + claim_info_t claim_info; memset(pi, 0, sizeof(*pi)); pi->threads_per_core = @@ -259,8 +260,11 @@ long do_sysctl(XEN_GUEST_HANDLE_PARAM(xen_sysctl_t) u_sysctl) pi->max_node_id = MAX_NUMNODES-1; pi->max_cpu_id = nr_cpu_ids - 1; pi->total_pages = total_pages; - /* Protected by lock */ - get_outstanding_claims(&pi->free_pages, &pi->outstanding_pages); + + claim_info = get_outstanding_claims(); + pi->free_pages = claim_info.avail; + pi->outstanding_pages = claim_info.claimed; + pi->scrub_pages = 0; pi->cpu_khz = cpu_khz; pi->max_mfn = get_upper_mfn_bound(); diff --git a/xen/include/xen/mm.h b/xen/include/xen/mm.h index b80bec00c124..74d28d2a1b7a 100644 --- a/xen/include/xen/mm.h +++ b/xen/include/xen/mm.h @@ -132,7 +132,11 @@ int populate_pt_range(unsigned long virt, unsigned long nr_mfns); unsigned long __must_check domain_adjust_tot_pages(struct domain *d, long pages); int domain_set_outstanding_pages(struct domain *d, unsigned long pages); -void get_outstanding_claims(uint64_t *free_pages, uint64_t *outstanding_pages); + +typedef struct { + unsigned long avail, claimed; +} claim_info_t; +claim_info_t get_outstanding_claims(void); /* Domain suballocator. These functions are *not* interrupt-safe.*/ void init_domheap_pages(paddr_t ps, paddr_t pe); -- 2.39.5