| From 11c6cbe706f218a8dc7e1f962f12b3a52ddd33a9 Mon Sep 17 00:00:00 2001 |
| From: Arnaldo Carvalho de Melo <acme@redhat.com> |
| Date: Wed, 21 Nov 2018 17:42:00 -0300 |
| Subject: tools build feature: Check if eventfd() is available |
| |
| From: Arnaldo Carvalho de Melo <acme@redhat.com> |
| |
| commit 11c6cbe706f218a8dc7e1f962f12b3a52ddd33a9 upstream. |
| |
| A new 'perf bench epoll' will use this, and to disable it for older |
| systems, add a feature test for this API. |
| |
| This is just a simple program that if successfully compiled, means that |
| the feature is present, at least at the library level, in a build that |
| sets the output directory to /tmp/build/perf (using O=/tmp/build/perf), |
| we end up with: |
| |
| $ ls -la /tmp/build/perf/feature/test-eventfd* |
| -rwxrwxr-x. 1 acme acme 8176 Nov 21 15:58 /tmp/build/perf/feature/test-eventfd.bin |
| -rw-rw-r--. 1 acme acme 588 Nov 21 15:58 /tmp/build/perf/feature/test-eventfd.d |
| -rw-rw-r--. 1 acme acme 0 Nov 21 15:58 /tmp/build/perf/feature/test-eventfd.make.output |
| $ ldd /tmp/build/perf/feature/test-eventfd.bin |
| linux-vdso.so.1 (0x00007fff3bf3f000) |
| libc.so.6 => /lib64/libc.so.6 (0x00007fa984061000) |
| /lib64/ld-linux-x86-64.so.2 (0x00007fa984417000) |
| $ grep eventfd -A 2 -B 2 /tmp/build/perf/FEATURE-DUMP |
| feature-dwarf=1 |
| feature-dwarf_getlocations=1 |
| feature-eventfd=1 |
| feature-fortify-source=1 |
| feature-sync-compare-and-swap=1 |
| $ |
| |
| The main thing here is that in the end we'll have -DHAVE_EVENTFD in |
| CFLAGS, and then the 'perf bench' entry needing that API can be |
| selectively pruned. |
| |
| Cc: Adrian Hunter <adrian.hunter@intel.com> |
| Cc: Andrew Morton <akpm@linux-foundation.org> |
| Cc: David Ahern <dsahern@gmail.com> |
| Cc: Davidlohr Bueso <dbueso@suse.de> |
| Cc: Jason Baron <jbaron@akamai.com> |
| Cc: Jiri Olsa <jolsa@kernel.org> |
| Cc: Namhyung Kim <namhyung@kernel.org> |
| Cc: Wang Nan <wangnan0@huawei.com> |
| Link: https://lkml.kernel.org/n/tip-wkeldwob7dpx6jvtuzl8164k@git.kernel.org |
| Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> |
| Cc: Guenter Roeck <linux@roeck-us.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| tools/build/Makefile.feature | 1 + |
| tools/build/feature/Makefile | 4 ++++ |
| tools/build/feature/test-all.c | 5 +++++ |
| tools/build/feature/test-eventfd.c | 9 +++++++++ |
| tools/perf/Makefile.config | 5 ++++- |
| 5 files changed, 23 insertions(+), 1 deletion(-) |
| create mode 100644 tools/build/feature/test-eventfd.c |
| |
| --- a/tools/build/Makefile.feature |
| +++ b/tools/build/Makefile.feature |
| @@ -31,6 +31,7 @@ FEATURE_TESTS_BASIC := |
| backtrace \ |
| dwarf \ |
| dwarf_getlocations \ |
| + eventfd \ |
| fortify-source \ |
| sync-compare-and-swap \ |
| get_current_dir_name \ |
| --- a/tools/build/feature/Makefile |
| +++ b/tools/build/feature/Makefile |
| @@ -5,6 +5,7 @@ FILES= |
| test-bionic.bin \ |
| test-dwarf.bin \ |
| test-dwarf_getlocations.bin \ |
| + test-eventfd.bin \ |
| test-fortify-source.bin \ |
| test-sync-compare-and-swap.bin \ |
| test-get_current_dir_name.bin \ |
| @@ -100,6 +101,9 @@ $(OUTPUT)test-bionic.bin: |
| $(OUTPUT)test-libelf.bin: |
| $(BUILD) -lelf |
| |
| +$(OUTPUT)test-eventfd.bin: |
| + $(BUILD) |
| + |
| $(OUTPUT)test-get_current_dir_name.bin: |
| $(BUILD) |
| |
| --- a/tools/build/feature/test-all.c |
| +++ b/tools/build/feature/test-all.c |
| @@ -50,6 +50,10 @@ |
| # include "test-dwarf_getlocations.c" |
| #undef main |
| |
| +#define main main_test_eventfd |
| +# include "test-eventfd.c" |
| +#undef main |
| + |
| #define main main_test_libelf_getphdrnum |
| # include "test-libelf-getphdrnum.c" |
| #undef main |
| @@ -182,6 +186,7 @@ int main(int argc, char *argv[]) |
| main_test_glibc(); |
| main_test_dwarf(); |
| main_test_dwarf_getlocations(); |
| + main_test_eventfd(); |
| main_test_libelf_getphdrnum(); |
| main_test_libelf_gelf_getnote(); |
| main_test_libelf_getshdrstrndx(); |
| --- /dev/null |
| +++ b/tools/build/feature/test-eventfd.c |
| @@ -0,0 +1,9 @@ |
| +// SPDX-License-Identifier: GPL-2.0 |
| +// Copyright (C) 2018, Red Hat Inc, Arnaldo Carvalho de Melo <acme@redhat.com> |
| + |
| +#include <sys/eventfd.h> |
| + |
| +int main(void) |
| +{ |
| + return eventfd(0, EFD_NONBLOCK); |
| +} |
| --- a/tools/perf/Makefile.config |
| +++ b/tools/perf/Makefile.config |
| @@ -310,11 +310,14 @@ ifndef NO_BIONIC |
| endif |
| endif |
| |
| +ifeq ($(feature-eventfd), 1) |
| + CFLAGS += -DHAVE_EVENTFD |
| +endif |
| + |
| ifeq ($(feature-get_current_dir_name), 1) |
| CFLAGS += -DHAVE_GET_CURRENT_DIR_NAME |
| endif |
| |
| - |
| ifdef NO_LIBELF |
| NO_DWARF := 1 |
| NO_DEMANGLE := 1 |