From patchwork Mon Dec 5 22:22:41 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Llu=C3=ADs_Vilanova?= X-Patchwork-Id: 129452 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [140.186.70.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 0FF7F1007D5 for ; Tue, 6 Dec 2011 09:23:04 +1100 (EST) Received: from localhost ([::1]:35673 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RXgw9-0005fH-9z for incoming@patchwork.ozlabs.org; Mon, 05 Dec 2011 17:23:01 -0500 Received: from eggs.gnu.org ([140.186.70.92]:36463) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RXgw1-0005Yp-UE for qemu-devel@nongnu.org; Mon, 05 Dec 2011 17:22:55 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RXgvz-0000yl-Cu for qemu-devel@nongnu.org; Mon, 05 Dec 2011 17:22:53 -0500 Received: from gw.ac.upc.edu ([147.83.30.3]:60656) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RXgvy-0000yJ-Jq for qemu-devel@nongnu.org; Mon, 05 Dec 2011 17:22:51 -0500 Received: from localhost (unknown [84.88.53.92]) by gw.ac.upc.edu (Postfix) with ESMTP id 484096B01CA; Mon, 5 Dec 2011 23:22:49 +0100 (CET) To: qemu-devel@nongnu.org From: =?utf-8?b?TGx1w61z?= Vilanova Date: Mon, 05 Dec 2011 23:22:41 +0100 Message-ID: <20111205222240.31271.78109.stgit@ginnungagap.bsc.es> In-Reply-To: <20111205222208.31271.65662.stgit@ginnungagap.bsc.es> References: <20111205222208.31271.65662.stgit@ginnungagap.bsc.es> User-Agent: StGit/0.15 MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-Received-From: 147.83.30.3 Cc: Blue Swirl , Zhi Yong Wu Subject: [Qemu-devel] [PATCH v2 2/5] backdoor: Add build infrastructure X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Signed-off-by: Lluís Vilanova --- Makefile | 4 +++- Makefile.objs | 18 ++++++++++++++++++ Makefile.target | 4 +++- backdoor/qemu/qemu-backdoor.h | 31 +++++++++++++++++++++++++++++++ configure | 32 ++++++++++++++++++++++++++++++++ 5 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 backdoor/qemu/qemu-backdoor.h diff --git a/Makefile b/Makefile index 301c75e..5f89058 100644 --- a/Makefile +++ b/Makefile @@ -42,7 +42,9 @@ else DOCS= endif -SUBDIR_MAKEFLAGS=$(if $(V),,--no-print-directory) BUILD_DIR=$(BUILD_DIR) +SUBDIR_MAKEFLAGS_=$(if $(V),,--no-print-directory) BUILD_DIR=$(BUILD_DIR) +# make sure the variable is available to makes in sub-directories +SUBDIR_MAKEFLAGS=$(SUBDIR_MAKEFLAGS_) SUBDIR_MAKEFLAGS="$(SUBDIR_MAKEFLAGS_)" SUBDIR_DEVICES_MAK=$(patsubst %, %/config-devices.mak, $(TARGET_DIRS)) SUBDIR_DEVICES_MAK_DEP=$(patsubst %, %/config-devices.mak.d, $(TARGET_DIRS)) diff --git a/Makefile.objs b/Makefile.objs index d7a6539..df943e9 100644 --- a/Makefile.objs +++ b/Makefile.objs @@ -398,6 +398,24 @@ trace-obj-y += $(addprefix trace/, $(trace-nested-y)) $(trace-obj-y): $(GENERATED_HEADERS) ###################################################################### +# backdoor + +backdoor-obj-y += $(addprefix backdoor/qemu/, $(backdoor-nested-y)) + +ifdef CONFIG_BACKDOOR +LIBBACKDOOR = libbackdoor/libbackdoor.a + +.PHONY: force +force: + +$(LIBBACKDOOR): $(dir $(LIBBACKDOOR))/Makefile force + $(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C $(dir $@) \ + QEMU_CFLAGS="$(QEMU_CFLAGS) -I$(BUILD_DIR)" \ + TARGET_DIR="$(TARGET_DIR)$(dir $@)/" VPATH="$(VPATH)" \ + SRC_PATH="$(SRC_PATH)" V="$(V)" "$(notdir $@)") +endif + +###################################################################### # smartcard libcacard-y = cac.o event.o vcard.o vreader.o vcard_emul_nss.o vcard_emul_type.o card_7816.o diff --git a/Makefile.target b/Makefile.target index e244040..9533469 100644 --- a/Makefile.target +++ b/Makefile.target @@ -90,6 +90,8 @@ libobj-$(CONFIG_TCI_DIS) += tci-dis.o tci-dis.o: QEMU_CFLAGS += -I$(SRC_PATH)/tcg -I$(SRC_PATH)/tcg/tci +libobj-$(CONFIG_BACKDOOR) += $(backdoor-obj-y) + $(libobj-y): $(GENERATED_HEADERS) # libqemu @@ -413,7 +415,7 @@ endif # CONFIG_LINUX_USER obj-$(CONFIG_GDBSTUB_XML) += gdbstub-xml.o -$(QEMU_PROG): $(obj-y) $(obj-$(TARGET_BASE_ARCH)-y) +$(QEMU_PROG): $(obj-y) $(obj-$(TARGET_BASE_ARCH)-y) $(LIBBACKDOOR) $(call LINK,$^) diff --git a/backdoor/qemu/qemu-backdoor.h b/backdoor/qemu/qemu-backdoor.h new file mode 100644 index 0000000..05e960d --- /dev/null +++ b/backdoor/qemu/qemu-backdoor.h @@ -0,0 +1,31 @@ +/* + * QEMU-side user-provided callbacks for the backdoor communication channel. + * + * Copyright (C) 2011 Lluís Vilanova + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ + +#include +#include + + +/** + * Initialize the backdoor channel. + * + * @param data_size Size of the data channel. + */ +void qemu_backdoor_init(uint64_t data_size); + +/** + * Handle an invocation of the backdoor channel. + * + * The command argument can be used to achieve concurrency among different + * clients (e.g., threads in the guest system) of the backdoor channel (e.g., + * different clients write to different parts of the data channel). + * + * @param cmd Command to invoke. + * @param data Pointer to the beginning of the data channel. + */ +void qemu_backdoor(uint64_t cmd, void *data); diff --git a/configure b/configure index ac4840d..f362ef6 100755 --- a/configure +++ b/configure @@ -176,6 +176,7 @@ pie="" zero_malloc="" trace_backend="nop" trace_file="trace" +backdoor="" spice="" rbd="" smartcard="" @@ -549,6 +550,8 @@ for opt do ;; --with-trace-file=*) trace_file="$optarg" ;; + --with-backdoor=*) backdoor="$optarg" + ;; --enable-gprof) gprof="yes" ;; --static) @@ -1062,6 +1065,7 @@ echo " --enable-trace-backend=B Set trace backend" echo " Available backends:" $("$source_path"/scripts/tracetool --list-backends) echo " --with-trace-file=NAME Full PATH,NAME of file to store traces" echo " Default:trace-" +echo " --with-backdoor=PATH Directory to build user-provided backdoor library" echo " --disable-spice disable spice" echo " --enable-spice enable spice" echo " --enable-rbd enable building the rados block device (rbd)" @@ -2619,6 +2623,20 @@ if test "$trace_backend" = "dtrace"; then fi ########################################## +# check for a valid directory for backdoor +if test -n "$backdoor"; then + if test ! -f "$backdoor/Makefile"; then + echo + echo "Error: cannot make into '$backdoor'" + echo "Please choose a directory where I can run 'make'" + echo + exit 1 + fi + backdoor=`readlink -f "$backdoor"` +fi + + +########################################## # __sync_fetch_and_and requires at least -march=i486. Many toolchains # use i686 as default anyway, but for those that don't, an explicit # specification is necessary @@ -2838,6 +2856,9 @@ echo "uuid support $uuid" echo "vhost-net support $vhost_net" echo "Trace backend $trace_backend" echo "Trace output file $trace_file-" +if test -n "$backdoor"; then + echo "Backdoor lib dir $backdoor" +fi echo "spice support $spice" echo "rbd support $rbd" echo "xfsctl support $xfs" @@ -3231,6 +3252,13 @@ if test "$trace_default" = "yes"; then echo "CONFIG_TRACE_DEFAULT=y" >> $config_host_mak fi +# backdoor channel +if test -n "$backdoor"; then + echo "CONFIG_BACKDOOR=y" >> $config_host_mak + echo "BACKDOOR_PATH=\"$backdoor\"" >> $config_host_mak + QEMU_CFLAGS="-I\"$backdoor\" $QEMU_CFLAGS" +fi + echo "TOOLS=$tools" >> $config_host_mak echo "CHECKS=$checks" >> $config_host_mak echo "ROMS=$roms" >> $config_host_mak @@ -3342,6 +3370,10 @@ if test "$target" = "arm-linux-user" -o "$target" = "armeb-linux-user" -o "$targ mkdir -p $target_dir/nwfpe fi symlink $source_path/Makefile.target $target_dir/Makefile +if test -n "$backdoor"; then + mkdir -p $target_dir/libbackdoor + symlink $backdoor/Makefile $target_dir/libbackdoor/Makefile +fi echo "# Automatically generated by configure - do not modify" > $config_target_mak