mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
Move dtrace probe macros into separate header file
The dtrace probe macros rely on the logging API. We can't make the internal.h header include the virlog.h header though since that'd be a circular include. Instead simply split the dtrace probes into their own header file, since there's no compelling reason for them to be in the main internal.h header. Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
parent
3887c5d83b
commit
b29275d928
@ -52,6 +52,7 @@
|
|||||||
#include "object_event.h"
|
#include "object_event.h"
|
||||||
#include "domain_conf.h"
|
#include "domain_conf.h"
|
||||||
#include "network_conf.h"
|
#include "network_conf.h"
|
||||||
|
#include "virprobe.h"
|
||||||
#include "viraccessapicheck.h"
|
#include "viraccessapicheck.h"
|
||||||
|
|
||||||
#define VIR_FROM_THIS VIR_FROM_RPC
|
#define VIR_FROM_THIS VIR_FROM_RPC
|
||||||
|
@ -366,78 +366,6 @@
|
|||||||
# define VIR_ROUND_UP(value, size) (VIR_DIV_UP(value, size) * (size))
|
# define VIR_ROUND_UP(value, size) (VIR_DIV_UP(value, size) * (size))
|
||||||
|
|
||||||
|
|
||||||
# if WITH_DTRACE_PROBES
|
|
||||||
# ifndef LIBVIRT_PROBES_H
|
|
||||||
# define LIBVIRT_PROBES_H
|
|
||||||
# include "libvirt_probes.h"
|
|
||||||
# endif /* LIBVIRT_PROBES_H */
|
|
||||||
|
|
||||||
/* Systemtap 1.2 headers have a bug where they cannot handle a
|
|
||||||
* variable declared with array type. Work around this by casting all
|
|
||||||
* arguments. This is some gross use of the preprocessor because
|
|
||||||
* PROBE is a var-arg macro, but it is better than the alternative of
|
|
||||||
* making all callers to PROBE have to be aware of the issues. And
|
|
||||||
* hopefully, if we ever add a call to PROBE with other than 9
|
|
||||||
* end arguments, you can figure out the pattern to extend this hack.
|
|
||||||
*/
|
|
||||||
# define VIR_COUNT_ARGS(...) VIR_ARG11(__VA_ARGS__, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
|
|
||||||
# define VIR_ARG11(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, ...) _11
|
|
||||||
# define VIR_ADD_CAST_EXPAND(a, b, ...) VIR_ADD_CAST_PASTE(a, b, __VA_ARGS__)
|
|
||||||
# define VIR_ADD_CAST_PASTE(a, b, ...) a##b(__VA_ARGS__)
|
|
||||||
|
|
||||||
/* The double cast is necessary to silence gcc warnings; any pointer
|
|
||||||
* can safely go to intptr_t and back to void *, which collapses
|
|
||||||
* arrays into pointers; while any integer can be widened to intptr_t
|
|
||||||
* then cast to void *. */
|
|
||||||
# define VIR_ADD_CAST(a) ((void *)(intptr_t)(a))
|
|
||||||
# define VIR_ADD_CAST1(a) \
|
|
||||||
VIR_ADD_CAST(a)
|
|
||||||
# define VIR_ADD_CAST2(a, b) \
|
|
||||||
VIR_ADD_CAST(a), VIR_ADD_CAST(b)
|
|
||||||
# define VIR_ADD_CAST3(a, b, c) \
|
|
||||||
VIR_ADD_CAST(a), VIR_ADD_CAST(b), VIR_ADD_CAST(c)
|
|
||||||
# define VIR_ADD_CAST4(a, b, c, d) \
|
|
||||||
VIR_ADD_CAST(a), VIR_ADD_CAST(b), VIR_ADD_CAST(c), \
|
|
||||||
VIR_ADD_CAST(d)
|
|
||||||
# define VIR_ADD_CAST5(a, b, c, d, e) \
|
|
||||||
VIR_ADD_CAST(a), VIR_ADD_CAST(b), VIR_ADD_CAST(c), \
|
|
||||||
VIR_ADD_CAST(d), VIR_ADD_CAST(e)
|
|
||||||
# define VIR_ADD_CAST6(a, b, c, d, e, f) \
|
|
||||||
VIR_ADD_CAST(a), VIR_ADD_CAST(b), VIR_ADD_CAST(c), \
|
|
||||||
VIR_ADD_CAST(d), VIR_ADD_CAST(e), VIR_ADD_CAST(f)
|
|
||||||
# define VIR_ADD_CAST7(a, b, c, d, e, f, g) \
|
|
||||||
VIR_ADD_CAST(a), VIR_ADD_CAST(b), VIR_ADD_CAST(c), \
|
|
||||||
VIR_ADD_CAST(d), VIR_ADD_CAST(e), VIR_ADD_CAST(f), \
|
|
||||||
VIR_ADD_CAST(g)
|
|
||||||
# define VIR_ADD_CAST8(a, b, c, d, e, f, g, h) \
|
|
||||||
VIR_ADD_CAST(a), VIR_ADD_CAST(b), VIR_ADD_CAST(c), \
|
|
||||||
VIR_ADD_CAST(d), VIR_ADD_CAST(e), VIR_ADD_CAST(f), \
|
|
||||||
VIR_ADD_CAST(g), VIR_ADD_CAST(h)
|
|
||||||
# define VIR_ADD_CAST9(a, b, c, d, e, f, g, h, i) \
|
|
||||||
VIR_ADD_CAST(a), VIR_ADD_CAST(b), VIR_ADD_CAST(c), \
|
|
||||||
VIR_ADD_CAST(d), VIR_ADD_CAST(e), VIR_ADD_CAST(f), \
|
|
||||||
VIR_ADD_CAST(g), VIR_ADD_CAST(h), VIR_ADD_CAST(i)
|
|
||||||
|
|
||||||
# define VIR_ADD_CASTS(...) \
|
|
||||||
VIR_ADD_CAST_EXPAND(VIR_ADD_CAST, VIR_COUNT_ARGS(__VA_ARGS__), \
|
|
||||||
__VA_ARGS__)
|
|
||||||
|
|
||||||
# define PROBE_EXPAND(NAME, ARGS) NAME(ARGS)
|
|
||||||
# define PROBE(NAME, FMT, ...) \
|
|
||||||
VIR_DEBUG_INT(VIR_LOG_FROM_TRACE, \
|
|
||||||
__FILE__, __LINE__, __func__, \
|
|
||||||
#NAME ": " FMT, __VA_ARGS__); \
|
|
||||||
if (LIBVIRT_ ## NAME ## _ENABLED()) { \
|
|
||||||
PROBE_EXPAND(LIBVIRT_ ## NAME, \
|
|
||||||
VIR_ADD_CASTS(__VA_ARGS__)); \
|
|
||||||
}
|
|
||||||
# else
|
|
||||||
# define PROBE(NAME, FMT, ...) \
|
|
||||||
VIR_DEBUG_INT(VIR_LOG_FROM_TRACE, \
|
|
||||||
__FILE__, __LINE__, __func__, \
|
|
||||||
#NAME ": " FMT, __VA_ARGS__);
|
|
||||||
# endif
|
|
||||||
|
|
||||||
/* Specific error values for use in forwarding programs such as
|
/* Specific error values for use in forwarding programs such as
|
||||||
* virt-login-shell; these values match what GNU env does. */
|
* virt-login-shell; these values match what GNU env does. */
|
||||||
enum {
|
enum {
|
||||||
|
@ -40,6 +40,7 @@
|
|||||||
#include "virfile.h"
|
#include "virfile.h"
|
||||||
#include "virprocess.h"
|
#include "virprocess.h"
|
||||||
#include "virobject.h"
|
#include "virobject.h"
|
||||||
|
#include "virprobe.h"
|
||||||
#include "virstring.h"
|
#include "virstring.h"
|
||||||
|
|
||||||
#ifdef WITH_DTRACE_PROBES
|
#ifdef WITH_DTRACE_PROBES
|
||||||
|
@ -41,6 +41,7 @@
|
|||||||
#include "datatypes.h"
|
#include "datatypes.h"
|
||||||
#include "virerror.h"
|
#include "virerror.h"
|
||||||
#include "virjson.h"
|
#include "virjson.h"
|
||||||
|
#include "virprobe.h"
|
||||||
#include "virstring.h"
|
#include "virstring.h"
|
||||||
#include "cpu/cpu_x86.h"
|
#include "cpu/cpu_x86.h"
|
||||||
|
|
||||||
|
@ -40,6 +40,7 @@
|
|||||||
#include "datatypes.h"
|
#include "datatypes.h"
|
||||||
#include "virerror.h"
|
#include "virerror.h"
|
||||||
#include "virbuffer.h"
|
#include "virbuffer.h"
|
||||||
|
#include "virprobe.h"
|
||||||
#include "virstring.h"
|
#include "virstring.h"
|
||||||
|
|
||||||
#ifdef WITH_DTRACE_PROBES
|
#ifdef WITH_DTRACE_PROBES
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
#include "virnetsocket.h"
|
#include "virnetsocket.h"
|
||||||
#include "virkeepaliveprotocol.h"
|
#include "virkeepaliveprotocol.h"
|
||||||
#include "virkeepalive.h"
|
#include "virkeepalive.h"
|
||||||
|
#include "virprobe.h"
|
||||||
|
|
||||||
#define VIR_FROM_THIS VIR_FROM_RPC
|
#define VIR_FROM_THIS VIR_FROM_RPC
|
||||||
|
|
||||||
|
@ -36,6 +36,7 @@
|
|||||||
#include "virlog.h"
|
#include "virlog.h"
|
||||||
#include "virutil.h"
|
#include "virutil.h"
|
||||||
#include "virerror.h"
|
#include "virerror.h"
|
||||||
|
#include "virprobe.h"
|
||||||
#include "virstring.h"
|
#include "virstring.h"
|
||||||
|
|
||||||
#define VIR_FROM_THIS VIR_FROM_RPC
|
#define VIR_FROM_THIS VIR_FROM_RPC
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
#include "viralloc.h"
|
#include "viralloc.h"
|
||||||
#include "virthread.h"
|
#include "virthread.h"
|
||||||
#include "virkeepalive.h"
|
#include "virkeepalive.h"
|
||||||
|
#include "virprobe.h"
|
||||||
#include "virstring.h"
|
#include "virstring.h"
|
||||||
#include "virutil.h"
|
#include "virutil.h"
|
||||||
|
|
||||||
|
@ -51,6 +51,7 @@
|
|||||||
#include "virlog.h"
|
#include "virlog.h"
|
||||||
#include "virfile.h"
|
#include "virfile.h"
|
||||||
#include "virthread.h"
|
#include "virthread.h"
|
||||||
|
#include "virprobe.h"
|
||||||
#include "virprocess.h"
|
#include "virprocess.h"
|
||||||
#include "virstring.h"
|
#include "virstring.h"
|
||||||
#include "passfd.h"
|
#include "passfd.h"
|
||||||
|
@ -39,6 +39,7 @@
|
|||||||
#include "virfile.h"
|
#include "virfile.h"
|
||||||
#include "virutil.h"
|
#include "virutil.h"
|
||||||
#include "virlog.h"
|
#include "virlog.h"
|
||||||
|
#include "virprobe.h"
|
||||||
#include "virthread.h"
|
#include "virthread.h"
|
||||||
#include "configmake.h"
|
#include "configmake.h"
|
||||||
|
|
||||||
|
@ -38,6 +38,7 @@
|
|||||||
#include "virutil.h"
|
#include "virutil.h"
|
||||||
#include "virfile.h"
|
#include "virfile.h"
|
||||||
#include "virerror.h"
|
#include "virerror.h"
|
||||||
|
#include "virprobe.h"
|
||||||
#include "virtime.h"
|
#include "virtime.h"
|
||||||
|
|
||||||
#define EVENT_DEBUG(fmt, ...) VIR_DEBUG(fmt, __VA_ARGS__)
|
#define EVENT_DEBUG(fmt, ...) VIR_DEBUG(fmt, __VA_ARGS__)
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
#include "viratomic.h"
|
#include "viratomic.h"
|
||||||
#include "virerror.h"
|
#include "virerror.h"
|
||||||
#include "virlog.h"
|
#include "virlog.h"
|
||||||
|
#include "virprobe.h"
|
||||||
#include "virstring.h"
|
#include "virstring.h"
|
||||||
|
|
||||||
#define VIR_FROM_THIS VIR_FROM_NONE
|
#define VIR_FROM_THIS VIR_FROM_NONE
|
||||||
|
100
src/util/virprobe.h
Normal file
100
src/util/virprobe.h
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
/*
|
||||||
|
* virprobe.h: dynamic operation tracing
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006-2014 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library. If not, see
|
||||||
|
* <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __VIR_PROBE_H__
|
||||||
|
# define __VIR_PROBE_H__
|
||||||
|
|
||||||
|
# include "internal.h"
|
||||||
|
# include "virlog.h"
|
||||||
|
|
||||||
|
# if WITH_DTRACE_PROBES
|
||||||
|
# ifndef LIBVIRT_PROBES_H
|
||||||
|
# define LIBVIRT_PROBES_H
|
||||||
|
# include "libvirt_probes.h"
|
||||||
|
# endif /* LIBVIRT_PROBES_H */
|
||||||
|
|
||||||
|
/* Systemtap 1.2 headers have a bug where they cannot handle a
|
||||||
|
* variable declared with array type. Work around this by casting all
|
||||||
|
* arguments. This is some gross use of the preprocessor because
|
||||||
|
* PROBE is a var-arg macro, but it is better than the alternative of
|
||||||
|
* making all callers to PROBE have to be aware of the issues. And
|
||||||
|
* hopefully, if we ever add a call to PROBE with other than 9
|
||||||
|
* end arguments, you can figure out the pattern to extend this hack.
|
||||||
|
*/
|
||||||
|
# define VIR_COUNT_ARGS(...) VIR_ARG11(__VA_ARGS__, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
|
||||||
|
# define VIR_ARG11(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, ...) _11
|
||||||
|
# define VIR_ADD_CAST_EXPAND(a, b, ...) VIR_ADD_CAST_PASTE(a, b, __VA_ARGS__)
|
||||||
|
# define VIR_ADD_CAST_PASTE(a, b, ...) a##b(__VA_ARGS__)
|
||||||
|
|
||||||
|
/* The double cast is necessary to silence gcc warnings; any pointer
|
||||||
|
* can safely go to intptr_t and back to void *, which collapses
|
||||||
|
* arrays into pointers; while any integer can be widened to intptr_t
|
||||||
|
* then cast to void *. */
|
||||||
|
# define VIR_ADD_CAST(a) ((void *)(intptr_t)(a))
|
||||||
|
# define VIR_ADD_CAST1(a) \
|
||||||
|
VIR_ADD_CAST(a)
|
||||||
|
# define VIR_ADD_CAST2(a, b) \
|
||||||
|
VIR_ADD_CAST(a), VIR_ADD_CAST(b)
|
||||||
|
# define VIR_ADD_CAST3(a, b, c) \
|
||||||
|
VIR_ADD_CAST(a), VIR_ADD_CAST(b), VIR_ADD_CAST(c)
|
||||||
|
# define VIR_ADD_CAST4(a, b, c, d) \
|
||||||
|
VIR_ADD_CAST(a), VIR_ADD_CAST(b), VIR_ADD_CAST(c), \
|
||||||
|
VIR_ADD_CAST(d)
|
||||||
|
# define VIR_ADD_CAST5(a, b, c, d, e) \
|
||||||
|
VIR_ADD_CAST(a), VIR_ADD_CAST(b), VIR_ADD_CAST(c), \
|
||||||
|
VIR_ADD_CAST(d), VIR_ADD_CAST(e)
|
||||||
|
# define VIR_ADD_CAST6(a, b, c, d, e, f) \
|
||||||
|
VIR_ADD_CAST(a), VIR_ADD_CAST(b), VIR_ADD_CAST(c), \
|
||||||
|
VIR_ADD_CAST(d), VIR_ADD_CAST(e), VIR_ADD_CAST(f)
|
||||||
|
# define VIR_ADD_CAST7(a, b, c, d, e, f, g) \
|
||||||
|
VIR_ADD_CAST(a), VIR_ADD_CAST(b), VIR_ADD_CAST(c), \
|
||||||
|
VIR_ADD_CAST(d), VIR_ADD_CAST(e), VIR_ADD_CAST(f), \
|
||||||
|
VIR_ADD_CAST(g)
|
||||||
|
# define VIR_ADD_CAST8(a, b, c, d, e, f, g, h) \
|
||||||
|
VIR_ADD_CAST(a), VIR_ADD_CAST(b), VIR_ADD_CAST(c), \
|
||||||
|
VIR_ADD_CAST(d), VIR_ADD_CAST(e), VIR_ADD_CAST(f), \
|
||||||
|
VIR_ADD_CAST(g), VIR_ADD_CAST(h)
|
||||||
|
# define VIR_ADD_CAST9(a, b, c, d, e, f, g, h, i) \
|
||||||
|
VIR_ADD_CAST(a), VIR_ADD_CAST(b), VIR_ADD_CAST(c), \
|
||||||
|
VIR_ADD_CAST(d), VIR_ADD_CAST(e), VIR_ADD_CAST(f), \
|
||||||
|
VIR_ADD_CAST(g), VIR_ADD_CAST(h), VIR_ADD_CAST(i)
|
||||||
|
|
||||||
|
# define VIR_ADD_CASTS(...) \
|
||||||
|
VIR_ADD_CAST_EXPAND(VIR_ADD_CAST, VIR_COUNT_ARGS(__VA_ARGS__), \
|
||||||
|
__VA_ARGS__)
|
||||||
|
|
||||||
|
# define PROBE_EXPAND(NAME, ARGS) NAME(ARGS)
|
||||||
|
# define PROBE(NAME, FMT, ...) \
|
||||||
|
VIR_DEBUG_INT(VIR_LOG_FROM_TRACE, \
|
||||||
|
NULL, __LINE__, __func__, \
|
||||||
|
#NAME ": " FMT, __VA_ARGS__); \
|
||||||
|
if (LIBVIRT_ ## NAME ## _ENABLED()) { \
|
||||||
|
PROBE_EXPAND(LIBVIRT_ ## NAME, \
|
||||||
|
VIR_ADD_CASTS(__VA_ARGS__)); \
|
||||||
|
}
|
||||||
|
# else
|
||||||
|
# define PROBE(NAME, FMT, ...) \
|
||||||
|
VIR_DEBUG_INT(VIR_LOG_FROM_TRACE, \
|
||||||
|
NULL, __LINE__, __func__, \
|
||||||
|
#NAME ": " FMT, __VA_ARGS__);
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#endif /* __VIR_PROBE_H__ */
|
Loading…
x
Reference in New Issue
Block a user