* [PATCH v3 0/3] perf: Trigger IO signals for watermark_wakeup
@ 2024-04-13 14:16 Kyle Huey
2024-04-13 14:16 ` [PATCH v3 1/3] perf: Move perf_event_fasync() to perf_event.h Kyle Huey
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Kyle Huey @ 2024-04-13 14:16 UTC (permalink / raw)
To: Kyle Huey, linux-kernel, Namhyung Kim, Ian Rodgers,
Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo
Cc: Robert O'Callahan
watermark_wakeup triggers poll events. It would be helpful for rr if
it also triggered FASYNC signals since that's what we use.
Since the last version I split the main code change into a pure move of
perf_event_fasync() and a separate behavior change.
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH v3 1/3] perf: Move perf_event_fasync() to perf_event.h 2024-04-13 14:16 [PATCH v3 0/3] perf: Trigger IO signals for watermark_wakeup Kyle Huey @ 2024-04-13 14:16 ` Kyle Huey 2024-04-14 20:47 ` [tip: perf/core] " tip-bot2 for Kyle Huey 2024-04-13 14:16 ` [PATCH v3 2/3] perf/ring_buffer: Trigger IO signals for watermark_wakeup Kyle Huey 2024-04-13 14:16 ` [PATCH v3 3/3] selftests/perf_events: Test FASYNC with watermark wakeups Kyle Huey 2 siblings, 1 reply; 7+ messages in thread From: Kyle Huey @ 2024-04-13 14:16 UTC (permalink / raw) To: Kyle Huey, linux-kernel, Namhyung Kim, Ian Rodgers, Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo Cc: Robert O'Callahan, Ingo Molnar, Mark Rutland, Alexander Shishkin, Jiri Olsa, Adrian Hunter, linux-perf-users This will allow it to be called from perf_output_wakeup(). Signed-off-by: Kyle Huey <khuey@kylehuey.com> --- include/linux/perf_event.h | 8 ++++++++ kernel/events/core.c | 8 -------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index 13a2b05cc431..4924bae0a015 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h @@ -1680,6 +1680,14 @@ perf_event_addr_filters(struct perf_event *event) return ifh; } +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; +} + extern void perf_event_addr_filters_sync(struct perf_event *event); extern void perf_report_aux_output_id(struct perf_event *event, u64 hw_id); diff --git a/kernel/events/core.c b/kernel/events/core.c index cd88d1e89eb8..7358b11f9003 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); -- 2.34.1 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [tip: perf/core] perf: Move perf_event_fasync() to perf_event.h 2024-04-13 14:16 ` [PATCH v3 1/3] perf: Move perf_event_fasync() to perf_event.h Kyle Huey @ 2024-04-14 20:47 ` tip-bot2 for Kyle Huey 0 siblings, 0 replies; 7+ messages in thread From: tip-bot2 for Kyle Huey @ 2024-04-14 20:47 UTC (permalink / raw) To: linux-tip-commits; +Cc: Kyle Huey, Ingo Molnar, x86, linux-kernel The following commit has been merged into the perf/core branch of tip: Commit-ID: 4a013980666857c1eb2df6a2137817caa21d38a6 Gitweb: https://git.kernel.org/tip/4a013980666857c1eb2df6a2137817caa21d38a6 Author: Kyle Huey <me@kylehuey.com> AuthorDate: Sat, 13 Apr 2024 07:16:16 -07:00 Committer: Ingo Molnar <mingo@kernel.org> CommitterDate: Sun, 14 Apr 2024 22:26:32 +02:00 perf: Move perf_event_fasync() to perf_event.h This will allow it to be called from perf_output_wakeup(). Signed-off-by: Kyle Huey <khuey@kylehuey.com> Signed-off-by: Ingo Molnar <mingo@kernel.org> Link: https://lore.kernel.org/r/20240413141618.4160-2-khuey@kylehuey.com --- include/linux/perf_event.h | 8 ++++++++ kernel/events/core.c | 8 -------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index d5ff0c1..a5304ae 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h @@ -1686,6 +1686,14 @@ perf_event_addr_filters(struct perf_event *event) return ifh; } +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; +} + extern void perf_event_addr_filters_sync(struct perf_event *event); extern void perf_report_aux_output_id(struct perf_event *event, u64 hw_id); diff --git a/kernel/events/core.c b/kernel/events/core.c index 6708c11..da9d9a1 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -6703,14 +6703,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); ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v3 2/3] perf/ring_buffer: Trigger IO signals for watermark_wakeup 2024-04-13 14:16 [PATCH v3 0/3] perf: Trigger IO signals for watermark_wakeup Kyle Huey 2024-04-13 14:16 ` [PATCH v3 1/3] perf: Move perf_event_fasync() to perf_event.h Kyle Huey @ 2024-04-13 14:16 ` Kyle Huey 2024-04-14 20:47 ` [tip: perf/core] " tip-bot2 for Kyle Huey 2024-04-13 14:16 ` [PATCH v3 3/3] selftests/perf_events: Test FASYNC with watermark wakeups Kyle Huey 2 siblings, 1 reply; 7+ messages in thread From: Kyle Huey @ 2024-04-13 14:16 UTC (permalink / raw) To: Kyle Huey, linux-kernel, Namhyung Kim, Ian Rodgers, Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo Cc: Robert O'Callahan, Ingo Molnar, Mark Rutland, Alexander Shishkin, Jiri Olsa, Adrian Hunter, linux-perf-users perf_output_wakeup() already marks the perf event fd available for polling. Trigger IO signals with FASYNC too. Signed-off-by: Kyle Huey <khuey@kylehuey.com> --- kernel/events/ring_buffer.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kernel/events/ring_buffer.c b/kernel/events/ring_buffer.c index 60ed43d1c29e..4013408ce012 100644 --- a/kernel/events/ring_buffer.c +++ b/kernel/events/ring_buffer.c @@ -22,6 +22,10 @@ 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 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [tip: perf/core] perf/ring_buffer: Trigger IO signals for watermark_wakeup 2024-04-13 14:16 ` [PATCH v3 2/3] perf/ring_buffer: Trigger IO signals for watermark_wakeup Kyle Huey @ 2024-04-14 20:47 ` tip-bot2 for Kyle Huey 0 siblings, 0 replies; 7+ messages in thread From: tip-bot2 for Kyle Huey @ 2024-04-14 20:47 UTC (permalink / raw) To: linux-tip-commits; +Cc: Kyle Huey, Ingo Molnar, x86, linux-kernel The following commit has been merged into the perf/core branch of tip: Commit-ID: fd20bb51ed3913e0d25085eb79e8c0babfb4ee28 Gitweb: https://git.kernel.org/tip/fd20bb51ed3913e0d25085eb79e8c0babfb4ee28 Author: Kyle Huey <me@kylehuey.com> AuthorDate: Sat, 13 Apr 2024 07:16:18 -07:00 Committer: Ingo Molnar <mingo@kernel.org> CommitterDate: Sun, 14 Apr 2024 22:26:32 +02:00 perf/ring_buffer: Trigger IO signals for watermark_wakeup perf_output_wakeup() already marks the perf event fd available for polling. Trigger IO signals with FASYNC too. Signed-off-by: Kyle Huey <khuey@kylehuey.com> Signed-off-by: Ingo Molnar <mingo@kernel.org> Link: https://lore.kernel.org/r/20240413141618.4160-3-khuey@kylehuey.com --- kernel/events/ring_buffer.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kernel/events/ring_buffer.c b/kernel/events/ring_buffer.c index 60ed43d..4013408 100644 --- a/kernel/events/ring_buffer.c +++ b/kernel/events/ring_buffer.c @@ -22,6 +22,10 @@ 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); } ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v3 3/3] selftests/perf_events: Test FASYNC with watermark wakeups 2024-04-13 14:16 [PATCH v3 0/3] perf: Trigger IO signals for watermark_wakeup Kyle Huey 2024-04-13 14:16 ` [PATCH v3 1/3] perf: Move perf_event_fasync() to perf_event.h Kyle Huey 2024-04-13 14:16 ` [PATCH v3 2/3] perf/ring_buffer: Trigger IO signals for watermark_wakeup Kyle Huey @ 2024-04-13 14:16 ` Kyle Huey 2024-04-14 20:47 ` [tip: perf/core] " tip-bot2 for Kyle Huey 2 siblings, 1 reply; 7+ messages in thread From: Kyle Huey @ 2024-04-13 14:16 UTC (permalink / raw) To: Kyle Huey, linux-kernel, Namhyung Kim, Ian Rodgers, Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo Cc: Robert O'Callahan, Shuah Khan, linux-kselftest The test uses PERF_RECORD_SWITCH records to fill the ring buffer and trigger the watermark wakeup, which in turn should trigger an IO signal. Signed-off-by: Kyle Huey <khuey@kylehuey.com> --- .../testing/selftests/perf_events/.gitignore | 1 + tools/testing/selftests/perf_events/Makefile | 2 +- .../selftests/perf_events/watermark_signal.c | 146 ++++++++++++++++++ 3 files changed, 148 insertions(+), 1 deletion(-) create mode 100644 tools/testing/selftests/perf_events/watermark_signal.c diff --git a/tools/testing/selftests/perf_events/.gitignore b/tools/testing/selftests/perf_events/.gitignore index 790c47001e77..ee93dc4969b8 100644 --- a/tools/testing/selftests/perf_events/.gitignore +++ b/tools/testing/selftests/perf_events/.gitignore @@ -1,3 +1,4 @@ # SPDX-License-Identifier: GPL-2.0-only sigtrap_threads remove_on_exec +watermark_signal diff --git a/tools/testing/selftests/perf_events/Makefile b/tools/testing/selftests/perf_events/Makefile index db93c4ff081a..70e3ff211278 100644 --- a/tools/testing/selftests/perf_events/Makefile +++ b/tools/testing/selftests/perf_events/Makefile @@ -2,5 +2,5 @@ CFLAGS += -Wl,-no-as-needed -Wall $(KHDR_INCLUDES) LDFLAGS += -lpthread -TEST_GEN_PROGS := sigtrap_threads remove_on_exec +TEST_GEN_PROGS := sigtrap_threads remove_on_exec watermark_signal include ../lib.mk diff --git a/tools/testing/selftests/perf_events/watermark_signal.c b/tools/testing/selftests/perf_events/watermark_signal.c new file mode 100644 index 000000000000..49dc1e831174 --- /dev/null +++ b/tools/testing/selftests/perf_events/watermark_signal.c @@ -0,0 +1,146 @@ +// SPDX-License-Identifier: GPL-2.0 +#define _GNU_SOURCE + +#include <errno.h> +#include <fcntl.h> +#include <linux/perf_event.h> +#include <stddef.h> +#include <sched.h> +#include <signal.h> +#include <stdlib.h> +#include <string.h> +#include <sys/ioctl.h> +#include <sys/mman.h> +#include <sys/syscall.h> +#include <sys/wait.h> +#include <unistd.h> + +#include "../kselftest_harness.h" + +#define __maybe_unused __attribute__((__unused__)) + +static int sigio_count; + +static void handle_sigio(int signum __maybe_unused, + siginfo_t *oh __maybe_unused, + void *uc __maybe_unused) +{ + ++sigio_count; +} + +static void do_child(void) +{ + raise(SIGSTOP); + + for (int i = 0; i < 20; ++i) + sleep(1); + + raise(SIGSTOP); + + exit(0); +} + +TEST(watermark_signal) +{ + struct perf_event_attr attr; + struct perf_event_mmap_page *p = NULL; + struct sigaction previous_sigio, sigio = { 0 }; + pid_t child = -1; + int child_status; + int fd = -1; + long page_size = sysconf(_SC_PAGE_SIZE); + + sigio.sa_sigaction = handle_sigio; + EXPECT_EQ(sigaction(SIGIO, &sigio, &previous_sigio), 0); + + memset(&attr, 0, sizeof(attr)); + attr.size = sizeof(attr); + attr.type = PERF_TYPE_SOFTWARE; + attr.config = PERF_COUNT_SW_DUMMY; + attr.sample_period = 1; + attr.disabled = 1; + attr.watermark = 1; + attr.context_switch = 1; + attr.wakeup_watermark = 1; + + child = fork(); + EXPECT_GE(child, 0); + if (child == 0) + do_child(); + else if (child < 0) { + perror("fork()"); + goto cleanup; + } + + if (waitpid(child, &child_status, WSTOPPED) != child || + !(WIFSTOPPED(child_status) && WSTOPSIG(child_status) == SIGSTOP)) { + fprintf(stderr, + "failed to sycnhronize with child errno=%d status=%x\n", + errno, + child_status); + goto cleanup; + } + + fd = syscall(__NR_perf_event_open, &attr, child, -1, -1, + PERF_FLAG_FD_CLOEXEC); + if (fd < 0) { + fprintf(stderr, "failed opening event %llx\n", attr.config); + goto cleanup; + } + + if (fcntl(fd, F_SETFL, FASYNC)) { + perror("F_SETFL FASYNC"); + goto cleanup; + } + + if (fcntl(fd, F_SETOWN, getpid())) { + perror("F_SETOWN getpid()"); + goto cleanup; + } + + if (fcntl(fd, F_SETSIG, SIGIO)) { + perror("F_SETSIG SIGIO"); + goto cleanup; + } + + p = mmap(NULL, 2 * page_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + if (p == NULL) { + perror("mmap"); + goto cleanup; + } + + if (ioctl(fd, PERF_EVENT_IOC_ENABLE, 0)) { + perror("PERF_EVENT_IOC_ENABLE"); + goto cleanup; + } + + if (kill(child, SIGCONT) < 0) { + perror("SIGCONT"); + goto cleanup; + } + + if (waitpid(child, &child_status, WSTOPPED) != -1 || errno != EINTR) + fprintf(stderr, + "expected SIGIO to terminate wait errno=%d status=%x\n%d", + errno, + child_status, + sigio_count); + + EXPECT_GE(sigio_count, 1); + +cleanup: + if (p != NULL) + munmap(p, 2 * page_size); + + if (fd >= 0) + close(fd); + + if (child > 0) { + kill(child, SIGKILL); + waitpid(child, NULL, 0); + } + + sigaction(SIGIO, &previous_sigio, NULL); +} + +TEST_HARNESS_MAIN -- 2.34.1 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [tip: perf/core] selftests/perf_events: Test FASYNC with watermark wakeups 2024-04-13 14:16 ` [PATCH v3 3/3] selftests/perf_events: Test FASYNC with watermark wakeups Kyle Huey @ 2024-04-14 20:47 ` tip-bot2 for Kyle Huey 0 siblings, 0 replies; 7+ messages in thread From: tip-bot2 for Kyle Huey @ 2024-04-14 20:47 UTC (permalink / raw) To: linux-tip-commits; +Cc: Kyle Huey, Ingo Molnar, x86, linux-kernel The following commit has been merged into the perf/core branch of tip: Commit-ID: e224d1c1fb93f258030186b4878abe105c296ac1 Gitweb: https://git.kernel.org/tip/e224d1c1fb93f258030186b4878abe105c296ac1 Author: Kyle Huey <me@kylehuey.com> AuthorDate: Sat, 13 Apr 2024 07:16:20 -07:00 Committer: Ingo Molnar <mingo@kernel.org> CommitterDate: Sun, 14 Apr 2024 22:26:33 +02:00 selftests/perf_events: Test FASYNC with watermark wakeups The test uses PERF_RECORD_SWITCH records to fill the ring buffer and trigger the watermark wakeup, which in turn should trigger an IO signal. Signed-off-by: Kyle Huey <khuey@kylehuey.com> Signed-off-by: Ingo Molnar <mingo@kernel.org> Link: https://lore.kernel.org/r/20240413141618.4160-4-khuey@kylehuey.com --- tools/testing/selftests/perf_events/.gitignore | 1 +- tools/testing/selftests/perf_events/Makefile | 2 +- tools/testing/selftests/perf_events/watermark_signal.c | 146 ++++++++- 3 files changed, 148 insertions(+), 1 deletion(-) create mode 100644 tools/testing/selftests/perf_events/watermark_signal.c diff --git a/tools/testing/selftests/perf_events/.gitignore b/tools/testing/selftests/perf_events/.gitignore index 790c470..ee93dc4 100644 --- a/tools/testing/selftests/perf_events/.gitignore +++ b/tools/testing/selftests/perf_events/.gitignore @@ -1,3 +1,4 @@ # SPDX-License-Identifier: GPL-2.0-only sigtrap_threads remove_on_exec +watermark_signal diff --git a/tools/testing/selftests/perf_events/Makefile b/tools/testing/selftests/perf_events/Makefile index db93c4f..70e3ff2 100644 --- a/tools/testing/selftests/perf_events/Makefile +++ b/tools/testing/selftests/perf_events/Makefile @@ -2,5 +2,5 @@ CFLAGS += -Wl,-no-as-needed -Wall $(KHDR_INCLUDES) LDFLAGS += -lpthread -TEST_GEN_PROGS := sigtrap_threads remove_on_exec +TEST_GEN_PROGS := sigtrap_threads remove_on_exec watermark_signal include ../lib.mk diff --git a/tools/testing/selftests/perf_events/watermark_signal.c b/tools/testing/selftests/perf_events/watermark_signal.c new file mode 100644 index 0000000..49dc1e8 --- /dev/null +++ b/tools/testing/selftests/perf_events/watermark_signal.c @@ -0,0 +1,146 @@ +// SPDX-License-Identifier: GPL-2.0 +#define _GNU_SOURCE + +#include <errno.h> +#include <fcntl.h> +#include <linux/perf_event.h> +#include <stddef.h> +#include <sched.h> +#include <signal.h> +#include <stdlib.h> +#include <string.h> +#include <sys/ioctl.h> +#include <sys/mman.h> +#include <sys/syscall.h> +#include <sys/wait.h> +#include <unistd.h> + +#include "../kselftest_harness.h" + +#define __maybe_unused __attribute__((__unused__)) + +static int sigio_count; + +static void handle_sigio(int signum __maybe_unused, + siginfo_t *oh __maybe_unused, + void *uc __maybe_unused) +{ + ++sigio_count; +} + +static void do_child(void) +{ + raise(SIGSTOP); + + for (int i = 0; i < 20; ++i) + sleep(1); + + raise(SIGSTOP); + + exit(0); +} + +TEST(watermark_signal) +{ + struct perf_event_attr attr; + struct perf_event_mmap_page *p = NULL; + struct sigaction previous_sigio, sigio = { 0 }; + pid_t child = -1; + int child_status; + int fd = -1; + long page_size = sysconf(_SC_PAGE_SIZE); + + sigio.sa_sigaction = handle_sigio; + EXPECT_EQ(sigaction(SIGIO, &sigio, &previous_sigio), 0); + + memset(&attr, 0, sizeof(attr)); + attr.size = sizeof(attr); + attr.type = PERF_TYPE_SOFTWARE; + attr.config = PERF_COUNT_SW_DUMMY; + attr.sample_period = 1; + attr.disabled = 1; + attr.watermark = 1; + attr.context_switch = 1; + attr.wakeup_watermark = 1; + + child = fork(); + EXPECT_GE(child, 0); + if (child == 0) + do_child(); + else if (child < 0) { + perror("fork()"); + goto cleanup; + } + + if (waitpid(child, &child_status, WSTOPPED) != child || + !(WIFSTOPPED(child_status) && WSTOPSIG(child_status) == SIGSTOP)) { + fprintf(stderr, + "failed to sycnhronize with child errno=%d status=%x\n", + errno, + child_status); + goto cleanup; + } + + fd = syscall(__NR_perf_event_open, &attr, child, -1, -1, + PERF_FLAG_FD_CLOEXEC); + if (fd < 0) { + fprintf(stderr, "failed opening event %llx\n", attr.config); + goto cleanup; + } + + if (fcntl(fd, F_SETFL, FASYNC)) { + perror("F_SETFL FASYNC"); + goto cleanup; + } + + if (fcntl(fd, F_SETOWN, getpid())) { + perror("F_SETOWN getpid()"); + goto cleanup; + } + + if (fcntl(fd, F_SETSIG, SIGIO)) { + perror("F_SETSIG SIGIO"); + goto cleanup; + } + + p = mmap(NULL, 2 * page_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + if (p == NULL) { + perror("mmap"); + goto cleanup; + } + + if (ioctl(fd, PERF_EVENT_IOC_ENABLE, 0)) { + perror("PERF_EVENT_IOC_ENABLE"); + goto cleanup; + } + + if (kill(child, SIGCONT) < 0) { + perror("SIGCONT"); + goto cleanup; + } + + if (waitpid(child, &child_status, WSTOPPED) != -1 || errno != EINTR) + fprintf(stderr, + "expected SIGIO to terminate wait errno=%d status=%x\n%d", + errno, + child_status, + sigio_count); + + EXPECT_GE(sigio_count, 1); + +cleanup: + if (p != NULL) + munmap(p, 2 * page_size); + + if (fd >= 0) + close(fd); + + if (child > 0) { + kill(child, SIGKILL); + waitpid(child, NULL, 0); + } + + sigaction(SIGIO, &previous_sigio, NULL); +} + +TEST_HARNESS_MAIN ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2024-04-14 20:47 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2024-04-13 14:16 [PATCH v3 0/3] perf: Trigger IO signals for watermark_wakeup Kyle Huey 2024-04-13 14:16 ` [PATCH v3 1/3] perf: Move perf_event_fasync() to perf_event.h Kyle Huey 2024-04-14 20:47 ` [tip: perf/core] " tip-bot2 for Kyle Huey 2024-04-13 14:16 ` [PATCH v3 2/3] perf/ring_buffer: Trigger IO signals for watermark_wakeup Kyle Huey 2024-04-14 20:47 ` [tip: perf/core] " tip-bot2 for Kyle Huey 2024-04-13 14:16 ` [PATCH v3 3/3] selftests/perf_events: Test FASYNC with watermark wakeups Kyle Huey 2024-04-14 20:47 ` [tip: perf/core] " tip-bot2 for Kyle Huey
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®