Messages in this thread Patch in this message | | | From | Kyle Huey <> | Subject | [PATCH 1/2] perf/ring_buffer: Trigger FASYNC signals for watermark wakeups | Date | Wed, 21 Feb 2024 09:52:09 -0800 |
| |
perf_output_wakeup() already marks the perf event fd available for polling. Add code to trigger IO signals with FASYNC too.
Signed-off-by: Kyle Huey <khuey@kylehuey.com> --- include/linux/perf_event.h | 8 ++++++++ kernel/events/core.c | 8 -------- kernel/events/ring_buffer.c | 3 +++ 3 files changed, 11 insertions(+), 8 deletions(-)
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index c8bd5bb6610c..c077968d7e52 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h @@ -1914,4 +1914,12 @@ static inline void perf_lopwr_cb(bool mode) } #endif +static inline struct fasync_struct **perf_event_fasync(struct perf_event *event) +{ + /* only the parent has fasync state */ + if (event->parent) + event = event->parent; + return &event->fasync; +} + #endif /* _LINUX_PERF_EVENT_H */ diff --git a/kernel/events/core.c b/kernel/events/core.c index a329bec42c4d..36b5fbdf8e6e 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -6684,14 +6684,6 @@ static const struct file_operations perf_fops = { * to user-space before waking everybody up. */ -static inline struct fasync_struct **perf_event_fasync(struct perf_event *event) -{ - /* only the parent has fasync state */ - if (event->parent) - event = event->parent; - return &event->fasync; -} - void perf_event_wakeup(struct perf_event *event) { ring_buffer_wakeup(event); diff --git a/kernel/events/ring_buffer.c b/kernel/events/ring_buffer.c index 60ed43d1c29e..033e54bb5c62 100644 --- a/kernel/events/ring_buffer.c +++ b/kernel/events/ring_buffer.c @@ -22,6 +22,9 @@ static void perf_output_wakeup(struct perf_output_handle *handle) atomic_set(&handle->rb->poll, EPOLLIN); handle->event->pending_wakeup = 1; + if (*perf_event_fasync(handle->event) && !handle->event->pending_kill) + handle->event->pending_kill = POLL_IN; + irq_work_queue(&handle->event->pending_irq); } -- 2.34.1
| |