Commit c6251549 authored by Pu Lehui's avatar Pu Lehui Committed by Palmer Dabbelt

drivers/perf: riscv: Align errno for unsupported perf event

RISC-V perf driver does not yet support PERF_TYPE_BREAKPOINT. It would
be more appropriate to return -EOPNOTSUPP or -ENOENT for this type in
pmu_sbi_event_map. Considering that other implementations return -ENOENT
for unsupported perf types, let's synchronize this behavior. Due to this
reason, a riscv bpf testcases perf_skip fail. Meanwhile, align that
behavior to the rest of proper place.
Signed-off-by: default avatarPu Lehui <pulehui@huawei.com>
Reviewed-by: default avatarAtish Patra <atishp@rivosinc.com>
Fixes: 9b3e150e ("RISC-V: Add a simple platform driver for RISC-V legacy perf")
Fixes: 16d3b1af ("perf: RISC-V: Check standard event availability")
Fixes: e9991434 ("RISC-V: Add perf platform driver based on SBI PMU extension")
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20240831071520.1630360-1-pulehui@huaweicloud.comSigned-off-by: default avatarPalmer Dabbelt <palmer@rivosinc.com>
parent 9852d85e
...@@ -22,13 +22,13 @@ static int pmu_legacy_ctr_get_idx(struct perf_event *event) ...@@ -22,13 +22,13 @@ static int pmu_legacy_ctr_get_idx(struct perf_event *event)
struct perf_event_attr *attr = &event->attr; struct perf_event_attr *attr = &event->attr;
if (event->attr.type != PERF_TYPE_HARDWARE) if (event->attr.type != PERF_TYPE_HARDWARE)
return -EOPNOTSUPP; return -ENOENT;
if (attr->config == PERF_COUNT_HW_CPU_CYCLES) if (attr->config == PERF_COUNT_HW_CPU_CYCLES)
return RISCV_PMU_LEGACY_CYCLE; return RISCV_PMU_LEGACY_CYCLE;
else if (attr->config == PERF_COUNT_HW_INSTRUCTIONS) else if (attr->config == PERF_COUNT_HW_INSTRUCTIONS)
return RISCV_PMU_LEGACY_INSTRET; return RISCV_PMU_LEGACY_INSTRET;
else else
return -EOPNOTSUPP; return -ENOENT;
} }
/* For legacy config & counter index are same */ /* For legacy config & counter index are same */
......
...@@ -309,7 +309,7 @@ static void pmu_sbi_check_event(struct sbi_pmu_event_data *edata) ...@@ -309,7 +309,7 @@ static void pmu_sbi_check_event(struct sbi_pmu_event_data *edata)
ret.value, 0x1, SBI_PMU_STOP_FLAG_RESET, 0, 0, 0); ret.value, 0x1, SBI_PMU_STOP_FLAG_RESET, 0, 0, 0);
} else if (ret.error == SBI_ERR_NOT_SUPPORTED) { } else if (ret.error == SBI_ERR_NOT_SUPPORTED) {
/* This event cannot be monitored by any counter */ /* This event cannot be monitored by any counter */
edata->event_idx = -EINVAL; edata->event_idx = -ENOENT;
} }
} }
...@@ -556,7 +556,7 @@ static int pmu_sbi_event_map(struct perf_event *event, u64 *econfig) ...@@ -556,7 +556,7 @@ static int pmu_sbi_event_map(struct perf_event *event, u64 *econfig)
} }
break; break;
default: default:
ret = -EINVAL; ret = -ENOENT;
break; break;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment