Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 277316
b: refs/heads/master
c: 4defea8
h: refs/heads/master
v: v3
  • Loading branch information
Peter Zijlstra authored and Ingo Molnar committed Dec 6, 2011
1 parent 3a14ac0 commit dbab6e1
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 6 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: bc1738f6ee83015f090867813dcca4d690e7917c
refs/heads/master: 4defea8559bc0f97a899d94c8d19d3b8bb802bc4
19 changes: 14 additions & 5 deletions trunk/arch/x86/kernel/cpu/perf_event.c
Original file line number Diff line number Diff line change
Expand Up @@ -574,16 +574,25 @@ static bool __perf_sched_find_counter(struct perf_sched *sched)

c = sched->constraints[sched->state.event];

/* Prefer fixed purpose counters */
if (x86_pmu.num_counters_fixed) {
idx = X86_PMC_IDX_FIXED;
for_each_set_bit_cont(idx, c->idxmsk, X86_PMC_IDX_MAX) {
if (!__test_and_set_bit(idx, sched->state.used))
goto done;
}
}
/* Grab the first unused counter starting with idx */
idx = sched->state.counter;
for_each_set_bit_cont(idx, c->idxmsk, X86_PMC_IDX_MAX) {
for_each_set_bit_cont(idx, c->idxmsk, X86_PMC_IDX_FIXED) {
if (!__test_and_set_bit(idx, sched->state.used))
break;
goto done;
}
sched->state.counter = idx;

if (idx >= X86_PMC_IDX_MAX)
return false;
return false;

done:
sched->state.counter = idx;

if (c->overlap)
perf_sched_save_state(sched);
Expand Down

0 comments on commit dbab6e1

Please sign in to comment.