From patchwork Tue May 3 14:05:37 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kiszka X-Patchwork-Id: 749972 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p43E63b9003079 for ; Tue, 3 May 2011 14:06:04 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752656Ab1ECOGA (ORCPT ); Tue, 3 May 2011 10:06:00 -0400 Received: from thoth.sbs.de ([192.35.17.2]:18766 "EHLO thoth.sbs.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751289Ab1ECOF7 (ORCPT ); Tue, 3 May 2011 10:05:59 -0400 Received: from mail1.siemens.de (localhost [127.0.0.1]) by thoth.sbs.de (8.13.6/8.13.6) with ESMTP id p43E5b8K016967; Tue, 3 May 2011 16:05:37 +0200 Received: from mchn199C.mchp.siemens.de ([139.25.109.49]) by mail1.siemens.de (8.13.6/8.13.6) with ESMTP id p43E5bVf029689; Tue, 3 May 2011 16:05:37 +0200 Message-ID: <4DC00BB1.7000008@siemens.com> Date: Tue, 03 May 2011 16:05:37 +0200 From: Jan Kiszka User-Agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); de; rv:1.8.1.12) Gecko/20080226 SUSE/2.0.0.12-1.1 Thunderbird/2.0.0.12 Mnenhy/0.7.5.666 MIME-Version: 1.0 To: qemu-devel CC: kvm , Avi Kivity , Marcelo Tosatti , Alexander Graf , Anthony Liguori Subject: [RFC][PATCH] Import Linux headers for KVM and vhost Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Tue, 03 May 2011 14:06:04 +0000 (UTC) This helps reducing our build-time checks for feature support in the available Linux kernel headers. And it helps users that do not have sufficiently recent headers installed on their build machine. Header upstate is triggered via 'make update-linux-headers', optionally specifying a kernel directory as source via 'LINUX='. --- I'm sure this is not yet perfect from technical POV (e.g. the patch to Makefile.target looks like a hack to me, better ideas welcome), therefore RFC and no SOB. But it should demonstrate the plan. The workflow for adding a new KVM feature support would be first a 'make update-linux-header LINUX=/my/local/linux' + git commit, and then the commit of the kvm, vhost, whatever changes. A patch to actually add the result of the header update would be posted separately. Same for the now possible massive cleanups of kvm sources. Makefile | 17 +++++++ Makefile.target | 2 +- configure | 127 ++++++++----------------------------------------------- 3 files changed, 36 insertions(+), 110 deletions(-) diff --git a/Makefile b/Makefile index 67c0268..6ca065b 100644 --- a/Makefile +++ b/Makefile @@ -341,3 +341,20 @@ tarbin: # Include automatically generated dependency files -include $(wildcard *.d audio/*.d slirp/*.d block/*.d net/*.d ui/*.d) + +update-linux-headers: + for arch in x86 powerpc s390; do \ + $(MAKE) -C $(LINUX) INSTALL_HDR_PATH=`pwd`/.tmp-hdrs SRCARCH="$$arch" headers_install; \ + rm -rf $(SRC_PATH)/include/asm-"$$arch"/*; \ + for header in kvm.h kvm_para.h; do \ + cp .tmp-hdrs/include/asm/$$header $(SRC_PATH)/include/asm-"$$arch"; \ + done; \ + if test $$arch == x86; then \ + cp .tmp-hdrs/include/asm/hyperv.h $(SRC_PATH)/include/asm-x86; \ + fi \ + done + rm -rf $(SRC_PATH)/include/linux/* + for header in kvm.h kvm_para.h vhost.h virtio_config.h virtio_ring.h; do \ + cp .tmp-hdrs/include/linux/$$header $(SRC_PATH)/include/linux; \ + done + rm -rf .tmp-hdrs diff --git a/Makefile.target b/Makefile.target index 89280c6..b0fe021 100644 --- a/Makefile.target +++ b/Makefile.target @@ -14,7 +14,7 @@ endif TARGET_PATH=$(SRC_PATH)/target-$(TARGET_BASE_ARCH) $(call set-vpath, $(SRC_PATH):$(TARGET_PATH):$(SRC_PATH)/hw) -QEMU_CFLAGS+= -I.. -I$(TARGET_PATH) -DNEED_CPU_H +QEMU_CFLAGS+= -I.. -I../include -I$(TARGET_PATH) -DNEED_CPU_H include $(SRC_PATH)/Makefile.objs diff --git a/configure b/configure index 3239fbb..792e4c2 100755 --- a/configure +++ b/configure @@ -113,8 +113,7 @@ curl="" curses="" docs="" fdt="" -kvm="" -kvm_para="" +kvm="yes" nptl="" sdl="" vnc="yes" @@ -129,7 +128,7 @@ vnc_thread="no" xen="" linux_aio="" attr="" -vhost_net="" +vhost_net="yes" xfs="" gprof="no" @@ -1695,109 +1694,6 @@ EOF fi ########################################## -# kvm probe -if test "$kvm" != "no" ; then - cat > $TMPC < -#if !defined(KVM_API_VERSION) || KVM_API_VERSION < 12 || KVM_API_VERSION > 12 -#error Invalid KVM version -#endif -EOF - must_have_caps="KVM_CAP_USER_MEMORY \ - KVM_CAP_DESTROY_MEMORY_REGION_WORKS \ - KVM_CAP_COALESCED_MMIO \ - KVM_CAP_SYNC_MMU \ - " - if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) ; then - must_have_caps="$caps \ - KVM_CAP_SET_TSS_ADDR \ - KVM_CAP_EXT_CPUID \ - KVM_CAP_CLOCKSOURCE \ - KVM_CAP_NOP_IO_DELAY \ - KVM_CAP_PV_MMU \ - KVM_CAP_MP_STATE \ - KVM_CAP_USER_NMI \ - " - fi - for c in $must_have_caps ; do - cat >> $TMPC <> $TMPC </dev/null` - fi - if compile_prog "$kvm_cflags" "" ; then - kvm=yes - cat > $TMPC < -int main(void) { return 0; } -EOF - if compile_prog "$kvm_cflags" "" ; then - kvm_para=yes - fi - else - if test "$kvm" = "yes" ; then - if has awk && has grep; then - kvmerr=`LANG=C $cc $QEMU_CFLAGS -o $TMPE $kvm_cflags $TMPC 2>&1 \ - | grep "error: " \ - | awk -F "error: " '{if (NR>1) printf(", "); printf("%s",$2);}'` - if test "$kvmerr" != "" ; then - echo -e "${kvmerr}\n\ -NOTE: To enable KVM support, update your kernel to 2.6.29+ or install \ -recent kvm-kmod from http://sourceforge.net/projects/kvm." - fi - fi - feature_not_found "kvm" - fi - kvm=no - fi -fi - -########################################## -# test for vhost net - -if test "$vhost_net" != "no"; then - if test "$kvm" != "no"; then - cat > $TMPC < - int main(void) { return 0; } -EOF - if compile_prog "$kvm_cflags" "" ; then - vhost_net=yes - else - if test "$vhost_net" = "yes" ; then - feature_not_found "vhost-net" - fi - vhost_net=no - fi - else - if test "$vhost_net" = "yes" ; then - echo "NOTE: vhost-net feature requires KVM (--enable-kvm)." - feature_not_found "vhost-net" - fi - vhost_net=no - fi -fi - -########################################## # pthread probe PTHREADLIBS_LIST="-lpthread -lpthreadGC2" @@ -3251,9 +3147,7 @@ case "$target_arch2" in \( "$target_arch2" = "i386" -a "$cpu" = "x86_64" \) \) ; then echo "CONFIG_KVM=y" >> $config_target_mak echo "KVM_CFLAGS=$kvm_cflags" >> $config_target_mak - if test "$kvm_para" = "yes"; then - echo "CONFIG_KVM_PARA=y" >> $config_target_mak - fi + echo "CONFIG_KVM_PARA=y" >> $config_target_mak if test $vhost_net = "yes" ; then echo "CONFIG_VHOST_NET=y" >> $config_target_mak fi @@ -3449,6 +3343,21 @@ if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then esac fi +# use included Linux headers +includes="-I\$(SRC_PATH)/include $includes" +mkdir -p include +case "$cpu" in +i386|x86_64) + symlink $source_path/include/asm-x86 include/asm + ;; +ppcemb|ppc|ppc64) + symlink $source_path/include/asm-x86 include/asm + ;; +s390x) + symlink $source_path/include/asm-s390 include/asm + ;; +esac + echo "LDFLAGS+=$ldflags" >> $config_target_mak echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak echo "QEMU_INCLUDES+=$includes" >> $config_target_mak