lkml.org 
[lkml]   [2013]   [Oct]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/2] perf kvm: Disable live command if timerfd is not supported
    Date
    If the OS does not have timerfd support (e.g., older OS'es like RHEL5)
    disable perf kvm stat live.

    Signed-off-by: David Ahern <dsahern@gmail.com>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Jiri Olsa <jolsa@redhat.com>
    ---
    tools/perf/builtin-kvm.c | 12 ++++++++++++
    tools/perf/config/Makefile | 7 +++++++
    tools/perf/config/feature-checks/Makefile | 6 +++++-
    tools/perf/config/feature-checks/test-all.c | 5 +++++
    tools/perf/config/feature-checks/test-timerfd.c | 18 ++++++++++++++++++
    5 files changed, 47 insertions(+), 1 deletion(-)
    create mode 100644 tools/perf/config/feature-checks/test-timerfd.c

    diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c
    index cb05f39d8a77..cd9f92078aba 100644
    --- a/tools/perf/builtin-kvm.c
    +++ b/tools/perf/builtin-kvm.c
    @@ -20,7 +20,9 @@
    #include "util/data.h"

    #include <sys/prctl.h>
    +#ifdef HAVE_TIMERFD_SUPPORT
    #include <sys/timerfd.h>
    +#endif

    #include <termios.h>
    #include <semaphore.h>
    @@ -337,6 +339,7 @@ static void init_kvm_event_record(struct perf_kvm_stat *kvm)
    INIT_LIST_HEAD(&kvm->kvm_events_cache[i]);
    }

    +#ifdef HAVE_TIMERFD_SUPPORT
    static void clear_events_cache_stats(struct list_head *kvm_events_cache)
    {
    struct list_head *head;
    @@ -358,6 +361,7 @@ static void clear_events_cache_stats(struct list_head *kvm_events_cache)
    }
    }
    }
    +#endif

    static int kvm_events_hash_fn(u64 key)
    {
    @@ -783,6 +787,7 @@ static void print_result(struct perf_kvm_stat *kvm)
    pr_info("\nLost events: %" PRIu64 "\n\n", kvm->lost_events);
    }

    +#ifdef HAVE_TIMERFD_SUPPORT
    static int process_lost_event(struct perf_tool *tool,
    union perf_event *event __maybe_unused,
    struct perf_sample *sample __maybe_unused,
    @@ -793,6 +798,7 @@ static int process_lost_event(struct perf_tool *tool,
    kvm->lost_events++;
    return 0;
    }
    +#endif

    static bool skip_sample(struct perf_kvm_stat *kvm,
    struct perf_sample *sample)
    @@ -872,6 +878,7 @@ static bool verify_vcpu(int vcpu)
    return true;
    }

    +#ifdef HAVE_TIMERFD_SUPPORT
    /* keeping the max events to a modest level to keep
    * the processing of samples per mmap smooth.
    */
    @@ -1213,6 +1220,7 @@ static int kvm_live_open_events(struct perf_kvm_stat *kvm)
    out:
    return rc;
    }
    +#endif

    static int read_events(struct perf_kvm_stat *kvm)
    {
    @@ -1379,6 +1387,7 @@ kvm_events_report(struct perf_kvm_stat *kvm, int argc, const char **argv)
    return kvm_events_report_vcpu(kvm);
    }

    +#ifdef HAVE_TIMERFD_SUPPORT
    static struct perf_evlist *kvm_live_event_list(void)
    {
    struct perf_evlist *evlist;
    @@ -1566,6 +1575,7 @@ out:

    return err;
    }
    +#endif

    static void print_kvm_stat_usage(void)
    {
    @@ -1604,8 +1614,10 @@ static int kvm_cmd_stat(const char *file_name, int argc, const char **argv)
    if (!strncmp(argv[1], "rep", 3))
    return kvm_events_report(&kvm, argc - 1 , argv + 1);

    +#ifdef HAVE_TIMERFD_SUPPORT
    if (!strncmp(argv[1], "live", 4))
    return kvm_events_live(&kvm, argc - 1 , argv + 1);
    +#endif

    perf_stat:
    return cmd_stat(argc, argv, NULL);
    diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile
    index c82772207e6e..afe4945e3e84 100644
    --- a/tools/perf/config/Makefile
    +++ b/tools/perf/config/Makefile
    @@ -395,6 +395,13 @@ else
    endif
    endif

    +$(call feature_check,timerfd)
    +ifeq ($(feature-timerfd), 1)
    + CFLAGS += -DHAVE_TIMERFD_SUPPORT
    +else
    + msg := $(warning No timerfd support. Disables 'perf kvm stat live');
    +endif
    +
    disable-python = $(eval $(disable-python_code))
    define disable-python_code
    CFLAGS += -DNO_LIBPYTHON
    diff --git a/tools/perf/config/feature-checks/Makefile b/tools/perf/config/feature-checks/Makefile
    index 452b67cc4d7b..a4d4173c576e 100644
    --- a/tools/perf/config/feature-checks/Makefile
    +++ b/tools/perf/config/feature-checks/Makefile
    @@ -25,7 +25,8 @@ FILES= \
    test-libunwind \
    test-on-exit \
    test-stackprotector-all \
    - test-stackprotector
    + test-stackprotector \
    + test-timerfd

    CC := $(CC) -MD

    @@ -136,6 +137,9 @@ test-on-exit:
    test-backtrace:
    $(BUILD)

    +test-timerfd:
    + $(BUILD)
    +
    -include *.d

    ###############################
    diff --git a/tools/perf/config/feature-checks/test-all.c b/tools/perf/config/feature-checks/test-all.c
    index 50d431892a0c..59e7a705e146 100644
    --- a/tools/perf/config/feature-checks/test-all.c
    +++ b/tools/perf/config/feature-checks/test-all.c
    @@ -81,6 +81,10 @@
    # include "test-libnuma.c"
    #undef main

    +#define main main_test_timerfd
    +# include "test-timerfd.c"
    +#undef main
    +
    int main(int argc, char *argv[])
    {
    main_test_libpython();
    @@ -101,6 +105,7 @@ int main(int argc, char *argv[])
    main_test_on_exit();
    main_test_backtrace();
    main_test_libnuma();
    + main_test_timerfd();

    return 0;
    }
    diff --git a/tools/perf/config/feature-checks/test-timerfd.c b/tools/perf/config/feature-checks/test-timerfd.c
    new file mode 100644
    index 000000000000..8c5c083b4d3c
    --- /dev/null
    +++ b/tools/perf/config/feature-checks/test-timerfd.c
    @@ -0,0 +1,18 @@
    +/*
    + * test for timerfd functions used by perf-kvm-stat-live
    + */
    +#include <sys/timerfd.h>
    +
    +int main(void)
    +{
    + struct itimerspec new_value;
    +
    + int fd = timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK);
    + if (fd < 0)
    + return 1;
    +
    + if (timerfd_settime(fd, 0, &new_value, NULL) != 0)
    + return 1;
    +
    + return 0;
    +}
    --
    1.7.12.4 (Apple Git-37)


    \
     
     \ /
      Last update: 2013-10-29 18:01    [W:4.329 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site