This is a note to let you know that I've just added the patch titled

    ftrace: Update all ftrace_ops for a ftrace_hash_ops update

to the 3.16-stable tree which can be found at:
    
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     ftrace-update-all-ftrace_ops-for-a-ftrace_hash_ops-update.patch
and it can be found in the queue-3.16 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <[email protected]> know about it.


>From 84261912ebee41269004e8a9f3614ba38ef6b206 Mon Sep 17 00:00:00 2001
From: "Steven Rostedt (Red Hat)" <[email protected]>
Date: Mon, 18 Aug 2014 13:21:08 -0400
Subject: ftrace: Update all ftrace_ops for a ftrace_hash_ops update

From: "Steven Rostedt (Red Hat)" <[email protected]>

commit 84261912ebee41269004e8a9f3614ba38ef6b206 upstream.

When updating what an ftrace_ops traces, if it is registered (that is,
actively tracing), and that ftrace_ops uses the shared global_ops
local_hash, then we need to update all tracers that are active and
also share the global_ops' ftrace_hash_ops.

Signed-off-by: Steven Rostedt <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>


---
 kernel/trace/ftrace.c |   43 +++++++++++++++++++++++++++++++++++++++----
 1 file changed, 39 insertions(+), 4 deletions(-)

--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -1298,9 +1298,9 @@ alloc_and_copy_ftrace_hash(int size_bits
 }
 
 static void
-ftrace_hash_rec_disable(struct ftrace_ops *ops, int filter_hash);
+ftrace_hash_rec_disable_modify(struct ftrace_ops *ops, int filter_hash);
 static void
-ftrace_hash_rec_enable(struct ftrace_ops *ops, int filter_hash);
+ftrace_hash_rec_enable_modify(struct ftrace_ops *ops, int filter_hash);
 
 static int
 ftrace_hash_move(struct ftrace_ops *ops, int enable,
@@ -1320,7 +1320,7 @@ ftrace_hash_move(struct ftrace_ops *ops,
         * Remove the current set, update the hash and add
         * them back.
         */
-       ftrace_hash_rec_disable(ops, enable);
+       ftrace_hash_rec_disable_modify(ops, enable);
 
        /*
         * If the new source is empty, just free dst and assign it
@@ -1369,7 +1369,7 @@ ftrace_hash_move(struct ftrace_ops *ops,
         *  On success, we enable the new hash.
         *  On failure, we re-enable the original hash.
         */
-       ftrace_hash_rec_enable(ops, enable);
+       ftrace_hash_rec_enable_modify(ops, enable);
 
        return ret;
 }
@@ -1613,6 +1613,41 @@ static void ftrace_hash_rec_enable(struc
        __ftrace_hash_rec_update(ops, filter_hash, 1);
 }
 
+static void ftrace_hash_rec_update_modify(struct ftrace_ops *ops,
+                                         int filter_hash, int inc)
+{
+       struct ftrace_ops *op;
+
+       __ftrace_hash_rec_update(ops, filter_hash, inc);
+
+       if (ops->func_hash != &global_ops.local_hash)
+               return;
+
+       /*
+        * If the ops shares the global_ops hash, then we need to update
+        * all ops that are enabled and use this hash.
+        */
+       do_for_each_ftrace_op(op, ftrace_ops_list) {
+               /* Already done */
+               if (op == ops)
+                       continue;
+               if (op->func_hash == &global_ops.local_hash)
+                       __ftrace_hash_rec_update(op, filter_hash, inc);
+       } while_for_each_ftrace_op(op);
+}
+
+static void ftrace_hash_rec_disable_modify(struct ftrace_ops *ops,
+                                          int filter_hash)
+{
+       ftrace_hash_rec_update_modify(ops, filter_hash, 0);
+}
+
+static void ftrace_hash_rec_enable_modify(struct ftrace_ops *ops,
+                                         int filter_hash)
+{
+       ftrace_hash_rec_update_modify(ops, filter_hash, 1);
+}
+
 static void print_ip_ins(const char *fmt, unsigned char *p)
 {
        int i;


Patches currently in stable-queue which might be from [email protected] are

queue-3.16/ftrace-update-all-ftrace_ops-for-a-ftrace_hash_ops-update.patch
queue-3.16/ftrace-allow-ftrace_ops-to-use-the-hashes-from-other-ops.patch
queue-3.16/trace-fix-epoll-hang-when-we-race-with-new-entries.patch
queue-3.16/kernel-printk-printk.c-fix-faulty-logic-in-the-case-of-recursive-printk.patch
queue-3.16/ftrace-fix-function_profiler-and-function-tracer-together.patch
queue-3.16/ftrace-use-current-addr-when-converting-to-nop-in-__ftrace_replace_code.patch
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to