Messages in this thread | | | Date | Fri, 12 Jan 2007 16:09:59 +1100 | From | Nick Piggin <> | Subject | Re: [PATCH 05/05] Linux Kernel Markers, non optimised architectures |
| |
Mathieu Desnoyers wrote: > * Nick Piggin (nickpiggin@yahoo.com.au) wrote: > >>Mathieu Desnoyers wrote: >> >> >>>+#define MARK(name, format, args...) \ >>>+ do { \ >>>+ static marker_probe_func *__mark_call_##name = \ >>>+ __mark_empty_function; \ >>>+ volatile static char __marker_enable_##name = 0; \ >>>+ static const struct __mark_marker_c __mark_c_##name \ >>>+ __attribute__((section(".markers.c"))) = \ >>>+ { #name, &__mark_call_##name, format } ; \ >>>+ static const struct __mark_marker __mark_##name \ >>>+ __attribute__((section(".markers"))) = \ >>>+ { &__mark_c_##name, &__marker_enable_##name } ; \ >>>+ asm volatile ( "" : : "i" (&__mark_##name)); \ >>>+ __mark_check_format(format, ## args); \ >>>+ if (unlikely(__marker_enable_##name)) { \ >>>+ preempt_disable(); \ >>>+ (*__mark_call_##name)(format, ## args); \ >>>+ preempt_enable_no_resched(); \ >> >>Why not just preempt_enable() here? >> > > > Because the preempt_enable() macro contains preempt_check_resched(), which > may call preempt_schedule() which leads us to a call to schedule(). Therefore, > all those very interesting scheduler functions would cause an infinite > recursive scheduler call if we marked schedule() and used preempt_enable() in > the marker.
The vast majority of schedule() has preempt turned off, so that shouldn't be a problem, if you provide a comment.
> The primary goal for the markers (and the probes that attaches to them) is to > have the fewest side-effects possible : any kernel method called from an > instrumentation site adds this precise kernel method to the "cannot be > instrumented" list, which I want to keep as small possible.
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.
-- SUSE Labs, Novell Inc. Send instant messages to your online friends http://au.messenger.yahoo.com
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |