pc_madt_cpu_entry() is now only used in target/i386/cpu, so move it there, and unexport and rename it.
Signed-off-by: Bernhard Beschow <shen...@gmail.com> --- include/hw/i386/pc.h | 4 ---- hw/acpi/acpi-x86-stub.c | 6 ------ hw/i386/acpi-common.c | 33 --------------------------------- target/i386/cpu.c | 37 +++++++++++++++++++++++++++++++++++-- 4 files changed, 35 insertions(+), 45 deletions(-) diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h index 66e3d059ef..9ab1818812 100644 --- a/include/hw/i386/pc.h +++ b/include/hw/i386/pc.h @@ -191,10 +191,6 @@ bool pc_system_ovmf_table_find(const char *entry, uint8_t **data, int *data_len); void pc_system_parse_ovmf_flash(uint8_t *flash_ptr, size_t flash_size); -/* hw/i386/acpi-common.c */ -void pc_madt_cpu_entry(int uid, const CPUArchIdList *apic_ids, - GArray *entry, bool force_enabled); - /* sgx.c */ void pc_machine_init_sgx_epc(PCMachineState *pcms); diff --git a/hw/acpi/acpi-x86-stub.c b/hw/acpi/acpi-x86-stub.c index d0d399d26b..9662a594ad 100644 --- a/hw/acpi/acpi-x86-stub.c +++ b/hw/acpi/acpi-x86-stub.c @@ -1,12 +1,6 @@ #include "qemu/osdep.h" -#include "hw/i386/pc.h" #include "hw/i386/acpi-build.h" -void pc_madt_cpu_entry(int uid, const CPUArchIdList *apic_ids, - GArray *entry, bool force_enabled) -{ -} - Object *acpi_get_i386_pci_host(void) { return NULL; diff --git a/hw/i386/acpi-common.c b/hw/i386/acpi-common.c index 0d1a2bb8aa..0041623aeb 100644 --- a/hw/i386/acpi-common.c +++ b/hw/i386/acpi-common.c @@ -28,44 +28,11 @@ #include "hw/acpi/acpi_cpu_interface.h" #include "hw/acpi/aml-build.h" #include "hw/acpi/utils.h" -#include "hw/i386/pc.h" #include "target/i386/cpu.h" #include "acpi-build.h" #include "acpi-common.h" -void pc_madt_cpu_entry(int uid, const CPUArchIdList *apic_ids, - GArray *entry, bool force_enabled) -{ - uint32_t apic_id = apic_ids->cpus[uid].arch_id; - /* Flags – Local APIC Flags */ - uint32_t flags = apic_ids->cpus[uid].cpu != NULL || force_enabled ? - 1 /* Enabled */ : 0; - - /* ACPI spec says that LAPIC entry for non present - * CPU may be omitted from MADT or it must be marked - * as disabled. However omitting non present CPU from - * MADT breaks hotplug on linux. So possible CPUs - * should be put in MADT but kept disabled. - */ - if (apic_id < 255) { - /* Rev 1.0b, Table 5-13 Processor Local APIC Structure */ - build_append_int_noprefix(entry, 0, 1); /* Type */ - build_append_int_noprefix(entry, 8, 1); /* Length */ - build_append_int_noprefix(entry, uid, 1); /* ACPI Processor ID */ - build_append_int_noprefix(entry, apic_id, 1); /* APIC ID */ - build_append_int_noprefix(entry, flags, 4); /* Flags */ - } else { - /* Rev 4.0, 5.2.12.12 Processor Local x2APIC Structure */ - build_append_int_noprefix(entry, 9, 1); /* Type */ - build_append_int_noprefix(entry, 16, 1); /* Length */ - build_append_int_noprefix(entry, 0, 2); /* Reserved */ - build_append_int_noprefix(entry, apic_id, 4); /* X2APIC ID */ - build_append_int_noprefix(entry, flags, 4); /* Flags */ - build_append_int_noprefix(entry, uid, 4); /* ACPI Processor UID */ - } -} - static void build_ioapic(GArray *entry, uint8_t id, uint32_t addr, uint32_t irq) { /* Rev 1.0b, 5.2.8.2 IO APIC */ diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 6ac50506a7..b05062bc57 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -38,8 +38,8 @@ #ifndef CONFIG_USER_ONLY #include "exec/address-spaces.h" #include "hw/acpi/acpi_cpu_interface.h" +#include "hw/acpi/aml-build.h" #include "hw/boards.h" -#include "hw/i386/pc.h" #include "hw/i386/sgx-epc.h" #endif @@ -7108,6 +7108,39 @@ static const struct SysemuCPUOps i386_sysemu_ops = { .write_elf64_qemunote = x86_cpu_write_elf64_qemunote, .legacy_vmsd = &vmstate_x86_cpu, }; + +static void x86_madt_cpu_entry(int uid, const CPUArchIdList *apic_ids, + GArray *entry, bool force_enabled) +{ + uint32_t apic_id = apic_ids->cpus[uid].arch_id; + /* Flags – Local APIC Flags */ + uint32_t flags = apic_ids->cpus[uid].cpu != NULL || force_enabled ? + 1 /* Enabled */ : 0; + + /* + * ACPI spec says that LAPIC entry for non present + * CPU may be omitted from MADT or it must be marked + * as disabled. However omitting non present CPU from + * MADT breaks hotplug on linux. So possible CPUs + * should be put in MADT but kept disabled. + */ + if (apic_id < 255) { + /* Rev 1.0b, Table 5-13 Processor Local APIC Structure */ + build_append_int_noprefix(entry, 0, 1); /* Type */ + build_append_int_noprefix(entry, 8, 1); /* Length */ + build_append_int_noprefix(entry, uid, 1); /* ACPI Processor ID */ + build_append_int_noprefix(entry, apic_id, 1); /* APIC ID */ + build_append_int_noprefix(entry, flags, 4); /* Flags */ + } else { + /* Rev 4.0, 5.2.12.12 Processor Local x2APIC Structure */ + build_append_int_noprefix(entry, 9, 1); /* Type */ + build_append_int_noprefix(entry, 16, 1); /* Length */ + build_append_int_noprefix(entry, 0, 2); /* Reserved */ + build_append_int_noprefix(entry, apic_id, 4); /* X2APIC ID */ + build_append_int_noprefix(entry, flags, 4); /* Flags */ + build_append_int_noprefix(entry, uid, 4); /* ACPI Processor UID */ + } +} #endif static void x86_cpu_common_class_init(ObjectClass *oc, void *data) @@ -7143,7 +7176,7 @@ static void x86_cpu_common_class_init(ObjectClass *oc, void *data) #ifndef CONFIG_USER_ONLY cc->sysemu_ops = &i386_sysemu_ops; - acpuac->madt_cpu = pc_madt_cpu_entry; + acpuac->madt_cpu = x86_madt_cpu_entry; #endif /* !CONFIG_USER_ONLY */ cc->gdb_arch_name = x86_gdb_arch_name; -- 2.39.1