From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37083) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aHa25-0004zl-2G for qemu-devel@nongnu.org; Fri, 08 Jan 2016 11:37:02 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aHa23-0003gE-It for qemu-devel@nongnu.org; Fri, 08 Jan 2016 11:36:57 -0500 Received: from mail.uni-paderborn.de ([131.234.142.9]:53449) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aHa23-0003g0-9B for qemu-devel@nongnu.org; Fri, 08 Jan 2016 11:36:55 -0500 Received: from magmaria.uni-paderborn.de ([131.234.189.24] helo=localhost.localdomain) by mail.uni-paderborn.de with esmtp (Exim 4.84 telepax) id 1aHa22-0001LF-4y for qemu-devel@nongnu.org; Fri, 08 Jan 2016 17:36:54 +0100 Received: from mail.uni-paderborn.de by magmaria with queue id 1003567-3 for qemu-devel@nongnu.org; Fri, 08 Jan 2016 16:36:53 GMT From: Peer Adelt Date: Fri, 8 Jan 2016 17:36:48 +0100 Message-Id: <1452271008-17439-3-git-send-email-peer.adelt@c-lab.de> In-Reply-To: <1452271008-17439-1-git-send-email-peer.adelt@c-lab.de> References: <1452271008-17439-1-git-send-email-peer.adelt@c-lab.de> Subject: [Qemu-devel] [RFC PATCH 3/3] tb-annotation: Activate annotation extension List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kbastian@mail.uni-paderborn.de, Peer Adelt This changeset activates the TranslationBlock annotation mechanism for the QEMU system mode. Signed-off-by: Peer Adelt --- Makefile | 5 +++-- Makefile.objs | 4 ++++ Makefile.target | 4 +++- configure | 13 +++++++++++++ qemu-options.hx | 8 ++++++++ tb-annotation/Makefile.objs | 1 + vl.c | 25 +++++++++++++++++++++++++ 7 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 tb-annotation/Makefile.objs diff --git a/Makefile b/Makefile index 82b2fc8..c351b31 100644 --- a/Makefile +++ b/Makefile @@ -161,7 +161,8 @@ dummy := $(call unnest-vars,, \ qom-obj-y \ io-obj-y \ common-obj-y \ - common-obj-m) + common-obj-m \ + annotation-obj-y) ifneq ($(wildcard config-host.mak),) include $(SRC_PATH)/tests/Makefile @@ -204,7 +205,7 @@ subdir-dtc:dtc/libfdt dtc/tests dtc/%: mkdir -p $@ -$(SUBDIR_RULES): libqemuutil.a libqemustub.a $(common-obj-y) $(qom-obj-y) $(crypto-aes-obj-$(CONFIG_USER_ONLY)) +$(SUBDIR_RULES): libqemuutil.a libqemustub.a $(common-obj-y) $(qom-obj-y) $(crypto-aes-obj-$(CONFIG_USER_ONLY)) $(annotation-obj-$(CONFIG_TB_ANNOTATION)) ROMSUBDIR_RULES=$(patsubst %,romsubdir-%, $(ROMS)) romsubdir-%: diff --git a/Makefile.objs b/Makefile.objs index dac2c02..9b64358 100644 --- a/Makefile.objs +++ b/Makefile.objs @@ -116,3 +116,7 @@ qga-vss-dll-obj-y = qga/ # contrib ivshmem-client-obj-y = contrib/ivshmem-client/ ivshmem-server-obj-y = contrib/ivshmem-server/ + +###################################################################### +# annotation +annotation-obj-y = tb-annotation/ \ No newline at end of file diff --git a/Makefile.target b/Makefile.target index 34ddb7e..50a969d 100644 --- a/Makefile.target +++ b/Makefile.target @@ -178,7 +178,8 @@ dummy := $(call unnest-vars,.., \ qom-obj-y \ io-obj-y \ common-obj-y \ - common-obj-m) + common-obj-m \ + annotation-obj-y) target-obj-y := $(target-obj-y-save) all-obj-y += $(common-obj-y) all-obj-y += $(target-obj-y) @@ -187,6 +188,7 @@ all-obj-$(CONFIG_SOFTMMU) += $(block-obj-y) all-obj-$(CONFIG_USER_ONLY) += $(crypto-aes-obj-y) all-obj-$(CONFIG_SOFTMMU) += $(crypto-obj-y) all-obj-$(CONFIG_SOFTMMU) += $(io-obj-y) +all-obj-$(CONFIG_TB_ANNOTATION) += $(annotation-obj-y) $(QEMU_PROG_BUILD): config-devices.mak diff --git a/configure b/configure index 83b40fc..5e72e06 100755 --- a/configure +++ b/configure @@ -345,6 +345,7 @@ vhdx="" numa="" tcmalloc="no" jemalloc="no" +tbannotation="no" # parse CC options first for opt do @@ -1169,6 +1170,10 @@ for opt do ;; --enable-jemalloc) jemalloc="yes" ;; + --disable-tbannotation) tbannotation="no" + ;; + --enable-tbannotation) tbannotation="yes" + ;; *) echo "ERROR: unknown option $opt" echo "Try '$0 --help' for more information" @@ -1391,6 +1396,7 @@ disabled with --disable-FEATURE, default is enabled if available: numa libnuma support tcmalloc tcmalloc support jemalloc jemalloc support + tbannotation TB annotation support NOTE: The object files are built at the place where configure is launched EOF @@ -4855,6 +4861,7 @@ echo "bzip2 support $bzip2" echo "NUMA host support $numa" echo "tcmalloc support $tcmalloc" echo "jemalloc support $jemalloc" +echo "TB annotation support $tbannotation" if test "$sdl_too_old" = "yes"; then echo "-> Your SDL version is too old - please upgrade to have SDL support" @@ -5400,6 +5407,12 @@ if test "$rdma" = "yes" ; then echo "CONFIG_RDMA=y" >> $config_host_mak fi +if test "$tbannotation" = "yes" ; then + echo "CONFIG_TB_ANNOTATION=y" >> $config_host_mak + echo "LIBS+=-lxml2" >> $config_host_mak + QEMU_CFLAGS="-I/usr/include/libxml2 $QEMU_CFLAGS" +fi + # Hold two types of flag: # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on # a thread we have a handle to diff --git a/qemu-options.hx b/qemu-options.hx index 215d00d..e3d9df9 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -2737,6 +2737,14 @@ Use @var{bzImage} as kernel image. The kernel can be either a Linux kernel or in multiboot format. ETEXI +DEF("annotation", HAS_ARG, QEMU_OPTION_annotation, \ + "-annotation tbAnnotation use 'tbAnnotation' as annotation file\n", QEMU_ARCH_ALL) +STEXI +@item -annotation @var{tbAnnotation} +@findex -annotation +Use @var{tbAnnotation} as annotation file. TODO: specify file format... +ETEXI + DEF("append", HAS_ARG, QEMU_OPTION_append, \ "-append cmdline use 'cmdline' as kernel command line\n", QEMU_ARCH_ALL) STEXI diff --git a/tb-annotation/Makefile.objs b/tb-annotation/Makefile.objs new file mode 100644 index 0000000..468cd42 --- /dev/null +++ b/tb-annotation/Makefile.objs @@ -0,0 +1 @@ +annotation-obj-y += tb-annotation-parser.o \ No newline at end of file diff --git a/vl.c b/vl.c index 5aaea77..02bb11e 100644 --- a/vl.c +++ b/vl.c @@ -125,6 +125,8 @@ int main(int argc, char **argv) #include "sysemu/replay.h" #include "qapi/qmp/qerror.h" +#include "tb-annotation/tb-annotation-parser.h" + #define MAX_VIRTIO_CONSOLES 1 #define MAX_SCLP_CONSOLES 1 @@ -2971,6 +2973,10 @@ int main(int argc, char **argv, char **envp) int snapshot, linux_boot; const char *initrd_filename; const char *kernel_filename, *kernel_cmdline; +#ifdef CONFIG_TB_ANNOTATION + CPUState *cpu = NULL; + const char *annotation_filename = NULL; +#endif const char *boot_order = NULL; const char *boot_once = NULL; DisplayState *ds; @@ -4017,6 +4023,11 @@ int main(int argc, char **argv, char **envp) exit(1); } break; +#ifdef CONFIG_TB_ANNOTATION + case QEMU_OPTION_annotation: + annotation_filename = optarg; + break; +#endif default: os_parse_cmd_args(popt->index, optarg); } @@ -4629,6 +4640,20 @@ int main(int argc, char **argv, char **envp) qdev_machine_creation_done(); +#ifdef CONFIG_TB_ANNOTATION + if (annotation_filename && (smp_cpus > 1 || smp_cores > 1)) { + perror("At the moment only single CPU/core systems are supported " \ + "by the annotation extension."); + exit(1); + } + if (annotation_filename) { + cpu = qemu_get_cpu(0); + if (cpu != NULL) { + cpu->tb_annotation = tb_annotation_parse(annotation_filename); + } + } +#endif + /* TODO: once all bus devices are qdevified, this should be done * when bus is created by qdev.c */ qemu_register_reset(qbus_reset_all_fn, sysbus_get_default()); -- 2.5.0