lkml.org 
[lkml]   [2009]   [Jun]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 02/23] x86/oprofile: moving arch_perfmon counter setup to op_x86_model_spec.init
    Date
    The function arch_perfmon_init() in nmi_int.c is model specific. This
    patch moves it to op_model_ppro.c by using the init function pointer
    in struct op_x86_model_spec.

    Cc: Andi Kleen <ak@linux.intel.com>
    Signed-off-by: Robert Richter <robert.richter@amd.com>
    ---
    arch/x86/oprofile/nmi_int.c | 21 +++++++++------------
    arch/x86/oprofile/op_model_ppro.c | 9 ++++++++-
    arch/x86/oprofile/op_x86_model.h | 2 --
    3 files changed, 17 insertions(+), 15 deletions(-)

    diff --git a/arch/x86/oprofile/nmi_int.c b/arch/x86/oprofile/nmi_int.c
    index 3b285e6..dd85153 100644
    --- a/arch/x86/oprofile/nmi_int.c
    +++ b/arch/x86/oprofile/nmi_int.c
    @@ -427,7 +427,7 @@ static int __init ppro_init(char **cpu_type)
    *cpu_type = "i386/core_2";
    break;
    case 26:
    - arch_perfmon_setup_counters();
    + model = &op_arch_perfmon_spec;
    *cpu_type = "i386/core_i7";
    break;
    case 28:
    @@ -442,16 +442,6 @@ static int __init ppro_init(char **cpu_type)
    return 1;
    }

    -static int __init arch_perfmon_init(char **cpu_type)
    -{
    - if (!cpu_has_arch_perfmon)
    - return 0;
    - *cpu_type = "i386/arch_perfmon";
    - model = &op_arch_perfmon_spec;
    - arch_perfmon_setup_counters();
    - return 1;
    -}
    -
    /* in order to get sysfs right */
    static int using_nmi;

    @@ -509,8 +499,15 @@ int __init op_nmi_init(struct oprofile_operations *ops)
    break;
    }

    - if (!cpu_type && !arch_perfmon_init(&cpu_type))
    + if (cpu_type)
    + break;
    +
    + if (!cpu_has_arch_perfmon)
    return -ENODEV;
    +
    + /* use arch perfmon as fallback */
    + cpu_type = "i386/arch_perfmon";
    + model = &op_arch_perfmon_spec;
    break;

    default:
    diff --git a/arch/x86/oprofile/op_model_ppro.c b/arch/x86/oprofile/op_model_ppro.c
    index 2a12399..ae58119 100644
    --- a/arch/x86/oprofile/op_model_ppro.c
    +++ b/arch/x86/oprofile/op_model_ppro.c
    @@ -233,7 +233,7 @@ struct op_x86_model_spec const op_ppro_spec = {
    * the specific CPU.
    */

    -void arch_perfmon_setup_counters(void)
    +static void arch_perfmon_setup_counters(void)
    {
    union cpuid10_eax eax;

    @@ -253,7 +253,14 @@ void arch_perfmon_setup_counters(void)
    op_arch_perfmon_spec.num_controls = num_counters;
    }

    +static int arch_perfmon_init(struct oprofile_operations *ignore)
    +{
    + arch_perfmon_setup_counters();
    + return 0;
    +}
    +
    struct op_x86_model_spec op_arch_perfmon_spec = {
    + .init = &arch_perfmon_init,
    /* num_counters/num_controls filled in at runtime */
    .fill_in_addresses = &ppro_fill_in_addresses,
    /* user space does the cpuid check for available events */
    diff --git a/arch/x86/oprofile/op_x86_model.h b/arch/x86/oprofile/op_x86_model.h
    index 2317149..ed27783 100644
    --- a/arch/x86/oprofile/op_x86_model.h
    +++ b/arch/x86/oprofile/op_x86_model.h
    @@ -51,6 +51,4 @@ extern struct op_x86_model_spec const op_p4_ht2_spec;
    extern struct op_x86_model_spec const op_amd_spec;
    extern struct op_x86_model_spec op_arch_perfmon_spec;

    -extern void arch_perfmon_setup_counters(void);
    -
    #endif /* OP_X86_MODEL_H */
    --
    1.6.3.1



    \
     
     \ /
      Last update: 2009-06-12 15:05    [W:0.028 / U:30.956 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site