mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 23:33:54 -06:00
target-i386: Move APIC to ICC bus
It allows APIC to be hotplugged. * map APIC's mmio at board level if it is present * do not register mmio region for each APIC, since only one is used/mapped Signed-off-by: Igor Mammedov <imammedo@redhat.com> Signed-off-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
parent
62fc403f11
commit
53a89e262b
6 changed files with 42 additions and 24 deletions
13
hw/i386/pc.c
13
hw/i386/pc.c
|
@ -53,6 +53,7 @@
|
|||
#include "qemu/bitmap.h"
|
||||
#include "qemu/config-file.h"
|
||||
#include "hw/acpi/acpi.h"
|
||||
#include "hw/cpu/icc_bus.h"
|
||||
|
||||
/* debug PC/ISA interrupts */
|
||||
//#define DEBUG_IRQ
|
||||
|
@ -921,6 +922,7 @@ static X86CPU *pc_new_cpu(const char *cpu_model, int64_t apic_id,
|
|||
void pc_cpus_init(const char *cpu_model, DeviceState *icc_bridge)
|
||||
{
|
||||
int i;
|
||||
X86CPU *cpu = NULL;
|
||||
Error *error = NULL;
|
||||
|
||||
/* init CPUs */
|
||||
|
@ -933,14 +935,21 @@ void pc_cpus_init(const char *cpu_model, DeviceState *icc_bridge)
|
|||
}
|
||||
|
||||
for (i = 0; i < smp_cpus; i++) {
|
||||
pc_new_cpu(cpu_model, x86_cpu_apic_id_from_index(i),
|
||||
icc_bridge, &error);
|
||||
cpu = pc_new_cpu(cpu_model, x86_cpu_apic_id_from_index(i),
|
||||
icc_bridge, &error);
|
||||
if (error) {
|
||||
fprintf(stderr, "%s\n", error_get_pretty(error));
|
||||
error_free(error);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
/* map APIC MMIO area if CPU has APIC */
|
||||
if (cpu && cpu->env.apic_state) {
|
||||
/* XXX: what if the base changes? */
|
||||
sysbus_mmio_map_overlap(SYS_BUS_DEVICE(icc_bridge), 0,
|
||||
APIC_DEFAULT_ADDRESS, 0x1000);
|
||||
}
|
||||
}
|
||||
|
||||
void pc_acpi_init(const char *default_dsdt)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue