[PATCH 07/10] rt-utils: Decouple writting trace-marks with trace stopping

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Most users write a trace mark and expect that the trace stops afterwads.
Decoupling writting and stopping the trace so it can be used in context
where trace stopping is not needed.

Make tracemark() writting just to the tracemark file.
Add tracing_stop() which stops tracing and let current users of
tracemark() use it.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx>
---
 src/cyclictest/cyclictest.c         | 1 +
 src/include/rt-utils.h              | 1 +
 src/lib/rt-utils.c                  | 8 ++++++--
 src/oslat/oslat.c                   | 1 +
 src/sched_deadline/cyclicdeadline.c | 1 +
 5 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c
index 890da5d869c92..b4bce8915b432 100644
--- a/src/cyclictest/cyclictest.c
+++ b/src/cyclictest/cyclictest.c
@@ -852,6 +852,7 @@ static void *timerthread(void *param)
 				break_thread_id = stat->tid;
 				tracemark("hit latency threshold (%llu > %d)",
 					  (unsigned long long) diff, tracelimit);
+				tracing_stop();
 				break_thread_value = diff;
 			}
 			pthread_mutex_unlock(&break_thread_id_lock);
diff --git a/src/include/rt-utils.h b/src/include/rt-utils.h
index 569023c5d3051..e148dd77fd7d8 100644
--- a/src/include/rt-utils.h
+++ b/src/include/rt-utils.h
@@ -31,6 +31,7 @@ int parse_mem_string(char *str, uint64_t *val);
 
 void enable_trace_mark(void);
 void tracemark(char *fmt, ...) __attribute__((format(printf, 1, 2)));
+void tracing_stop(void);
 void disable_trace_mark(void);
 
 #define MSEC_PER_SEC		1000
diff --git a/src/lib/rt-utils.c b/src/lib/rt-utils.c
index 294fc9683a122..e504b17738411 100644
--- a/src/lib/rt-utils.c
+++ b/src/lib/rt-utils.c
@@ -427,7 +427,7 @@ void tracemark(char *fmt, ...)
 
 	/* bail out if we're not tracing */
 	/* or if the kernel doesn't support trace_mark */
-	if (tracemark_fd < 0 || trace_fd < 0)
+	if (tracemark_fd < 0)
 		return;
 
 	va_start(ap, fmt);
@@ -436,8 +436,12 @@ void tracemark(char *fmt, ...)
 
 	/* write the tracemark message */
 	write(tracemark_fd, tracebuf, len);
+}
 
-	/* now stop any trace */
+void tracing_stop(void)
+{
+	if (trace_fd < 0)
+		return;
 	write(trace_fd, "0\n", 2);
 }
 
diff --git a/src/oslat/oslat.c b/src/oslat/oslat.c
index 9e5a08a2fbd92..4291221dc6521 100644
--- a/src/oslat/oslat.c
+++ b/src/oslat/oslat.c
@@ -340,6 +340,7 @@ static void insert_bucket(struct thread *t, stamp_t value)
 		char *line = "%s: Trace threshold (%d us) triggered on cpu %d with %.*f us!\n";
 		tracemark(line, g.app_name, g.trace_threshold, t->core_i,
 			  g.precision, us);
+		tracing_stop();
 		err_quit(line, g.app_name, g.trace_threshold, t->core_i,
 			 g.precision, us);
 	}
diff --git a/src/sched_deadline/cyclicdeadline.c b/src/sched_deadline/cyclicdeadline.c
index 04e61edc68d83..e2f827deb275a 100644
--- a/src/sched_deadline/cyclicdeadline.c
+++ b/src/sched_deadline/cyclicdeadline.c
@@ -885,6 +885,7 @@ void *run_deadline(void *data)
 				break_thread_value = stat->max;
 				tracemark("hit latency threshold (%lld > %d)",
 						 (unsigned long long) stat->max, tracelimit);
+				tracing_stop();
 			}
 			pthread_mutex_unlock(&break_thread_id_lock);
 			break;
-- 
2.51.0





[Index of Archives]     [RT Stable]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux