[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH 3/3] tb-annotation: Activate annotation extensio
From: |
Peer Adelt |
Subject: |
[Qemu-devel] [RFC PATCH 3/3] tb-annotation: Activate annotation extension |
Date: |
Fri, 8 Jan 2016 17:36:48 +0100 |
This changeset activates the TranslationBlock annotation
mechanism for the QEMU system mode.
Signed-off-by: Peer Adelt <address@hidden>
---
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
address@hidden -annotation @var{tbAnnotation}
address@hidden -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