X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=libust%2Ftracer.h;h=dc2d62fffe66b359c70c3d145355bc4af01b1c3d;hb=12e81b07455a1aef2e2bcc73004f14a7b73596fa;hp=431a77c67f00fdb85bdf44238bcf48fd44cd73bd;hpb=7ab550044c6f0f202c2c0b35f869bfd4afd7efbc;p=ust.git diff --git a/libust/tracer.h b/libust/tracer.h index 431a77c..dc2d62f 100644 --- a/libust/tracer.h +++ b/libust/tracer.h @@ -32,6 +32,7 @@ #include "tracerconst.h" #include #include +#include "buffers.h" /* Number of bytes to log with a read/write event */ #define LTT_LOG_RW_SIZE 32L @@ -213,8 +214,8 @@ struct ltt_subbuffer_header { * used all along the trace. */ uint32_t freq_scale; /* Frequency scaling (divisor) */ - uint32_t lost_size; /* Size unused at end of subbuffer */ - uint32_t buf_size; /* Size of this subbuffer */ + uint32_t data_size; /* Size of data in subbuffer */ + uint32_t sb_size; /* Subbuffer size (including padding) */ uint32_t events_lost; /* * Events lost in this subbuffer since * the beginning of the trace. @@ -240,8 +241,7 @@ static __inline__ size_t ltt_subbuffer_header_size(void) return offsetof(struct ltt_subbuffer_header, header_end); } -extern size_t ltt_write_event_header_slow(struct ust_trace *trace, - struct ust_channel *channel, +extern size_t ltt_write_event_header_slow(struct ust_channel *channel, struct ust_buffer *buf, long buf_offset, u16 eID, u32 event_size, u64 tsc, unsigned int rflags); @@ -263,8 +263,7 @@ extern size_t ltt_write_event_header_slow(struct ust_trace *trace, * * returns : offset where the event data must be written. */ -static __inline__ size_t ltt_write_event_header(struct ust_trace *trace, - struct ust_channel *channel, +static __inline__ size_t ltt_write_event_header(struct ust_channel *chan, struct ust_buffer *buf, long buf_offset, u16 eID, u32 event_size, u64 tsc, unsigned int rflags) @@ -275,11 +274,14 @@ static __inline__ size_t ltt_write_event_header(struct ust_trace *trace, goto slow_path; header.id_time = eID << LTT_TSC_BITS; + header.id_time |= (u32)tsc & LTT_TSC_MASK; + ust_buffers_write(buf, buf_offset, &header, sizeof(header)); + buf_offset += sizeof(header); return buf_offset; slow_path: - return ltt_write_event_header_slow(trace, channel, buf, buf_offset, + return ltt_write_event_header_slow(chan, buf, buf_offset, eID, event_size, tsc, rflags); } @@ -313,7 +315,7 @@ slow_path: #define LTT_DEFAULT_N_SUBBUFS_HIGH 2 #define LTT_TRACER_MAGIC_NUMBER 0x00D6B7ED #define LTT_TRACER_VERSION_MAJOR 2 -#define LTT_TRACER_VERSION_MINOR 4 +#define LTT_TRACER_VERSION_MINOR 6 /** * ust_write_trace_header - Write trace header @@ -334,6 +336,21 @@ static __inline__ void ltt_write_trace_header(struct ust_trace *trace, header->freq_scale = trace->freq_scale; } +static __inline__ int ust_get_cpu(void) +{ +#ifndef UST_VALGRIND + return sched_getcpu(); +#else + /* Valgrind does not support the sched_getcpu() vsyscall. + * It causes it to detect a segfault in the program and stop it. + * So if we want to check libust with valgrind, we have to refrain + * from using this call. TODO: it would probably be better to return + * other values too, to better test it. + */ + return 0; +#endif +} + /* * Size reserved for high priority events (interrupts, NMI, BH) at the end of a @@ -381,7 +398,7 @@ extern int ltt_trace_set_channel_enable(const char *trace_name, extern int ltt_trace_set_channel_overwrite(const char *trace_name, const char *channel_name, unsigned int overwrite); extern int ltt_trace_alloc(const char *trace_name); -extern int ltt_trace_destroy(const char *trace_name); +extern int ltt_trace_destroy(const char *trace_name, int drop); extern int ltt_trace_start(const char *trace_name); extern int ltt_trace_stop(const char *trace_name);