lkml.org 
[lkml]   [2014]   [Jul]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 10/16] perf kvm: Simplify exit reasons tables definitions
    Date
    From: Alexander Yarygin <yarygin@linux.vnet.ibm.com>

    The perf_kvm_stat struct keeps the size of a table of exit reasons in
    the field 'exit_reasons_size'.

    The field is initialized and then used by get_exit_reason() for serial
    access to the table, so that the calling function does not actually need
    to know table size.

    Usage of tables with 'end of sequence' marker simplifies the
    get_exit_reason() function.

    Also the patch introduces a define_exit_reasons_table, which makes it
    easier to define new tables.

    Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
    Reviewed-by: David Ahern <dsahern@gmail.com>
    Signed-off-by: Alexander Yarygin <yarygin@linux.vnet.ibm.com>
    Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
    Cc: Christian Borntraeger <borntraeger@de.ibm.com>
    Cc: Cornelia Huck <cornelia.huck@de.ibm.com>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Link: http://lkml.kernel.org/r/1404395992-17095-3-git-send-email-yarygin@linux.vnet.ibm.com
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    ---
    tools/perf/builtin-kvm.c | 27 ++++++++++++---------------
    1 file changed, 12 insertions(+), 15 deletions(-)

    diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c
    index 214ec0e7492b..75f354459005 100644
    --- a/tools/perf/builtin-kvm.c
    +++ b/tools/perf/builtin-kvm.c
    @@ -99,7 +99,6 @@ struct perf_kvm_stat {
    int trace_vcpu;

    struct exit_reasons_table *exit_reasons;
    - int exit_reasons_size;
    const char *exit_reasons_isa;

    struct kvm_events_ops *events_ops;
    @@ -158,20 +157,19 @@ static bool exit_event_end(struct perf_evsel *evsel,
    return kvm_entry_event(evsel);
    }

    -static struct exit_reasons_table vmx_exit_reasons[] = {
    - VMX_EXIT_REASONS
    -};
    +#define define_exit_reasons_table(name, symbols) \
    + static struct exit_reasons_table name[] = { \
    + symbols, { -1, NULL } \
    + }

    -static struct exit_reasons_table svm_exit_reasons[] = {
    - SVM_EXIT_REASONS
    -};
    +define_exit_reasons_table(vmx_exit_reasons, VMX_EXIT_REASONS);
    +define_exit_reasons_table(svm_exit_reasons, SVM_EXIT_REASONS);

    -static const char *get_exit_reason(struct perf_kvm_stat *kvm, u64 exit_code)
    +static const char *get_exit_reason(struct perf_kvm_stat *kvm,
    + struct exit_reasons_table *tbl,
    + u64 exit_code)
    {
    - int i = kvm->exit_reasons_size;
    - struct exit_reasons_table *tbl = kvm->exit_reasons;
    -
    - while (i--) {
    + while (tbl->reason != NULL) {
    if (tbl->exit_code == exit_code)
    return tbl->reason;
    tbl++;
    @@ -186,7 +184,8 @@ static void exit_event_decode_key(struct perf_kvm_stat *kvm,
    struct event_key *key,
    char decode[20])
    {
    - const char *exit_reason = get_exit_reason(kvm, key->key);
    + const char *exit_reason = get_exit_reason(kvm, kvm->exit_reasons,
    + key->key);

    scnprintf(decode, 20, "%s", exit_reason);
    }
    @@ -862,7 +861,6 @@ static int cpu_isa_config(struct perf_kvm_stat *kvm)

    if (isa == 1) {
    kvm->exit_reasons = vmx_exit_reasons;
    - kvm->exit_reasons_size = ARRAY_SIZE(vmx_exit_reasons);
    kvm->exit_reasons_isa = "VMX";
    }

    @@ -1586,7 +1584,6 @@ static int kvm_cmd_stat(const char *file_name, int argc, const char **argv)
    .sort_key = "sample",

    .exit_reasons = svm_exit_reasons,
    - .exit_reasons_size = ARRAY_SIZE(svm_exit_reasons),
    .exit_reasons_isa = "SVM",
    };

    --
    1.9.3


    \
     
     \ /
      Last update: 2014-07-08 22:21    [W:3.276 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site