Skip to content

Commit 8688c01

Browse files
Yicong Yangwilldeacon
authored andcommitted
drivers/perf: hisi: Provide a generic implementation of cpumask/identifier
Each type of HiSilicon Uncore PMU has the following sysfs attributes: - format: bitmask in perf_event_attr::config[012] of corresponding attribute - event: events name and corresponding event code - cpumask: range of CPUs the events can be opened on - identifier: the version of this PMU Different types of PMU have different implementations of the "format" and "event" but all share the same implementation of the "cpumask" and "identifier". Thus we can move cpumask and identifier to the hisi_uncore_pmu framework and drivers can use the generic implementation. Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Signed-off-by: Yicong Yang <yangyicong@hisilicon.com> Link: https://lore.kernel.org/r/20241210141525.37788-8-yangyicong@huawei.com Signed-off-by: Will Deacon <will@kernel.org>
1 parent 32528b1 commit 8688c01

9 files changed

+63
-195
lines changed

drivers/perf/hisilicon/hisi_uncore_cpa_pmu.c

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -225,34 +225,11 @@ static const struct attribute_group hisi_cpa_pmu_events_group = {
225225
.attrs = hisi_cpa_pmu_events_attr,
226226
};
227227

228-
static DEVICE_ATTR(cpumask, 0444, hisi_cpumask_sysfs_show, NULL);
229-
230-
static struct attribute *hisi_cpa_pmu_cpumask_attrs[] = {
231-
&dev_attr_cpumask.attr,
232-
NULL
233-
};
234-
235-
static const struct attribute_group hisi_cpa_pmu_cpumask_attr_group = {
236-
.attrs = hisi_cpa_pmu_cpumask_attrs,
237-
};
238-
239-
static struct device_attribute hisi_cpa_pmu_identifier_attr =
240-
__ATTR(identifier, 0444, hisi_uncore_pmu_identifier_attr_show, NULL);
241-
242-
static struct attribute *hisi_cpa_pmu_identifier_attrs[] = {
243-
&hisi_cpa_pmu_identifier_attr.attr,
244-
NULL
245-
};
246-
247-
static const struct attribute_group hisi_cpa_pmu_identifier_group = {
248-
.attrs = hisi_cpa_pmu_identifier_attrs,
249-
};
250-
251228
static const struct attribute_group *hisi_cpa_pmu_attr_groups[] = {
252229
&hisi_cpa_pmu_format_group,
253230
&hisi_cpa_pmu_events_group,
254-
&hisi_cpa_pmu_cpumask_attr_group,
255-
&hisi_cpa_pmu_identifier_group,
231+
&hisi_pmu_cpumask_attr_group,
232+
&hisi_pmu_identifier_group,
256233
NULL
257234
};
258235

drivers/perf/hisilicon/hisi_uncore_ddrc_pmu.c

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -380,42 +380,19 @@ static const struct attribute_group hisi_ddrc_pmu_v2_events_group = {
380380
.attrs = hisi_ddrc_pmu_v2_events_attr,
381381
};
382382

383-
static DEVICE_ATTR(cpumask, 0444, hisi_cpumask_sysfs_show, NULL);
384-
385-
static struct attribute *hisi_ddrc_pmu_cpumask_attrs[] = {
386-
&dev_attr_cpumask.attr,
387-
NULL,
388-
};
389-
390-
static const struct attribute_group hisi_ddrc_pmu_cpumask_attr_group = {
391-
.attrs = hisi_ddrc_pmu_cpumask_attrs,
392-
};
393-
394-
static struct device_attribute hisi_ddrc_pmu_identifier_attr =
395-
__ATTR(identifier, 0444, hisi_uncore_pmu_identifier_attr_show, NULL);
396-
397-
static struct attribute *hisi_ddrc_pmu_identifier_attrs[] = {
398-
&hisi_ddrc_pmu_identifier_attr.attr,
399-
NULL
400-
};
401-
402-
static const struct attribute_group hisi_ddrc_pmu_identifier_group = {
403-
.attrs = hisi_ddrc_pmu_identifier_attrs,
404-
};
405-
406383
static const struct attribute_group *hisi_ddrc_pmu_v1_attr_groups[] = {
407384
&hisi_ddrc_pmu_v1_format_group,
408385
&hisi_ddrc_pmu_v1_events_group,
409-
&hisi_ddrc_pmu_cpumask_attr_group,
410-
&hisi_ddrc_pmu_identifier_group,
386+
&hisi_pmu_cpumask_attr_group,
387+
&hisi_pmu_identifier_group,
411388
NULL,
412389
};
413390

414391
static const struct attribute_group *hisi_ddrc_pmu_v2_attr_groups[] = {
415392
&hisi_ddrc_pmu_v2_format_group,
416393
&hisi_ddrc_pmu_v2_events_group,
417-
&hisi_ddrc_pmu_cpumask_attr_group,
418-
&hisi_ddrc_pmu_identifier_group,
394+
&hisi_pmu_cpumask_attr_group,
395+
&hisi_pmu_identifier_group,
419396
NULL
420397
};
421398

drivers/perf/hisilicon/hisi_uncore_hha_pmu.c

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -405,42 +405,19 @@ static const struct attribute_group hisi_hha_pmu_v2_events_group = {
405405
.attrs = hisi_hha_pmu_v2_events_attr,
406406
};
407407

408-
static DEVICE_ATTR(cpumask, 0444, hisi_cpumask_sysfs_show, NULL);
409-
410-
static struct attribute *hisi_hha_pmu_cpumask_attrs[] = {
411-
&dev_attr_cpumask.attr,
412-
NULL,
413-
};
414-
415-
static const struct attribute_group hisi_hha_pmu_cpumask_attr_group = {
416-
.attrs = hisi_hha_pmu_cpumask_attrs,
417-
};
418-
419-
static struct device_attribute hisi_hha_pmu_identifier_attr =
420-
__ATTR(identifier, 0444, hisi_uncore_pmu_identifier_attr_show, NULL);
421-
422-
static struct attribute *hisi_hha_pmu_identifier_attrs[] = {
423-
&hisi_hha_pmu_identifier_attr.attr,
424-
NULL
425-
};
426-
427-
static const struct attribute_group hisi_hha_pmu_identifier_group = {
428-
.attrs = hisi_hha_pmu_identifier_attrs,
429-
};
430-
431408
static const struct attribute_group *hisi_hha_pmu_v1_attr_groups[] = {
432409
&hisi_hha_pmu_v1_format_group,
433410
&hisi_hha_pmu_v1_events_group,
434-
&hisi_hha_pmu_cpumask_attr_group,
435-
&hisi_hha_pmu_identifier_group,
411+
&hisi_pmu_cpumask_attr_group,
412+
&hisi_pmu_identifier_group,
436413
NULL,
437414
};
438415

439416
static const struct attribute_group *hisi_hha_pmu_v2_attr_groups[] = {
440417
&hisi_hha_pmu_v2_format_group,
441418
&hisi_hha_pmu_v2_events_group,
442-
&hisi_hha_pmu_cpumask_attr_group,
443-
&hisi_hha_pmu_identifier_group,
419+
&hisi_pmu_cpumask_attr_group,
420+
&hisi_pmu_identifier_group,
444421
NULL
445422
};
446423

drivers/perf/hisilicon/hisi_uncore_l3c_pmu.c

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -441,42 +441,19 @@ static const struct attribute_group hisi_l3c_pmu_v2_events_group = {
441441
.attrs = hisi_l3c_pmu_v2_events_attr,
442442
};
443443

444-
static DEVICE_ATTR(cpumask, 0444, hisi_cpumask_sysfs_show, NULL);
445-
446-
static struct attribute *hisi_l3c_pmu_cpumask_attrs[] = {
447-
&dev_attr_cpumask.attr,
448-
NULL,
449-
};
450-
451-
static const struct attribute_group hisi_l3c_pmu_cpumask_attr_group = {
452-
.attrs = hisi_l3c_pmu_cpumask_attrs,
453-
};
454-
455-
static struct device_attribute hisi_l3c_pmu_identifier_attr =
456-
__ATTR(identifier, 0444, hisi_uncore_pmu_identifier_attr_show, NULL);
457-
458-
static struct attribute *hisi_l3c_pmu_identifier_attrs[] = {
459-
&hisi_l3c_pmu_identifier_attr.attr,
460-
NULL
461-
};
462-
463-
static const struct attribute_group hisi_l3c_pmu_identifier_group = {
464-
.attrs = hisi_l3c_pmu_identifier_attrs,
465-
};
466-
467444
static const struct attribute_group *hisi_l3c_pmu_v1_attr_groups[] = {
468445
&hisi_l3c_pmu_v1_format_group,
469446
&hisi_l3c_pmu_v1_events_group,
470-
&hisi_l3c_pmu_cpumask_attr_group,
471-
&hisi_l3c_pmu_identifier_group,
447+
&hisi_pmu_cpumask_attr_group,
448+
&hisi_pmu_identifier_group,
472449
NULL,
473450
};
474451

475452
static const struct attribute_group *hisi_l3c_pmu_v2_attr_groups[] = {
476453
&hisi_l3c_pmu_v2_format_group,
477454
&hisi_l3c_pmu_v2_events_group,
478-
&hisi_l3c_pmu_cpumask_attr_group,
479-
&hisi_l3c_pmu_identifier_group,
455+
&hisi_pmu_cpumask_attr_group,
456+
&hisi_pmu_identifier_group,
480457
NULL
481458
};
482459

drivers/perf/hisilicon/hisi_uncore_pa_pmu.c

Lines changed: 6 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -353,29 +353,6 @@ static const struct attribute_group hisi_h60pa_pmu_events_group = {
353353
.attrs = hisi_h60pa_pmu_events_attr,
354354
};
355355

356-
static DEVICE_ATTR(cpumask, 0444, hisi_cpumask_sysfs_show, NULL);
357-
358-
static struct attribute *hisi_pa_pmu_cpumask_attrs[] = {
359-
&dev_attr_cpumask.attr,
360-
NULL
361-
};
362-
363-
static const struct attribute_group hisi_pa_pmu_cpumask_attr_group = {
364-
.attrs = hisi_pa_pmu_cpumask_attrs,
365-
};
366-
367-
static struct device_attribute hisi_pa_pmu_identifier_attr =
368-
__ATTR(identifier, 0444, hisi_uncore_pmu_identifier_attr_show, NULL);
369-
370-
static struct attribute *hisi_pa_pmu_identifier_attrs[] = {
371-
&hisi_pa_pmu_identifier_attr.attr,
372-
NULL
373-
};
374-
375-
static const struct attribute_group hisi_pa_pmu_identifier_group = {
376-
.attrs = hisi_pa_pmu_identifier_attrs,
377-
};
378-
379356
static struct hisi_pa_pmu_int_regs hisi_pa_pmu_regs = {
380357
.mask_offset = PA_INT_MASK,
381358
.clear_offset = PA_INT_CLEAR,
@@ -385,8 +362,8 @@ static struct hisi_pa_pmu_int_regs hisi_pa_pmu_regs = {
385362
static const struct attribute_group *hisi_pa_pmu_v2_attr_groups[] = {
386363
&hisi_pa_pmu_v2_format_group,
387364
&hisi_pa_pmu_v2_events_group,
388-
&hisi_pa_pmu_cpumask_attr_group,
389-
&hisi_pa_pmu_identifier_group,
365+
&hisi_pmu_cpumask_attr_group,
366+
&hisi_pmu_identifier_group,
390367
NULL
391368
};
392369

@@ -399,8 +376,8 @@ static const struct hisi_pmu_dev_info hisi_h32pa_v2 = {
399376
static const struct attribute_group *hisi_pa_pmu_v3_attr_groups[] = {
400377
&hisi_pa_pmu_v2_format_group,
401378
&hisi_pa_pmu_v3_events_group,
402-
&hisi_pa_pmu_cpumask_attr_group,
403-
&hisi_pa_pmu_identifier_group,
379+
&hisi_pmu_cpumask_attr_group,
380+
&hisi_pmu_identifier_group,
404381
NULL
405382
};
406383

@@ -419,8 +396,8 @@ static struct hisi_pa_pmu_int_regs hisi_h60pa_pmu_regs = {
419396
static const struct attribute_group *hisi_h60pa_pmu_attr_groups[] = {
420397
&hisi_pa_pmu_v2_format_group,
421398
&hisi_h60pa_pmu_events_group,
422-
&hisi_pa_pmu_cpumask_attr_group,
423-
&hisi_pa_pmu_identifier_group,
399+
&hisi_pmu_cpumask_attr_group,
400+
&hisi_pmu_identifier_group,
424401
NULL
425402
};
426403

drivers/perf/hisilicon/hisi_uncore_pmu.c

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,41 @@ ssize_t hisi_cpumask_sysfs_show(struct device *dev,
4949
}
5050
EXPORT_SYMBOL_NS_GPL(hisi_cpumask_sysfs_show, "HISI_PMU");
5151

52+
static DEVICE_ATTR(cpumask, 0444, hisi_cpumask_sysfs_show, NULL);
53+
54+
static struct attribute *hisi_pmu_cpumask_attrs[] = {
55+
&dev_attr_cpumask.attr,
56+
NULL
57+
};
58+
59+
const struct attribute_group hisi_pmu_cpumask_attr_group = {
60+
.attrs = hisi_pmu_cpumask_attrs,
61+
};
62+
EXPORT_SYMBOL_NS_GPL(hisi_pmu_cpumask_attr_group, "HISI_PMU");
63+
64+
ssize_t hisi_uncore_pmu_identifier_attr_show(struct device *dev,
65+
struct device_attribute *attr,
66+
char *page)
67+
{
68+
struct hisi_pmu *hisi_pmu = to_hisi_pmu(dev_get_drvdata(dev));
69+
70+
return sysfs_emit(page, "0x%08x\n", hisi_pmu->identifier);
71+
}
72+
EXPORT_SYMBOL_NS_GPL(hisi_uncore_pmu_identifier_attr_show, "HISI_PMU");
73+
74+
static struct device_attribute hisi_pmu_identifier_attr =
75+
__ATTR(identifier, 0444, hisi_uncore_pmu_identifier_attr_show, NULL);
76+
77+
static struct attribute *hisi_pmu_identifier_attrs[] = {
78+
&hisi_pmu_identifier_attr.attr,
79+
NULL
80+
};
81+
82+
const struct attribute_group hisi_pmu_identifier_group = {
83+
.attrs = hisi_pmu_identifier_attrs,
84+
};
85+
EXPORT_SYMBOL_NS_GPL(hisi_pmu_identifier_group, "HISI_PMU");
86+
5287
static bool hisi_validate_event_group(struct perf_event *event)
5388
{
5489
struct perf_event *sibling, *leader = event->group_leader;
@@ -99,16 +134,6 @@ int hisi_uncore_pmu_get_event_idx(struct perf_event *event)
99134
}
100135
EXPORT_SYMBOL_NS_GPL(hisi_uncore_pmu_get_event_idx, "HISI_PMU");
101136

102-
ssize_t hisi_uncore_pmu_identifier_attr_show(struct device *dev,
103-
struct device_attribute *attr,
104-
char *page)
105-
{
106-
struct hisi_pmu *hisi_pmu = to_hisi_pmu(dev_get_drvdata(dev));
107-
108-
return sysfs_emit(page, "0x%08x\n", hisi_pmu->identifier);
109-
}
110-
EXPORT_SYMBOL_NS_GPL(hisi_uncore_pmu_identifier_attr_show, "HISI_PMU");
111-
112137
static void hisi_uncore_pmu_clear_event_idx(struct hisi_pmu *hisi_pmu, int idx)
113138
{
114139
clear_bit(idx, hisi_pmu->pmu_events.used_mask);

drivers/perf/hisilicon/hisi_uncore_pmu.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,10 @@ struct hisi_pmu {
137137
u32 identifier;
138138
};
139139

140+
/* Generic implementation of cpumask/identifier group */
141+
extern const struct attribute_group hisi_pmu_cpumask_attr_group;
142+
extern const struct attribute_group hisi_pmu_identifier_group;
143+
140144
int hisi_uncore_pmu_get_event_idx(struct perf_event *event);
141145
void hisi_uncore_pmu_read(struct perf_event *event);
142146
int hisi_uncore_pmu_add(struct perf_event *event, int flags);

drivers/perf/hisilicon/hisi_uncore_sllc_pmu.c

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -344,34 +344,11 @@ static const struct attribute_group hisi_sllc_pmu_v2_events_group = {
344344
.attrs = hisi_sllc_pmu_v2_events_attr,
345345
};
346346

347-
static DEVICE_ATTR(cpumask, 0444, hisi_cpumask_sysfs_show, NULL);
348-
349-
static struct attribute *hisi_sllc_pmu_cpumask_attrs[] = {
350-
&dev_attr_cpumask.attr,
351-
NULL
352-
};
353-
354-
static const struct attribute_group hisi_sllc_pmu_cpumask_attr_group = {
355-
.attrs = hisi_sllc_pmu_cpumask_attrs,
356-
};
357-
358-
static struct device_attribute hisi_sllc_pmu_identifier_attr =
359-
__ATTR(identifier, 0444, hisi_uncore_pmu_identifier_attr_show, NULL);
360-
361-
static struct attribute *hisi_sllc_pmu_identifier_attrs[] = {
362-
&hisi_sllc_pmu_identifier_attr.attr,
363-
NULL
364-
};
365-
366-
static const struct attribute_group hisi_sllc_pmu_identifier_group = {
367-
.attrs = hisi_sllc_pmu_identifier_attrs,
368-
};
369-
370347
static const struct attribute_group *hisi_sllc_pmu_v2_attr_groups[] = {
371348
&hisi_sllc_pmu_v2_format_group,
372349
&hisi_sllc_pmu_v2_events_group,
373-
&hisi_sllc_pmu_cpumask_attr_group,
374-
&hisi_sllc_pmu_identifier_group,
350+
&hisi_pmu_cpumask_attr_group,
351+
&hisi_pmu_identifier_group,
375352
NULL
376353
};
377354

drivers/perf/hisilicon/hisi_uncore_uc_pmu.c

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -437,34 +437,11 @@ static const struct attribute_group hisi_uc_pmu_events_group = {
437437
.attrs = hisi_uc_pmu_events_attr,
438438
};
439439

440-
static DEVICE_ATTR(cpumask, 0444, hisi_cpumask_sysfs_show, NULL);
441-
442-
static struct attribute *hisi_uc_pmu_cpumask_attrs[] = {
443-
&dev_attr_cpumask.attr,
444-
NULL,
445-
};
446-
447-
static const struct attribute_group hisi_uc_pmu_cpumask_attr_group = {
448-
.attrs = hisi_uc_pmu_cpumask_attrs,
449-
};
450-
451-
static struct device_attribute hisi_uc_pmu_identifier_attr =
452-
__ATTR(identifier, 0444, hisi_uncore_pmu_identifier_attr_show, NULL);
453-
454-
static struct attribute *hisi_uc_pmu_identifier_attrs[] = {
455-
&hisi_uc_pmu_identifier_attr.attr,
456-
NULL
457-
};
458-
459-
static const struct attribute_group hisi_uc_pmu_identifier_group = {
460-
.attrs = hisi_uc_pmu_identifier_attrs,
461-
};
462-
463440
static const struct attribute_group *hisi_uc_pmu_attr_groups[] = {
464441
&hisi_uc_pmu_format_group,
465442
&hisi_uc_pmu_events_group,
466-
&hisi_uc_pmu_cpumask_attr_group,
467-
&hisi_uc_pmu_identifier_group,
443+
&hisi_pmu_cpumask_attr_group,
444+
&hisi_pmu_identifier_group,
468445
NULL
469446
};
470447

0 commit comments

Comments
 (0)