diff --git a/hw-arm-virt-Init-PMU-for-hotplugged-vCPU.patch b/hw-arm-virt-Init-PMU-for-hotplugged-vCPU.patch new file mode 100644 index 0000000000000000000000000000000000000000..c124df5394121fdb0415b3b85d04fc3417a747aa --- /dev/null +++ b/hw-arm-virt-Init-PMU-for-hotplugged-vCPU.patch @@ -0,0 +1,73 @@ +From acc5162f1d1591ee4830f9b67934fc6d8a9ebbc1 Mon Sep 17 00:00:00 2001 +From: Keqian Zhu +Date: Tue, 8 Sep 2020 22:09:44 +0800 +Subject: [PATCH] hw/arm/virt: Init PMU for hotplugged vCPU + +Factor out PMU init code from fdt_add_pmu_nodes and +do PMU init for hotplugged vCPU. + +Signed-off-by: Keqian Zhu +--- + hw/arm/virt.c | 29 +++++++++++++++++++++-------- + 1 file changed, 21 insertions(+), 8 deletions(-) + +diff --git a/hw/arm/virt.c b/hw/arm/virt.c +index 7afc6c5e..7506d0ff 100644 +--- a/hw/arm/virt.c ++++ b/hw/arm/virt.c +@@ -605,6 +605,23 @@ static void fdt_add_gic_node(VirtMachineState *vms) + g_free(nodename); + } + ++static bool virt_cpu_init_pmu(const VirtMachineState *vms, CPUState *cpu) ++{ ++ ARMCPU *armcpu = ARM_CPU(cpu); ++ ++ if (!arm_feature(&armcpu->env, ARM_FEATURE_PMU)) { ++ return false; ++ } ++ if (kvm_enabled()) { ++ if (kvm_irqchip_in_kernel()) { ++ kvm_arm_pmu_set_irq(cpu, PPI(VIRTUAL_PMU_IRQ)); ++ } ++ kvm_arm_pmu_init(cpu); ++ } ++ ++ return true; ++} ++ + static void fdt_add_pmu_nodes(const VirtMachineState *vms) + { + CPUState *cpu; +@@ -612,16 +629,9 @@ static void fdt_add_pmu_nodes(const VirtMachineState *vms) + uint32_t irqflags = GIC_FDT_IRQ_FLAGS_LEVEL_HI; + + CPU_FOREACH(cpu) { +- armcpu = ARM_CPU(cpu); +- if (!arm_feature(&armcpu->env, ARM_FEATURE_PMU)) { ++ if (!virt_cpu_init_pmu(vms, cpu)) { + return; + } +- if (kvm_enabled()) { +- if (kvm_irqchip_in_kernel()) { +- kvm_arm_pmu_set_irq(cpu, PPI(VIRTUAL_PMU_IRQ)); +- } +- kvm_arm_pmu_init(cpu); +- } + } + + if (vms->gic_version == 2) { +@@ -2248,6 +2258,9 @@ static void virt_cpu_plug(HotplugHandler *hotplug_dev, + agcc->cpu_hotplug_realize(gicv3, ncpu); + connect_gic_cpu_irqs(vms, ncpu); + ++ /* Init PMU part */ ++ virt_cpu_init_pmu(vms, cs); ++ + /* Register CPU reset and trigger it manually */ + cpu_synchronize_state(cs); + cpu_hotplug_register_reset(ncpu); +-- +2.23.0 + + diff --git a/qemu.spec b/qemu.spec index 3af25b38187cc9f06e1a6386e71d812443a378d7..676116ce448e025d69ebda6c137e10ea336f0556 100644 --- a/qemu.spec +++ b/qemu.spec @@ -1,6 +1,6 @@ Name: qemu Version: 4.1.0 -Release: 54 +Release: 55 Epoch: 2 Summary: QEMU is a generic and open source machine emulator and virtualizer License: GPLv2 and BSD and MIT and CC-BY-SA-4.0 @@ -299,6 +299,7 @@ Patch0286: target-i386-Add-missed-security-features-to-Cooperla.patch Patch0287: target-i386-add-PSCHANGE_NO-bit-for-the-ARCH_CAPABIL.patch Patch0288: target-i386-Export-TAA_NO-bit-to-guests.patch Patch0289: usbredir-fix-free-call.patch +Patch0290: hw-arm-virt-Init-PMU-for-hotplugged-vCPU.patch BuildRequires: flex BuildRequires: bison @@ -696,6 +697,9 @@ getent passwd qemu >/dev/null || \ %endif %changelog +* Tue Aug 31 2021 imxcc +- hw/arm/virt: Init PMU for hotplugged vCPU + * Mon Aug 16 2021 Chen Qun - usbredir: fix free call