summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony Liguori <aliguori@us.ibm.com>2013-06-04 14:58:58 -0500
committerAnthony Liguori <aliguori@us.ibm.com>2013-06-04 14:58:58 -0500
commit8819c10b5d55d537d59a0ffd5d623f348fc36c47 (patch)
tree21bc8ae625e1622834c3f0bf14da12c167619167
parenta3416197447e7846a927b6ccb4f1edb3a1982443 (diff)
parent9cdf79d068f52f7de347cb45cfd8903519410e4d (diff)
downloadqemu-8819c10b5d55d537d59a0ffd5d623f348fc36c47.tar.gz
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.c11
-rw-r--r--hw/i386/xen_machine_pv.c16
-rw-r--r--include/hw/i386/pc.h3
-rw-r--r--include/hw/xen/xen.h5
-rw-r--r--vl.c2
-rw-r--r--xen-all.c35
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)
diff --git a/vl.c b/vl.c
index 510d2c2ce4..47ab45d37a 100644
--- a/vl.c
+++ b/vl.c
@@ -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
diff --git a/xen-all.c b/xen-all.c
index 539a1549a5..bc105f1627 100644
--- a/xen-all.c
+++ b/xen-all.c
@@ -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)
{