]> rtime.felk.cvut.cz Git - linux-imx.git/commitdiff
tracing: Fix disabling of soft disable
authorTom Zanussi <tom.zanussi@linux.intel.com>
Sat, 29 Jun 2013 05:08:07 +0000 (00:08 -0500)
committerSteven Rostedt <rostedt@goodmis.org>
Tue, 2 Jul 2013 00:34:26 +0000 (20:34 -0400)
The comment on the soft disable 'disable' case of
__ftrace_event_enable_disable() states that the soft disable bit
should be cleared in that case, but currently only the soft mode bit
is actually cleared.

This essentially leaves the standard non-soft-enable enable/disable
paths as the only way to clear the soft disable flag, but the soft
disable bit should also be cleared when removing a trigger with '!'.

Also, the SOFT_DISABLED bit should never be set if SOFT_MODE is
cleared.

This fixes the above discrepancies.

Link: http://lkml.kernel.org/r/b9c68dd50bc07019e6c67d3f9b29be4ef1b2badb.1372479499.git.tom.zanussi@linux.intel.com
Signed-off-by: Tom Zanussi <tom.zanussi@linux.intel.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
kernel/trace/trace_events.c

index 7ee08b95c384536922dd760c3d2497a77aeb6508..5892470bc2ee587881a49bad3619a99b3851210e 100644 (file)
@@ -291,9 +291,11 @@ static int __ftrace_event_enable_disable(struct ftrace_event_file *file,
                        }
                        call->class->reg(call, TRACE_REG_UNREGISTER, file);
                }
                        }
                        call->class->reg(call, TRACE_REG_UNREGISTER, file);
                }
-               /* If in SOFT_MODE, just set the SOFT_DISABLE_BIT */
+               /* If in SOFT_MODE, just set the SOFT_DISABLE_BIT, else clear it */
                if (file->flags & FTRACE_EVENT_FL_SOFT_MODE)
                        set_bit(FTRACE_EVENT_FL_SOFT_DISABLED_BIT, &file->flags);
                if (file->flags & FTRACE_EVENT_FL_SOFT_MODE)
                        set_bit(FTRACE_EVENT_FL_SOFT_DISABLED_BIT, &file->flags);
+               else
+                       clear_bit(FTRACE_EVENT_FL_SOFT_DISABLED_BIT, &file->flags);
                break;
        case 1:
                /*
                break;
        case 1:
                /*