static int ftrace_disabled __read_mostly;
 
 static DEFINE_MUTEX(ftrace_lock);
-static DEFINE_MUTEX(ftrace_sysctl_lock);
-static DEFINE_MUTEX(ftrace_start_lock);
 
 static struct ftrace_ops ftrace_list_end __read_mostly =
 {
 
 static int __register_ftrace_function(struct ftrace_ops *ops)
 {
-       mutex_lock(&ftrace_lock);
-
        ops->next = ftrace_list;
        /*
         * We are entering ops into the ftrace_list but another
 #endif
        }
 
-       mutex_unlock(&ftrace_lock);
-
        return 0;
 }
 
 static int __unregister_ftrace_function(struct ftrace_ops *ops)
 {
        struct ftrace_ops **p;
-       int ret = 0;
-
-       mutex_lock(&ftrace_lock);
 
        /*
         * If we are removing the last function, then simply point
        if (ftrace_list == ops && ops->next == &ftrace_list_end) {
                ftrace_trace_function = ftrace_stub;
                ftrace_list = &ftrace_list_end;
-               goto out;
+               return 0;
        }
 
        for (p = &ftrace_list; *p != &ftrace_list_end; p = &(*p)->next)
                if (*p == ops)
                        break;
 
-       if (*p != ops) {
-               ret = -1;
-               goto out;
-       }
+       if (*p != ops)
+               return -1;
 
        *p = (*p)->next;
 
                }
        }
 
- out:
-       mutex_unlock(&ftrace_lock);
-
-       return ret;
+       return 0;
 }
 
 static void ftrace_update_pid_func(void)
        if (unlikely(ftrace_disabled))
                return;
 
-       mutex_lock(&ftrace_start_lock);
        ftrace_start_up++;
        command |= FTRACE_ENABLE_CALLS;
 
        ftrace_startup_enable(command);
-
-       mutex_unlock(&ftrace_start_lock);
 }
 
 static void ftrace_shutdown(int command)
        if (unlikely(ftrace_disabled))
                return;
 
-       mutex_lock(&ftrace_start_lock);
        ftrace_start_up--;
        if (!ftrace_start_up)
                command |= FTRACE_DISABLE_CALLS;
        }
 
        if (!command || !ftrace_enabled)
-               goto out;
+               return;
 
        ftrace_run_update_code(command);
- out:
-       mutex_unlock(&ftrace_start_lock);
 }
 
 static void ftrace_startup_sysctl(void)
        if (unlikely(ftrace_disabled))
                return;
 
-       mutex_lock(&ftrace_start_lock);
        /* Force update next time */
        saved_ftrace_func = NULL;
        /* ftrace_start_up is true if we want ftrace running */
                command |= FTRACE_ENABLE_CALLS;
 
        ftrace_run_update_code(command);
-       mutex_unlock(&ftrace_start_lock);
 }
 
 static void ftrace_shutdown_sysctl(void)
        if (unlikely(ftrace_disabled))
                return;
 
-       mutex_lock(&ftrace_start_lock);
        /* ftrace_start_up is true if ftrace is running */
        if (ftrace_start_up)
                command |= FTRACE_DISABLE_CALLS;
 
        ftrace_run_update_code(command);
-       mutex_unlock(&ftrace_start_lock);
 }
 
 static cycle_t         ftrace_update_time;
                ftrace_match_records(iter->buffer, iter->buffer_idx, enable);
        }
 
-       mutex_lock(&ftrace_sysctl_lock);
-       mutex_lock(&ftrace_start_lock);
+       mutex_lock(&ftrace_lock);
        if (ftrace_start_up && ftrace_enabled)
                ftrace_run_update_code(FTRACE_ENABLE_CALLS);
-       mutex_unlock(&ftrace_start_lock);
-       mutex_unlock(&ftrace_sysctl_lock);
+       mutex_unlock(&ftrace_lock);
 
        kfree(iter);
        mutex_unlock(&ftrace_regex_lock);
        unsigned long addr;
        unsigned long flags;
 
-       mutex_lock(&ftrace_start_lock);
+       mutex_lock(&ftrace_lock);
        p = start;
        while (p < end) {
                addr = ftrace_call_adjust(*p++);
        local_irq_save(flags);
        ftrace_update_code(mod);
        local_irq_restore(flags);
-       mutex_unlock(&ftrace_start_lock);
+       mutex_unlock(&ftrace_lock);
 
        return 0;
 }
        if (ret < 0)
                return ret;
 
-       mutex_lock(&ftrace_start_lock);
+       mutex_lock(&ftrace_lock);
        if (val < 0) {
                /* disable pid tracing */
                if (!ftrace_pid_trace)
        ftrace_startup_enable(0);
 
  out:
-       mutex_unlock(&ftrace_start_lock);
+       mutex_unlock(&ftrace_lock);
 
        return cnt;
 }
        if (unlikely(ftrace_disabled))
                return -1;
 
-       mutex_lock(&ftrace_sysctl_lock);
+       mutex_lock(&ftrace_lock);
 
        ret = __register_ftrace_function(ops);
        ftrace_startup(0);
 
-       mutex_unlock(&ftrace_sysctl_lock);
+       mutex_unlock(&ftrace_lock);
        return ret;
 }
 
 {
        int ret;
 
-       mutex_lock(&ftrace_sysctl_lock);
+       mutex_lock(&ftrace_lock);
        ret = __unregister_ftrace_function(ops);
        ftrace_shutdown(0);
-       mutex_unlock(&ftrace_sysctl_lock);
+       mutex_unlock(&ftrace_lock);
 
        return ret;
 }
        if (unlikely(ftrace_disabled))
                return -ENODEV;
 
-       mutex_lock(&ftrace_sysctl_lock);
+       mutex_lock(&ftrace_lock);
 
        ret  = proc_dointvec(table, write, file, buffer, lenp, ppos);
 
        }
 
  out:
-       mutex_unlock(&ftrace_sysctl_lock);
+       mutex_unlock(&ftrace_lock);
        return ret;
 }
 
 {
        int ret = 0;
 
-       mutex_lock(&ftrace_sysctl_lock);
+       mutex_lock(&ftrace_lock);
 
        ftrace_suspend_notifier.notifier_call = ftrace_suspend_notifier_call;
        register_pm_notifier(&ftrace_suspend_notifier);
        ftrace_startup(FTRACE_START_FUNC_RET);
 
 out:
-       mutex_unlock(&ftrace_sysctl_lock);
+       mutex_unlock(&ftrace_lock);
        return ret;
 }
 
 void unregister_ftrace_graph(void)
 {
-       mutex_lock(&ftrace_sysctl_lock);
+       mutex_lock(&ftrace_lock);
 
        atomic_dec(&ftrace_graph_active);
        ftrace_graph_return = (trace_func_graph_ret_t)ftrace_stub;
        ftrace_shutdown(FTRACE_STOP_FUNC_RET);
        unregister_pm_notifier(&ftrace_suspend_notifier);
 
-       mutex_unlock(&ftrace_sysctl_lock);
+       mutex_unlock(&ftrace_lock);
 }
 
 /* Allocate a return stack for newly created task */