mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-06 01:03:55 -06:00
Merge commit 'df84f17
' into HEAD
This merge fixes a semantic conflict with the trivial tree. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
commit
673652a785
46 changed files with 2224 additions and 1034 deletions
|
@ -36,11 +36,11 @@
|
|||
#include "hw/rtc/mc146818rtc.h"
|
||||
#include "hw/xen/xen.h"
|
||||
#include "sysemu/kvm.h"
|
||||
#include "kvm_i386.h"
|
||||
#include "hw/kvm/clock.h"
|
||||
#include "hw/pci-host/q35.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "exec/address-spaces.h"
|
||||
#include "hw/i386/x86.h"
|
||||
#include "hw/i386/pc.h"
|
||||
#include "hw/i386/ich9.h"
|
||||
#include "hw/i386/amd_iommu.h"
|
||||
|
@ -115,6 +115,7 @@ static void pc_q35_init(MachineState *machine)
|
|||
{
|
||||
PCMachineState *pcms = PC_MACHINE(machine);
|
||||
PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms);
|
||||
X86MachineState *x86ms = X86_MACHINE(machine);
|
||||
Q35PCIHost *q35_host;
|
||||
PCIHostState *phb;
|
||||
PCIBus *host_bus;
|
||||
|
@ -128,7 +129,6 @@ static void pc_q35_init(MachineState *machine)
|
|||
MemoryRegion *ram_memory;
|
||||
GSIState *gsi_state;
|
||||
ISABus *isa_bus;
|
||||
qemu_irq *i8259;
|
||||
int i;
|
||||
ICH9LPCState *ich9_lpc;
|
||||
PCIDevice *ahci;
|
||||
|
@ -152,34 +152,34 @@ static void pc_q35_init(MachineState *machine)
|
|||
/* Handle the machine opt max-ram-below-4g. It is basically doing
|
||||
* min(qemu limit, user limit).
|
||||
*/
|
||||
if (!pcms->max_ram_below_4g) {
|
||||
pcms->max_ram_below_4g = 1ULL << 32; /* default: 4G */;
|
||||
if (!x86ms->max_ram_below_4g) {
|
||||
x86ms->max_ram_below_4g = 4 * GiB;
|
||||
}
|
||||
if (lowmem > pcms->max_ram_below_4g) {
|
||||
lowmem = pcms->max_ram_below_4g;
|
||||
if (lowmem > x86ms->max_ram_below_4g) {
|
||||
lowmem = x86ms->max_ram_below_4g;
|
||||
if (machine->ram_size - lowmem > lowmem &&
|
||||
lowmem & (1 * GiB - 1)) {
|
||||
warn_report("There is possibly poor performance as the ram size "
|
||||
" (0x%" PRIx64 ") is more then twice the size of"
|
||||
" max-ram-below-4g (%"PRIu64") and"
|
||||
" max-ram-below-4g is not a multiple of 1G.",
|
||||
(uint64_t)machine->ram_size, pcms->max_ram_below_4g);
|
||||
(uint64_t)machine->ram_size, x86ms->max_ram_below_4g);
|
||||
}
|
||||
}
|
||||
|
||||
if (machine->ram_size >= lowmem) {
|
||||
pcms->above_4g_mem_size = machine->ram_size - lowmem;
|
||||
pcms->below_4g_mem_size = lowmem;
|
||||
x86ms->above_4g_mem_size = machine->ram_size - lowmem;
|
||||
x86ms->below_4g_mem_size = lowmem;
|
||||
} else {
|
||||
pcms->above_4g_mem_size = 0;
|
||||
pcms->below_4g_mem_size = machine->ram_size;
|
||||
x86ms->above_4g_mem_size = 0;
|
||||
x86ms->below_4g_mem_size = machine->ram_size;
|
||||
}
|
||||
|
||||
if (xen_enabled()) {
|
||||
xen_hvm_init(pcms, &ram_memory);
|
||||
}
|
||||
|
||||
pc_cpus_init(pcms);
|
||||
x86_cpus_init(x86ms, pcmc->default_cpu_version);
|
||||
|
||||
kvmclock_create();
|
||||
|
||||
|
@ -209,16 +209,6 @@ static void pc_q35_init(MachineState *machine)
|
|||
rom_memory, &ram_memory);
|
||||
}
|
||||
|
||||
/* irq lines */
|
||||
gsi_state = g_malloc0(sizeof(*gsi_state));
|
||||
if (kvm_ioapic_in_kernel()) {
|
||||
kvm_pc_setup_irq_routing(pcmc->pci_enabled);
|
||||
pcms->gsi = qemu_allocate_irqs(kvm_pc_gsi_handler, gsi_state,
|
||||
GSI_NUM_PINS);
|
||||
} else {
|
||||
pcms->gsi = qemu_allocate_irqs(gsi_handler, gsi_state, GSI_NUM_PINS);
|
||||
}
|
||||
|
||||
/* create pci host bus */
|
||||
q35_host = Q35_HOST_DEVICE(qdev_create(NULL, TYPE_Q35_HOST_DEVICE));
|
||||
|
||||
|
@ -231,9 +221,9 @@ static void pc_q35_init(MachineState *machine)
|
|||
MCH_HOST_PROP_SYSTEM_MEM, NULL);
|
||||
object_property_set_link(OBJECT(q35_host), OBJECT(system_io),
|
||||
MCH_HOST_PROP_IO_MEM, NULL);
|
||||
object_property_set_int(OBJECT(q35_host), pcms->below_4g_mem_size,
|
||||
object_property_set_int(OBJECT(q35_host), x86ms->below_4g_mem_size,
|
||||
PCI_HOST_BELOW_4G_MEM_SIZE, NULL);
|
||||
object_property_set_int(OBJECT(q35_host), pcms->above_4g_mem_size,
|
||||
object_property_set_int(OBJECT(q35_host), x86ms->above_4g_mem_size,
|
||||
PCI_HOST_ABOVE_4G_MEM_SIZE, NULL);
|
||||
/* pci */
|
||||
qdev_init_nofail(DEVICE(q35_host));
|
||||
|
@ -252,34 +242,26 @@ static void pc_q35_init(MachineState *machine)
|
|||
object_property_set_link(OBJECT(machine), OBJECT(lpc),
|
||||
PC_MACHINE_ACPI_DEVICE_PROP, &error_abort);
|
||||
|
||||
/* irq lines */
|
||||
gsi_state = pc_gsi_create(&x86ms->gsi, pcmc->pci_enabled);
|
||||
|
||||
ich9_lpc = ICH9_LPC_DEVICE(lpc);
|
||||
lpc_dev = DEVICE(lpc);
|
||||
for (i = 0; i < GSI_NUM_PINS; i++) {
|
||||
qdev_connect_gpio_out_named(lpc_dev, ICH9_GPIO_GSI, i, pcms->gsi[i]);
|
||||
qdev_connect_gpio_out_named(lpc_dev, ICH9_GPIO_GSI, i, x86ms->gsi[i]);
|
||||
}
|
||||
pci_bus_irqs(host_bus, ich9_lpc_set_irq, ich9_lpc_map_irq, ich9_lpc,
|
||||
ICH9_LPC_NB_PIRQS);
|
||||
pci_bus_set_route_irq_fn(host_bus, ich9_route_intx_pin_to_irq);
|
||||
isa_bus = ich9_lpc->isa_bus;
|
||||
|
||||
if (kvm_pic_in_kernel()) {
|
||||
i8259 = kvm_i8259_init(isa_bus);
|
||||
} else if (xen_enabled()) {
|
||||
i8259 = xen_interrupt_controller_init();
|
||||
} else {
|
||||
i8259 = i8259_init(isa_bus, pc_allocate_cpu_irq());
|
||||
}
|
||||
|
||||
for (i = 0; i < ISA_NUM_IRQS; i++) {
|
||||
gsi_state->i8259_irq[i] = i8259[i];
|
||||
}
|
||||
g_free(i8259);
|
||||
pc_i8259_create(isa_bus, gsi_state->i8259_irq);
|
||||
|
||||
if (pcmc->pci_enabled) {
|
||||
ioapic_init_gsi(gsi_state, "q35");
|
||||
}
|
||||
|
||||
pc_register_ferr_irq(pcms->gsi[13]);
|
||||
pc_register_ferr_irq(x86ms->gsi[13]);
|
||||
|
||||
assert(pcms->vmport != ON_OFF_AUTO__MAX);
|
||||
if (pcms->vmport == ON_OFF_AUTO_AUTO) {
|
||||
|
@ -287,7 +269,7 @@ static void pc_q35_init(MachineState *machine)
|
|||
}
|
||||
|
||||
/* init basic PC hardware */
|
||||
pc_basic_device_init(isa_bus, pcms->gsi, &rtc_state, !mc->no_floppy,
|
||||
pc_basic_device_init(isa_bus, x86ms->gsi, &rtc_state, !mc->no_floppy,
|
||||
(pcms->vmport != ON_OFF_AUTO_ON), pcms->pit_enabled,
|
||||
0xff0104);
|
||||
|
||||
|
@ -330,7 +312,7 @@ static void pc_q35_init(MachineState *machine)
|
|||
|
||||
if (machine->nvdimms_state->is_enabled) {
|
||||
nvdimm_init_acpi_state(machine->nvdimms_state, system_io,
|
||||
pcms->fw_cfg, OBJECT(pcms));
|
||||
x86ms->fw_cfg, OBJECT(pcms));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue