Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 147135
b: refs/heads/master
c: 43874d2
h: refs/heads/master
i:
  147133: 712059f
  147131: 8278748
  147127: 05ff848
  147119: 7c290f6
  147103: c68aabb
  147071: 47ad9ae
v: v3
  • Loading branch information
Ingo Molnar committed Dec 9, 2008
1 parent bcb9ebf commit 6320a8d
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 18 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 1e12567678054bc1d4c944ecfad17624b3e49345
refs/heads/master: 43874d238d5f208854a73c3225ca2a22833eec8b
23 changes: 6 additions & 17 deletions trunk/arch/x86/kernel/cpu/perf_counter.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ static u32 perf_counter_mask __read_mostly;
struct cpu_hw_counters {
struct perf_counter *counters[MAX_HW_COUNTERS];
unsigned long used[BITS_TO_LONGS(MAX_HW_COUNTERS)];
int enable_all;
};

/*
Expand Down Expand Up @@ -115,24 +114,13 @@ int hw_perf_counter_init(struct perf_counter *counter, s32 hw_event_type)
return 0;
}

static void __hw_perf_enable_all(void)
{
wrmsr(MSR_CORE_PERF_GLOBAL_CTRL, perf_counter_mask, 0);
}

void hw_perf_enable_all(void)
{
struct cpu_hw_counters *cpuc = &__get_cpu_var(cpu_hw_counters);

cpuc->enable_all = 1;
__hw_perf_enable_all();
wrmsr(MSR_CORE_PERF_GLOBAL_CTRL, perf_counter_mask, 0);
}

void hw_perf_disable_all(void)
{
struct cpu_hw_counters *cpuc = &__get_cpu_var(cpu_hw_counters);

cpuc->enable_all = 0;
wrmsr(MSR_CORE_PERF_GLOBAL_CTRL, 0, 0);
}

Expand Down Expand Up @@ -385,8 +373,10 @@ perf_handle_group(struct perf_counter *leader, u64 *status, u64 *overflown)
static void __smp_perf_counter_interrupt(struct pt_regs *regs, int nmi)
{
int bit, cpu = smp_processor_id();
u64 ack, status, saved_global;
struct cpu_hw_counters *cpuc;
u64 ack, status;

rdmsrl(MSR_CORE_PERF_GLOBAL_CTRL, saved_global);

/* Disable counters globally */
wrmsr(MSR_CORE_PERF_GLOBAL_CTRL, 0, 0);
Expand Down Expand Up @@ -445,10 +435,9 @@ static void __smp_perf_counter_interrupt(struct pt_regs *regs, int nmi)
goto again;
out:
/*
* Do not reenable when global enable is off:
* Restore - do not reenable when global enable is off:
*/
if (cpuc->enable_all)
__hw_perf_enable_all();
wrmsr(MSR_CORE_PERF_GLOBAL_CTRL, saved_global, 0);
}

void smp_perf_counter_interrupt(struct pt_regs *regs)
Expand Down

0 comments on commit 6320a8d

Please sign in to comment.