mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-26 00:21:17 +00:00
perf, bpf: Add BPF support to all perf_event types
Allow BPF_PROG_TYPE_PERF_EVENT program types to attach to all perf_event types, including HW_CACHE, RAW, and dynamic pmu events. Only tracepoint/kprobe events are treated differently which require BPF_PROG_TYPE_TRACEPOINT/BPF_PROG_TYPE_KPROBE program types accordingly. Also add support for reading all event counters using bpf_perf_event_read() helper. Signed-off-by: Alexei Starovoitov <ast@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
5071034e4a
commit
f91840a32d
4 changed files with 48 additions and 56 deletions
|
@ -452,38 +452,24 @@ static void bpf_event_entry_free_rcu(struct bpf_event_entry *ee)
|
|||
static void *perf_event_fd_array_get_ptr(struct bpf_map *map,
|
||||
struct file *map_file, int fd)
|
||||
{
|
||||
const struct perf_event_attr *attr;
|
||||
struct bpf_event_entry *ee;
|
||||
struct perf_event *event;
|
||||
struct file *perf_file;
|
||||
u64 value;
|
||||
|
||||
perf_file = perf_event_get(fd);
|
||||
if (IS_ERR(perf_file))
|
||||
return perf_file;
|
||||
|
||||
ee = ERR_PTR(-EOPNOTSUPP);
|
||||
event = perf_file->private_data;
|
||||
ee = ERR_PTR(-EINVAL);
|
||||
|
||||
attr = perf_event_attrs(event);
|
||||
if (IS_ERR(attr) || attr->inherit)
|
||||
if (perf_event_read_local(event, &value) == -EOPNOTSUPP)
|
||||
goto err_out;
|
||||
|
||||
switch (attr->type) {
|
||||
case PERF_TYPE_SOFTWARE:
|
||||
if (attr->config != PERF_COUNT_SW_BPF_OUTPUT)
|
||||
goto err_out;
|
||||
/* fall-through */
|
||||
case PERF_TYPE_RAW:
|
||||
case PERF_TYPE_HARDWARE:
|
||||
ee = bpf_event_entry_gen(perf_file, map_file);
|
||||
if (ee)
|
||||
return ee;
|
||||
ee = ERR_PTR(-ENOMEM);
|
||||
/* fall-through */
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
ee = bpf_event_entry_gen(perf_file, map_file);
|
||||
if (ee)
|
||||
return ee;
|
||||
ee = ERR_PTR(-ENOMEM);
|
||||
err_out:
|
||||
fput(perf_file);
|
||||
return ee;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue