cgroup: make TRACE_CGROUP_PATH irq-safe
authorRoman Gushchin <guro@fb.com>
Fri, 19 Apr 2019 17:03:07 +0000 (10:03 -0700)
committerTejun Heo <tj@kernel.org>
Fri, 19 Apr 2019 18:26:49 +0000 (11:26 -0700)
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 <guro@fb.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
kernel/cgroup/cgroup-internal.h

index 02c001ffe2e2d887ced5f8e213e01c3f074bfdaa..809e34a3c017260d1fba519a5fd3640cf19bf135 100644 (file)
@@ -28,12 +28,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)