• Steven Rostedt's avatar
    tracing: Avoid unnecessary multiple recursion checks · edc15caf
    Steven Rostedt authored
    When function tracing occurs, the following steps are made:
      If arch does not support a ftrace feature:
       call internal function (uses INTERNAL bits) which calls...
      If callback is registered to the "global" list, the list
       function is called and recursion checks the GLOBAL bits.
       then this function calls...
      The function callback, which can use the FTRACE bits to
       check for recursion.
    Now if the arch does not suppport a feature, and it calls
    the global list function which calls the ftrace callback
    all three of these steps will do a recursion protection.
    There's no reason to do one if the previous caller already
    did. The recursion that we are protecting against will
    go through the same steps again.
    To prevent the multiple recursion checks, if a recursion
    bit is set that is higher than the MAX bit of the current
    check, then we know that the check was made by the previous
    caller, and we can skip the current check.
    Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>