To use the TRACE_CGROUP_PATH() macro with css_set_lock
locked, let's make the macro irq-safe.
It's necessary in order to trace cgroup freezer state
transitions (frozen/not frozen), which are happening
with css_set_lock locked.

Signed-off-by: Roman Gushchin <g...@fb.com>
---
 kernel/cgroup/cgroup-internal.h | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/kernel/cgroup/cgroup-internal.h b/kernel/cgroup/cgroup-internal.h
index a195328431ce..cdfa34485022 100644
--- a/kernel/cgroup/cgroup-internal.h
+++ b/kernel/cgroup/cgroup-internal.h
@@ -27,12 +27,15 @@ extern void __init enable_debug_cgroup(void);
 #define TRACE_CGROUP_PATH(type, cgrp, ...)                             \
        do {                                                            \
                if (trace_cgroup_##type##_enabled()) {                  \
-                       spin_lock(&trace_cgroup_path_lock);             \
+                       unsigned long flags;                            \
+                       spin_lock_irqsave(&trace_cgroup_path_lock,      \
+                                         flags);                       \
                        cgroup_path(cgrp, trace_cgroup_path,            \
                                    TRACE_CGROUP_PATH_LEN);             \
                        trace_cgroup_##type(cgrp, trace_cgroup_path,    \
                                            ##__VA_ARGS__);             \
-                       spin_unlock(&trace_cgroup_path_lock);           \
+                       spin_unlock_irqrestore(&trace_cgroup_path_lock, \
+                                              flags);                  \
                }                                                       \
        } while (0)
 
-- 
2.20.1

Reply via email to