Merge tag 'drm-misc-fixes-2021-08-18' of git://anongit.freedesktop.org/drm/drm-misc...
[linux-2.6-microblaze.git] / kernel / sched / psi.c
index 58b36d1..1652f2b 100644 (file)
 static int psi_bug __read_mostly;
 
 DEFINE_STATIC_KEY_FALSE(psi_disabled);
+DEFINE_STATIC_KEY_TRUE(psi_cgroups_enabled);
 
 #ifdef CONFIG_PSI_DEFAULT_DISABLED
 static bool psi_enable;
@@ -215,6 +216,9 @@ void __init psi_init(void)
                return;
        }
 
+       if (!cgroup_psi_enabled())
+               static_branch_disable(&psi_cgroups_enabled);
+
        psi_period = jiffies_to_nsecs(PSI_FREQ);
        group_init(&psi_system);
 }
@@ -748,23 +752,23 @@ static void psi_group_change(struct psi_group *group, int cpu,
 
 static struct psi_group *iterate_groups(struct task_struct *task, void **iter)
 {
+       if (*iter == &psi_system)
+               return NULL;
+
 #ifdef CONFIG_CGROUPS
-       struct cgroup *cgroup = NULL;
+       if (static_branch_likely(&psi_cgroups_enabled)) {
+               struct cgroup *cgroup = NULL;
 
-       if (!*iter)
-               cgroup = task->cgroups->dfl_cgrp;
-       else if (*iter == &psi_system)
-               return NULL;
-       else
-               cgroup = cgroup_parent(*iter);
+               if (!*iter)
+                       cgroup = task->cgroups->dfl_cgrp;
+               else
+                       cgroup = cgroup_parent(*iter);
 
-       if (cgroup && cgroup_parent(cgroup)) {
-               *iter = cgroup;
-               return cgroup_psi(cgroup);
+               if (cgroup && cgroup_parent(cgroup)) {
+                       *iter = cgroup;
+                       return cgroup_psi(cgroup);
+               }
        }
-#else
-       if (*iter)
-               return NULL;
 #endif
        *iter = &psi_system;
        return &psi_system;