Переглянути джерело

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>
Anthony Liguori 12 роки тому
батько
коміт
8819c10b5d
6 змінених файлів з 15 додано та 57 видалено
  1. 5 6
      hw/i386/pc_piix.c
  2. 0 16
      hw/i386/xen_machine_pv.c
  3. 3 0
      include/hw/i386/pc.h
  4. 0 5
      include/hw/xen/xen.h
  5. 1 1
      vl.c
  6. 6 29
      xen-all.c

+ 5 - 6
hw/i386/pc_piix.c

@@ -98,13 +98,13 @@ static void pc_init1(MemoryRegion *system_memory,
     pc_cpus_init(cpu_model, icc_bridge);
     pc_cpus_init(cpu_model, icc_bridge);
     pc_acpi_init("acpi-dsdt.aml");
     pc_acpi_init("acpi-dsdt.aml");
 
 
-    if (kvmclock_enabled) {
+    if (kvm_enabled() && kvmclock_enabled) {
         kvmclock_create();
         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 {
     } else {
         above_4g_mem_size = 0;
         above_4g_mem_size = 0;
         below_4g_mem_size = ram_size;
         below_4g_mem_size = ram_size;
@@ -323,8 +323,7 @@ static void pc_xen_hvm_init(QEMUMachineInitArgs *args)
     if (xen_hvm_init() != 0) {
     if (xen_hvm_init() != 0) {
         hw_error("xen hardware virtual machine initialisation failed");
         hw_error("xen hardware virtual machine initialisation failed");
     }
     }
-    pc_init_pci_no_kvmclock(args);
-    xen_vcpu_init();
+    pc_init_pci(args);
 }
 }
 #endif
 #endif
 
 

+ 0 - 16
hw/i386/xen_machine_pv.c

@@ -23,7 +23,6 @@
  */
  */
 
 
 #include "hw/hw.h"
 #include "hw/hw.h"
-#include "hw/i386/pc.h"
 #include "hw/boards.h"
 #include "hw/boards.h"
 #include "hw/xen/xen_backend.h"
 #include "hw/xen/xen_backend.h"
 #include "xen_domainbuild.h"
 #include "xen_domainbuild.h"
@@ -31,27 +30,12 @@
 
 
 static void xen_init_pv(QEMUMachineInitArgs *args)
 static void xen_init_pv(QEMUMachineInitArgs *args)
 {
 {
-    const char *cpu_model = args->cpu_model;
     const char *kernel_filename = args->kernel_filename;
     const char *kernel_filename = args->kernel_filename;
     const char *kernel_cmdline = args->kernel_cmdline;
     const char *kernel_cmdline = args->kernel_cmdline;
     const char *initrd_filename = args->initrd_filename;
     const char *initrd_filename = args->initrd_filename;
-    X86CPU *cpu;
-    CPUState *cs;
     DriveInfo *dinfo;
     DriveInfo *dinfo;
     int i;
     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 */
     /* Initialize backend core & drivers */
     if (xen_be_init() != 0) {
     if (xen_be_init() != 0) {
         fprintf(stderr, "%s: xen backend core setup failed\n", __FUNCTION__);
         fprintf(stderr, "%s: xen backend core setup failed\n", __FUNCTION__);

+ 3 - 0
include/hw/i386/pc.h

@@ -77,6 +77,9 @@ extern int fd_bootchk;
 void pc_register_ferr_irq(qemu_irq irq);
 void pc_register_ferr_irq(qemu_irq irq);
 void pc_acpi_smi_interrupt(void *opaque, int irq, int level);
 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_cpus_init(const char *cpu_model, DeviceState *icc_bridge);
 void pc_hot_add_cpu(const int64_t id, Error **errp);
 void pc_hot_add_cpu(const int64_t id, Error **errp);
 void pc_acpi_init(const char *default_dsdt);
 void pc_acpi_init(const char *default_dsdt);

+ 0 - 5
include/hw/xen/xen.h

@@ -25,11 +25,7 @@ extern bool xen_allowed;
 
 
 static inline bool xen_enabled(void)
 static inline bool xen_enabled(void)
 {
 {
-#if defined(CONFIG_XEN_BACKEND) && defined(CONFIG_XEN)
     return xen_allowed;
     return xen_allowed;
-#else
-    return 0;
-#endif
 }
 }
 
 
 int xen_pci_slot_get_pirq(PCIDevice *pci_dev, int irq_num);
 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_init(void);
 int xen_hvm_init(void);
 int xen_hvm_init(void);
-void xen_vcpu_init(void);
 void xenstore_store_pv_console_info(int i, struct CharDriverState *chr);
 void xenstore_store_pv_console_info(int i, struct CharDriverState *chr);
 
 
 #if defined(NEED_CPU_H) && !defined(CONFIG_USER_ONLY)
 #if defined(NEED_CPU_H) && !defined(CONFIG_USER_ONLY)

+ 1 - 1
vl.c

@@ -2022,7 +2022,7 @@ static void main_loop(void)
     int64_t ti;
     int64_t ti;
 #endif
 #endif
     do {
     do {
-        nonblocking = !kvm_enabled() && last_io > 0;
+        nonblocking = !kvm_enabled() && !xen_enabled() && last_io > 0;
 #ifdef CONFIG_PROFILER
 #ifdef CONFIG_PROFILER
         ti = profile_getclock();
         ti = profile_getclock();
 #endif
 #endif

+ 6 - 29
xen-all.c

@@ -161,18 +161,18 @@ static void xen_ram_init(ram_addr_t ram_size)
     ram_addr_t block_len;
     ram_addr_t block_len;
 
 
     block_len = ram_size;
     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
         /* 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);
     memory_region_init_ram(&ram_memory, "xen.ram", block_len);
     vmstate_register_ram_global(&ram_memory);
     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 {
     } else {
         below_4g_mem_size = ram_size;
         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 */
 /* get the ioreq packets from share mem */
 static ioreq_t *cpu_get_ioreq_from_shared_memory(XenIOState *state, int vcpu)
 static ioreq_t *cpu_get_ioreq_from_shared_memory(XenIOState *state, int vcpu)
 {
 {