diff options
author | Anthony Liguori <aliguori@us.ibm.com> | 2013-06-04 14:58:58 -0500 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2013-06-04 14:58:58 -0500 |
commit | 8819c10b5d55d537d59a0ffd5d623f348fc36c47 (patch) | |
tree | 21bc8ae625e1622834c3f0bf14da12c167619167 | |
parent | a3416197447e7846a927b6ccb4f1edb3a1982443 (diff) | |
parent | 9cdf79d068f52f7de347cb45cfd8903519410e4d (diff) |
Merge remote-tracking branch 'sstabellini/xen_fixes_20130603' into staging
* sstabellini/xen_fixes_20130603:
xen: use pc_init_pci instead of pc_init_pci_no_kvmclock
xen: remove xen_vcpu_init
xen: start PCI hole at 0xe0000000 (same as pc_init1 and qemu-xen-traditional)
xen_machine_pv: do not create a dummy CPU in machine->init
main_loop: do not set nonblocking if xen_enabled()
xen: simplify xen_enabled
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
-rw-r--r-- | hw/i386/pc_piix.c | 11 | ||||
-rw-r--r-- | hw/i386/xen_machine_pv.c | 16 | ||||
-rw-r--r-- | include/hw/i386/pc.h | 3 | ||||
-rw-r--r-- | include/hw/xen/xen.h | 5 | ||||
-rw-r--r-- | vl.c | 2 | ||||
-rw-r--r-- | xen-all.c | 35 |
6 files changed, 15 insertions, 57 deletions
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c index d547548866..d6185705a6 100644 --- a/hw/i386/pc_piix.c +++ b/hw/i386/pc_piix.c @@ -98,13 +98,13 @@ static void pc_init1(MemoryRegion *system_memory, pc_cpus_init(cpu_model, icc_bridge); pc_acpi_init("acpi-dsdt.aml"); - if (kvmclock_enabled) { + if (kvm_enabled() && kvmclock_enabled) { kvmclock_create(); } - if (ram_size >= 0xe0000000 ) { - above_4g_mem_size = ram_size - 0xe0000000; - below_4g_mem_size = 0xe0000000; + if (ram_size >= QEMU_BELOW_4G_RAM_END ) { + above_4g_mem_size = ram_size - QEMU_BELOW_4G_RAM_END; + below_4g_mem_size = QEMU_BELOW_4G_RAM_END; } else { above_4g_mem_size = 0; below_4g_mem_size = ram_size; @@ -323,8 +323,7 @@ static void pc_xen_hvm_init(QEMUMachineInitArgs *args) if (xen_hvm_init() != 0) { hw_error("xen hardware virtual machine initialisation failed"); } - pc_init_pci_no_kvmclock(args); - xen_vcpu_init(); + pc_init_pci(args); } #endif diff --git a/hw/i386/xen_machine_pv.c b/hw/i386/xen_machine_pv.c index f829a52232..9f2e2918f0 100644 --- a/hw/i386/xen_machine_pv.c +++ b/hw/i386/xen_machine_pv.c @@ -23,7 +23,6 @@ */ #include "hw/hw.h" -#include "hw/i386/pc.h" #include "hw/boards.h" #include "hw/xen/xen_backend.h" #include "xen_domainbuild.h" @@ -31,27 +30,12 @@ static void xen_init_pv(QEMUMachineInitArgs *args) { - const char *cpu_model = args->cpu_model; const char *kernel_filename = args->kernel_filename; const char *kernel_cmdline = args->kernel_cmdline; const char *initrd_filename = args->initrd_filename; - X86CPU *cpu; - CPUState *cs; DriveInfo *dinfo; int i; - /* Initialize a dummy CPU */ - if (cpu_model == NULL) { -#ifdef TARGET_X86_64 - cpu_model = "qemu64"; -#else - cpu_model = "qemu32"; -#endif - } - cpu = cpu_x86_init(cpu_model); - cs = CPU(cpu); - cs->halted = 1; - /* Initialize backend core & drivers */ if (xen_be_init() != 0) { fprintf(stderr, "%s: xen backend core setup failed\n", __FUNCTION__); diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h index b4c8a74ef7..61540587a4 100644 --- a/include/hw/i386/pc.h +++ b/include/hw/i386/pc.h @@ -77,6 +77,9 @@ extern int fd_bootchk; void pc_register_ferr_irq(qemu_irq irq); void pc_acpi_smi_interrupt(void *opaque, int irq, int level); +#define QEMU_BELOW_4G_RAM_END 0xe0000000 +#define QEMU_BELOW_4G_MMIO_LENGTH ((1ULL << 32) - QEMU_BELOW_4G_RAM_END) + void pc_cpus_init(const char *cpu_model, DeviceState *icc_bridge); void pc_hot_add_cpu(const int64_t id, Error **errp); void pc_acpi_init(const char *default_dsdt); diff --git a/include/hw/xen/xen.h b/include/hw/xen/xen.h index 7451c5a0bf..6d42dd1bd1 100644 --- a/include/hw/xen/xen.h +++ b/include/hw/xen/xen.h @@ -25,11 +25,7 @@ extern bool xen_allowed; static inline bool xen_enabled(void) { -#if defined(CONFIG_XEN_BACKEND) && defined(CONFIG_XEN) return xen_allowed; -#else - return 0; -#endif } int xen_pci_slot_get_pirq(PCIDevice *pci_dev, int irq_num); @@ -42,7 +38,6 @@ qemu_irq *xen_interrupt_controller_init(void); int xen_init(void); int xen_hvm_init(void); -void xen_vcpu_init(void); void xenstore_store_pv_console_info(int i, struct CharDriverState *chr); #if defined(NEED_CPU_H) && !defined(CONFIG_USER_ONLY) @@ -2022,7 +2022,7 @@ static void main_loop(void) int64_t ti; #endif do { - nonblocking = !kvm_enabled() && last_io > 0; + nonblocking = !kvm_enabled() && !xen_enabled() && last_io > 0; #ifdef CONFIG_PROFILER ti = profile_getclock(); #endif @@ -161,18 +161,18 @@ static void xen_ram_init(ram_addr_t ram_size) ram_addr_t block_len; block_len = ram_size; - if (ram_size >= HVM_BELOW_4G_RAM_END) { + if (ram_size >= QEMU_BELOW_4G_RAM_END) { /* Xen does not allocate the memory continuously, and keep a hole at - * HVM_BELOW_4G_MMIO_START of HVM_BELOW_4G_MMIO_LENGTH + * QEMU_BELOW_4G_RAM_END of QEMU_BELOW_4G_MMIO_LENGTH */ - block_len += HVM_BELOW_4G_MMIO_LENGTH; + block_len += QEMU_BELOW_4G_MMIO_LENGTH; } memory_region_init_ram(&ram_memory, "xen.ram", block_len); vmstate_register_ram_global(&ram_memory); - if (ram_size >= HVM_BELOW_4G_RAM_END) { - above_4g_mem_size = ram_size - HVM_BELOW_4G_RAM_END; - below_4g_mem_size = HVM_BELOW_4G_RAM_END; + if (ram_size >= QEMU_BELOW_4G_RAM_END) { + above_4g_mem_size = ram_size - QEMU_BELOW_4G_RAM_END; + below_4g_mem_size = QEMU_BELOW_4G_RAM_END; } else { below_4g_mem_size = ram_size; } @@ -574,29 +574,6 @@ void qmp_xen_set_global_dirty_log(bool enable, Error **errp) } } -/* VCPU Operations, MMIO, IO ring ... */ - -static void xen_reset_vcpu(void *opaque) -{ - CPUState *cpu = opaque; - - cpu->halted = 1; -} - -void xen_vcpu_init(void) -{ - if (first_cpu != NULL) { - CPUState *cpu = ENV_GET_CPU(first_cpu); - - qemu_register_reset(xen_reset_vcpu, cpu); - xen_reset_vcpu(cpu); - } - /* if rtc_clock is left to default (host_clock), disable it */ - if (rtc_clock == host_clock) { - qemu_clock_enable(rtc_clock, false); - } -} - /* get the ioreq packets from share mem */ static ioreq_t *cpu_get_ioreq_from_shared_memory(XenIOState *state, int vcpu) { |