mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-01 23:03:54 -06:00
Merge remote-tracking branch 'qemu-kvm/uq/master' into staging
* qemu-kvm/uq/master: kvm: Activate in-kernel irqchip support kvm: x86: Add user space part for in-kernel IOAPIC kvm: x86: Add user space part for in-kernel i8259 kvm: x86: Add user space part for in-kernel APIC kvm: x86: Establish IRQ0 override control kvm: Introduce core services for in-kernel irqchip support memory: Introduce memory_region_init_reservation ioapic: Factor out base class for KVM reuse ioapic: Drop post-load irr initialization i8259: Factor out base class for KVM reuse i8259: Completely privatize PicState apic: Open-code timer save/restore apic: Factor out base class for KVM reuse apic: Introduce apic_report_irq_delivered apic: Inject external NMI events via LINT1 apic: Stop timer on reset kvm: Move kvmclock into hw/kvm folder msi: Generalize msix_supported to msi_supported hyper-v: initialize Hyper-V CPUID leaves. hyper-v: introduce Hyper-V support infrastructure. Conflicts: Makefile.target Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
commit
5b4448d27d
40 changed files with 1903 additions and 594 deletions
20
hw/pc.c
20
hw/pc.c
|
@ -36,9 +36,10 @@
|
|||
#include "elf.h"
|
||||
#include "multiboot.h"
|
||||
#include "mc146818rtc.h"
|
||||
#include "msix.h"
|
||||
#include "msi.h"
|
||||
#include "sysbus.h"
|
||||
#include "sysemu.h"
|
||||
#include "kvm.h"
|
||||
#include "blockdev.h"
|
||||
#include "ui/qemu-spice.h"
|
||||
#include "memory.h"
|
||||
|
@ -609,7 +610,7 @@ static void *bochs_bios_init(void)
|
|||
fw_cfg_add_i64(fw_cfg, FW_CFG_RAM_SIZE, (uint64_t)ram_size);
|
||||
fw_cfg_add_bytes(fw_cfg, FW_CFG_ACPI_TABLES, (uint8_t *)acpi_tables,
|
||||
acpi_tables_len);
|
||||
fw_cfg_add_bytes(fw_cfg, FW_CFG_IRQ0_OVERRIDE, &irq0override, 1);
|
||||
fw_cfg_add_i32(fw_cfg, FW_CFG_IRQ0_OVERRIDE, kvm_allows_irq0_override());
|
||||
|
||||
smbios_table = smbios_get_table(&smbios_len);
|
||||
if (smbios_table)
|
||||
|
@ -878,25 +879,30 @@ DeviceState *cpu_get_current_apic(void)
|
|||
static DeviceState *apic_init(void *env, uint8_t apic_id)
|
||||
{
|
||||
DeviceState *dev;
|
||||
SysBusDevice *d;
|
||||
static int apic_mapped;
|
||||
|
||||
dev = qdev_create(NULL, "apic");
|
||||
if (kvm_enabled() && kvm_irqchip_in_kernel()) {
|
||||
dev = qdev_create(NULL, "kvm-apic");
|
||||
} else {
|
||||
dev = qdev_create(NULL, "apic");
|
||||
}
|
||||
qdev_prop_set_uint8(dev, "id", apic_id);
|
||||
qdev_prop_set_ptr(dev, "cpu_env", env);
|
||||
qdev_init_nofail(dev);
|
||||
d = sysbus_from_qdev(dev);
|
||||
|
||||
/* XXX: mapping more APICs at the same memory location */
|
||||
if (apic_mapped == 0) {
|
||||
/* NOTE: the APIC is directly connected to the CPU - it is not
|
||||
on the global memory bus. */
|
||||
/* XXX: what if the base changes? */
|
||||
sysbus_mmio_map(d, 0, MSI_ADDR_BASE);
|
||||
sysbus_mmio_map(sysbus_from_qdev(dev), 0, MSI_ADDR_BASE);
|
||||
apic_mapped = 1;
|
||||
}
|
||||
|
||||
msix_supported = 1;
|
||||
/* KVM does not support MSI yet. */
|
||||
if (!kvm_enabled() || !kvm_irqchip_in_kernel()) {
|
||||
msi_supported = true;
|
||||
}
|
||||
|
||||
return dev;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue