!942 QEMU update to version 8.2.0-12
From: @JiaboFeng Reviewed-by: @imxcc Signed-off-by: @imxcc
This commit is contained in:
commit
60ed78ff6e
34
acpi-cpu-Fix-detection-of-present-cpu.patch
Normal file
34
acpi-cpu-Fix-detection-of-present-cpu.patch
Normal file
@ -0,0 +1,34 @@
|
||||
From c2eb1176fe06f359a8102bbacb54760c9c1d5aae Mon Sep 17 00:00:00 2001
|
||||
From: Keqian Zhu <zhukeqian1@huawei.com>
|
||||
Date: Sun, 28 Apr 2024 12:50:09 +0800
|
||||
Subject: [PATCH] acpi/cpu: Fix detection of present cpu
|
||||
|
||||
When qemu_present_cpu is false. it means cpu object is
|
||||
null and then calling of qemu_persistent_cpu() will
|
||||
cause null pointer access.
|
||||
|
||||
Signed-off-by: Keqian Zhu <zhukeqian1@huawei.com>
|
||||
---
|
||||
hw/acpi/cpu.c | 6 +-----
|
||||
1 file changed, 1 insertion(+), 5 deletions(-)
|
||||
|
||||
diff --git a/hw/acpi/cpu.c b/hw/acpi/cpu.c
|
||||
index b258396e01..292e1daca2 100644
|
||||
--- a/hw/acpi/cpu.c
|
||||
+++ b/hw/acpi/cpu.c
|
||||
@@ -231,11 +231,7 @@ void cpu_hotplug_hw_init(MemoryRegion *as, Object *owner,
|
||||
if (qemu_present_cpu(cpu)) {
|
||||
state->devs[i].is_present = true;
|
||||
} else {
|
||||
- if (qemu_persistent_cpu(cpu)) {
|
||||
- state->devs[i].is_present = true;
|
||||
- } else {
|
||||
- state->devs[i].is_present = false;
|
||||
- }
|
||||
+ state->devs[i].is_present = false;
|
||||
}
|
||||
|
||||
if (qemu_enabled_cpu(cpu)) {
|
||||
--
|
||||
2.27.0
|
||||
|
||||
152
arm-virt-Don-t-modify-smp.max_cpus-when-vcpu-hotplug.patch
Normal file
152
arm-virt-Don-t-modify-smp.max_cpus-when-vcpu-hotplug.patch
Normal file
@ -0,0 +1,152 @@
|
||||
From 52909d74ec37e851df3762a6eab1d7a6eeb89fba Mon Sep 17 00:00:00 2001
|
||||
From: Keqian Zhu <zhukeqian1@huawei.com>
|
||||
Date: Sun, 28 Apr 2024 12:56:47 +0800
|
||||
Subject: [PATCH] arm/virt: Don't modify smp.max_cpus when vcpu hotplug
|
||||
disabled
|
||||
|
||||
The smp.max_cpus has been used when create possible_cpus, so
|
||||
we must not change it after that.
|
||||
|
||||
We should use smp.cpus when create cpu and acpi table if vcpu
|
||||
hotplug is disabled, instead of change smp.max_cpus to smp.cpus
|
||||
and use it everywhere.
|
||||
|
||||
Signed-off-by: Keqian Zhu <zhukeqian1@huawei.com>
|
||||
---
|
||||
hw/arm/virt-acpi-build.c | 8 +++++++-
|
||||
hw/arm/virt.c | 24 ++++++++++++++++++++++--
|
||||
include/hw/arm/virt.h | 8 +++++++-
|
||||
3 files changed, 36 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
|
||||
index 99296fc6d8..179600d4fe 100644
|
||||
--- a/hw/arm/virt-acpi-build.c
|
||||
+++ b/hw/arm/virt-acpi-build.c
|
||||
@@ -814,9 +814,15 @@ build_madt(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
|
||||
{
|
||||
int i;
|
||||
VirtMachineClass *vmc = VIRT_MACHINE_GET_CLASS(vms);
|
||||
+ MachineState *ms = MACHINE(vms);
|
||||
const MemMapEntry *memmap = vms->memmap;
|
||||
AcpiTable table = { .sig = "APIC", .rev = 4, .oem_id = vms->oem_id,
|
||||
.oem_table_id = vms->oem_table_id };
|
||||
+ unsigned int max_cpus = ms->smp.max_cpus;
|
||||
+
|
||||
+ if (!vms->cpu_hotplug_enabled) {
|
||||
+ max_cpus = ms->smp.cpus;
|
||||
+ }
|
||||
|
||||
acpi_table_begin(&table, table_data);
|
||||
/* Local Interrupt Controller Address */
|
||||
@@ -835,7 +841,7 @@ build_madt(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
|
||||
build_append_int_noprefix(table_data, vms->gic_version, 1);
|
||||
build_append_int_noprefix(table_data, 0, 3); /* Reserved */
|
||||
|
||||
- for (i = 0; i < MACHINE(vms)->smp.max_cpus; i++) {
|
||||
+ for (i = 0; i < max_cpus; i++) {
|
||||
CPUState *cpu = qemu_get_possible_cpu(i);
|
||||
uint64_t physical_base_address = 0, gich = 0, gicv = 0;
|
||||
uint32_t vgic_interrupt = vms->virt ? ARCH_GIC_MAINT_IRQ : 0;
|
||||
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
|
||||
index e4473354d4..507b09d96c 100644
|
||||
--- a/hw/arm/virt.c
|
||||
+++ b/hw/arm/virt.c
|
||||
@@ -831,6 +831,10 @@ static void unwire_gic_cpu_irqs(VirtMachineState *vms, CPUState *cs)
|
||||
int type = vms->gic_version;
|
||||
int irq;
|
||||
|
||||
+ if (!vms->cpu_hotplug_enabled) {
|
||||
+ max_cpus = ms->smp.cpus;
|
||||
+ }
|
||||
+
|
||||
for (irq = 0; irq < ARRAY_SIZE(timer_irq); irq++) {
|
||||
qdev_disconnect_gpio_out_named(cpudev, NULL, irq);
|
||||
}
|
||||
@@ -871,6 +875,10 @@ static void wire_gic_cpu_irqs(VirtMachineState *vms, CPUState *cs)
|
||||
int intidbase;
|
||||
int irq;
|
||||
|
||||
+ if (!vms->cpu_hotplug_enabled) {
|
||||
+ max_cpus = ms->smp.cpus;
|
||||
+ }
|
||||
+
|
||||
intidbase = NUM_IRQS + cpu * GIC_INTERNAL;
|
||||
|
||||
for (irq = 0; irq < ARRAY_SIZE(timer_irq); irq++) {
|
||||
@@ -915,6 +923,10 @@ static void create_gic(VirtMachineState *vms, MemoryRegion *mem)
|
||||
uint32_t nb_redist_regions = 0;
|
||||
int revision;
|
||||
|
||||
+ if (!vms->cpu_hotplug_enabled) {
|
||||
+ max_cpus = ms->smp.cpus;
|
||||
+ }
|
||||
+
|
||||
if (vms->gic_version == VIRT_GIC_VERSION_2) {
|
||||
gictype = gic_class_name();
|
||||
} else {
|
||||
@@ -2165,6 +2177,9 @@ static void virt_cpu_post_init(VirtMachineState *vms, MemoryRegion *sysmem)
|
||||
|
||||
for (n = 0; n < possible_cpus->len; n++) {
|
||||
cpu = qemu_get_possible_cpu(n);
|
||||
+ if (!qemu_present_cpu(cpu)) {
|
||||
+ continue;
|
||||
+ }
|
||||
|
||||
if (vms->pmu) {
|
||||
assert(arm_feature(&ARM_CPU(cpu)->env, ARM_FEATURE_PMU));
|
||||
@@ -2195,6 +2210,9 @@ static void virt_cpu_post_init(VirtMachineState *vms, MemoryRegion *sysmem)
|
||||
if (kvm_enabled() || tcg_enabled()) {
|
||||
for (n = 0; n < possible_cpus->len; n++) {
|
||||
cpu = qemu_get_possible_cpu(n);
|
||||
+ if (!qemu_present_cpu(cpu)) {
|
||||
+ continue;
|
||||
+ }
|
||||
|
||||
/*
|
||||
* Now, GIC has been sized with possible CPUs and we dont require
|
||||
@@ -2511,16 +2529,18 @@ static void machvirt_init(MachineState *machine)
|
||||
if (machine->smp.max_cpus > smp_cpus) {
|
||||
warn_report("cpu hotplug feature has been disabled");
|
||||
}
|
||||
- machine->smp.max_cpus = smp_cpus;
|
||||
}
|
||||
|
||||
notifier_list_init(&vms->cpuhp_notifiers);
|
||||
- possible_cpus = mc->possible_cpu_arch_ids(machine);
|
||||
assert(possible_cpus->len == max_cpus);
|
||||
for (n = 0; n < possible_cpus->len; n++) {
|
||||
Object *cpuobj;
|
||||
CPUState *cs;
|
||||
|
||||
+ if (!vms->cpu_hotplug_enabled && n >= smp_cpus) {
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
cpuobj = object_new(possible_cpus->cpus[n].type);
|
||||
cs = CPU(cpuobj);
|
||||
|
||||
diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h
|
||||
index 138531f9c1..7a734f07f7 100644
|
||||
--- a/include/hw/arm/virt.h
|
||||
+++ b/include/hw/arm/virt.h
|
||||
@@ -210,10 +210,16 @@ static uint32_t virt_redist_capacity(VirtMachineState *vms, int region)
|
||||
static inline int virt_gicv3_redist_region_count(VirtMachineState *vms)
|
||||
{
|
||||
uint32_t redist0_capacity = virt_redist_capacity(vms, VIRT_GIC_REDIST);
|
||||
+ MachineState *ms = MACHINE(vms);
|
||||
+ unsigned int max_cpus = ms->smp.max_cpus;
|
||||
+
|
||||
+ if (!vms->cpu_hotplug_enabled) {
|
||||
+ max_cpus = ms->smp.cpus;
|
||||
+ }
|
||||
|
||||
assert(vms->gic_version != VIRT_GIC_VERSION_2);
|
||||
|
||||
- return (MACHINE(vms)->smp.max_cpus > redist0_capacity &&
|
||||
+ return (max_cpus > redist0_capacity &&
|
||||
vms->highmem_redists) ? 2 : 1;
|
||||
}
|
||||
|
||||
--
|
||||
2.27.0
|
||||
|
||||
66
arm-virt-acpi-Extend-cpufreq-to-support-max_cpus.patch
Normal file
66
arm-virt-acpi-Extend-cpufreq-to-support-max_cpus.patch
Normal file
@ -0,0 +1,66 @@
|
||||
From fb27704692362d151eb191f0c687ded09b04e04c Mon Sep 17 00:00:00 2001
|
||||
From: Keqian Zhu <zhukeqian1@huawei.com>
|
||||
Date: Sun, 28 Apr 2024 14:14:07 +0800
|
||||
Subject: [PATCH] arm/virt/acpi: Extend cpufreq to support max_cpus
|
||||
|
||||
We support vcpu hotplug now, so extend memory region size to
|
||||
allow hotplugged CPU access cpufreq space.
|
||||
|
||||
Signed-off-by: Keqian Zhu <zhukeqian1@huawei.com>
|
||||
---
|
||||
hw/acpi/cpufreq.c | 15 ++++++---------
|
||||
1 file changed, 6 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/hw/acpi/cpufreq.c b/hw/acpi/cpufreq.c
|
||||
index a84db490b3..a76f7b8fa2 100644
|
||||
--- a/hw/acpi/cpufreq.c
|
||||
+++ b/hw/acpi/cpufreq.c
|
||||
@@ -83,6 +83,7 @@ typedef struct CpuhzState {
|
||||
uint32_t PerformanceLimited;
|
||||
uint32_t LowestFreq;
|
||||
uint32_t NominalFreq;
|
||||
+ uint32_t num_cpu;
|
||||
uint32_t reg_size;
|
||||
} CpuhzState;
|
||||
|
||||
@@ -93,10 +94,7 @@ static uint64_t cpufreq_read(void *opaque, hwaddr offset, unsigned size)
|
||||
uint64_t r;
|
||||
uint64_t n;
|
||||
|
||||
- MachineState *ms = MACHINE(qdev_get_machine());
|
||||
- unsigned int smp_cpus = ms->smp.cpus;
|
||||
-
|
||||
- if (offset >= smp_cpus * CPPC_REG_PER_CPU_STRIDE) {
|
||||
+ if (offset >= s->num_cpu * CPPC_REG_PER_CPU_STRIDE) {
|
||||
warn_report("cpufreq_read: offset 0x%lx out of range", offset);
|
||||
return 0;
|
||||
}
|
||||
@@ -163,11 +161,10 @@ static uint64_t cpufreq_read(void *opaque, hwaddr offset, unsigned size)
|
||||
static void cpufreq_write(void *opaque, hwaddr offset,
|
||||
uint64_t value, unsigned size)
|
||||
{
|
||||
+ CpuhzState *s = CPUFREQ(opaque);
|
||||
uint64_t n;
|
||||
- MachineState *ms = MACHINE(qdev_get_machine());
|
||||
- unsigned int smp_cpus = ms->smp.cpus;
|
||||
|
||||
- if (offset >= smp_cpus * CPPC_REG_PER_CPU_STRIDE) {
|
||||
+ if (offset >= s->num_cpu * CPPC_REG_PER_CPU_STRIDE) {
|
||||
error_printf("cpufreq_write: offset 0x%lx out of range", offset);
|
||||
return;
|
||||
}
|
||||
@@ -248,9 +245,9 @@ static void cpufreq_init(Object *obj)
|
||||
CpuhzState *s = CPUFREQ(obj);
|
||||
|
||||
MachineState *ms = MACHINE(qdev_get_machine());
|
||||
- unsigned int smp_cpus = ms->smp.cpus;
|
||||
+ s->num_cpu = ms->smp.max_cpus;
|
||||
|
||||
- s->reg_size = smp_cpus * CPPC_REG_PER_CPU_STRIDE;
|
||||
+ s->reg_size = s->num_cpu * CPPC_REG_PER_CPU_STRIDE;
|
||||
if (s->reg_size > MAX_SUPPORT_SPACE) {
|
||||
error_report("Required space 0x%x excesses the max support 0x%x",
|
||||
s->reg_size, MAX_SUPPORT_SPACE);
|
||||
--
|
||||
2.27.0
|
||||
|
||||
49
hw-isa-vt82c686-Keep-track-of-PIRQ-PINT-pins-separat.patch
Normal file
49
hw-isa-vt82c686-Keep-track-of-PIRQ-PINT-pins-separat.patch
Normal file
@ -0,0 +1,49 @@
|
||||
From 74817cbc4ccb4e3b0f6d7b464b5707d3fbc5f686 Mon Sep 17 00:00:00 2001
|
||||
From: qihao <qihao_yewu@cmss.chinamobile.com>
|
||||
Date: Tue, 23 Apr 2024 10:40:32 +0800
|
||||
Subject: [PATCH] hw/isa/vt82c686: Keep track of PIRQ/PINT pins separately
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
cheery-pick from f33274265a242df5d9fdb00915fe72fbb1b2a3c4
|
||||
|
||||
Move calculation of mask after the switch which sets the function
|
||||
number for PIRQ/PINT pins to make sure the state of these pins are
|
||||
kept track of separately and IRQ is raised if any of them is active.
|
||||
|
||||
Cc: qemu-stable@nongnu.org
|
||||
Fixes: 7e01bd80c1 hw/isa/vt82c686: Bring back via_isa_set_irq()
|
||||
Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
|
||||
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
|
||||
Message-ID: <20240410222543.0EA534E6005@zero.eik.bme.hu>
|
||||
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
|
||||
Signed-off-by: qihao_yewu <qihao_yewu@cmss.chinamobile.com>
|
||||
---
|
||||
hw/isa/vt82c686.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/hw/isa/vt82c686.c b/hw/isa/vt82c686.c
|
||||
index 9c2333a277..0334431219 100644
|
||||
--- a/hw/isa/vt82c686.c
|
||||
+++ b/hw/isa/vt82c686.c
|
||||
@@ -613,7 +613,7 @@ void via_isa_set_irq(PCIDevice *d, int pin, int level)
|
||||
ViaISAState *s = VIA_ISA(pci_get_function_0(d));
|
||||
uint8_t irq = d->config[PCI_INTERRUPT_LINE], max_irq = 15;
|
||||
int f = PCI_FUNC(d->devfn);
|
||||
- uint16_t mask = BIT(f);
|
||||
+ uint16_t mask;
|
||||
|
||||
switch (f) {
|
||||
case 0: /* PIRQ/PINT inputs */
|
||||
@@ -628,6 +628,7 @@ void via_isa_set_irq(PCIDevice *d, int pin, int level)
|
||||
}
|
||||
|
||||
/* Keep track of the state of all sources */
|
||||
+ mask = BIT(f);
|
||||
if (level) {
|
||||
s->irq_state[0] |= mask;
|
||||
} else {
|
||||
--
|
||||
2.27.0
|
||||
|
||||
42
kvm-arm-Fix-SVE-related-logic-for-vcpu-hotplug-featu.patch
Normal file
42
kvm-arm-Fix-SVE-related-logic-for-vcpu-hotplug-featu.patch
Normal file
@ -0,0 +1,42 @@
|
||||
From 1228f5c7cfcb78b19f163551aae0612602ac2d7d Mon Sep 17 00:00:00 2001
|
||||
From: Keqian Zhu <zhukeqian1@huawei.com>
|
||||
Date: Sun, 28 Apr 2024 13:01:48 +0800
|
||||
Subject: [PATCH] kvm/arm: Fix SVE related logic for vcpu hotplug feature
|
||||
|
||||
1. Must finalize SVE setting before kvm_arch_init_vcpu().
|
||||
2. Must not finalize KVM SVE repeatly for hotplugged vcpu.
|
||||
|
||||
Signed-off-by: Keqian Zhu <zhukeqian1@huawei.com>
|
||||
---
|
||||
target/arm/kvm.c | 1 +
|
||||
target/arm/kvm64.c | 2 +-
|
||||
2 files changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/target/arm/kvm.c b/target/arm/kvm.c
|
||||
index 12c1b4b328..1ceb72a1c1 100644
|
||||
--- a/target/arm/kvm.c
|
||||
+++ b/target/arm/kvm.c
|
||||
@@ -704,6 +704,7 @@ void kvm_arm_create_host_vcpu(ARMCPU *cpu)
|
||||
* later while setting device attributes of the GICR during GICv3
|
||||
* reset
|
||||
*/
|
||||
+ arm_cpu_finalize_features(cpu, &error_abort);
|
||||
ret = kvm_arch_init_vcpu(cs);
|
||||
if (ret < 0) {
|
||||
error_report("Failed to initialize host vcpu %ld", vcpu_id);
|
||||
diff --git a/target/arm/kvm64.c b/target/arm/kvm64.c
|
||||
index 00b257bb4b..615e8bbbdf 100644
|
||||
--- a/target/arm/kvm64.c
|
||||
+++ b/target/arm/kvm64.c
|
||||
@@ -647,7 +647,7 @@ int kvm_arch_init_vcpu(CPUState *cs)
|
||||
return ret;
|
||||
}
|
||||
|
||||
- if (cpu_isar_feature(aa64_sve, cpu)) {
|
||||
+ if (cpu_isar_feature(aa64_sve, cpu) && !DEVICE(cpu)->hotplugged) {
|
||||
ret = kvm_arm_sve_set_vls(cs);
|
||||
if (ret) {
|
||||
return ret;
|
||||
--
|
||||
2.27.0
|
||||
|
||||
63
kvm-arm-Fix-compatibility-of-cold-plug-CPU-with-SVE.patch
Normal file
63
kvm-arm-Fix-compatibility-of-cold-plug-CPU-with-SVE.patch
Normal file
@ -0,0 +1,63 @@
|
||||
From baacc5ed528a5259286622482a01e3e848aed57e Mon Sep 17 00:00:00 2001
|
||||
From: Keqian Zhu <zhukeqian1@huawei.com>
|
||||
Date: Mon, 29 Apr 2024 17:14:47 +0800
|
||||
Subject: [PATCH] kvm/arm: Fix compatibility of cold-plug CPU with SVE
|
||||
|
||||
For arm virt machine, besides hotplugged vcpu, the kvm state of
|
||||
coldplugged CPU is also pre-inited and thus SVE is finalized.
|
||||
|
||||
And a flag in ARMCPU state and skip finalize SVE again.
|
||||
|
||||
Signed-off-by: Keqian Zhu <zhukeqian1@huawei.com>
|
||||
---
|
||||
hw/arm/virt.c | 5 +++++
|
||||
target/arm/cpu.h | 3 +++
|
||||
target/arm/kvm64.c | 2 +-
|
||||
3 files changed, 9 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
|
||||
index 507b09d96c..dfe4d9e129 100644
|
||||
--- a/hw/arm/virt.c
|
||||
+++ b/hw/arm/virt.c
|
||||
@@ -3282,6 +3282,11 @@ static void virt_cpu_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
|
||||
if (!dev->hotplugged) {
|
||||
cs->cold_booted = true;
|
||||
}
|
||||
+#ifdef CONFIG_KVM
|
||||
+ if (cs->cpu_index >= ms->smp.cpus) {
|
||||
+ cpu->kvm_sve_finalized = true;
|
||||
+ }
|
||||
+#endif
|
||||
}
|
||||
|
||||
static void virt_cpu_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
|
||||
diff --git a/target/arm/cpu.h b/target/arm/cpu.h
|
||||
index c51a0e3467..a5ba7f2a26 100644
|
||||
--- a/target/arm/cpu.h
|
||||
+++ b/target/arm/cpu.h
|
||||
@@ -971,6 +971,9 @@ struct ArchCPU {
|
||||
|
||||
/* KVM steal time */
|
||||
OnOffAuto kvm_steal_time;
|
||||
+
|
||||
+ /* KVM SVE has been finalized for this CPU */
|
||||
+ bool kvm_sve_finalized;
|
||||
#endif /* CONFIG_KVM */
|
||||
|
||||
/* Uniprocessor system with MP extensions */
|
||||
diff --git a/target/arm/kvm64.c b/target/arm/kvm64.c
|
||||
index 615e8bbbdf..8f01d485b0 100644
|
||||
--- a/target/arm/kvm64.c
|
||||
+++ b/target/arm/kvm64.c
|
||||
@@ -647,7 +647,7 @@ int kvm_arch_init_vcpu(CPUState *cs)
|
||||
return ret;
|
||||
}
|
||||
|
||||
- if (cpu_isar_feature(aa64_sve, cpu) && !DEVICE(cpu)->hotplugged) {
|
||||
+ if (cpu_isar_feature(aa64_sve, cpu) && !cpu->kvm_sve_finalized) {
|
||||
ret = kvm_arm_sve_set_vls(cs);
|
||||
if (ret) {
|
||||
return ret;
|
||||
--
|
||||
2.27.0
|
||||
|
||||
22
qemu.spec
22
qemu.spec
@ -3,7 +3,7 @@
|
||||
|
||||
Name: qemu
|
||||
Version: 8.2.0
|
||||
Release: 11
|
||||
Release: 12
|
||||
Epoch: 11
|
||||
Summary: QEMU is a generic and open source machine emulator and virtualizer
|
||||
License: GPLv2 and BSD and MIT and CC-BY-SA-4.0
|
||||
@ -250,6 +250,15 @@ Patch0233: hw-display-virtio-gpu-Protect-from-DMA-re-entrancy-b.patch
|
||||
Patch0234: hw-char-virtio-serial-bus-Protect-from-DMA-re-entran.patch
|
||||
Patch0235: hw-virtio-virtio-crypto-Protect-from-DMA-re-entrancy.patch
|
||||
Patch0236: hw-sd-sdhci-Do-not-update-TRNMOD-when-Command-Inhibi.patch
|
||||
Patch0237: acpi-cpu-Fix-detection-of-present-cpu.patch
|
||||
Patch0238: arm-virt-Don-t-modify-smp.max_cpus-when-vcpu-hotplug.patch
|
||||
Patch0239: kvm-arm-Fix-SVE-related-logic-for-vcpu-hotplug-featu.patch
|
||||
Patch0240: arm-virt-acpi-Extend-cpufreq-to-support-max_cpus.patch
|
||||
Patch0241: kvm-arm-Fix-compatibility-of-cold-plug-CPU-with-SVE.patch
|
||||
Patch0242: hw-isa-vt82c686-Keep-track-of-PIRQ-PINT-pins-separat.patch
|
||||
Patch0243: target-i386-Introduce-Icelake-Server-v7-to-enable-TS.patch
|
||||
Patch0244: target-i386-Add-new-CPU-model-SierraForest.patch
|
||||
Patch0245: target-i386-Export-RFDS-bit-to-guests.patch
|
||||
|
||||
BuildRequires: flex
|
||||
BuildRequires: gcc
|
||||
@ -847,6 +856,17 @@ getent passwd qemu >/dev/null || \
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Thu May 10 2024 zhangxianting <zhangxianting@uniontech.com> - 11:8.2.0-12
|
||||
- target/i386: Export RFDS bit to guests
|
||||
- target/i386: Add new CPU model SierraForest
|
||||
- target/i386: Introduce Icelake-Server-v7 to enable TSX
|
||||
- hw/isa/vt82c686: Keep track of PIRQ/PINT pins separately
|
||||
- kvm/arm: Fix compatibility of cold-plug CPU with SVE
|
||||
- arm/virt/acpi: Extend cpufreq to support max_cpus
|
||||
- kvm/arm: Fix SVE related logic for vcpu hotplug feature
|
||||
- arm/virt: Don't modify smp.max_cpus when vcpu hotplug disabled
|
||||
- acpi/cpu: Fix detection of present cpu
|
||||
|
||||
* Wed Apr 17 2024 zhangxianting <zhangxianting@uniontech.com> - 11:8.2.0-11
|
||||
- remove chrpath
|
||||
|
||||
|
||||
212
target-i386-Add-new-CPU-model-SierraForest.patch
Normal file
212
target-i386-Add-new-CPU-model-SierraForest.patch
Normal file
@ -0,0 +1,212 @@
|
||||
From c61eabb8aa86fed57c2cd5394e0e89e350c99c5e Mon Sep 17 00:00:00 2001
|
||||
From: Tao Su <tao1.su@linux.intel.com>
|
||||
Date: Wed, 20 Mar 2024 10:10:44 +0800
|
||||
Subject: [PATCH] target/i386: Add new CPU model SierraForest
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
commit 6e82d3b6220777667968a04c87e1667f164ebe88 upstream.
|
||||
|
||||
According to table 1-2 in Intel Architecture Instruction Set Extensions and
|
||||
Future Features (rev 051) [1], SierraForest has the following new features
|
||||
which have already been virtualized:
|
||||
|
||||
- CMPCCXADD CPUID.(EAX=7,ECX=1):EAX[bit 7]
|
||||
- AVX-IFMA CPUID.(EAX=7,ECX=1):EAX[bit 23]
|
||||
- AVX-VNNI-INT8 CPUID.(EAX=7,ECX=1):EDX[bit 4]
|
||||
- AVX-NE-CONVERT CPUID.(EAX=7,ECX=1):EDX[bit 5]
|
||||
|
||||
Add above features to new CPU model SierraForest. Comparing with GraniteRapids
|
||||
CPU model, SierraForest bare-metal removes the following features:
|
||||
|
||||
- HLE CPUID.(EAX=7,ECX=0):EBX[bit 4]
|
||||
- RTM CPUID.(EAX=7,ECX=0):EBX[bit 11]
|
||||
- AVX512F CPUID.(EAX=7,ECX=0):EBX[bit 16]
|
||||
- AVX512DQ CPUID.(EAX=7,ECX=0):EBX[bit 17]
|
||||
- AVX512_IFMA CPUID.(EAX=7,ECX=0):EBX[bit 21]
|
||||
- AVX512CD CPUID.(EAX=7,ECX=0):EBX[bit 28]
|
||||
- AVX512BW CPUID.(EAX=7,ECX=0):EBX[bit 30]
|
||||
- AVX512VL CPUID.(EAX=7,ECX=0):EBX[bit 31]
|
||||
- AVX512_VBMI CPUID.(EAX=7,ECX=0):ECX[bit 1]
|
||||
- AVX512_VBMI2 CPUID.(EAX=7,ECX=0):ECX[bit 6]
|
||||
- AVX512_VNNI CPUID.(EAX=7,ECX=0):ECX[bit 11]
|
||||
- AVX512_BITALG CPUID.(EAX=7,ECX=0):ECX[bit 12]
|
||||
- AVX512_VPOPCNTDQ CPUID.(EAX=7,ECX=0):ECX[bit 14]
|
||||
- LA57 CPUID.(EAX=7,ECX=0):ECX[bit 16]
|
||||
- TSXLDTRK CPUID.(EAX=7,ECX=0):EDX[bit 16]
|
||||
- AMX-BF16 CPUID.(EAX=7,ECX=0):EDX[bit 22]
|
||||
- AVX512_FP16 CPUID.(EAX=7,ECX=0):EDX[bit 23]
|
||||
- AMX-TILE CPUID.(EAX=7,ECX=0):EDX[bit 24]
|
||||
- AMX-INT8 CPUID.(EAX=7,ECX=0):EDX[bit 25]
|
||||
- AVX512_BF16 CPUID.(EAX=7,ECX=1):EAX[bit 5]
|
||||
- fast zero-length MOVSB CPUID.(EAX=7,ECX=1):EAX[bit 10]
|
||||
- fast short CMPSB, SCASB CPUID.(EAX=7,ECX=1):EAX[bit 12]
|
||||
- AMX-FP16 CPUID.(EAX=7,ECX=1):EAX[bit 21]
|
||||
- PREFETCHI CPUID.(EAX=7,ECX=1):EDX[bit 14]
|
||||
- XFD CPUID.(EAX=0xD,ECX=1):EAX[bit 4]
|
||||
- EPT_PAGE_WALK_LENGTH_5 VMX_EPT_VPID_CAP(0x48c)[bit 7]
|
||||
|
||||
Add all features of GraniteRapids CPU model except above features to
|
||||
SierraForest CPU model.
|
||||
|
||||
SierraForest doesn’t support TSX and RTM but supports TAA_NO. When RTM is
|
||||
not enabled in host, KVM will not report TAA_NO. So, just don't include
|
||||
TAA_NO in SierraForest CPU model.
|
||||
|
||||
[1] https://cdrdv2.intel.com/v1/dl/getContent/671368
|
||||
|
||||
Intel-SIG: commit 6e82d3b62207 target/i386: Add new CPU model SierraForest.
|
||||
8.2.0-Add SRF CPU module support
|
||||
|
||||
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
|
||||
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
|
||||
Signed-off-by: Tao Su <tao1.su@linux.intel.com>
|
||||
Message-ID: <20240320021044.508263-1-tao1.su@linux.intel.com>
|
||||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||||
[ Quanxian Wang: amend commit log ]
|
||||
Signed-off-by: Quanxian Wang <quanxian.wang@intel.com>
|
||||
---
|
||||
target/i386/cpu.c | 126 ++++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 126 insertions(+)
|
||||
|
||||
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
|
||||
index 6abe33946c..57a832cea2 100644
|
||||
--- a/target/i386/cpu.c
|
||||
+++ b/target/i386/cpu.c
|
||||
@@ -4109,6 +4109,132 @@ static const X86CPUDefinition builtin_x86_defs[] = {
|
||||
{ /* end of list */ },
|
||||
},
|
||||
},
|
||||
+ {
|
||||
+ .name = "SierraForest",
|
||||
+ .level = 0x23,
|
||||
+ .vendor = CPUID_VENDOR_INTEL,
|
||||
+ .family = 6,
|
||||
+ .model = 175,
|
||||
+ .stepping = 0,
|
||||
+ /*
|
||||
+ * please keep the ascending order so that we can have a clear view of
|
||||
+ * bit position of each feature.
|
||||
+ */
|
||||
+ .features[FEAT_1_EDX] =
|
||||
+ CPUID_FP87 | CPUID_VME | CPUID_DE | CPUID_PSE | CPUID_TSC |
|
||||
+ CPUID_MSR | CPUID_PAE | CPUID_MCE | CPUID_CX8 | CPUID_APIC |
|
||||
+ CPUID_SEP | CPUID_MTRR | CPUID_PGE | CPUID_MCA | CPUID_CMOV |
|
||||
+ CPUID_PAT | CPUID_PSE36 | CPUID_CLFLUSH | CPUID_MMX | CPUID_FXSR |
|
||||
+ CPUID_SSE | CPUID_SSE2,
|
||||
+ .features[FEAT_1_ECX] =
|
||||
+ CPUID_EXT_SSE3 | CPUID_EXT_PCLMULQDQ | CPUID_EXT_SSSE3 |
|
||||
+ CPUID_EXT_FMA | CPUID_EXT_CX16 | CPUID_EXT_PCID | CPUID_EXT_SSE41 |
|
||||
+ CPUID_EXT_SSE42 | CPUID_EXT_X2APIC | CPUID_EXT_MOVBE |
|
||||
+ CPUID_EXT_POPCNT | CPUID_EXT_TSC_DEADLINE_TIMER | CPUID_EXT_AES |
|
||||
+ CPUID_EXT_XSAVE | CPUID_EXT_AVX | CPUID_EXT_F16C | CPUID_EXT_RDRAND,
|
||||
+ .features[FEAT_8000_0001_EDX] =
|
||||
+ CPUID_EXT2_SYSCALL | CPUID_EXT2_NX | CPUID_EXT2_PDPE1GB |
|
||||
+ CPUID_EXT2_RDTSCP | CPUID_EXT2_LM,
|
||||
+ .features[FEAT_8000_0001_ECX] =
|
||||
+ CPUID_EXT3_LAHF_LM | CPUID_EXT3_ABM | CPUID_EXT3_3DNOWPREFETCH,
|
||||
+ .features[FEAT_8000_0008_EBX] =
|
||||
+ CPUID_8000_0008_EBX_WBNOINVD,
|
||||
+ .features[FEAT_7_0_EBX] =
|
||||
+ CPUID_7_0_EBX_FSGSBASE | CPUID_7_0_EBX_BMI1 | CPUID_7_0_EBX_AVX2 |
|
||||
+ CPUID_7_0_EBX_SMEP | CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_ERMS |
|
||||
+ CPUID_7_0_EBX_INVPCID | CPUID_7_0_EBX_RDSEED | CPUID_7_0_EBX_ADX |
|
||||
+ CPUID_7_0_EBX_SMAP | CPUID_7_0_EBX_CLFLUSHOPT | CPUID_7_0_EBX_CLWB |
|
||||
+ CPUID_7_0_EBX_SHA_NI,
|
||||
+ .features[FEAT_7_0_ECX] =
|
||||
+ CPUID_7_0_ECX_UMIP | CPUID_7_0_ECX_PKU | CPUID_7_0_ECX_GFNI |
|
||||
+ CPUID_7_0_ECX_VAES | CPUID_7_0_ECX_VPCLMULQDQ |
|
||||
+ CPUID_7_0_ECX_RDPID | CPUID_7_0_ECX_BUS_LOCK_DETECT,
|
||||
+ .features[FEAT_7_0_EDX] =
|
||||
+ CPUID_7_0_EDX_FSRM | CPUID_7_0_EDX_SERIALIZE |
|
||||
+ CPUID_7_0_EDX_SPEC_CTRL | CPUID_7_0_EDX_ARCH_CAPABILITIES |
|
||||
+ CPUID_7_0_EDX_SPEC_CTRL_SSBD,
|
||||
+ .features[FEAT_ARCH_CAPABILITIES] =
|
||||
+ MSR_ARCH_CAP_RDCL_NO | MSR_ARCH_CAP_IBRS_ALL |
|
||||
+ MSR_ARCH_CAP_SKIP_L1DFL_VMENTRY | MSR_ARCH_CAP_MDS_NO |
|
||||
+ MSR_ARCH_CAP_PSCHANGE_MC_NO | MSR_ARCH_CAP_SBDR_SSDP_NO |
|
||||
+ MSR_ARCH_CAP_FBSDP_NO | MSR_ARCH_CAP_PSDP_NO |
|
||||
+ MSR_ARCH_CAP_PBRSB_NO,
|
||||
+ .features[FEAT_XSAVE] =
|
||||
+ CPUID_XSAVE_XSAVEOPT | CPUID_XSAVE_XSAVEC |
|
||||
+ CPUID_XSAVE_XGETBV1 | CPUID_XSAVE_XSAVES,
|
||||
+ .features[FEAT_6_EAX] =
|
||||
+ CPUID_6_EAX_ARAT,
|
||||
+ .features[FEAT_7_1_EAX] =
|
||||
+ CPUID_7_1_EAX_AVX_VNNI | CPUID_7_1_EAX_CMPCCXADD |
|
||||
+ CPUID_7_1_EAX_FSRS | CPUID_7_1_EAX_AVX_IFMA,
|
||||
+ .features[FEAT_7_1_EDX] =
|
||||
+ CPUID_7_1_EDX_AVX_VNNI_INT8 | CPUID_7_1_EDX_AVX_NE_CONVERT,
|
||||
+ .features[FEAT_7_2_EDX] =
|
||||
+ CPUID_7_2_EDX_MCDT_NO,
|
||||
+ .features[FEAT_VMX_BASIC] =
|
||||
+ MSR_VMX_BASIC_INS_OUTS | MSR_VMX_BASIC_TRUE_CTLS,
|
||||
+ .features[FEAT_VMX_ENTRY_CTLS] =
|
||||
+ VMX_VM_ENTRY_LOAD_DEBUG_CONTROLS | VMX_VM_ENTRY_IA32E_MODE |
|
||||
+ VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL |
|
||||
+ VMX_VM_ENTRY_LOAD_IA32_PAT | VMX_VM_ENTRY_LOAD_IA32_EFER,
|
||||
+ .features[FEAT_VMX_EPT_VPID_CAPS] =
|
||||
+ MSR_VMX_EPT_EXECONLY | MSR_VMX_EPT_PAGE_WALK_LENGTH_4 |
|
||||
+ MSR_VMX_EPT_WB | MSR_VMX_EPT_2MB | MSR_VMX_EPT_1GB |
|
||||
+ MSR_VMX_EPT_INVEPT | MSR_VMX_EPT_AD_BITS |
|
||||
+ MSR_VMX_EPT_INVEPT_SINGLE_CONTEXT | MSR_VMX_EPT_INVEPT_ALL_CONTEXT |
|
||||
+ MSR_VMX_EPT_INVVPID | MSR_VMX_EPT_INVVPID_SINGLE_ADDR |
|
||||
+ MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT |
|
||||
+ MSR_VMX_EPT_INVVPID_ALL_CONTEXT |
|
||||
+ MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT_NOGLOBALS,
|
||||
+ .features[FEAT_VMX_EXIT_CTLS] =
|
||||
+ VMX_VM_EXIT_SAVE_DEBUG_CONTROLS |
|
||||
+ VMX_VM_EXIT_LOAD_IA32_PERF_GLOBAL_CTRL |
|
||||
+ VMX_VM_EXIT_ACK_INTR_ON_EXIT | VMX_VM_EXIT_SAVE_IA32_PAT |
|
||||
+ VMX_VM_EXIT_LOAD_IA32_PAT | VMX_VM_EXIT_SAVE_IA32_EFER |
|
||||
+ VMX_VM_EXIT_LOAD_IA32_EFER | VMX_VM_EXIT_SAVE_VMX_PREEMPTION_TIMER,
|
||||
+ .features[FEAT_VMX_MISC] =
|
||||
+ MSR_VMX_MISC_STORE_LMA | MSR_VMX_MISC_ACTIVITY_HLT |
|
||||
+ MSR_VMX_MISC_VMWRITE_VMEXIT,
|
||||
+ .features[FEAT_VMX_PINBASED_CTLS] =
|
||||
+ VMX_PIN_BASED_EXT_INTR_MASK | VMX_PIN_BASED_NMI_EXITING |
|
||||
+ VMX_PIN_BASED_VIRTUAL_NMIS | VMX_PIN_BASED_VMX_PREEMPTION_TIMER |
|
||||
+ VMX_PIN_BASED_POSTED_INTR,
|
||||
+ .features[FEAT_VMX_PROCBASED_CTLS] =
|
||||
+ VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
|
||||
+ VMX_CPU_BASED_USE_TSC_OFFSETING | VMX_CPU_BASED_HLT_EXITING |
|
||||
+ VMX_CPU_BASED_INVLPG_EXITING | VMX_CPU_BASED_MWAIT_EXITING |
|
||||
+ VMX_CPU_BASED_RDPMC_EXITING | VMX_CPU_BASED_RDTSC_EXITING |
|
||||
+ VMX_CPU_BASED_CR3_LOAD_EXITING | VMX_CPU_BASED_CR3_STORE_EXITING |
|
||||
+ VMX_CPU_BASED_CR8_LOAD_EXITING | VMX_CPU_BASED_CR8_STORE_EXITING |
|
||||
+ VMX_CPU_BASED_TPR_SHADOW | VMX_CPU_BASED_VIRTUAL_NMI_PENDING |
|
||||
+ VMX_CPU_BASED_MOV_DR_EXITING | VMX_CPU_BASED_UNCOND_IO_EXITING |
|
||||
+ VMX_CPU_BASED_USE_IO_BITMAPS | VMX_CPU_BASED_MONITOR_TRAP_FLAG |
|
||||
+ VMX_CPU_BASED_USE_MSR_BITMAPS | VMX_CPU_BASED_MONITOR_EXITING |
|
||||
+ VMX_CPU_BASED_PAUSE_EXITING |
|
||||
+ VMX_CPU_BASED_ACTIVATE_SECONDARY_CONTROLS,
|
||||
+ .features[FEAT_VMX_SECONDARY_CTLS] =
|
||||
+ VMX_SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES |
|
||||
+ VMX_SECONDARY_EXEC_ENABLE_EPT | VMX_SECONDARY_EXEC_DESC |
|
||||
+ VMX_SECONDARY_EXEC_RDTSCP |
|
||||
+ VMX_SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE |
|
||||
+ VMX_SECONDARY_EXEC_ENABLE_VPID | VMX_SECONDARY_EXEC_WBINVD_EXITING |
|
||||
+ VMX_SECONDARY_EXEC_UNRESTRICTED_GUEST |
|
||||
+ VMX_SECONDARY_EXEC_APIC_REGISTER_VIRT |
|
||||
+ VMX_SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY |
|
||||
+ VMX_SECONDARY_EXEC_RDRAND_EXITING |
|
||||
+ VMX_SECONDARY_EXEC_ENABLE_INVPCID |
|
||||
+ VMX_SECONDARY_EXEC_ENABLE_VMFUNC | VMX_SECONDARY_EXEC_SHADOW_VMCS |
|
||||
+ VMX_SECONDARY_EXEC_RDSEED_EXITING | VMX_SECONDARY_EXEC_ENABLE_PML |
|
||||
+ VMX_SECONDARY_EXEC_XSAVES,
|
||||
+ .features[FEAT_VMX_VMFUNC] =
|
||||
+ MSR_VMX_VMFUNC_EPT_SWITCHING,
|
||||
+ .xlevel = 0x80000008,
|
||||
+ .model_id = "Intel Xeon Processor (SierraForest)",
|
||||
+ .versions = (X86CPUVersionDefinition[]) {
|
||||
+ { .version = 1 },
|
||||
+ { /* end of list */ },
|
||||
+ },
|
||||
+ },
|
||||
{
|
||||
.name = "Denverton",
|
||||
.level = 21,
|
||||
--
|
||||
2.27.0
|
||||
|
||||
47
target-i386-Export-RFDS-bit-to-guests.patch
Normal file
47
target-i386-Export-RFDS-bit-to-guests.patch
Normal file
@ -0,0 +1,47 @@
|
||||
From b167617657fa078c4ea14cf54138ff5a4ce180f3 Mon Sep 17 00:00:00 2001
|
||||
From: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
|
||||
Date: Wed, 13 Mar 2024 07:53:23 -0700
|
||||
Subject: [PATCH] target/i386: Export RFDS bit to guests
|
||||
|
||||
commit 41bdd9812863c150284a9339a048ed88c40f4df7 upstream.
|
||||
|
||||
Register File Data Sampling (RFDS) is a CPU side-channel vulnerability
|
||||
that may expose stale register value. CPUs that set RFDS_NO bit in MSR
|
||||
IA32_ARCH_CAPABILITIES indicate that they are not vulnerable to RFDS.
|
||||
Similarly, RFDS_CLEAR indicates that CPU is affected by RFDS, and has
|
||||
the microcode to help mitigate RFDS.
|
||||
|
||||
Make RFDS_CLEAR and RFDS_NO bits available to guests.
|
||||
|
||||
Intel-SIG: commit 41bdd9812863 target/i386: Export RFDS bit to guests.
|
||||
8.2.0-Add SRF CPU module support
|
||||
|
||||
Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
|
||||
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
|
||||
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
|
||||
Message-ID: <9a38877857392b5c2deae7e7db1b170d15510314.1710341348.git.pawan.kumar.gupta@linux.intel.com>
|
||||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||||
[ Quanxian Wang: amend commit log ]
|
||||
Signed-off-by: Quanxian Wang <quanxian.wang@intel.com>
|
||||
---
|
||||
target/i386/cpu.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
|
||||
index 57a832cea2..fd32c64f99 100644
|
||||
--- a/target/i386/cpu.c
|
||||
+++ b/target/i386/cpu.c
|
||||
@@ -1157,8 +1157,8 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
|
||||
NULL, "sbdr-ssdp-no", "fbsdp-no", "psdp-no",
|
||||
NULL, "fb-clear", NULL, NULL,
|
||||
NULL, NULL, NULL, NULL,
|
||||
- "pbrsb-no", NULL, "gds-no", NULL,
|
||||
- NULL, NULL, NULL, NULL,
|
||||
+ "pbrsb-no", NULL, "gds-no", "rfds-no",
|
||||
+ "rfds-clear", NULL, NULL, NULL,
|
||||
},
|
||||
.msr = {
|
||||
.index = MSR_IA32_ARCH_CAPABILITIES,
|
||||
--
|
||||
2.27.0
|
||||
|
||||
64
target-i386-Introduce-Icelake-Server-v7-to-enable-TS.patch
Normal file
64
target-i386-Introduce-Icelake-Server-v7-to-enable-TS.patch
Normal file
@ -0,0 +1,64 @@
|
||||
From 8f2e7e0ebc4351d61091669137a4e26b78f3cb27 Mon Sep 17 00:00:00 2001
|
||||
From: Zhenzhong Duan <zhenzhong.duan@intel.com>
|
||||
Date: Wed, 20 Mar 2024 17:31:38 +0800
|
||||
Subject: [PATCH] target/i386: Introduce Icelake-Server-v7 to enable TSX
|
||||
|
||||
commit c895fa54e3060c5ac6f3888dce96c9b78626072b upstream.
|
||||
|
||||
When start L2 guest with both L1/L2 using Icelake-Server-v3 or above,
|
||||
QEMU reports below warning:
|
||||
|
||||
"warning: host doesn't support requested feature: MSR(10AH).taa-no [bit 8]"
|
||||
|
||||
Reason is QEMU Icelake-Server-v3 has TSX feature disabled but enables taa-no
|
||||
bit. It's meaningless that TSX isn't supported but still claim TSX is secure.
|
||||
So L1 KVM doesn't expose taa-no to L2 if TSX is unsupported, then starting L2
|
||||
triggers the warning.
|
||||
|
||||
Fix it by introducing a new version Icelake-Server-v7 which has both TSX
|
||||
and taa-no features. Then guest can use TSX securely when it see taa-no.
|
||||
|
||||
This matches the production Icelake which supports TSX and isn't susceptible
|
||||
to TSX Async Abort (TAA) vulnerabilities, a.k.a, taa-no.
|
||||
|
||||
Ideally, TSX should have being enabled together with taa-no since v3, but for
|
||||
compatibility, we'd better to add v7 to enable it.
|
||||
|
||||
Fixes: d965dc35592d ("target/i386: Add ARCH_CAPABILITIES related bits into Icelake-Server CPU model")
|
||||
Intel-SIG: commit c895fa54e306 target/i386: Introduce Icelake-Server-v7 to enable TSX.
|
||||
8.2.0-Add SRF CPU module support
|
||||
|
||||
Tested-by: Xiangfei Ma <xiangfeix.ma@intel.com>
|
||||
Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
|
||||
Message-ID: <20240320093138.80267-2-zhenzhong.duan@intel.com>
|
||||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||||
[ Quanxian Wang: amend commit log ]
|
||||
Signed-off-by: Quanxian Wang <quanxian.wang@intel.com>
|
||||
---
|
||||
target/i386/cpu.c | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
|
||||
index 491cf40cc7..6abe33946c 100644
|
||||
--- a/target/i386/cpu.c
|
||||
+++ b/target/i386/cpu.c
|
||||
@@ -3822,6 +3822,16 @@ static const X86CPUDefinition builtin_x86_defs[] = {
|
||||
{ /* end of list */ }
|
||||
},
|
||||
},
|
||||
+ {
|
||||
+ .version = 7,
|
||||
+ .note = "TSX, taa-no",
|
||||
+ .props = (PropValue[]) {
|
||||
+ /* Restore TSX features removed by -v2 above */
|
||||
+ { "hle", "on" },
|
||||
+ { "rtm", "on" },
|
||||
+ { /* end of list */ }
|
||||
+ },
|
||||
+ },
|
||||
{ /* end of list */ }
|
||||
}
|
||||
},
|
||||
--
|
||||
2.27.0
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user