Commit edede7a6dcd7 ("trace/fgraph: Fix the warning caused by missing
unregister notifier") added a call to unregister the PM notifier if
register_ftrace_graph() failed. It does so unconditionally. However,
the PM notifier is only registered with the first call to
register_ftrace_graph(). If the first registration was successful and
a subsequent registration failed, the notifier is now unregistered even
if ftrace graphs are still registered.

Fix the problem by only unregistering the PM notifier during error handling
if there are no active fgraph registrations.

Fixes: edede7a6dcd7 ("trace/fgraph: Fix the warning caused by missing 
unregister notifier")
Cc: Ye Weihua <yeweih...@huawei.com>
Signed-off-by: Guenter Roeck <li...@roeck-us.net>
---
 kernel/trace/fgraph.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/kernel/trace/fgraph.c b/kernel/trace/fgraph.c
index 2a42c1036ea8..1e3b32b1e82c 100644
--- a/kernel/trace/fgraph.c
+++ b/kernel/trace/fgraph.c
@@ -1397,7 +1397,8 @@ int register_ftrace_graph(struct fgraph_ops *gops)
                ftrace_graph_active--;
                gops->saved_func = NULL;
                fgraph_lru_release_index(i);
-               unregister_pm_notifier(&ftrace_suspend_notifier);
+               if (!ftrace_graph_active)
+                       unregister_pm_notifier(&ftrace_suspend_notifier);
        }
        return ret;
 }
-- 
2.45.2


Reply via email to