6ca2f341c2
- kvm-ppc-Deassert-the-external-interrupt-pin-in-KVM-on-re.patch [bz#1776638] - kvm-xics-Don-t-deassert-outputs.patch [bz#1776638] - kvm-ppc-Don-t-use-CPUPPCState-irq_input_state-with-moder.patch [bz#1776638] - kvm-trace-update-qemu-trace-stap-to-Python-3.patch [bz#1787395] - kvm-redhat-Remove-redundant-fix-for-qemu-trace-stap.patch [bz#1787395] - kvm-iscsi-Cap-block-count-from-GET-LBA-STATUS-CVE-2020-1.patch [bz#1794503] - kvm-tpm-ppi-page-align-PPI-RAM.patch [bz#1787444] - kvm-target-arm-kvm-trivial-Clean-up-header-documentation.patch [bz#1647366] - kvm-target-arm-kvm64-kvm64-cpus-have-timer-registers.patch [bz#1647366] - kvm-tests-arm-cpu-features-Check-feature-default-values.patch [bz#1647366] - kvm-target-arm-kvm-Implement-virtual-time-adjustment.patch [bz#1647366] - kvm-target-arm-cpu-Add-the-kvm-no-adjvtime-CPU-property.patch [bz#1647366] - kvm-migration-Define-VMSTATE_INSTANCE_ID_ANY.patch [bz#1529231] - kvm-migration-Change-SaveStateEntry.instance_id-into-uin.patch [bz#1529231] - kvm-apic-Use-32bit-APIC-ID-for-migration-instance-ID.patch [bz#1529231] - Resolves: bz#1529231 ([q35] VM hangs after migration with 200 vCPUs) - Resolves: bz#1647366 (aarch64: Add support for the kvm-no-adjvtime ARM CPU feature) - Resolves: bz#1776638 (Guest failed to boot up after system_reset 20 times) - Resolves: bz#1787395 (qemu-trace-stap list : TypeError: startswith first arg must be bytes or a tuple of bytes, not str) - Resolves: bz#1787444 (Broken postcopy migration with vTPM device) - Resolves: bz#1794503 (CVE-2020-1711 qemu-kvm: QEMU: block: iscsi: OOB heap access via an unexpected response of iSCSI Server [rhel-av-8.2.0])
63 lines
2.4 KiB
Diff
63 lines
2.4 KiB
Diff
From 0d5a09173eb75b7e56122c2aefb2646a2be58400 Mon Sep 17 00:00:00 2001
|
|
From: Peter Xu <peterx@redhat.com>
|
|
Date: Fri, 31 Jan 2020 17:12:57 +0000
|
|
Subject: [PATCH 15/15] apic: Use 32bit APIC ID for migration instance ID
|
|
|
|
RH-Author: Peter Xu <peterx@redhat.com>
|
|
Message-id: <20200131171257.1066593-4-peterx@redhat.com>
|
|
Patchwork-id: 93628
|
|
O-Subject: [RHEL-AV-8.2.0 qemu-kvm PATCH 3/3] apic: Use 32bit APIC ID for migration instance ID
|
|
Bugzilla: 1529231
|
|
RH-Acked-by: Eduardo Habkost <ehabkost@redhat.com>
|
|
RH-Acked-by: Juan Quintela <quintela@redhat.com>
|
|
RH-Acked-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
|
|
|
|
Migration is silently broken now with x2apic config like this:
|
|
|
|
-smp 200,maxcpus=288,sockets=2,cores=72,threads=2 \
|
|
-device intel-iommu,intremap=on,eim=on
|
|
|
|
After migration, the guest kernel could hang at anything, due to
|
|
x2apic bit not migrated correctly in IA32_APIC_BASE on some vcpus, so
|
|
any operations related to x2apic could be broken then (e.g., RDMSR on
|
|
x2apic MSRs could fail because KVM would think that the vcpu hasn't
|
|
enabled x2apic at all).
|
|
|
|
The issue is that the x2apic bit was never applied correctly for vcpus
|
|
whose ID > 255 when migrate completes, and that's because when we
|
|
migrate APIC we use the APICCommonState.id as instance ID of the
|
|
migration stream, while that's too short for x2apic.
|
|
|
|
Let's use the newly introduced initial_apic_id for that.
|
|
|
|
Signed-off-by: Peter Xu <peterx@redhat.com>
|
|
Reviewed-by: Juan Quintela <quintela@redhat.com>
|
|
Reviewed-by: Eduardo Habkost <ehabkost@redhat.com>
|
|
Signed-off-by: Juan Quintela <quintela@redhat.com>
|
|
(cherry picked from commit 0ab994867c365db21e15f9503922c79234d8e40e)
|
|
Signed-off-by: Peter Xu <peterx@redhat.com>
|
|
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
|
|
---
|
|
hw/intc/apic_common.c | 5 ++++-
|
|
1 file changed, 4 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/hw/intc/apic_common.c b/hw/intc/apic_common.c
|
|
index 54b8731..b5dbeb6 100644
|
|
--- a/hw/intc/apic_common.c
|
|
+++ b/hw/intc/apic_common.c
|
|
@@ -268,7 +268,10 @@ static void apic_common_realize(DeviceState *dev, Error **errp)
|
|
APICCommonState *s = APIC_COMMON(dev);
|
|
APICCommonClass *info;
|
|
static DeviceState *vapic;
|
|
- uint32_t instance_id = s->id;
|
|
+ uint32_t instance_id = s->initial_apic_id;
|
|
+
|
|
+ /* Normally initial APIC ID should be no more than hundreds */
|
|
+ assert(instance_id != VMSTATE_INSTANCE_ID_ANY);
|
|
|
|
info = APIC_COMMON_GET_CLASS(s);
|
|
info->realize(dev, errp);
|
|
--
|
|
1.8.3.1
|
|
|