Add getcpu error validation
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 9 Feb 2011 19:09:11 +0000 (14:09 -0500)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 9 Feb 2011 19:09:11 +0000 (14:09 -0500)
This check is important for the case where getcpu(2) is not implemented by the
Kernel. So, the CPU 0 is the fallback.

Reported-by: David Goulet <david.goulet@polymtl.ca>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
libust/tracer.h

index 64996b2d61c392ef40e768fbbbf1473797a154db..2f489f6c7df314a94fdb9208264caec8b57ce6b9 100644 (file)
@@ -343,21 +343,36 @@ static __inline__ void ltt_write_trace_header(struct ust_trace *trace,
        header->freq_scale = trace->freq_scale;
 }
 
+#ifndef UST_VALGRIND
+
 static __inline__ int ust_get_cpu(void)
 {
-#ifndef UST_VALGRIND
-       return sched_getcpu();
-#else
-       /* Valgrind does not support the sched_getcpu() vsyscall.
+       int cpu;
+
+       cpu = sched_getcpu();
+       if (likely(cpu >= 0))
+               return cpu;
+       /*
+        * If getcpu(2) is not implemented in the Kernel use CPU 0 as fallback.
+        */
+       return 0;
+}
+
+#else  /* #else #ifndef UST_VALGRIND */
+
+static __inline__ int ust_get_cpu(void)
+{
+       /*
+        * 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
 }
 
+#endif /* #else #ifndef UST_VALGRIND */
 
 /*
  * Size reserved for high priority events (interrupts, NMI, BH) at the end of a
This page took 0.025573 seconds and 4 git commands to generate.