QEMU update to version 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 Signed-off-by: Jiabo Feng <fengjiabo1@huawei.com>
This commit is contained in:
parent
27369600da
commit
7e5f6fca0d
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
|
Name: qemu
|
||||||
Version: 8.2.0
|
Version: 8.2.0
|
||||||
Release: 11
|
Release: 12
|
||||||
Epoch: 11
|
Epoch: 11
|
||||||
Summary: QEMU is a generic and open source machine emulator and virtualizer
|
Summary: QEMU is a generic and open source machine emulator and virtualizer
|
||||||
License: GPLv2 and BSD and MIT and CC-BY-SA-4.0
|
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
|
Patch0234: hw-char-virtio-serial-bus-Protect-from-DMA-re-entran.patch
|
||||||
Patch0235: hw-virtio-virtio-crypto-Protect-from-DMA-re-entrancy.patch
|
Patch0235: hw-virtio-virtio-crypto-Protect-from-DMA-re-entrancy.patch
|
||||||
Patch0236: hw-sd-sdhci-Do-not-update-TRNMOD-when-Command-Inhibi.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: flex
|
||||||
BuildRequires: gcc
|
BuildRequires: gcc
|
||||||
@ -847,6 +856,17 @@ getent passwd qemu >/dev/null || \
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%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
|
* Wed Apr 17 2024 zhangxianting <zhangxianting@uniontech.com> - 11:8.2.0-11
|
||||||
- remove chrpath
|
- 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