* [PATCH v4 1/2] powerpc/perf: Infrastructure to support checking of attr.config* @ 2021-04-08 7:45 Madhavan Srinivasan 2021-04-08 7:45 ` [PATCH 2/2] powerpc/perf: Add platform specific check_attr_config Madhavan Srinivasan 2021-04-19 4:00 ` [PATCH v4 1/2] powerpc/perf: Infrastructure to support checking of attr.config* Michael Ellerman 0 siblings, 2 replies; 4+ messages in thread From: Madhavan Srinivasan @ 2021-04-08 7:45 UTC (permalink / raw) To: mpe; +Cc: Madhavan Srinivasan, linuxppc-dev Introduce code to support the checking of attr.config* for values which are reserved for a given platform. Performance Monitoring Unit (PMU) configuration registers have fields that are reserved and some specific values for bit fields are reserved. For ex., MMCRA[61:62] is Random Sampling Mode (SM) and value of 0b11 for this field is reserved. Writing non-zero or invalid values in these fields will have unknown behaviours. Patch adds a generic call-back function "check_attr_config" in "struct power_pmu", to be called in event_init to check for attr.config* values for a given platform. Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com> --- Changelog v3: -Made the check_attr_config() to be called for all event type of instead only for raw event type. Changelog v2: -Fixed commit message Changelog v1: -Fixed commit message and in-code comments arch/powerpc/include/asm/perf_event_server.h | 6 ++++++ arch/powerpc/perf/core-book3s.c | 11 +++++++++++ 2 files changed, 17 insertions(+) diff --git a/arch/powerpc/include/asm/perf_event_server.h b/arch/powerpc/include/asm/perf_event_server.h index 00e7e671bb4b..dde97d7d9253 100644 --- a/arch/powerpc/include/asm/perf_event_server.h +++ b/arch/powerpc/include/asm/perf_event_server.h @@ -67,6 +67,12 @@ struct power_pmu { * the pmu supports extended perf regs capability */ int capabilities; + /* + * Function to check event code for values which are + * reserved. Function takes struct perf_event as input, + * since event code could be spread in attr.config* + */ + int (*check_attr_config)(struct perf_event *ev); }; /* diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c index 766f064f00fb..b17358e8dc12 100644 --- a/arch/powerpc/perf/core-book3s.c +++ b/arch/powerpc/perf/core-book3s.c @@ -1963,6 +1963,17 @@ static int power_pmu_event_init(struct perf_event *event) return -ENOENT; } + /* + * PMU config registers have fields that are + * reserved and some specific values for bit fields are reserved. + * For ex., MMCRA[61:62] is Randome Sampling Mode (SM) + * and value of 0b11 to this field is reserved. + * Check for invalid values in attr.config. + */ + if (ppmu->check_attr_config && + ppmu->check_attr_config(event)) + return -EINVAL; + event->hw.config_base = ev; event->hw.idx = 0; -- 2.26.2 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] powerpc/perf: Add platform specific check_attr_config 2021-04-08 7:45 [PATCH v4 1/2] powerpc/perf: Infrastructure to support checking of attr.config* Madhavan Srinivasan @ 2021-04-08 7:45 ` Madhavan Srinivasan 2021-04-21 13:08 ` Michael Ellerman 2021-04-19 4:00 ` [PATCH v4 1/2] powerpc/perf: Infrastructure to support checking of attr.config* Michael Ellerman 1 sibling, 1 reply; 4+ messages in thread From: Madhavan Srinivasan @ 2021-04-08 7:45 UTC (permalink / raw) To: mpe; +Cc: Madhavan Srinivasan, linuxppc-dev Add platform specific attr.config value checks. Patch includes checks for both power9 and power10. Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com> --- Changelog v3: - No changes Changelog v2: - Changed function name as suggested. - Added name of source document referred for reserved values Changelog v1: - No changes arch/powerpc/perf/isa207-common.c | 42 +++++++++++++++++++++++++++++++ arch/powerpc/perf/isa207-common.h | 2 ++ arch/powerpc/perf/power10-pmu.c | 13 ++++++++++ arch/powerpc/perf/power9-pmu.c | 13 ++++++++++ 4 files changed, 70 insertions(+) diff --git a/arch/powerpc/perf/isa207-common.c b/arch/powerpc/perf/isa207-common.c index e4f577da33d8..358a0e95ba5f 100644 --- a/arch/powerpc/perf/isa207-common.c +++ b/arch/powerpc/perf/isa207-common.c @@ -694,3 +694,45 @@ int isa207_get_alternatives(u64 event, u64 alt[], int size, unsigned int flags, return num_alt; } + +int isa3XX_check_attr_config(struct perf_event *ev) +{ + u64 val, sample_mode; + u64 event = ev->attr.config; + + val = (event >> EVENT_SAMPLE_SHIFT) & EVENT_SAMPLE_MASK; + sample_mode = val & 0x3; + + /* + * MMCRA[61:62] is Random Sampling Mode (SM). + * value of 0b11 is reserved. + */ + if (sample_mode == 0x3) + return -EINVAL; + + /* + * Check for all reserved value + * Source: Performance Monitoring Unit User Guide + */ + switch (val) { + case 0x5: + case 0x9: + case 0xD: + case 0x19: + case 0x1D: + case 0x1A: + case 0x1E: + return -EINVAL; + } + + /* + * MMCRA[48:51]/[52:55]) Threshold Start/Stop + * Events Selection. + * 0b11110000/0b00001111 is reserved. + */ + val = (event >> EVENT_THR_CTL_SHIFT) & EVENT_THR_CTL_MASK; + if (((val & 0xF0) == 0xF0) || ((val & 0xF) == 0xF)) + return -EINVAL; + + return 0; +} diff --git a/arch/powerpc/perf/isa207-common.h b/arch/powerpc/perf/isa207-common.h index 1af0e8c97ac7..b4d2a2b2b346 100644 --- a/arch/powerpc/perf/isa207-common.h +++ b/arch/powerpc/perf/isa207-common.h @@ -280,4 +280,6 @@ void isa207_get_mem_data_src(union perf_mem_data_src *dsrc, u32 flags, struct pt_regs *regs); void isa207_get_mem_weight(u64 *weight); +int isa3XX_check_attr_config(struct perf_event *ev); + #endif diff --git a/arch/powerpc/perf/power10-pmu.c b/arch/powerpc/perf/power10-pmu.c index a901c1348cad..f9d64c63bb4a 100644 --- a/arch/powerpc/perf/power10-pmu.c +++ b/arch/powerpc/perf/power10-pmu.c @@ -106,6 +106,18 @@ static int power10_get_alternatives(u64 event, unsigned int flags, u64 alt[]) return num_alt; } +static int power10_check_attr_config(struct perf_event *ev) +{ + u64 val; + u64 event = ev->attr.config; + + val = (event >> EVENT_SAMPLE_SHIFT) & EVENT_SAMPLE_MASK; + if (val == 0x10 || isa3XX_check_attr_config(ev)) + return -EINVAL; + + return 0; +} + GENERIC_EVENT_ATTR(cpu-cycles, PM_RUN_CYC); GENERIC_EVENT_ATTR(instructions, PM_RUN_INST_CMPL); GENERIC_EVENT_ATTR(branch-instructions, PM_BR_CMPL); @@ -559,6 +571,7 @@ static struct power_pmu power10_pmu = { .attr_groups = power10_pmu_attr_groups, .bhrb_nr = 32, .capabilities = PERF_PMU_CAP_EXTENDED_REGS, + .check_attr_config = power10_check_attr_config, }; int init_power10_pmu(void) diff --git a/arch/powerpc/perf/power9-pmu.c b/arch/powerpc/perf/power9-pmu.c index 2a57e93a79dc..ff3382140d7e 100644 --- a/arch/powerpc/perf/power9-pmu.c +++ b/arch/powerpc/perf/power9-pmu.c @@ -151,6 +151,18 @@ static int power9_get_alternatives(u64 event, unsigned int flags, u64 alt[]) return num_alt; } +static int power9_check_attr_config(struct perf_event *ev) +{ + u64 val; + u64 event = ev->attr.config; + + val = (event >> EVENT_SAMPLE_SHIFT) & EVENT_SAMPLE_MASK; + if (val == 0xC || isa3XX_check_attr_config(ev)) + return -EINVAL; + + return 0; +} + GENERIC_EVENT_ATTR(cpu-cycles, PM_CYC); GENERIC_EVENT_ATTR(stalled-cycles-frontend, PM_ICT_NOSLOT_CYC); GENERIC_EVENT_ATTR(stalled-cycles-backend, PM_CMPLU_STALL); @@ -437,6 +449,7 @@ static struct power_pmu power9_pmu = { .attr_groups = power9_pmu_attr_groups, .bhrb_nr = 32, .capabilities = PERF_PMU_CAP_EXTENDED_REGS, + .check_attr_config = power9_check_attr_config, }; int init_power9_pmu(void) -- 2.26.2 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 2/2] powerpc/perf: Add platform specific check_attr_config 2021-04-08 7:45 ` [PATCH 2/2] powerpc/perf: Add platform specific check_attr_config Madhavan Srinivasan @ 2021-04-21 13:08 ` Michael Ellerman 0 siblings, 0 replies; 4+ messages in thread From: Michael Ellerman @ 2021-04-21 13:08 UTC (permalink / raw) To: Madhavan Srinivasan, mpe; +Cc: linuxppc-dev On Thu, 8 Apr 2021 13:15:04 +0530, Madhavan Srinivasan wrote: > Add platform specific attr.config value checks. Patch > includes checks for both power9 and power10. Applied to powerpc/next. [2/2] powerpc/perf: Add platform specific check_attr_config https://git.kernel.org/powerpc/c/d8a1d6c58986d8778768b15dc5bac0b4b082d345 cheers ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v4 1/2] powerpc/perf: Infrastructure to support checking of attr.config* 2021-04-08 7:45 [PATCH v4 1/2] powerpc/perf: Infrastructure to support checking of attr.config* Madhavan Srinivasan 2021-04-08 7:45 ` [PATCH 2/2] powerpc/perf: Add platform specific check_attr_config Madhavan Srinivasan @ 2021-04-19 4:00 ` Michael Ellerman 1 sibling, 0 replies; 4+ messages in thread From: Michael Ellerman @ 2021-04-19 4:00 UTC (permalink / raw) To: Madhavan Srinivasan, mpe; +Cc: linuxppc-dev On Thu, 8 Apr 2021 13:15:03 +0530, Madhavan Srinivasan wrote: > Introduce code to support the checking of attr.config* for > values which are reserved for a given platform. > Performance Monitoring Unit (PMU) configuration registers > have fields that are reserved and some specific values for > bit fields are reserved. For ex., MMCRA[61:62] is > Random Sampling Mode (SM) and value of 0b11 for this field > is reserved. > > [...] Applied to powerpc/next. [1/2] powerpc/perf: Infrastructure to support checking of attr.config* https://git.kernel.org/powerpc/c/2e2a441d2c0bb639b6fdbb64b15ee0a43599bcec cheers ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-04-21 13:13 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-04-08 7:45 [PATCH v4 1/2] powerpc/perf: Infrastructure to support checking of attr.config* Madhavan Srinivasan 2021-04-08 7:45 ` [PATCH 2/2] powerpc/perf: Add platform specific check_attr_config Madhavan Srinivasan 2021-04-21 13:08 ` Michael Ellerman 2021-04-19 4:00 ` [PATCH v4 1/2] powerpc/perf: Infrastructure to support checking of attr.config* Michael Ellerman
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).