You need to remove 'Message' from the summary.
On Tue, Oct 20, 2020 at 09:14:34PM +0800, Ying Fang wrote: > When building ACPI tables regarding CPUs we should always build > them for the number of possible CPUs, not the number of present > CPUs. We then ensure only the present CPUs are enabled. > > Signed-off-by: Andrew Jones <drjo...@redhat.com> I guess my s-o-b is here because this is a rework of https://github.com/rhdrjones/qemu/commit/b18d7a889f424b8a8679c43d7f4804fdeeeaf3fd I think it changed enough you could just drop my authorship. A based-on comment in the commit message would be more than enough. Comment on the patch below. > Signed-off-by: Ying Fang <fangyi...@huawei.com> > --- > hw/arm/virt-acpi-build.c | 17 ++++++++++++----- > 1 file changed, 12 insertions(+), 5 deletions(-) > > diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c > index a222981737..fae5a26741 100644 > --- a/hw/arm/virt-acpi-build.c > +++ b/hw/arm/virt-acpi-build.c > @@ -57,14 +57,18 @@ > > #define ARM_SPI_BASE 32 > > -static void acpi_dsdt_add_cpus(Aml *scope, int cpus) > +static void acpi_dsdt_add_cpus(Aml *scope, VirtMachineState *vms) > { > uint16_t i; > + CPUArchIdList *possible_cpus = MACHINE(vms)->possible_cpus; > > - for (i = 0; i < cpus; i++) { > + for (i = 0; i < possible_cpus->len; i++) { > Aml *dev = aml_device("C%.03X", i); > aml_append(dev, aml_name_decl("_HID", aml_string("ACPI0007"))); > aml_append(dev, aml_name_decl("_UID", aml_int(i))); > + if (possible_cpus->cpus[i].cpu == NULL) { > + aml_append(dev, aml_name_decl("_STA", aml_int(0))); > + } > aml_append(scope, dev); > } > } > @@ -470,6 +474,7 @@ build_madt(GArray *table_data, BIOSLinker *linker, > VirtMachineState *vms) > const int *irqmap = vms->irqmap; > AcpiMadtGenericDistributor *gicd; > AcpiMadtGenericMsiFrame *gic_msi; > + int possible_cpus = MACHINE(vms)->possible_cpus->len; > int i; > > acpi_data_push(table_data, sizeof(AcpiMultipleApicTable)); > @@ -480,7 +485,7 @@ build_madt(GArray *table_data, BIOSLinker *linker, > VirtMachineState *vms) > gicd->base_address = cpu_to_le64(memmap[VIRT_GIC_DIST].base); > gicd->version = vms->gic_version; > > - for (i = 0; i < MACHINE(vms)->smp.cpus; i++) { > + for (i = 0; i < possible_cpus; i++) { > AcpiMadtGenericCpuInterface *gicc = acpi_data_push(table_data, > sizeof(*gicc)); > ARMCPU *armcpu = ARM_CPU(qemu_get_cpu(i)); > @@ -495,7 +500,9 @@ build_madt(GArray *table_data, BIOSLinker *linker, > VirtMachineState *vms) > gicc->cpu_interface_number = cpu_to_le32(i); > gicc->arm_mpidr = cpu_to_le64(armcpu->mp_affinity); > gicc->uid = cpu_to_le32(i); > - gicc->flags = cpu_to_le32(ACPI_MADT_GICC_ENABLED); > + if (i < MACHINE(vms)->smp.cpus) { Shouldn't this be if (possible_cpus->cpus[i].cpu != NULL) { > + gicc->flags = cpu_to_le32(ACPI_MADT_GICC_ENABLED); > + } > > if (arm_feature(&armcpu->env, ARM_FEATURE_PMU)) { > gicc->performance_interrupt = cpu_to_le32(PPI(VIRTUAL_PMU_IRQ)); > @@ -599,7 +606,7 @@ build_dsdt(GArray *table_data, BIOSLinker *linker, > VirtMachineState *vms) > * the RTC ACPI device at all when using UEFI. > */ > scope = aml_scope("\\_SB"); > - acpi_dsdt_add_cpus(scope, ms->smp.cpus); > + acpi_dsdt_add_cpus(scope, vms); > acpi_dsdt_add_uart(scope, &memmap[VIRT_UART], > (irqmap[VIRT_UART] + ARM_SPI_BASE)); > if (vmc->acpi_expose_flash) { > -- > 2.23.0 > > Thanks, drew