Merge branch 'clrkwllms/work' into rt-tests-0.84-devel

Signed-off-by: John Kacur <jkacur@redhat.com>
This commit is contained in:
John Kacur 2012-11-09 16:25:18 +01:00
commit 93e525fac1
1 changed files with 33 additions and 0 deletions

View File

@ -249,6 +249,7 @@ static char functiontracer[MAX_PATH];
static char traceroptions[MAX_PATH];
static int trace_fd = -1;
static int tracemark_fd = -1;
static int kernvar(int mode, const char *name, char *value, size_t sizeofvalue)
{
@ -378,6 +379,27 @@ static int trace_file_exists(char *name)
return stat(path, &sbuf) ? 0 : 1;
}
#define TRACEBUFSIZ 1024
static __thread char tracebuf[TRACEBUFSIZ];
static void tracemark(char *fmt, ...)
{
va_list ap;
int len;
/* bail out if we're not tracing */
/* or if the kernel doesn't support trace_mark */
if (tracemark_fd < 0)
return;
va_start(ap, fmt);
len = vsnprintf(tracebuf, TRACEBUFSIZ, fmt, ap);
va_end(ap);
write(tracemark_fd, tracebuf, len);
}
void tracing(int on)
{
if (on) {
@ -540,6 +562,14 @@ static void setup_tracer(void)
fatal("unable to open %s for tracing", path);
}
/* open the tracemark file descriptor */
if (tracemark_fd == -1) {
char path[MAX_PATH];
strcat(strcpy(path, fileprefix), "trace_marker");
if ((tracemark_fd = open(path, O_WRONLY)) == -1)
warn("unable to open trace_marker file: %s\n", path);
}
} else {
setkernvar("trace_all_cpus", "1");
setkernvar("trace_freerunning", "1");
@ -839,6 +869,7 @@ void *timerthread(void *param)
if (!stopped && tracelimit && (diff > tracelimit)) {
stopped++;
tracemark("hit latency threshold (%d > %d)", diff, tracelimit);
tracing(0);
shutdown++;
pthread_mutex_lock(&break_thread_id_lock);
@ -1830,6 +1861,8 @@ int main(int argc, char **argv)
/* close any tracer file descriptors */
if (tracemark_fd >= 0)
close(tracemark_fd);
if (trace_fd >= 0)
close(trace_fd);