@@ -217,6 +217,7 @@ struct cgroup_namespace init_cgroup_ns = {
217
217
218
218
static struct file_system_type cgroup2_fs_type ;
219
219
static struct cftype cgroup_base_files [];
220
+ static struct cftype cgroup_psi_files [];
220
221
221
222
/* cgroup optional features */
222
223
enum cgroup_opt_features {
@@ -1689,12 +1690,16 @@ static void css_clear_dir(struct cgroup_subsys_state *css)
1689
1690
css -> flags &= ~CSS_VISIBLE ;
1690
1691
1691
1692
if (!css -> ss ) {
1692
- if (cgroup_on_dfl (cgrp ))
1693
- cfts = cgroup_base_files ;
1694
- else
1695
- cfts = cgroup1_base_files ;
1696
-
1697
- cgroup_addrm_files (css , cgrp , cfts , false);
1693
+ if (cgroup_on_dfl (cgrp )) {
1694
+ cgroup_addrm_files (css , cgrp ,
1695
+ cgroup_base_files , false);
1696
+ if (cgroup_psi_enabled ())
1697
+ cgroup_addrm_files (css , cgrp ,
1698
+ cgroup_psi_files , false);
1699
+ } else {
1700
+ cgroup_addrm_files (css , cgrp ,
1701
+ cgroup1_base_files , false);
1702
+ }
1698
1703
} else {
1699
1704
list_for_each_entry (cfts , & css -> ss -> cfts , node )
1700
1705
cgroup_addrm_files (css , cgrp , cfts , false);
@@ -1717,14 +1722,22 @@ static int css_populate_dir(struct cgroup_subsys_state *css)
1717
1722
return 0 ;
1718
1723
1719
1724
if (!css -> ss ) {
1720
- if (cgroup_on_dfl (cgrp ))
1721
- cfts = cgroup_base_files ;
1722
- else
1723
- cfts = cgroup1_base_files ;
1724
-
1725
- ret = cgroup_addrm_files (& cgrp -> self , cgrp , cfts , true);
1726
- if (ret < 0 )
1727
- return ret ;
1725
+ if (cgroup_on_dfl (cgrp )) {
1726
+ ret = cgroup_addrm_files (& cgrp -> self , cgrp ,
1727
+ cgroup_base_files , true);
1728
+ if (ret < 0 )
1729
+ return ret ;
1730
+
1731
+ if (cgroup_psi_enabled ()) {
1732
+ ret = cgroup_addrm_files (& cgrp -> self , cgrp ,
1733
+ cgroup_psi_files , true);
1734
+ if (ret < 0 )
1735
+ return ret ;
1736
+ }
1737
+ } else {
1738
+ cgroup_addrm_files (css , cgrp ,
1739
+ cgroup1_base_files , true);
1740
+ }
1728
1741
} else {
1729
1742
list_for_each_entry (cfts , & css -> ss -> cfts , node ) {
1730
1743
ret = cgroup_addrm_files (css , cgrp , cfts , true);
@@ -4132,8 +4145,6 @@ static int cgroup_addrm_files(struct cgroup_subsys_state *css,
4132
4145
restart :
4133
4146
for (cft = cfts ; cft != cft_end && cft -> name [0 ] != '\0' ; cft ++ ) {
4134
4147
/* does cft->flags tell us to skip this file on @cgrp? */
4135
- if ((cft -> flags & CFTYPE_PRESSURE ) && !cgroup_psi_enabled ())
4136
- continue ;
4137
4148
if ((cft -> flags & __CFTYPE_ONLY_ON_DFL ) && !cgroup_on_dfl (cgrp ))
4138
4149
continue ;
4139
4150
if ((cft -> flags & __CFTYPE_NOT_ON_DFL ) && cgroup_on_dfl (cgrp ))
@@ -4218,9 +4229,6 @@ static int cgroup_init_cftypes(struct cgroup_subsys *ss, struct cftype *cfts)
4218
4229
break ;
4219
4230
}
4220
4231
4221
- if ((cft -> flags & CFTYPE_PRESSURE ) && !cgroup_psi_enabled ())
4222
- continue ;
4223
-
4224
4232
if (cft -> seq_start )
4225
4233
kf_ops = & cgroup_kf_ops ;
4226
4234
else
@@ -5144,26 +5152,27 @@ static struct cftype cgroup_base_files[] = {
5144
5152
.name = "cpu.stat" ,
5145
5153
.seq_show = cpu_stat_show ,
5146
5154
},
5155
+ { } /* terminate */
5156
+ };
5157
+
5158
+ static struct cftype cgroup_psi_files [] = {
5147
5159
#ifdef CONFIG_PSI
5148
5160
{
5149
5161
.name = "io.pressure" ,
5150
- .flags = CFTYPE_PRESSURE ,
5151
5162
.seq_show = cgroup_io_pressure_show ,
5152
5163
.write = cgroup_io_pressure_write ,
5153
5164
.poll = cgroup_pressure_poll ,
5154
5165
.release = cgroup_pressure_release ,
5155
5166
},
5156
5167
{
5157
5168
.name = "memory.pressure" ,
5158
- .flags = CFTYPE_PRESSURE ,
5159
5169
.seq_show = cgroup_memory_pressure_show ,
5160
5170
.write = cgroup_memory_pressure_write ,
5161
5171
.poll = cgroup_pressure_poll ,
5162
5172
.release = cgroup_pressure_release ,
5163
5173
},
5164
5174
{
5165
5175
.name = "cpu.pressure" ,
5166
- .flags = CFTYPE_PRESSURE ,
5167
5176
.seq_show = cgroup_cpu_pressure_show ,
5168
5177
.write = cgroup_cpu_pressure_write ,
5169
5178
.poll = cgroup_pressure_poll ,
@@ -5930,6 +5939,7 @@ int __init cgroup_init(void)
5930
5939
5931
5940
BUILD_BUG_ON (CGROUP_SUBSYS_COUNT > 16 );
5932
5941
BUG_ON (cgroup_init_cftypes (NULL , cgroup_base_files ));
5942
+ BUG_ON (cgroup_init_cftypes (NULL , cgroup_psi_files ));
5933
5943
BUG_ON (cgroup_init_cftypes (NULL , cgroup1_base_files ));
5934
5944
5935
5945
cgroup_rstat_boot ();
@@ -6821,9 +6831,6 @@ static ssize_t show_delegatable_files(struct cftype *files, char *buf,
6821
6831
if (!(cft -> flags & CFTYPE_NS_DELEGATABLE ))
6822
6832
continue ;
6823
6833
6824
- if ((cft -> flags & CFTYPE_PRESSURE ) && !cgroup_psi_enabled ())
6825
- continue ;
6826
-
6827
6834
if (prefix )
6828
6835
ret += snprintf (buf + ret , size - ret , "%s." , prefix );
6829
6836
@@ -6843,8 +6850,11 @@ static ssize_t delegate_show(struct kobject *kobj, struct kobj_attribute *attr,
6843
6850
int ssid ;
6844
6851
ssize_t ret = 0 ;
6845
6852
6846
- ret = show_delegatable_files (cgroup_base_files , buf , PAGE_SIZE - ret ,
6847
- NULL );
6853
+ ret = show_delegatable_files (cgroup_base_files , buf + ret ,
6854
+ PAGE_SIZE - ret , NULL );
6855
+ if (cgroup_psi_enabled ())
6856
+ ret += show_delegatable_files (cgroup_psi_files , buf + ret ,
6857
+ PAGE_SIZE - ret , NULL );
6848
6858
6849
6859
for_each_subsys (ss , ssid )
6850
6860
ret += show_delegatable_files (ss -> dfl_cftypes , buf + ret ,
0 commit comments