Skip to content

Commit

Permalink
perf/x86/intel/rapl: Refactor the code some more
Browse files Browse the repository at this point in the history
Split out code from init into seperate functions. Tidy up the code and get rid
of pointless comments. I wish there would be comments for code which is not
obvious....

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Andi Kleen <andi.kleen@intel.com>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Harish Chegondi <harish.chegondi@intel.com>
Cc: Jacob Pan <jacob.jun.pan@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Kan Liang <kan.liang@intel.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Cc: Vince Weaver <vincent.weaver@maine.edu>
Cc: linux-kernel@vger.kernel.org
Link: http://lkml.kernel.org/r/20160222221012.588544679@linutronix.de
Signed-off-by: Ingo Molnar <mingo@kernel.org>
  • Loading branch information
Thomas Gleixner authored and Ingo Molnar committed Feb 29, 2016
1 parent 512089d commit 7162b8f
Showing 1 changed file with 31 additions and 30 deletions.
61 changes: 31 additions & 30 deletions arch/x86/events/intel/rapl.c
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ static ssize_t __rapl_##_var##_show(struct kobject *kobj, \
static struct kobj_attribute format_attr_##_var = \
__ATTR(_name, 0444, __rapl_##_var##_show, NULL)

#define RAPL_CNTR_WIDTH 32 /* 32-bit rapl counters */
#define RAPL_CNTR_WIDTH 32

#define RAPL_EVENT_ATTR_STR(_name, v, str) \
static struct perf_pmu_events_attr event_attr_##v = { \
Expand All @@ -120,15 +120,16 @@ static struct perf_pmu_events_attr event_attr_##v = { \
};

struct rapl_pmu {
spinlock_t lock;
int n_active; /* number of active events */
struct list_head active_list;
struct pmu *pmu; /* pointer to rapl_pmu_class */
ktime_t timer_interval; /* in ktime_t unit */
struct hrtimer hrtimer;
spinlock_t lock;
int n_active;
struct list_head active_list;
struct pmu *pmu;
ktime_t timer_interval;
struct hrtimer hrtimer;
};

static int rapl_hw_unit[NR_RAPL_DOMAINS] __read_mostly; /* 1/2^hw_unit Joule */
/* 1/2^hw_unit Joule */
static int rapl_hw_unit[NR_RAPL_DOMAINS] __read_mostly;
static struct pmu rapl_pmu_class;
static cpumask_t rapl_cpu_mask;
static int rapl_cntr_mask;
Expand Down Expand Up @@ -200,11 +201,6 @@ static void rapl_start_hrtimer(struct rapl_pmu *pmu)
HRTIMER_MODE_REL_PINNED);
}

static void rapl_stop_hrtimer(struct rapl_pmu *pmu)
{
hrtimer_cancel(&pmu->hrtimer);
}

static enum hrtimer_restart rapl_hrtimer_handle(struct hrtimer *hrtimer)
{
struct rapl_pmu *pmu = __this_cpu_read(rapl_pmu);
Expand All @@ -216,9 +212,8 @@ static enum hrtimer_restart rapl_hrtimer_handle(struct hrtimer *hrtimer)

spin_lock_irqsave(&pmu->lock, flags);

list_for_each_entry(event, &pmu->active_list, active_entry) {
list_for_each_entry(event, &pmu->active_list, active_entry)
rapl_event_update(event);
}

spin_unlock_irqrestore(&pmu->lock, flags);

Expand Down Expand Up @@ -275,7 +270,7 @@ static void rapl_pmu_event_stop(struct perf_event *event, int mode)
WARN_ON_ONCE(pmu->n_active <= 0);
pmu->n_active--;
if (pmu->n_active == 0)
rapl_stop_hrtimer(pmu);
hrtimer_cancel(&pmu->hrtimer);

list_del(&event->active_entry);

Expand Down Expand Up @@ -542,7 +537,7 @@ static void rapl_cpu_exit(int cpu)
perf_pmu_migrate_context(pmu->pmu, cpu, target);

/* cancel overflow polling timer for CPU */
rapl_stop_hrtimer(pmu);
hrtimer_cancel(&pmu->hrtimer);
}

static void rapl_cpu_init(int cpu)
Expand Down Expand Up @@ -698,6 +693,20 @@ static void __init rapl_advertise(void)
}
}

static int __init rapl_prepare_cpus(void)
{
unsigned int cpu;
int ret;

for_each_online_cpu(cpu) {
ret = rapl_cpu_prepare(cpu);
if (ret)
return ret;
rapl_cpu_init(cpu);
}
return 0;
}

static void __init cleanup_rapl_pmus(void)
{
int cpu;
Expand All @@ -706,23 +715,19 @@ static void __init cleanup_rapl_pmus(void)
kfree(per_cpu(rapl_pmu, cpu));
}

static const struct x86_cpu_id rapl_cpu_match[] = {
static const struct x86_cpu_id rapl_cpu_match[] __initconst = {
[0] = { .vendor = X86_VENDOR_INTEL, .family = 6 },
[1] = {},
};

static int __init rapl_pmu_init(void)
{
void (*quirk)(void) = NULL;
int cpu, ret;
int ret;

/*
* check for Intel processor family 6
*/
if (!x86_match_cpu(rapl_cpu_match))
return -ENODEV;

/* check supported CPU */
switch (boot_cpu_data.x86_model) {
case 42: /* Sandy Bridge */
case 58: /* Ivy Bridge */
Expand Down Expand Up @@ -751,7 +756,6 @@ static int __init rapl_pmu_init(void)
rapl_pmu_events_group.attrs = rapl_events_knl_attr;
break;
default:
/* unsupported */
return -ENODEV;
}

Expand All @@ -761,12 +765,9 @@ static int __init rapl_pmu_init(void)

cpu_notifier_register_begin();

for_each_online_cpu(cpu) {
ret = rapl_cpu_prepare(cpu);
if (ret)
goto out;
rapl_cpu_init(cpu);
}
ret = rapl_prepare_cpus();
if (ret)
goto out;

ret = perf_pmu_register(&rapl_pmu_class, "power", -1);
if (ret)
Expand Down

0 comments on commit 7162b8f

Please sign in to comment.