linux/drivers/xen
Roger Pau Monne 87af633689 x86/xen: fix balloon target initialization for PVH dom0
PVH dom0 re-uses logic from PV dom0, in which RAM ranges not assigned to
dom0 are re-used as scratch memory to map foreign and grant pages.  Such
logic relies on reporting those unpopulated ranges as RAM to Linux, and
mark them as reserved.  This way Linux creates the underlying page
structures required for metadata management.

Such approach works fine on PV because the initial balloon target is
calculated using specific Xen data, that doesn't take into account the
memory type changes described above.  However on HVM and PVH the initial
balloon target is calculated using get_num_physpages(), and that function
does take into account the unpopulated RAM regions used as scratch space
for remote domain mappings.

This leads to PVH dom0 having an incorrect initial balloon target, which
causes malfunction (excessive memory freeing) of the balloon driver if the
dom0 memory target is later adjusted from the toolstack.

Fix this by using xen_released_pages to account for any pages that are part
of the memory map, but are already unpopulated when the balloon driver is
initialized.  This accounts for any regions used for scratch remote
mappings.  Note on x86 xen_released_pages definition is moved to
enlighten.c so it's uniformly available for all Xen-enabled builds.

Take the opportunity to unify PV with PVH/HVM guests regarding the usage of
get_num_physpages(), as that avoids having to add different logic for PV vs
PVH in both balloon_add_regions() and arch_xen_unpopulated_init().

Much like a6aa4eb994, the code in this changeset should have been part of
38620fc4e8.

Fixes: a6aa4eb994 ('xen/x86: add extra pages to unpopulated-alloc if available')
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Reviewed-by: Juergen Gross <jgross@suse.com>
Cc: stable@vger.kernel.org
Signed-off-by: Juergen Gross <jgross@suse.com>
Message-ID: <20250407082838.65495-1-roger.pau@citrix.com>
2025-04-07 11:24:12 +02:00
..
events x86/apic: Convert to IRQCHIP_MOVE_DEFERRED 2025-01-15 21:38:53 +01:00
xen-pciback xen/pciback: Remove unused pcistub_get_pci_dev 2025-03-14 11:19:49 +01:00
xenbus xenbus: add module description 2025-04-07 08:33:53 +02:00
xenfs xenfs/xensyms: respect hypervisor's "next" indication 2025-03-14 11:18:59 +01:00
Kconfig xen: Change xen-acpi-processor dom0 dependency 2025-04-07 11:22:40 +02:00
Makefile
acpi.c xen: Remove dependency between pciback and privcmd 2024-10-18 11:59:04 +02:00
arm-device.c
balloon.c x86/xen: fix balloon target initialization for PVH dom0 2025-04-07 11:24:12 +02:00
biomerge.c
cpu_hotplug.c
dbgp.c
efi.c
evtchn.c [tree-wide] finally take no_llseek out 2024-09-27 08:18:43 -07:00
features.c
gntalloc.c
gntdev-common.h
gntdev-dmabuf.c module: Convert symbol namespace to string literal 2024-12-02 11:34:44 -08:00
gntdev-dmabuf.h
gntdev.c
grant-dma-iommu.c Get rid of 'remove_new' relic from platform driver struct 2024-12-01 15:12:43 -08:00
grant-dma-ops.c
grant-table.c
manage.c xen/manage: Constify struct shutdown_handler 2024-07-01 08:47:53 +02:00
mcelog.c [tree-wide] finally take no_llseek out 2024-09-27 08:18:43 -07:00
mem-reservation.c
pci.c xen/pci: Do not register devices with segments >= 0x10000 2025-03-21 08:15:26 +01:00
pcpu.c xen: pcpu: remove unnecessary __ref annotation 2025-01-20 09:44:39 +01:00
platform-pci.c xen: Add support for XenServer 6.1 platform device 2025-03-14 11:04:25 +01:00
privcmd-buf.c xen: add missing MODULE_DESCRIPTION() macros 2024-07-02 09:41:46 +02:00
privcmd.c the bulk of struct fd memory safety stuff 2024-11-18 12:24:06 -08:00
privcmd.h
pvcalls-back.c
pvcalls-front.c xen: update pvcalls_front_accept prototype 2025-01-22 16:32:08 +01:00
pvcalls-front.h xen: update pvcalls_front_accept prototype 2025-01-22 16:32:08 +01:00
swiotlb-xen.c Xen/swiotlb: mark xen_swiotlb_fixup() __init 2025-02-13 12:49:01 +01:00
sys-hypervisor.c
time.c
unpopulated-alloc.c
xen-acpi-pad.c
xen-acpi-processor.c
xen-balloon.c
xen-front-pgdir-shbuf.c
xen-scsiback.c
xlate_mmu.c