Thread (22 messages) flat view 22 messages, 3 authors, 2015-08-06

Re: [PATCH v6 2/4] bpf: Add new bpf map type to store the pointer to struct perf_event

From: Peter Zijlstra <peterz@infradead.org>
Date: 2015-08-05 09:40:25
Also in: lkml

On Tue, Aug 04, 2015 at 08:58:14AM +0000, Kaixu Xia wrote:
quoted hunk ↗ jump to hunk
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index 2027809..81fc99e 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -641,6 +641,8 @@ extern int perf_event_init_task(struct task_struct *child);
 extern void perf_event_exit_task(struct task_struct *child);
 extern void perf_event_free_task(struct task_struct *task);
 extern void perf_event_delayed_put(struct task_struct *task);
+extern struct perf_event *perf_event_get(unsigned int fd);
+extern struct perf_event_attr *perf_event_attrs(struct perf_event *event);
const struct perf_event_attr *perf_event_attrs();

+static void *perf_event_fd_array_get_ptr(struct bpf_map *map, int fd)
+{
+	struct perf_event *event;
+	struct perf_event_attr *attr;
Also const
+
+	event = perf_event_get(fd);
+	if (IS_ERR(event))
+		return event;
+
+	attr = perf_event_attrs(event);
+	if (IS_ERR(attr))
+		return attr;
+
+	if (attr->type != PERF_TYPE_RAW &&
+	    attr->type != PERF_TYPE_HARDWARE) {
+		perf_event_release_kernel(event);
+		return ERR_PTR(-EINVAL);
+	}
+	return event;
+}
+struct perf_event_attr *perf_event_attrs(struct perf_event *event)
Also const
+{
+	if (!event)
+		return ERR_PTR(-EINVAL);
+
+	return &event->attr;
+}
It doesn't make sense (ever) to allow users of this function to change
attributes of the event, inspecting them is fine.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help