diff options
Diffstat (limited to '0013-libxl-fix-population-of-the-online-vCPU-bitmap-for-P.patch')
-rw-r--r-- | 0013-libxl-fix-population-of-the-online-vCPU-bitmap-for-P.patch | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/0013-libxl-fix-population-of-the-online-vCPU-bitmap-for-P.patch b/0013-libxl-fix-population-of-the-online-vCPU-bitmap-for-P.patch new file mode 100644 index 0000000..e5fb285 --- /dev/null +++ b/0013-libxl-fix-population-of-the-online-vCPU-bitmap-for-P.patch @@ -0,0 +1,61 @@ +From 9966e5413133157a630f7462518005fb898e582a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com> +Date: Tue, 21 May 2024 10:23:27 +0200 +Subject: [PATCH 13/56] libxl: fix population of the online vCPU bitmap for PVH +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +libxl passes some information to libacpi to create the ACPI table for a PVH +guest, and among that information it's a bitmap of which vCPUs are online +which can be less than the maximum number of vCPUs assigned to the domain. + +While the population of the bitmap is done correctly for HVM based on the +number of online vCPUs, for PVH the population of the bitmap is done based on +the number of maximum vCPUs allowed. This leads to all local APIC entries in +the MADT being set as enabled, which contradicts the data in xenstore if vCPUs +is different than maximum vCPUs. + +Fix by copying the internal libxl bitmap that's populated based on the vCPUs +parameter. + +Reported-by: Arthur Borsboom <arthurborsboom@gmail.com> +Link: https://gitlab.com/libvirt/libvirt/-/issues/399 +Reported-by: Leigh Brown <leigh@solinno.co.uk> +Fixes: 14c0d328da2b ('libxl/acpi: Build ACPI tables for HVMlite guests') +Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> +Tested-by: Leigh Brown <leigh@solinno.co.uk> +Acked-by: Andrew Cooper <andrew.cooper3@citrix.com> +master commit: 5cc7347b04b2d0a3133754c7a9b936f614ec656a +master date: 2024-05-11 00:13:43 +0100 +--- + tools/libs/light/libxl_x86_acpi.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/tools/libs/light/libxl_x86_acpi.c b/tools/libs/light/libxl_x86_acpi.c +index 620f3c700c..5cf261bd67 100644 +--- a/tools/libs/light/libxl_x86_acpi.c ++++ b/tools/libs/light/libxl_x86_acpi.c +@@ -89,7 +89,7 @@ static int init_acpi_config(libxl__gc *gc, + uint32_t domid = dom->guest_domid; + xc_domaininfo_t info; + struct hvm_info_table *hvminfo; +- int i, r, rc; ++ int r, rc; + + config->dsdt_anycpu = config->dsdt_15cpu = dsdt_pvh; + config->dsdt_anycpu_len = config->dsdt_15cpu_len = dsdt_pvh_len; +@@ -138,8 +138,8 @@ static int init_acpi_config(libxl__gc *gc, + hvminfo->nr_vcpus = info.max_vcpu_id + 1; + } + +- for (i = 0; i < hvminfo->nr_vcpus; i++) +- hvminfo->vcpu_online[i / 8] |= 1 << (i & 7); ++ memcpy(hvminfo->vcpu_online, b_info->avail_vcpus.map, ++ b_info->avail_vcpus.size); + + config->hvminfo = hvminfo; + +-- +2.45.2 + |