static int cgroup_io_pressure_show(struct seq_file *seq, void *v)
 {
        struct cgroup *cgrp = seq_css(seq)->cgroup;
-       struct psi_group *psi = cgroup_ino(cgrp) == 1 ? &psi_system : &cgrp->psi;
+       struct psi_group *psi = cgroup_ino(cgrp) == 1 ? &psi_system : cgrp->psi;
 
        return psi_show(seq, psi, PSI_IO);
 }
 static int cgroup_memory_pressure_show(struct seq_file *seq, void *v)
 {
        struct cgroup *cgrp = seq_css(seq)->cgroup;
-       struct psi_group *psi = cgroup_ino(cgrp) == 1 ? &psi_system : &cgrp->psi;
+       struct psi_group *psi = cgroup_ino(cgrp) == 1 ? &psi_system : cgrp->psi;
 
        return psi_show(seq, psi, PSI_MEM);
 }
 static int cgroup_cpu_pressure_show(struct seq_file *seq, void *v)
 {
        struct cgroup *cgrp = seq_css(seq)->cgroup;
-       struct psi_group *psi = cgroup_ino(cgrp) == 1 ? &psi_system : &cgrp->psi;
+       struct psi_group *psi = cgroup_ino(cgrp) == 1 ? &psi_system : cgrp->psi;
 
        return psi_show(seq, psi, PSI_CPU);
 }
                return -EBUSY;
        }
 
-       psi = cgroup_ino(cgrp) == 1 ? &psi_system : &cgrp->psi;
+       psi = cgroup_ino(cgrp) == 1 ? &psi_system : cgrp->psi;
        new = psi_trigger_create(psi, buf, nbytes, res);
        if (IS_ERR(new)) {
                cgroup_put(cgrp);
 
        if (static_branch_likely(&psi_disabled))
                return 0;
 
-       cgroup->psi.pcpu = alloc_percpu(struct psi_group_cpu);
-       if (!cgroup->psi.pcpu)
+       cgroup->psi = kmalloc(sizeof(struct psi_group), GFP_KERNEL);
+       if (!cgroup->psi)
                return -ENOMEM;
-       group_init(&cgroup->psi);
+
+       cgroup->psi->pcpu = alloc_percpu(struct psi_group_cpu);
+       if (!cgroup->psi->pcpu) {
+               kfree(cgroup->psi);
+               return -ENOMEM;
+       }
+       group_init(cgroup->psi);
        return 0;
 }
 
        if (static_branch_likely(&psi_disabled))
                return;
 
-       cancel_delayed_work_sync(&cgroup->psi.avgs_work);
-       free_percpu(cgroup->psi.pcpu);
+       cancel_delayed_work_sync(&cgroup->psi->avgs_work);
+       free_percpu(cgroup->psi->pcpu);
        /* All triggers must be removed by now */
-       WARN_ONCE(cgroup->psi.poll_states, "psi: trigger leak\n");
+       WARN_ONCE(cgroup->psi->poll_states, "psi: trigger leak\n");
+       kfree(cgroup->psi);
 }
 
 /**