@@ -11408,9 +11408,32 @@ static DEVICE_ATTR_RW(perf_event_mux_interval_ms);
11408
11408
static struct attribute * pmu_dev_attrs [] = {
11409
11409
& dev_attr_type .attr ,
11410
11410
& dev_attr_perf_event_mux_interval_ms .attr ,
11411
+ & dev_attr_nr_addr_filters .attr ,
11412
+ NULL ,
11413
+ };
11414
+
11415
+ static umode_t pmu_dev_is_visible (struct kobject * kobj , struct attribute * a , int n )
11416
+ {
11417
+ struct device * dev = kobj_to_dev (kobj );
11418
+ struct pmu * pmu = dev_get_drvdata (dev );
11419
+
11420
+ if (!pmu -> nr_addr_filters )
11421
+ return 0 ;
11422
+
11423
+ return a -> mode ;
11424
+
11425
+ return 0 ;
11426
+ }
11427
+
11428
+ static struct attribute_group pmu_dev_attr_group = {
11429
+ .is_visible = pmu_dev_is_visible ,
11430
+ .attrs = pmu_dev_attrs ,
11431
+ };
11432
+
11433
+ static const struct attribute_group * pmu_dev_groups [] = {
11434
+ & pmu_dev_attr_group ,
11411
11435
NULL ,
11412
11436
};
11413
- ATTRIBUTE_GROUPS (pmu_dev );
11414
11437
11415
11438
static int pmu_bus_running ;
11416
11439
static struct bus_type pmu_bus = {
@@ -11447,18 +11470,11 @@ static int pmu_dev_alloc(struct pmu *pmu)
11447
11470
if (ret )
11448
11471
goto free_dev ;
11449
11472
11450
- /* For PMUs with address filters, throw in an extra attribute: */
11451
- if (pmu -> nr_addr_filters )
11452
- ret = device_create_file (pmu -> dev , & dev_attr_nr_addr_filters );
11453
-
11454
- if (ret )
11455
- goto del_dev ;
11456
-
11457
- if (pmu -> attr_update )
11473
+ if (pmu -> attr_update ) {
11458
11474
ret = sysfs_update_groups (& pmu -> dev -> kobj , pmu -> attr_update );
11459
-
11460
- if ( ret )
11461
- goto del_dev ;
11475
+ if ( ret )
11476
+ goto del_dev ;
11477
+ }
11462
11478
11463
11479
out :
11464
11480
return ret ;
0 commit comments