[libvirt] [PATCH 06/10] Split QEMU dtrace probes into separate file

Daniel P. Berrange berrange at redhat.com
Mon Apr 2 19:57:17 UTC 2012


From: "Daniel P. Berrange" <berrange at redhat.com>

When building as driver modules, it is not possible for the QEMU
driver module to reference the DTrace/SystemTAP probes linked into
the main libvirt.so. Thus we need to move the QEMU probes into a
separate file 'libvirt_qemu_probes.d'. Also rename the existing
file from 'probes.d' to 'libvirt_probes.d' while we're at it

* daemon/Makefile.am, src/internal.h: Include libvirt_probes.h
  instead of probes.h
* src/Makefile.am: Add rules for libvirt_qemu_probes.d
* src/qemu/qemu_monitor.c, src/qemu/qemu_monitor_json.c,
  src/qemu/qemu_monitor_text.c: Include libvirt_qemu_probes.h
* src/libvirt_probes.d: Rename from probes.d
* src/libvirt_qemu_probes.d: QEMU specific probes formerly
  in probes.d

Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
---
 daemon/Makefile.am                 |    2 +-
 src/Makefile.am                    |   40 ++++++++++++++++++++++++-----------
 src/internal.h                     |    2 +-
 src/{probes.d => libvirt_probes.d} |   21 ------------------
 src/libvirt_qemu_probes.d          |   21 ++++++++++++++++++
 src/qemu/qemu_monitor.c            |    4 +++
 src/qemu/qemu_monitor_json.c       |    4 +++
 src/qemu/qemu_monitor_text.c       |    4 +++
 8 files changed, 62 insertions(+), 36 deletions(-)
 rename src/{probes.d => libvirt_probes.d} (78%)
 create mode 100644 src/libvirt_qemu_probes.d

diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index db4abf5..f69ed63 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -110,7 +110,7 @@ libvirtd_LDADD =					\
 	$(POLKIT_LIBS)
 
 if WITH_DTRACE_PROBES
-libvirtd_LDADD += ../src/probes.o
+libvirtd_LDADD += ../src/libvirt_probes.o
 endif
 
 libvirtd_LDADD += \
diff --git a/src/Makefile.am b/src/Makefile.am
index 2d4636e..9d47bb6 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1236,22 +1236,30 @@ libvirt_la_CFLAGS = -DIN_LIBVIRT $(AM_CFLAGS)
 libvirt_la_DEPENDENCIES = $(libvirt_la_BUILT_LIBADD) $(LIBVIRT_SYMBOL_FILE)
 
 if WITH_DTRACE_PROBES
-libvirt_la_BUILT_LIBADD += probes.o
-libvirt_la_DEPENDENCIES += probes.o
-nodist_libvirt_la_SOURCES = probes.h
+libvirt_la_BUILT_LIBADD += libvirt_probes.o
+libvirt_la_DEPENDENCIES += libvirt_probes.o
+nodist_libvirt_la_SOURCES = libvirt_probes.h
 if WITH_REMOTE
-$(REMOTE_DRIVER_GENERATED): probes.h
+$(REMOTE_DRIVER_GENERATED): libvirt_probes.h
 endif WITH_REMOTE
 
-BUILT_SOURCES += probes.h libvirt_probes.stp libvirt_functions.stp
+BUILT_SOURCES += libvirt_probes.h libvirt_probes.stp libvirt_functions.stp
+
+if WITH_QEMU
+libvirt_driver_qemu_la_LIBADD += libvirt_qemu_probes.o
+nodist_libvirt_driver_qemu_la_SOURCES = libvirt_qemu_probes.h
+libvirt_driver_qemu_la_DEPENDENCIES = libvirt_qemu_probes.o
+
+$(libvirt_driver_qemu_la_SOURCES): libvirt_qemu_probes.h
+endif
 
 tapsetdir = $(datadir)/systemtap/tapset
-tapset_DATA = libvirt_probes.stp libvirt_functions.stp
+tapset_DATA = libvirt_probes.stp libvirt_qemu_probes.stp libvirt_functions.stp
 
-probes.h: probes.d
+%_probes.h: %_probes.d
 	$(AM_V_GEN)$(DTRACE) -o $@ -h -s $<
 
-probes.o: probes.d
+%_probes.o: %_probes.d
 	$(AM_V_GEN)$(DTRACE) -o $@ -G -s $<
 
 RPC_PROBE_FILES = $(srcdir)/rpc/virnetprotocol.x \
@@ -1262,13 +1270,19 @@ RPC_PROBE_FILES = $(srcdir)/rpc/virnetprotocol.x \
 libvirt_functions.stp: $(RPC_PROBE_FILES) $(srcdir)/rpc/gensystemtap.pl
 	$(AM_V_GEN)perl -w $(srcdir)/rpc/gensystemtap.pl $(RPC_PROBE_FILES) > $@
 
-libvirt_probes.stp: probes.d $(srcdir)/dtrace2systemtap.pl
+libvirt_probes.stp: libvirt_probes.d $(srcdir)/dtrace2systemtap.pl
+	$(AM_V_GEN)perl -w $(srcdir)/dtrace2systemtap.pl $(bindir) $(sbindir) $(libdir) $< > $@
+
+libvirt_qemu_probes.stp: libvirt_qemu_probes.d $(srcdir)/dtrace2systemtap.pl
 	$(AM_V_GEN)perl -w $(srcdir)/dtrace2systemtap.pl $(bindir) $(sbindir) $(libdir) $< > $@
 
-CLEANFILES += probes.h probes.o libvirt_functions.stp libvirt_probes.stp
+CLEANFILES += libvirt_probes.h libvirt_probes.o \
+              libvirt_qemu_probes.h libvirt_qemu_probes.o \
+              libvirt_functions.stp libvirt_probes.stp \
+              libvirt_qemu_probes.stp
 endif
 
-EXTRA_DIST += probes.d
+EXTRA_DIST += libvirt_probes.d libvirt_qemu_probes.d
 
 libvirt_qemu_la_SOURCES = libvirt-qemu.c
 libvirt_qemu_la_LDFLAGS = $(VERSION_SCRIPT_FLAGS)$(LIBVIRT_QEMU_SYMBOL_FILE) \
@@ -1455,7 +1469,7 @@ libvirt_lxc_LDADD = $(CAPNG_LIBS) $(YAJL_LIBS) \
 		$(RT_LIBS) \
 		../gnulib/lib/libgnu.la
 if WITH_DTRACE_PROBES
-libvirt_lxc_LDADD += probes.o
+libvirt_lxc_LDADD += libvirt_probes.o
 endif
 if WITH_SECDRIVER_SELINUX
 libvirt_lxc_LDADD += $(SELINUX_LIBS)
@@ -1498,7 +1512,7 @@ virt_aa_helper_LDADD =						\
 		libvirt_util.la					\
 		../gnulib/lib/libgnu.la
 if WITH_DTRACE_PROBES
-virt_aa_helper_LDADD += probes.o
+virt_aa_helper_LDADD += libvirt_probes.o
 endif
 virt_aa_helper_CFLAGS =						\
 		-I$(top_srcdir)/src/conf			\
diff --git a/src/internal.h b/src/internal.h
index ef81cda..a04c4ec 100644
--- a/src/internal.h
+++ b/src/internal.h
@@ -250,7 +250,7 @@
 # if WITH_DTRACE_PROBES
 #  ifndef LIBVIRT_PROBES_H
 #   define LIBVIRT_PROBES_H
-#   include "probes.h"
+#   include "libvirt_probes.h"
 #  endif /* LIBVIRT_PROBES_H */
 
 /* Systemtap 1.2 headers have a bug where they cannot handle a
diff --git a/src/probes.d b/src/libvirt_probes.d
similarity index 78%
rename from src/probes.d
rename to src/libvirt_probes.d
index 9d70cc9..0dac8f3 100644
--- a/src/probes.d
+++ b/src/libvirt_probes.d
@@ -82,25 +82,4 @@ provider libvirt {
 	probe rpc_keepalive_send(void *ka, void *client, int prog, int vers, int proc);
 	probe rpc_keepalive_received(void *ka, void *client, int prog, int vers, int proc);
 	probe rpc_keepalive_timeout(void *ka, void *client, int coundToDeath, int idle);
-
-
-        # file: src/qemu/qemu_monitor.c
-        # prefix: qemu
-        # binary: libvirtd
-        # Monitor lifecycle
-        probe qemu_monitor_new(void *mon, int refs, int fd);
-        probe qemu_monitor_ref(void *mon, int refs);
-        probe qemu_monitor_unref(void *mon, int refs);
-        probe qemu_monitor_close(void *monm, int refs);
-
-        # High level monitor message processing
-        probe qemu_monitor_send_msg(void *mon, const char *msg, int fd);
-        probe qemu_monitor_recv_reply(void *mon, const char *reply);
-        probe qemu_monitor_recv_event(void *mon, const char *event);
-
-        # Low level monitor I/O processing
-        probe qemu_monitor_io_process(void *mon, const char *buf, unsigned int len);
-        probe qemu_monitor_io_read(void *mon, const char *buf, unsigned int len, int ret, int errno);
-        probe qemu_monitor_io_write(void *mon, const char *buf, unsigned int len, int ret, int errno);
-        probe qemu_monitor_io_send_fd(void *mon, int fd, int ret, int errno);
 };
diff --git a/src/libvirt_qemu_probes.d b/src/libvirt_qemu_probes.d
new file mode 100644
index 0000000..6916778
--- /dev/null
+++ b/src/libvirt_qemu_probes.d
@@ -0,0 +1,21 @@
+provider libvirt {
+        # file: src/qemu/qemu_monitor.c
+        # prefix: qemu
+        # binary: libvirtd
+        # Monitor lifecycle
+        probe qemu_monitor_new(void *mon, int refs, int fd);
+        probe qemu_monitor_ref(void *mon, int refs);
+        probe qemu_monitor_unref(void *mon, int refs);
+        probe qemu_monitor_close(void *monm, int refs);
+
+        # High level monitor message processing
+        probe qemu_monitor_send_msg(void *mon, const char *msg, int fd);
+        probe qemu_monitor_recv_reply(void *mon, const char *reply);
+        probe qemu_monitor_recv_event(void *mon, const char *event);
+
+        # Low level monitor I/O processing
+        probe qemu_monitor_io_process(void *mon, const char *buf, unsigned int len);
+        probe qemu_monitor_io_read(void *mon, const char *buf, unsigned int len, int ret, int errno);
+        probe qemu_monitor_io_write(void *mon, const char *buf, unsigned int len, int ret, int errno);
+        probe qemu_monitor_io_send_fd(void *mon, int fd, int ret, int errno);
+};
diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
index e1a8d4c..b024567 100644
--- a/src/qemu/qemu_monitor.c
+++ b/src/qemu/qemu_monitor.c
@@ -37,6 +37,10 @@
 #include "logging.h"
 #include "virfile.h"
 
+#ifdef WITH_DTRACE_PROBES
+# include "libvirt_qemu_probes.h"
+#endif
+
 #define VIR_FROM_THIS VIR_FROM_QEMU
 
 #define DEBUG_IO 0
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index 7093e1d..76f5b1c 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -43,6 +43,10 @@
 #include "json.h"
 #include "ignore-value.h"
 
+#ifdef WITH_DTRACE_PROBES
+# include "libvirt_qemu_probes.h"
+#endif
+
 #define VIR_FROM_THIS VIR_FROM_QEMU
 
 
diff --git a/src/qemu/qemu_monitor_text.c b/src/qemu/qemu_monitor_text.c
index 9e2991b..edb5dfd 100644
--- a/src/qemu/qemu_monitor_text.c
+++ b/src/qemu/qemu_monitor_text.c
@@ -41,6 +41,10 @@
 #include "virterror_internal.h"
 #include "buf.h"
 
+#ifdef WITH_DTRACE_PROBES
+# include "libvirt_qemu_probes.h"
+#endif
+
 #define VIR_FROM_THIS VIR_FROM_QEMU
 
 #define QEMU_CMD_PROMPT "\n(qemu) "
-- 
1.7.7.6




More information about the libvir-list mailing list