Commit 9875221c authored by Teng Qin's avatar Teng Qin

Unify perf_event type and config check

parent cb3d1618
...@@ -604,10 +604,32 @@ error: ...@@ -604,10 +604,32 @@ error:
return NULL; return NULL;
} }
int invalid_perf_config(uint32_t type, uint64_t config) {
switch (type) {
case PERF_TYPE_HARDWARE:
return config >= PERF_COUNT_HW_MAX;
case PERF_TYPE_SOFTWARE:
return config >= PERF_COUNT_SW_MAX;
case PERF_TYPE_RAW:
return 0;
default:
return 1;
}
}
int bpf_open_perf_event(uint32_t type, uint64_t config, int pid, int cpu) { int bpf_open_perf_event(uint32_t type, uint64_t config, int pid, int cpu) {
int fd; int fd;
struct perf_event_attr attr = {}; struct perf_event_attr attr = {};
if (type != PERF_TYPE_HARDWARE && type != PERF_TYPE_RAW) {
fprintf(stderr, "Unsupported perf event type\n");
return -1;
}
if (invalid_perf_config(type, config)) {
fprintf(stderr, "Invalid perf event config\n");
return -1;
}
attr.sample_period = LONG_MAX; attr.sample_period = LONG_MAX;
attr.type = type; attr.type = type;
attr.config = config; attr.config = config;
...@@ -733,8 +755,7 @@ int bpf_attach_perf_event(int progfd, uint32_t ev_type, uint32_t ev_config, ...@@ -733,8 +755,7 @@ int bpf_attach_perf_event(int progfd, uint32_t ev_type, uint32_t ev_config,
fprintf(stderr, "Unsupported perf event type\n"); fprintf(stderr, "Unsupported perf event type\n");
return -1; return -1;
} }
if ((ev_type == PERF_TYPE_HARDWARE && ev_config >= PERF_COUNT_HW_MAX) || if (invalid_perf_config(ev_type, ev_config)) {
(ev_type == PERF_TYPE_SOFTWARE && ev_config >= PERF_COUNT_SW_MAX)) {
fprintf(stderr, "Invalid perf event config\n"); fprintf(stderr, "Invalid perf event config\n");
return -1; return -1;
} }
......
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