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>
This commit is contained in:
		
						commit
						8819c10b5d
					
				@ -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 ) {
 | 
					    if (ram_size >= QEMU_BELOW_4G_RAM_END ) {
 | 
				
			||||||
        above_4g_mem_size = ram_size - 0xe0000000;
 | 
					        above_4g_mem_size = ram_size - QEMU_BELOW_4G_RAM_END;
 | 
				
			||||||
        below_4g_mem_size = 0xe0000000;
 | 
					        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);
 | 
					    pc_init_pci(args);
 | 
				
			||||||
    xen_vcpu_init();
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -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__);
 | 
				
			||||||
 | 
				
			|||||||
@ -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);
 | 
				
			||||||
 | 
				
			|||||||
@ -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)
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										2
									
								
								vl.c
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								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
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										35
									
								
								xen-all.c
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								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) {
 | 
					    if (ram_size >= QEMU_BELOW_4G_RAM_END) {
 | 
				
			||||||
        above_4g_mem_size = ram_size - HVM_BELOW_4G_RAM_END;
 | 
					        above_4g_mem_size = ram_size - QEMU_BELOW_4G_RAM_END;
 | 
				
			||||||
        below_4g_mem_size = HVM_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)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user