@@ -3229,17 +3229,22 @@ static void mon_rmdir_one_subdir(struct kernfs_node *pkn, char *name, char *subn
32293229 * when last domain being summed is removed.
32303230 */
32313231static void rmdir_mondata_subdir_allrdtgrp (struct rdt_resource * r ,
3232- struct rdt_mon_domain * d )
3232+ struct rdt_domain_hdr * hdr )
32333233{
32343234 struct rdtgroup * prgrp , * crgrp ;
3235+ struct rdt_mon_domain * d ;
32353236 char subname [32 ];
32363237 bool snc_mode ;
32373238 char name [32 ];
32383239
3240+ if (!domain_header_is_valid (hdr , RESCTRL_MON_DOMAIN , RDT_RESOURCE_L3 ))
3241+ return ;
3242+
3243+ d = container_of (hdr , struct rdt_mon_domain , hdr );
32393244 snc_mode = r -> mon_scope == RESCTRL_L3_NODE ;
3240- sprintf (name , "mon_%s_%02d" , r -> name , snc_mode ? d -> ci_id : d -> hdr . id );
3245+ sprintf (name , "mon_%s_%02d" , r -> name , snc_mode ? d -> ci_id : hdr -> id );
32413246 if (snc_mode )
3242- sprintf (subname , "mon_sub_%s_%02d" , r -> name , d -> hdr . id );
3247+ sprintf (subname , "mon_sub_%s_%02d" , r -> name , hdr -> id );
32433248
32443249 list_for_each_entry (prgrp , & rdt_all_groups , rdtgroup_list ) {
32453250 mon_rmdir_one_subdir (prgrp -> mon .mon_data_kn , name , subname );
@@ -3249,15 +3254,20 @@ static void rmdir_mondata_subdir_allrdtgrp(struct rdt_resource *r,
32493254 }
32503255}
32513256
3252- static int mon_add_all_files (struct kernfs_node * kn , struct rdt_mon_domain * d ,
3257+ static int mon_add_all_files (struct kernfs_node * kn , struct rdt_domain_hdr * hdr ,
32533258 struct rdt_resource * r , struct rdtgroup * prgrp ,
32543259 bool do_sum )
32553260{
32563261 struct rmid_read rr = {0 };
3262+ struct rdt_mon_domain * d ;
32573263 struct mon_data * priv ;
32583264 struct mon_evt * mevt ;
32593265 int ret , domid ;
32603266
3267+ if (!domain_header_is_valid (hdr , RESCTRL_MON_DOMAIN , RDT_RESOURCE_L3 ))
3268+ return - EINVAL ;
3269+
3270+ d = container_of (hdr , struct rdt_mon_domain , hdr );
32613271 for_each_mon_event (mevt ) {
32623272 if (mevt -> rid != r -> rid || !mevt -> enabled )
32633273 continue ;
@@ -3271,23 +3281,28 @@ static int mon_add_all_files(struct kernfs_node *kn, struct rdt_mon_domain *d,
32713281 return ret ;
32723282
32733283 if (!do_sum && resctrl_is_mbm_event (mevt -> evtid ))
3274- mon_event_read (& rr , r , d , prgrp , & d -> hdr . cpu_mask , mevt -> evtid , true);
3284+ mon_event_read (& rr , r , hdr , prgrp , & hdr -> cpu_mask , mevt -> evtid , true);
32753285 }
32763286
32773287 return 0 ;
32783288}
32793289
32803290static int mkdir_mondata_subdir (struct kernfs_node * parent_kn ,
3281- struct rdt_mon_domain * d ,
3291+ struct rdt_domain_hdr * hdr ,
32823292 struct rdt_resource * r , struct rdtgroup * prgrp )
32833293{
32843294 struct kernfs_node * kn , * ckn ;
3295+ struct rdt_mon_domain * d ;
32853296 char name [32 ];
32863297 bool snc_mode ;
32873298 int ret = 0 ;
32883299
32893300 lockdep_assert_held (& rdtgroup_mutex );
32903301
3302+ if (!domain_header_is_valid (hdr , RESCTRL_MON_DOMAIN , RDT_RESOURCE_L3 ))
3303+ return - EINVAL ;
3304+
3305+ d = container_of (hdr , struct rdt_mon_domain , hdr );
32913306 snc_mode = r -> mon_scope == RESCTRL_L3_NODE ;
32923307 sprintf (name , "mon_%s_%02d" , r -> name , snc_mode ? d -> ci_id : d -> hdr .id );
32933308 kn = kernfs_find_and_get (parent_kn , name );
@@ -3305,13 +3320,13 @@ static int mkdir_mondata_subdir(struct kernfs_node *parent_kn,
33053320 ret = rdtgroup_kn_set_ugid (kn );
33063321 if (ret )
33073322 goto out_destroy ;
3308- ret = mon_add_all_files (kn , d , r , prgrp , snc_mode );
3323+ ret = mon_add_all_files (kn , hdr , r , prgrp , snc_mode );
33093324 if (ret )
33103325 goto out_destroy ;
33113326 }
33123327
33133328 if (snc_mode ) {
3314- sprintf (name , "mon_sub_%s_%02d" , r -> name , d -> hdr . id );
3329+ sprintf (name , "mon_sub_%s_%02d" , r -> name , hdr -> id );
33153330 ckn = kernfs_create_dir (kn , name , parent_kn -> mode , prgrp );
33163331 if (IS_ERR (ckn )) {
33173332 ret = - EINVAL ;
@@ -3322,7 +3337,7 @@ static int mkdir_mondata_subdir(struct kernfs_node *parent_kn,
33223337 if (ret )
33233338 goto out_destroy ;
33243339
3325- ret = mon_add_all_files (ckn , d , r , prgrp , false);
3340+ ret = mon_add_all_files (ckn , hdr , r , prgrp , false);
33263341 if (ret )
33273342 goto out_destroy ;
33283343 }
@@ -3340,20 +3355,20 @@ static int mkdir_mondata_subdir(struct kernfs_node *parent_kn,
33403355 * and "monitor" groups with given domain id.
33413356 */
33423357static void mkdir_mondata_subdir_allrdtgrp (struct rdt_resource * r ,
3343- struct rdt_mon_domain * d )
3358+ struct rdt_domain_hdr * hdr )
33443359{
33453360 struct kernfs_node * parent_kn ;
33463361 struct rdtgroup * prgrp , * crgrp ;
33473362 struct list_head * head ;
33483363
33493364 list_for_each_entry (prgrp , & rdt_all_groups , rdtgroup_list ) {
33503365 parent_kn = prgrp -> mon .mon_data_kn ;
3351- mkdir_mondata_subdir (parent_kn , d , r , prgrp );
3366+ mkdir_mondata_subdir (parent_kn , hdr , r , prgrp );
33523367
33533368 head = & prgrp -> mon .crdtgrp_list ;
33543369 list_for_each_entry (crgrp , head , mon .crdtgrp_list ) {
33553370 parent_kn = crgrp -> mon .mon_data_kn ;
3356- mkdir_mondata_subdir (parent_kn , d , r , crgrp );
3371+ mkdir_mondata_subdir (parent_kn , hdr , r , crgrp );
33573372 }
33583373 }
33593374}
@@ -3362,14 +3377,14 @@ static int mkdir_mondata_subdir_alldom(struct kernfs_node *parent_kn,
33623377 struct rdt_resource * r ,
33633378 struct rdtgroup * prgrp )
33643379{
3365- struct rdt_mon_domain * dom ;
3380+ struct rdt_domain_hdr * hdr ;
33663381 int ret ;
33673382
33683383 /* Walking r->domains, ensure it can't race with cpuhp */
33693384 lockdep_assert_cpus_held ();
33703385
3371- list_for_each_entry (dom , & r -> mon_domains , hdr . list ) {
3372- ret = mkdir_mondata_subdir (parent_kn , dom , r , prgrp );
3386+ list_for_each_entry (hdr , & r -> mon_domains , list ) {
3387+ ret = mkdir_mondata_subdir (parent_kn , hdr , r , prgrp );
33733388 if (ret )
33743389 return ret ;
33753390 }
@@ -4253,16 +4268,23 @@ void resctrl_offline_ctrl_domain(struct rdt_resource *r, struct rdt_ctrl_domain
42534268 mutex_unlock (& rdtgroup_mutex );
42544269}
42554270
4256- void resctrl_offline_mon_domain (struct rdt_resource * r , struct rdt_mon_domain * d )
4271+ void resctrl_offline_mon_domain (struct rdt_resource * r , struct rdt_domain_hdr * hdr )
42574272{
4273+ struct rdt_mon_domain * d ;
4274+
42584275 mutex_lock (& rdtgroup_mutex );
42594276
4277+ if (!domain_header_is_valid (hdr , RESCTRL_MON_DOMAIN , RDT_RESOURCE_L3 ))
4278+ goto out_unlock ;
4279+
4280+ d = container_of (hdr , struct rdt_mon_domain , hdr );
4281+
42604282 /*
42614283 * If resctrl is mounted, remove all the
42624284 * per domain monitor data directories.
42634285 */
42644286 if (resctrl_mounted && resctrl_arch_mon_capable ())
4265- rmdir_mondata_subdir_allrdtgrp (r , d );
4287+ rmdir_mondata_subdir_allrdtgrp (r , hdr );
42664288
42674289 if (resctrl_is_mbm_enabled ())
42684290 cancel_delayed_work (& d -> mbm_over );
@@ -4280,7 +4302,7 @@ void resctrl_offline_mon_domain(struct rdt_resource *r, struct rdt_mon_domain *d
42804302 }
42814303
42824304 domain_destroy_mon_state (d );
4283-
4305+ out_unlock :
42844306 mutex_unlock (& rdtgroup_mutex );
42854307}
42864308
@@ -4353,12 +4375,17 @@ int resctrl_online_ctrl_domain(struct rdt_resource *r, struct rdt_ctrl_domain *d
43534375 return err ;
43544376}
43554377
4356- int resctrl_online_mon_domain (struct rdt_resource * r , struct rdt_mon_domain * d )
4378+ int resctrl_online_mon_domain (struct rdt_resource * r , struct rdt_domain_hdr * hdr )
43574379{
4358- int err ;
4380+ struct rdt_mon_domain * d ;
4381+ int err = - EINVAL ;
43594382
43604383 mutex_lock (& rdtgroup_mutex );
43614384
4385+ if (!domain_header_is_valid (hdr , RESCTRL_MON_DOMAIN , RDT_RESOURCE_L3 ))
4386+ goto out_unlock ;
4387+
4388+ d = container_of (hdr , struct rdt_mon_domain , hdr );
43624389 err = domain_setup_mon_state (r , d );
43634390 if (err )
43644391 goto out_unlock ;
@@ -4379,7 +4406,7 @@ int resctrl_online_mon_domain(struct rdt_resource *r, struct rdt_mon_domain *d)
43794406 * If resctrl is mounted, add per domain monitor data directories.
43804407 */
43814408 if (resctrl_mounted && resctrl_arch_mon_capable ())
4382- mkdir_mondata_subdir_allrdtgrp (r , d );
4409+ mkdir_mondata_subdir_allrdtgrp (r , hdr );
43834410
43844411out_unlock :
43854412 mutex_unlock (& rdtgroup_mutex );
0 commit comments