@@ -246,6 +246,19 @@ static int amd_uncore_event_init(struct perf_event *event)
246
246
return 0 ;
247
247
}
248
248
249
+ static umode_t
250
+ amd_f17h_uncore_is_visible (struct kobject * kobj , struct attribute * attr , int i )
251
+ {
252
+ return boot_cpu_data .x86 >= 0x17 && boot_cpu_data .x86 < 0x19 ?
253
+ attr -> mode : 0 ;
254
+ }
255
+
256
+ static umode_t
257
+ amd_f19h_uncore_is_visible (struct kobject * kobj , struct attribute * attr , int i )
258
+ {
259
+ return boot_cpu_data .x86 >= 0x19 ? attr -> mode : 0 ;
260
+ }
261
+
249
262
static ssize_t amd_uncore_attr_show_cpumask (struct device * dev ,
250
263
struct device_attribute * attr ,
251
264
char * buf )
@@ -296,20 +309,33 @@ DEFINE_UNCORE_FORMAT_ATTR(enallslices, enallslices, "config:46"); /* F19h L3
296
309
DEFINE_UNCORE_FORMAT_ATTR (enallcores , enallcores , "config:47" ); /* F19h L3 */
297
310
DEFINE_UNCORE_FORMAT_ATTR (sliceid , sliceid , "config:48-50" ); /* F19h L3 */
298
311
312
+ /* Common DF and NB attributes */
299
313
static struct attribute * amd_uncore_df_format_attr [] = {
300
- & format_attr_event12 .attr , /* event14 if F17h+ */
301
- & format_attr_umask .attr ,
314
+ & format_attr_event12 .attr , /* event */
315
+ & format_attr_umask .attr , /* umask */
302
316
NULL ,
303
317
};
304
318
319
+ /* Common L2 and L3 attributes */
305
320
static struct attribute * amd_uncore_l3_format_attr [] = {
306
- & format_attr_event12 .attr , /* event8 if F17h+ */
307
- & format_attr_umask .attr ,
308
- NULL , /* slicemask if F17h, coreid if F19h */
309
- NULL , /* threadmask8 if F17h, enallslices if F19h */
310
- NULL , /* enallcores if F19h */
311
- NULL , /* sliceid if F19h */
312
- NULL , /* threadmask2 if F19h */
321
+ & format_attr_event12 .attr , /* event */
322
+ & format_attr_umask .attr , /* umask */
323
+ NULL , /* threadmask */
324
+ NULL ,
325
+ };
326
+
327
+ /* F17h unique L3 attributes */
328
+ static struct attribute * amd_f17h_uncore_l3_format_attr [] = {
329
+ & format_attr_slicemask .attr , /* slicemask */
330
+ NULL ,
331
+ };
332
+
333
+ /* F19h unique L3 attributes */
334
+ static struct attribute * amd_f19h_uncore_l3_format_attr [] = {
335
+ & format_attr_coreid .attr , /* coreid */
336
+ & format_attr_enallslices .attr , /* enallslices */
337
+ & format_attr_enallcores .attr , /* enallcores */
338
+ & format_attr_sliceid .attr , /* sliceid */
313
339
NULL ,
314
340
};
315
341
@@ -323,6 +349,18 @@ static struct attribute_group amd_uncore_l3_format_group = {
323
349
.attrs = amd_uncore_l3_format_attr ,
324
350
};
325
351
352
+ static struct attribute_group amd_f17h_uncore_l3_format_group = {
353
+ .name = "format" ,
354
+ .attrs = amd_f17h_uncore_l3_format_attr ,
355
+ .is_visible = amd_f17h_uncore_is_visible ,
356
+ };
357
+
358
+ static struct attribute_group amd_f19h_uncore_l3_format_group = {
359
+ .name = "format" ,
360
+ .attrs = amd_f19h_uncore_l3_format_attr ,
361
+ .is_visible = amd_f19h_uncore_is_visible ,
362
+ };
363
+
326
364
static const struct attribute_group * amd_uncore_df_attr_groups [] = {
327
365
& amd_uncore_attr_group ,
328
366
& amd_uncore_df_format_group ,
@@ -335,6 +373,12 @@ static const struct attribute_group *amd_uncore_l3_attr_groups[] = {
335
373
NULL ,
336
374
};
337
375
376
+ static const struct attribute_group * amd_uncore_l3_attr_update [] = {
377
+ & amd_f17h_uncore_l3_format_group ,
378
+ & amd_f19h_uncore_l3_format_group ,
379
+ NULL ,
380
+ };
381
+
338
382
static struct pmu amd_nb_pmu = {
339
383
.task_ctx_nr = perf_invalid_context ,
340
384
.attr_groups = amd_uncore_df_attr_groups ,
@@ -352,6 +396,7 @@ static struct pmu amd_nb_pmu = {
352
396
static struct pmu amd_llc_pmu = {
353
397
.task_ctx_nr = perf_invalid_context ,
354
398
.attr_groups = amd_uncore_l3_attr_groups ,
399
+ .attr_update = amd_uncore_l3_attr_update ,
355
400
.name = "amd_l2" ,
356
401
.event_init = amd_uncore_event_init ,
357
402
.add = amd_uncore_add ,
@@ -632,15 +677,10 @@ static int __init amd_uncore_init(void)
632
677
if (boot_cpu_data .x86 >= 0x19 ) {
633
678
* l3_attr ++ = & format_attr_event8 .attr ;
634
679
* l3_attr ++ = & format_attr_umask .attr ;
635
- * l3_attr ++ = & format_attr_coreid .attr ;
636
- * l3_attr ++ = & format_attr_enallslices .attr ;
637
- * l3_attr ++ = & format_attr_enallcores .attr ;
638
- * l3_attr ++ = & format_attr_sliceid .attr ;
639
680
* l3_attr ++ = & format_attr_threadmask2 .attr ;
640
681
} else if (boot_cpu_data .x86 >= 0x17 ) {
641
682
* l3_attr ++ = & format_attr_event8 .attr ;
642
683
* l3_attr ++ = & format_attr_umask .attr ;
643
- * l3_attr ++ = & format_attr_slicemask .attr ;
644
684
* l3_attr ++ = & format_attr_threadmask8 .attr ;
645
685
}
646
686
0 commit comments