Re: [PATCH 05/05] update - Linux Kernel Markers, non optimised architectures

Mathieu Desnoyers <[email protected]>
Newsgroups gmane.linux.systemtap,gmane.linux.kernel,gmane.linux.kernel.tracing
Message-ID <20070112182301.GA11102@Krystal>
* Nick Piggin ([email protected]) wrote:
> OK, well one problem is that it can cause a resched event to be lost, so
> you might say it has more side-effects without checking resched.
> 

Here is the patch that implements this. I also did a cosmetic change to
linux/marker.h. Preliminary tests of running the markers with preempt_enable()
with LTTng 0.6.56 instrumentation shows no problem.

Signed-off-by: Mathieu Desnoyers <[email protected]>

--- a/include/asm-generic/marker.h
+++ b/include/asm-generic/marker.h
@@ -39,7 +39,7 @@ struct __mark_marker {
 		if (unlikely(__marker_enable_##name)) { \
 			preempt_disable(); \
 			(*__mark_call_##name)(format, ## args); \
-			preempt_enable_no_resched(); \
+			preempt_enable(); \
 		} \
 	} while (0)
 
--- a/include/asm-i386/marker.h
+++ b/include/asm-i386/marker.h
@@ -42,7 +42,7 @@ struct __mark_marker {
 		if (unlikely(condition)) { \
 			preempt_disable(); \
 			(*__mark_call_##name)(format, ## args); \
-			preempt_enable_no_resched(); \
+			preempt_enable(); \
 		} \
 	} while (0)
 
--- a/include/asm-powerpc/marker.h
+++ b/include/asm-powerpc/marker.h
@@ -45,7 +45,7 @@ struct __mark_marker {
 		if (unlikely(condition)) { \
 			preempt_disable(); \
 			(*__mark_call_##name)(format, ## args); \
-			preempt_enable_no_resched(); \
+			preempt_enable(); \
 		} \
 	} while (0)
 
--- a/include/linux/marker.h
+++ b/include/linux/marker.h
@@ -8,12 +8,12 @@
  *
  * Example :
  *
- * MARK(subsystem_event, "%d %s %p[struct task_struct *]",
+ * MARK(subsystem_event, "%d %s %p[struct task_struct]",
  *   someint, somestring, current);
  * Where :
  * - Subsystem is the name of your subsystem.
  * - event is the name of the event to mark.
- * - "%d %s %p[struct task_struct *]" is the formatted string for printk.
+ * - "%d %s %p[struct task_struct]" is the formatted string for printk.
  * - someint is an integer.
  * - somestring is a char pointer.
  * - current is a pointer to a struct task_struct.
@@ -27,6 +27,9 @@
  * Markers can be put in inline functions, inlined static functions and
  * unrolled loops.
  *
+ * Note : It is safe to put markers within preempt-safe code : preempt_enable()
+ * will not call the scheduler due to the tests in preempt_schedule().
+ *
  * (C) Copyright 2006 Mathieu Desnoyers <[email protected]>
  *
  * This file is released under the GPLv2.
-- 
OpenPGP public key:              http://krystal.dyndns.org:8080/key/compudj.gpg
Key fingerprint:     8CD5 52C3 8E3C 4140 715F  BA06 3F25 A8FE 3BAE 9A68
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.