* 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 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/