From patchwork Wed Aug 12 04:03:25 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Zhang, Xiantao" X-Patchwork-Id: 40795 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n7C45XT2027111 for ; Wed, 12 Aug 2009 04:05:34 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751114AbZHLEFa (ORCPT ); Wed, 12 Aug 2009 00:05:30 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751116AbZHLEF3 (ORCPT ); Wed, 12 Aug 2009 00:05:29 -0400 Received: from mga11.intel.com ([192.55.52.93]:15962 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751099AbZHLEF2 (ORCPT ); Wed, 12 Aug 2009 00:05:28 -0400 Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga102.fm.intel.com with ESMTP; 11 Aug 2009 20:55:26 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.43,365,1246863600"; d="scan'208,223";a="716000488" Received: from pgsmsx603.gar.corp.intel.com ([10.221.43.87]) by fmsmga001.fm.intel.com with ESMTP; 11 Aug 2009 21:08:22 -0700 Received: from pgsmsx601.gar.corp.intel.com (10.221.43.69) by pgsmsx603.gar.corp.intel.com (10.221.43.87) with Microsoft SMTP Server (TLS) id 8.1.358.0; Wed, 12 Aug 2009 12:03:28 +0800 Received: from pdsmsx602.ccr.corp.intel.com (172.16.12.184) by pgsmsx601.gar.corp.intel.com (10.221.43.69) with Microsoft SMTP Server (TLS) id 8.1.358.0; Wed, 12 Aug 2009 12:03:27 +0800 Received: from pdsmsx503.ccr.corp.intel.com ([172.16.12.95]) by pdsmsx602.ccr.corp.intel.com ([172.16.12.184]) with mapi; Wed, 12 Aug 2009 12:03:26 +0800 From: "Zhang, Xiantao" To: "avi@redhat.com" CC: "kvm-ia64@vger.kernel.org" , "kvm@vger.kernel.org" Date: Wed, 12 Aug 2009 12:03:25 +0800 Subject: [PATCH] qemu-kvm: fix ia64 build breakage Thread-Topic: [PATCH] qemu-kvm: fix ia64 build breakage Thread-Index: AcobAdb2VQnqFIhMR/W2wHC5y8LDig== Message-ID: <706158FABBBA044BAD4FE898A02E4BC201C04E63D5@pdsmsx503.ccr.corp.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: acceptlanguage: en-US MIME-Version: 1.0 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org From 2d3d6cf55f7fecd9a9fd7c764e43b1ee56c7eebb Mon Sep 17 00:00:00 2001 From: Xiantao Zhang Date: Wed, 12 Aug 2009 11:39:33 +0800 Subject: [PATCH] qemu-kvm: fix ia64 build breakage fix some configure issues. Signed-off-by: Xiantao Zhang --- Makefile.target | 14 ++-- configure | 2 +- qemu-kvm-ia64.c | 180 +++++++++++++++-------------------------------- qemu-kvm.c | 2 +- target-ia64/kvm.c | 154 ++++++++++++++++++++++++++++++++++++++++ target-ia64/libkvm.h | 2 - target-ia64/op_helper.c | 5 +- 7 files changed, 224 insertions(+), 135 deletions(-) create mode 100644 target-ia64/kvm.c diff --git a/Makefile.target b/Makefile.target index aeda3fe..bab1318 100644 --- a/Makefile.target +++ b/Makefile.target @@ -44,7 +44,7 @@ all: $(PROGS) # cpu emulator library libobj-y = exec.o cpu-exec.o host-utils.o ifeq ($(NO_CPU_EMULATION), 1) -libobj-y += fack-exec.o +libobj-y += fake-exec.o else libobj-y += translate-all.o translate.o endif @@ -57,7 +57,12 @@ libobj-$(CONFIG_NOSOFTFLOAT) += fpu/softfloat-native.o libobj-y += op_helper.o helper.o libobj-$(CONFIG_NEED_MMU) += mmu.o +ifeq ($(TARGET_ARCH), i386) libobj-$(CONFIG_KVM) += kvm-tpr-opt.o +endif +ifeq ($(TARGET_ARCH), ia64) +libobj-$(CONFIG_KVM) += firmware.o +endif libobj-$(CONFIG_KVM) += qemu-kvm-helper.o libobj-$(TARGET_ARM) += neon_helper.o iwmmxt_helper.o @@ -220,7 +225,7 @@ LIBS+=-lpci endif # Hardware support -obj-ia64-y += ide.o pckbd.o vga.o $(SOUND_HW) dma.o $(AUDIODRV) +obj-ia64-y += ide.o pckbd.o vga.o $(sound-obj-y) dma.o isa-bus.o obj-ia64-y += fdc.o mc146818rtc.o serial.o i8259.o ipf.o obj-ia64-y += cirrus_vga.o parallel.o acpi.o piix_pci.o obj-ia64-y += usb-uhci.o @@ -322,11 +327,6 @@ obj-sh4-y += ide.o obj-m68k-y = an5206.o mcf5206.o mcf_uart.o mcf_intc.o mcf5208.o mcf_fec.o obj-m68k-y += m68k-semi.o dummy_m68k.o -ifeq ($(TARGET_ARCH), ia64) -firmware.o: firmware.c - $(CC) $(HELPER_CFLAGS) $(CPPFLAGS) $(BASE_CFLAGS) -c -o $@ $< -endif - main.o vl.o: QEMU_CFLAGS+=$(GPROF_CFLAGS) vl.o: QEMU_CFLAGS+=$(SDL_CFLAGS) diff --git a/configure b/configure index 719d26a..509d851 100755 --- a/configure +++ b/configure @@ -2198,7 +2198,7 @@ case "$target_arch2" in fi esac case "$target_arch2" in - i386|x86_64|ppcemb|ppc|ppc64) + i386|x86_64|ia64|ppcemb|ppc|ppc64) # Make sure the target and host cpus are compatible if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \ \( "$target_arch2" = "$cpu" -o \ diff --git a/qemu-kvm-ia64.c b/qemu-kvm-ia64.c index 062fbd4..e6e8884 100644 --- a/qemu-kvm-ia64.c +++ b/qemu-kvm-ia64.c @@ -1,147 +1,81 @@ -#include "config.h" -#include "config-host.h" - +/* + * libkvm-ia64.c :Kernel-based Virtual Machine control library for ia64. + * + * This library provides an API to control the kvm hardware virtualization + * module. + * + * Copyright (C) 2006 Qumranet + * + * Authors: + * + * Avi Kivity + * Yaniv Kamay + * + * Copyright (C) 2007 Intel + * Added by : Zhang Xiantao + * + * This work is licensed under the GNU LGPL license, version 2. + * + */ + +#include "libkvm.h" +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include -#include "hw/hw.h" -#include "qemu-kvm.h" -#include -#include -#include - - - -int kvm_arch_qemu_create_context(void) -{ - return 0; -} - -void kvm_arch_load_regs(CPUState *env) +int kvm_arch_create(kvm_context_t kvm, unsigned long phys_mem_bytes, + void **vm_mem) { -} + int r; + r = kvm_init_coalesced_mmio(kvm); + if (r < 0) + return r; -void kvm_arch_save_regs(CPUState *env) -{ + return 0; } -int kvm_arch_init_vcpu(CPUState *cenv) +int kvm_arch_run(kvm_vcpu_context_t vcpu) { - return 0; -} + int r = 0; -int kvm_arch_halt(void *opaque, kvm_vcpu_context_t vcpu) -{ - CPUState *env = cpu_single_env; - env->hflags |= HF_HALTED_MASK; - return 1; -} + switch (vcpu->run->exit_reason) { + default: + r = 1; + break; + } -void kvm_arch_pre_kvm_run(void *opaque, CPUState *env) -{ -} - -void kvm_arch_post_kvm_run(void *opaque, CPUState *env) -{ -} - -int kvm_arch_has_work(CPUState *env) -{ - return 1; -} - -int kvm_arch_try_push_interrupts(void *opaque) -{ - return 1; -} - -void kvm_arch_update_regs_for_sipi(CPUState *env) -{ + return r; } -int kvm_arch_insert_sw_breakpoint(CPUState *current_env, - struct kvm_sw_breakpoint *bp) +void kvm_show_code(kvm_vcpu_context_t vcpu) { - return -EINVAL; + fprintf(stderr, "kvm_show_code not supported yet!\n"); } -int kvm_arch_remove_sw_breakpoint(CPUState *current_env, - struct kvm_sw_breakpoint *bp) +void kvm_show_regs(kvm_vcpu_context_t vcpu) { - return -EINVAL; + fprintf(stderr,"kvm_show_regs not supportted today!\n"); } -int kvm_arch_insert_hw_breakpoint(target_ulong addr, - target_ulong len, int type) -{ - return -ENOSYS; -} - -int kvm_arch_remove_hw_breakpoint(target_ulong addr, - target_ulong len, int type) -{ - return -ENOSYS; -} - -void kvm_arch_remove_all_hw_breakpoints(void) -{ -} - -int kvm_arch_debug(struct kvm_debug_exit_arch *arch_info) +int kvm_create_memory_alias(kvm_context_t kvm, + uint64_t phys_start, + uint64_t len, + uint64_t target_phys) { return 0; } -void kvm_arch_update_guest_debug(CPUState *env, struct kvm_guest_debug *dbg) -{ -} - -void kvm_arch_save_mpstate(CPUState *env) -{ -#ifdef KVM_CAP_MP_STATE - int r; - struct kvm_mp_state mp_state; - - r = kvm_get_mpstate(env->kvm_cpu_state.vcpu_ctx, &mp_state); - if (r < 0) - env->mp_state = -1; - else - env->mp_state = mp_state.mp_state; -#endif -} - -void kvm_arch_load_mpstate(CPUState *env) -{ -#ifdef KVM_CAP_MP_STATE - struct kvm_mp_state mp_state = { .mp_state = env->mp_state }; - - /* - * -1 indicates that the host did not support GET_MP_STATE ioctl, - * so don't touch it. - */ - if (env->mp_state != -1) - kvm_set_mpstate(env->kvm_cpu_state.vcpu_ctx, &mp_state); -#endif -} - -void kvm_arch_cpu_reset(CPUState *env) -{ - if (kvm_irqchip_in_kernel(kvm_context)) { -#ifdef KVM_CAP_MP_STATE - kvm_reset_mpstate(env->kvm_cpu_state.vcpu_ctx); -#endif - } else { - env->interrupt_request &= ~CPU_INTERRUPT_HARD; - env->halted = 1; - } -} - -void kvm_arch_do_ioperm(void *_data) -{ - struct ioperm_data *data = _data; - ioperm(data->start_port, data->num, data->turn_on); -} - -void kvm_arch_process_irqchip_events(CPUState *env) +int kvm_destroy_memory_alias(kvm_context_t kvm, uint64_t phys_start) { + return 0; } diff --git a/qemu-kvm.c b/qemu-kvm.c index b59e403..a4e314a 100644 --- a/qemu-kvm.c +++ b/qemu-kvm.c @@ -2171,7 +2171,6 @@ void kvm_set_phys_mem(target_phys_addr_t start_addr, ram_addr_t size, } if (must_use_aliases_target(start_addr)) return; -#endif while (size > 0) { p = find_mapping(start_addr); if (p) { @@ -2186,6 +2185,7 @@ void kvm_set_phys_mem(target_phys_addr_t start_addr, ram_addr_t size, } } return; +#endif } r = kvm_is_containing_region(kvm_context, start_addr, size); diff --git a/target-ia64/kvm.c b/target-ia64/kvm.c new file mode 100644 index 0000000..d01f634 --- /dev/null +++ b/target-ia64/kvm.c @@ -0,0 +1,154 @@ +#include "config.h" +#include "config-host.h" + +#include + +#include "hw/hw.h" +#include "qemu-kvm.h" +#include +#include +#include + + + +int kvm_arch_qemu_create_context(void) +{ + return 0; +} + +void kvm_arch_load_regs(CPUState *env) +{ +} + + +void kvm_arch_save_regs(CPUState *env) +{ +} + +int kvm_arch_qemu_init_env(CPUState *cenv) +{ + return 0; +} + +int kvm_arch_halt(void *opaque, kvm_vcpu_context_t vcpu) +{ + CPUState *env = cpu_single_env; + env->hflags |= HF_HALTED_MASK; + return 1; +} + +void kvm_arch_pre_kvm_run(void *opaque, CPUState *env) +{ +} + +void kvm_arch_post_kvm_run(void *opaque, CPUState *env) +{ +} + +int kvm_arch_has_work(CPUState *env) +{ + return 1; +} + +int kvm_arch_try_push_interrupts(void *opaque) +{ + return 1; +} + +void kvm_arch_update_regs_for_sipi(CPUState *env) +{ +} + +int kvm_arch_insert_sw_breakpoint(CPUState *current_env, + struct kvm_sw_breakpoint *bp) +{ + return -EINVAL; +} + +int kvm_arch_remove_sw_breakpoint(CPUState *current_env, + struct kvm_sw_breakpoint *bp) +{ + return -EINVAL; +} + +int kvm_arch_insert_hw_breakpoint(target_ulong addr, + target_ulong len, int type) +{ + return -ENOSYS; +} + +int kvm_arch_remove_hw_breakpoint(target_ulong addr, + target_ulong len, int type) +{ + return -ENOSYS; +} + +void kvm_arch_remove_all_hw_breakpoints(void) +{ +} + +int kvm_arch_debug(struct kvm_debug_exit_arch *arch_info) +{ + return 0; +} + +void kvm_arch_update_guest_debug(CPUState *env, struct kvm_guest_debug *dbg) +{ +} + +void kvm_arch_save_mpstate(CPUState *env) +{ +#ifdef KVM_CAP_MP_STATE + int r; + struct kvm_mp_state mp_state; + + r = kvm_get_mpstate(env->kvm_cpu_state.vcpu_ctx, &mp_state); + if (r < 0) + env->mp_state = -1; + else + env->mp_state = mp_state.mp_state; +#endif +} + +void kvm_arch_load_mpstate(CPUState *env) +{ +#ifdef KVM_CAP_MP_STATE + struct kvm_mp_state mp_state = { .mp_state = env->mp_state }; + + /* + * -1 indicates that the host did not support GET_MP_STATE ioctl, + * so don't touch it. + */ + if (env->mp_state != -1) + kvm_set_mpstate(env->kvm_cpu_state.vcpu_ctx, &mp_state); +#endif +} + +void kvm_arch_cpu_reset(CPUState *env) +{ + if (kvm_irqchip_in_kernel(kvm_context)) { +#ifdef KVM_CAP_MP_STATE + kvm_reset_mpstate(env->kvm_cpu_state.vcpu_ctx); +#endif + } else { + env->interrupt_request &= ~CPU_INTERRUPT_HARD; + env->halted = 1; + } +} + +void kvm_arch_do_ioperm(void *_data) +{ + struct ioperm_data *data = _data; + ioperm(data->start_port, data->num, data->turn_on); +} + +void kvm_arch_process_irqchip_events(CPUState *env) +{ +} + +int kvm_arch_init_vcpu(CPUState *env) +{ + return 0; +} + +#include"qemu-kvm-ia64.c" diff --git a/target-ia64/libkvm.h b/target-ia64/libkvm.h index 417f7f1..8e2d413 100644 --- a/target-ia64/libkvm.h +++ b/target-ia64/libkvm.h @@ -18,8 +18,6 @@ #ifndef KVM_IA64_H #define KVM_IA64_H -#include "libkvm-all.h" - extern int kvm_page_size; #define PAGE_SIZE kvm_page_size diff --git a/target-ia64/op_helper.c b/target-ia64/op_helper.c index d51525a..3c2e1a2 100644 --- a/target-ia64/op_helper.c +++ b/target-ia64/op_helper.c @@ -42,7 +42,6 @@ CPUState *cpu_ia64_init(const char *cpu_model) cpu_exec_init(env); cpu_reset(env); if (kvm_enabled()) { - kvm_qemu_init_env(env); kvm_init_vcpu(env); } return env; @@ -102,3 +101,7 @@ void tlb_fill (target_ulong addr, int is_write, int is_user, void *retaddr) { return; } + +void helper_cpuid(void) +{ +}