lkml.org 
[lkml]   [2014]   [Jul]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 21/33] perf tools: Add feature test for __sync_val_compare_and_swap
    Date
    From: Adrian Hunter <adrian.hunter@intel.com>

    Add a feature test for __sync_val_compare_and_swap() and
    __sync_bool_compare_and_swap()

    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Namhyung Kim <namhyung@gmail.com>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Stephane Eranian <eranian@google.com>
    Link: http://lkml.kernel.org/r/1405332185-4050-30-git-send-email-adrian.hunter@intel.com
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    ---
    tools/perf/config/Makefile | 6 ++++++
    tools/perf/config/feature-checks/Makefile | 4 ++++
    tools/perf/config/feature-checks/test-all.c | 5 +++++
    .../config/feature-checks/test-sync-compare-and-swap.c | 14 ++++++++++++++
    4 files changed, 29 insertions(+)
    create mode 100644 tools/perf/config/feature-checks/test-sync-compare-and-swap.c

    diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile
    index b7f42d577c4e..1f67aa02d240 100644
    --- a/tools/perf/config/Makefile
    +++ b/tools/perf/config/Makefile
    @@ -164,6 +164,7 @@ CORE_FEATURE_TESTS = \
    backtrace \
    dwarf \
    fortify-source \
    + sync-compare-and-swap \
    glibc \
    gtk2 \
    gtk2-infobar \
    @@ -199,6 +200,7 @@ LIB_FEATURE_TESTS = \
    VF_FEATURE_TESTS = \
    backtrace \
    fortify-source \
    + sync-compare-and-swap \
    gtk2-infobar \
    libelf-getphdrnum \
    libelf-mmap \
    @@ -272,6 +274,10 @@ CFLAGS += -I$(LIB_INCLUDE)

    CFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE

    +ifeq ($(feature-sync-compare-and-swap), 1)
    + CFLAGS += -DHAVE_SYNC_COMPARE_AND_SWAP_SUPPORT
    +endif
    +
    ifndef NO_BIONIC
    $(call feature_check,bionic)
    ifeq ($(feature-bionic), 1)
    diff --git a/tools/perf/config/feature-checks/Makefile b/tools/perf/config/feature-checks/Makefile
    index 64c84e5f0514..6088f8d8a434 100644
    --- a/tools/perf/config/feature-checks/Makefile
    +++ b/tools/perf/config/feature-checks/Makefile
    @@ -5,6 +5,7 @@ FILES= \
    test-bionic.bin \
    test-dwarf.bin \
    test-fortify-source.bin \
    + test-sync-compare-and-swap.bin \
    test-glibc.bin \
    test-gtk2.bin \
    test-gtk2-infobar.bin \
    @@ -141,6 +142,9 @@ test-timerfd.bin:
    test-libdw-dwarf-unwind.bin:
    $(BUILD)

    +test-sync-compare-and-swap.bin:
    + $(BUILD) -Werror
    +
    -include *.d

    ###############################
    diff --git a/tools/perf/config/feature-checks/test-all.c b/tools/perf/config/feature-checks/test-all.c
    index fe5c1e5c952f..a7d022e161c0 100644
    --- a/tools/perf/config/feature-checks/test-all.c
    +++ b/tools/perf/config/feature-checks/test-all.c
    @@ -89,6 +89,10 @@
    # include "test-libdw-dwarf-unwind.c"
    #undef main

    +#define main main_test_sync_compare_and_swap
    +# include "test-sync-compare-and-swap.c"
    +#undef main
    +
    int main(int argc, char *argv[])
    {
    main_test_libpython();
    @@ -111,6 +115,7 @@ int main(int argc, char *argv[])
    main_test_timerfd();
    main_test_stackprotector_all();
    main_test_libdw_dwarf_unwind();
    + main_test_sync_compare_and_swap(argc, argv);

    return 0;
    }
    diff --git a/tools/perf/config/feature-checks/test-sync-compare-and-swap.c b/tools/perf/config/feature-checks/test-sync-compare-and-swap.c
    new file mode 100644
    index 000000000000..c34d4ca4af56
    --- /dev/null
    +++ b/tools/perf/config/feature-checks/test-sync-compare-and-swap.c
    @@ -0,0 +1,14 @@
    +#include <stdint.h>
    +
    +volatile uint64_t x;
    +
    +int main(int argc, char *argv[])
    +{
    + uint64_t old, new = argc;
    +
    + argv = argv;
    + do {
    + old = __sync_val_compare_and_swap(&x, 0, 0);
    + } while (!__sync_bool_compare_and_swap(&x, old, new));
    + return old == new;
    +}
    --
    1.9.3


    \
     
     \ /
      Last update: 2014-07-19 15:41    [W:4.663 / U:0.880 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site