summaryrefslogtreecommitdiffstats
path: root/trace
Commit message (Collapse)AuthorAgeFilesLines
* osdep: initialize glib threads in all QEMU toolsStefan Hajnoczi2014-03-251-9/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | glib versions prior to 2.31.0 require an explicit g_thread_init() call to enable multi-threading. Failure to initialize threading causes glib to take single-threaded code paths without synchronization. For example, the g_slice allocator will crash due to race conditions. Fix this for all QEMU tool programs (qemu-nbd, qemu-io, qemu-img) by moving the g_thread_init() call from vl.c:main() into a new osdep.c:thread_init() constructor function. thread_init() has __attribute__((constructor)) and is automatically invoked by the runtime during startup. We can now drop the "simple" trace backend's g_thread_init() call since thread_init() already called it. Note that we must keep coroutine-gthread.c's g_thread_init() call which is located in a constructor function. There is no guarantee for constructor function ordering so thread_init() may only be called later. Reported-by: Mario de Chenno <mario.dechenno@unina2.it> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
* trace: Fix build warnings for Win32 buildPeter Maydell2014-03-121-5/+5
| | | | | | | | | | | | | The Win32 build warns about trace/control-internal.h: warning: 'trace_event_count' declared inline after being called Fix this by simply reordering trace_event_id() and trace_event_count(). Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Stefan Weil <sw@weilnetz.de> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
* Adapt Makefiles to the new LTTng ust interfaceMohamad Gebai2014-02-191-0/+25
| | | | | | | Add generation of new files for LTTng ust. Signed-off-by: Mohamad Gebai <mohamad.gebai@polymtl.ca> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
* trace: add glib 2.32+ static GMutex supportStefan Hajnoczi2014-01-271-7/+16
| | | | | | | | | The GStaticMutex API was deprecated in glib 2.32. We cannot switch over to GMutex unconditionally since we would drop support for older glib versions. But the deprecated API warnings during build are annoying so use static GMutex when possible. Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
* trace: [simple] Do not include "trace/simple.h" in generated tracer headersLluís Vilanova2014-01-271-0/+1
| | | | | | | | The header is not necessary, given that the simple backend does not define any inlined tracing routines. Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
* trace: Add ftrace tracing backendEiichi Tsukata2013-05-033-0/+113
| | | | | | | | | | | | | | | | | | | | | | | This patch adds a ftrace tracing backend which sends trace event to ftrace marker file. You can effectively compare qemu trace data and kernel(especially, kvm.ko when using KVM) trace data. The ftrace backend is restricted to Linux only. To try out the ftrace backend: $ ./configure --trace-backend=ftrace $ make if you use KVM, enable kvm events in ftrace: # sudo echo 1 > /sys/kernel/debug/tracing/events/kvm/enable After running qemu by root user, you can get the trace: # cat /sys/kernel/debug/tracing/trace Signed-off-by: Eiichi Tsukata <eiichi.tsukata.xh@hitachi.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
* trace: rebuild generated-events.o when configuration changesStefan Hajnoczi2013-03-281-1/+1
| | | | | | | | | | Make sure to rebuild generated-events.o when ./configure options change. This prevents linker errors when a stale generated-events.o gets linked with code compiled against fresh headers. For example, try building with ./configure --enable-trace-backend=stderr followed by ./configure --enable-trace-backend=dtrace. Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
* trace: [stderr] Port to generic event information and new control interfaceLluís Vilanova2013-03-282-39/+6
| | | | | Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
* trace: [simple] Port to generic event information and new control interfaceLluís Vilanova2013-03-282-33/+8
| | | | | | | | The backend is forced to dump event numbers using 64 bits, as TraceEventID is an enum. Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
* trace: [default] Port to generic event information and new control interfaceLluís Vilanova2013-03-281-3/+2
| | | | | Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
* trace: Provide a detailed event control interfaceLluís Vilanova2013-03-283-32/+331
| | | | | | | | | | | | | This interface decouples event obtaining from interaction. Events can be obtained through three different methods: * identifier * name * simple wildcard pattern Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
* trace: Provide a generic tracing event descriptorLluís Vilanova2013-03-282-1/+56
| | | | | | | | | | | | | | Uses tracetool to generate a backend-independent tracing event description (struct TraceEvent). The values for such structure are generated with the non-public "events" backend ("events-c" frontend). The generation of the defines to check if an event is statically enabled is also moved to the "events" backend ("events-h" frontend). Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
* trace: deal with deprecated glib thread functionsStefan Hajnoczi2013-02-121-0/+18
| | | | | | | | | | | | | g_thread_create() was deprecated in favor of g_thread_new() and g_cond_new() was deprecated in favor of GCond initialization. If the host has glib 2.31 or newer, avoid using the deprecated functions. This patch solves compiler warnings that are generated when glib's deprecated functions are used. Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Message-id: 1360676045-9204-3-git-send-email-stefanha@redhat.com Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
* trace: use glib atomic int typesStefan Hajnoczi2013-02-121-3/+3
| | | | | | | | | | | | | | | Juan reported that RHEL 6.4 hosts give compiler warnings because we use unsigned int while glib prototypes use volatile gint in trace/simple.c. trace/simple.c:223: error: pointer targets in passing argument 1 of 'g_atomic_int_compare_and_exchange' differ in signedness These variables are only accessed with glib atomic int functions so let's play it by the book and use volatile gint. Reported-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Message-id: 1360676045-9204-2-git-send-email-stefanha@redhat.com Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
* trace: Clean up the "try to update atomic until it worked" loopsMarkus Armbruster2013-02-051-13/+5
| | | | | | | Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Harsh Prateek Bora <harsh@linux.vnet.ibm.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
* trace: Direct access of atomics is verboten, use the APIMarkus Armbruster2013-02-051-4/+5
| | | | | | | | | | | | | | | The GLib Reference Manual says: It is very important that all accesses to a particular integer or pointer be performed using only this API and that different sizes of operation are not mixed or used on overlapping memory regions. Never read or assign directly from or to a value -- always use this API. Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Harsh Prateek Bora <harsh@linux.vnet.ibm.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
* trace: Fix simple trace dropped event record for big endianMarkus Armbruster2013-02-051-8/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We use atomic operations to keep track of dropped events. Inconveniently, GLib supports only int and void * atomics, but the counter dropped_events is uint64_t. Can't stop commit 62bab732: a quick (gint *)&dropped_events bludgeons the compiler into submission. That cast is okay only when int is exactly 64 bits wide, which it commonly isn't. If int is even wider, we clobber whatever follows dropped_events. Not worth worrying about, as none of the machines that interest us have such morbidly obese ints. That leaves the common case: int narrower than 64 bits. Harmless on little endian hosts: we just don't access the most significant bits of dropped_events. They remain zero. On big endian hosts, we use only the most significant bits of dropped_events as counter. The least significant bits remain zero. However, we write out the full value, which is the correct counter shifted left a bunch of places. Fix by changing the variables involved to int. There's another, equally suspicious-looking (gint *)&trace_idx argument to g_atomic_int_compare_and_exchange(), but that one casts unsigned *, so it's okay. But it's also superfluous, because GLib's atomic int operations work just fine for unsigned. Drop it. Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
* Makefile: clean timestamp generation ruleMichael S. Tsirkin2013-01-301-2/+2
| | | | | | create timestamp by rule without sideeffects. Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
* build: fold trace-obj-y into libqemuutil.aPaolo Bonzini2013-01-121-5/+5
| | | | Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* build: some simplifications for "trace/Makefile.objs"Paolo Bonzini2013-01-121-13/+13
| | | | | Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* build: move dtrace rules to rules.makPaolo Bonzini2013-01-121-12/+0
| | | | Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* build: Use separate makefile for "trace/"Lluís Vilanova2012-12-231-0/+70
| | | | | | | | | | | | | | Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> -- Changes in v2: * Do not depend on "qemu-timer-common.o". * Use "$(obj)" in rules to refer to the build sub-directory. * Remove dependencies against "$(GENERATED_HEADERS)". Cc: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
* misc: move include files to include/qemu/Paolo Bonzini2012-12-191-1/+1
| | | | Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* trace: allow disabling events in events fileGerd Hoffmann2012-11-161-1/+8
| | | | | | | | | | | | | | Disable trace events prefixed with a '-'. Useful to enable a group of tracepoints with exceptions, like this: usb_xhci_port_* -usb_xhci_port_read which will enable all xhci port tracepoints except reads. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
* trace/simple: Replace asprintf by g_strdup_printfStefan Weil2012-08-141-10/+4
| | | | | | | | | | | | asprintf is not available for all hosts. g_strdup_printf is more portable and simplifies the code because if does not need error handling. The static variable does not need an explicit assignment to be NULL. Cc: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com> Signed-off-by: Stefan Weil <sw@weilnetz.de> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
* trace: avoid pointer aliasing in trace_record_finish()Harsh Prateek Bora2012-08-141-5/+4
| | | | | | | | Declaring a TraceRecord on the stack works fine. No need for a uint8_t array and pointer aliasing. Signed-off-by: Harsh Prateek Bora <harsh@linux.vnet.ibm.com> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
* trace: drop unused TraceBufferRecord->next_tbuf_idx fieldHarsh Prateek Bora2012-08-142-3/+0
| | | | | Signed-off-by: Harsh Prateek Bora <harsh@linux.vnet.ibm.com> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
* trace: remove unnecessary write_to_buffer() typecastingHarsh Prateek Bora2012-08-141-3/+3
| | | | | | | The buffer argument is void* so it is not necessary to cast. Signed-off-by: Harsh Prateek Bora <harsh@linux.vnet.ibm.com> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
* trace: rename TraceRecordHeader to TraceLogHeaderHarsh Prateek Bora2012-08-141-2/+2
| | | | | | | | The TraceRecordHeader is really the header for the entire trace log file. It's not per-record header so make this obvious by renaming it. Signed-off-by: Harsh Prateek Bora <harsh@linux.vnet.ibm.com> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
* Simpletrace v2: Support multiple arguments, strings.Harsh Prateek Bora2012-07-192-101/+191
| | | | | | | | | | | | | Existing simpletrace backend allows to trace at max 6 args and does not support strings. This newer tracelog format gets rid of fixed size records and therefore allows to trace variable number of args including strings. Sample trace with strings: v9fs_version 0.000 tag=0xffff id=0x64 msize=0x2000 version=9P2000.L v9fs_version_return 6.705 tag=0xffff id=0x64 msize=0x2000 version=9P2000.L Signed-off-by: Harsh Prateek Bora <harsh@linux.vnet.ibm.com> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
* monitor: remove unused do_info_traceHarsh Prateek Bora2012-07-192-19/+0
| | | | | | | | | | | | | | | | | | | | | | | Going forward with simpletrace v2 variable size trace records, we cannot have a generic function to print trace event info and therefore this interface becomes invalid. As per Stefan Hajnoczi: "This command is only available from the human monitor. It's not very useful because it historically hasn't been able to pretty-print events or show them in the right order (we use a ringbuffer but it prints them out from index 0). Therefore, I don't think we're under any obligation to keep this command around. No one has complained about it's limitations - I think this is a sign that no one has used it. I'd be okay with a patch that removes it." Ref: http://lists.gnu.org/archive/html/qemu-devel/2012-01/msg01268.html Signed-off-by: Harsh Prateek Bora <harsh@linux.vnet.ibm.com> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
* trace: added ability to comment out events in the listAlexey Kardashevskiy2012-07-191-0/+3
| | | | | | | | | | | It is convenient for debug to be able to switch on/off some events easily. The only possibility now is to remove event name from the file completely and type it again when we want it back. The patch adds '#' symbol handling as a comment specifier. Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
* trace/simple.c: fix deprecated glib2 interfaceHarsh Prateek Bora2012-06-081-1/+4
| | | | | Signed-off-by: Harsh Prateek Bora <harsh@linux.vnet.ibm.com> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
* trace: make trace_thread_create() use its function argJun Koi2012-03-121-1/+1
| | | | | | | | | This patch makes trace_thread_create() to use its function arg to initialize thread. The other choice is to make this a function to use void arg, but i prefer this way. Signed-off-by: Jun Koi <junkoi2004@gmail.com> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
* g_thread_init users: don't call it if glib >= 2.31Alon Levy2011-12-201-0/+5
| | | | | | | | | | | | | | | | | | | | | | since commit f9b29ca03 included in release 2.31 (docs below say 2.32 but that is not correct) and onwards g_thread_init is deprecated and calling it is not required: http://developer.gnome.org/glib/unstable/glib-Deprecated-Thread-APIs.html#g-thread-init g_thread_init has been deprecated since version 2.32 and should not be used in newly-written code. This function is no longer necessary. The GLib threading system is automatically initialized at the start of your program. Fixes bulid failure when warnings are treated as errors on fedora 17. I only tested the change to vl.c, and copy pasted to the two other locations (couldn't decide if a wrapper for calling g_thread_init is uglier). Signed-off-by: Alon Levy <alevy@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
* trace: Add wildcard trace event supportMark Wu2011-11-012-3/+33
| | | | | | | | | | | A basic wildcard matching is supported in both the monitor command "trace-event" and the events list file. That means you can enable/disable the events having a common prefix in a batch. For example, virtio-blk trace events could be enabled using: trace-event virtio_blk_* on Signed-off-by: Mark Wu <wudxw@linux.vnet.ibm.com> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
* trace: use binary file open mode in simpletraceStefan Hajnoczi2011-09-211-1/+1
| | | | | | | | For Windows portability the simple trace backend must use the 'b' file open mode. This prevents the stdio library from mangling 0x0a/0x0d newline characters. Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
* trace: portable simple trace backend using glibStefan Hajnoczi2011-09-211-26/+48
| | | | | | | | | Convert the simple trace backend to glib so that it works under Windows. We cannot use pthread directly but glib provides portable abstractions. Also use glib atomics instead of newish gcc builtins which may not be supported on Windows toolchains. Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
* trace: [stderr] add support for dynamically enabling/disabling eventsLluís2011-09-012-0/+48
| | | | | | | | Uses the generic interface provided in "trace/control.h" in order to provide a programmatic interface as well as command line and monitor controls. Signed-off-by: Fabien Chouteau <chouteau@adacore.com> Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu>
* trace: add "-trace events" argument to control initial stateLluís2011-09-014-5/+61
| | | | | | | | | | | The "-trace events" argument can be used to provide a file with a list of trace event names that will be enabled prior to starting execution, thus providing early tracing. This saves the user from manually toggling event states through the monitor interface or whichever backend-specific interface. Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu>
* trace: separate trace event control and query routines from the simple backendLluís2011-09-014-11/+33
| | | | | | | | Generalize the 'st_print_trace_events' and 'st_change_trace_event_state' into backend-specific 'trace_print_events' and 'trace_event_set_state' (respectively) in the "trace/control.h" file. Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu>
* trace: avoid conditional code compilation during option parsingLluís2011-09-014-12/+51
| | | | | | | | A default implementation for backend-specific routines is provided in "trace/default.c", which backends can override by setting "trace_default=no" in "configure". Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu>
* trace: move backend-specific code into the trace/ directoryLluís2011-09-012-0/+403
Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu>
OpenPOWER on IntegriCloud