You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
perf_counter: revamp syscall input ABI
Impact: modify ABI The hardware/software classification in hw_event->type became a little strained due to the addition of tracepoint tracing. Instead split up the field and provide a type field to explicitly specify the counter type, while using the event_id field to specify which event to use. Raw counters still work as before, only the raw config now goes into raw_event. Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Paul Mackerras <paulus@samba.org> Cc: Steven Rostedt <rostedt@goodmis.org> Orig-LKML-Reference: <20090319194233.836807573@chello.nl> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
committed by
Ingo Molnar
parent
e077df4f43
commit
b8e83514b6
@@ -602,7 +602,7 @@ hw_perf_counter_init(struct perf_counter *counter)
|
||||
return NULL;
|
||||
if ((s64)counter->hw_event.irq_period < 0)
|
||||
return NULL;
|
||||
ev = counter->hw_event.type;
|
||||
ev = counter->hw_event.event_id;
|
||||
if (!counter->hw_event.raw) {
|
||||
if (ev >= ppmu->n_generic ||
|
||||
ppmu->generic_events[ev] == 0)
|
||||
@@ -692,7 +692,7 @@ static void perf_handle_group(struct perf_counter *counter)
|
||||
list_for_each_entry(sub, &leader->sibling_list, list_entry) {
|
||||
if (sub != counter)
|
||||
sub->hw_ops->read(sub);
|
||||
perf_store_irq_data(counter, sub->hw_event.type);
|
||||
perf_store_irq_data(counter, sub->hw_event.event_config);
|
||||
perf_store_irq_data(counter, atomic64_read(&sub->count));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -217,15 +217,15 @@ static int __hw_perf_counter_init(struct perf_counter *counter)
|
||||
/*
|
||||
* Raw event type provide the config in the event structure
|
||||
*/
|
||||
if (hw_event->raw) {
|
||||
hwc->config |= pmc_ops->raw_event(hw_event->type);
|
||||
if (hw_event->raw_type) {
|
||||
hwc->config |= pmc_ops->raw_event(hw_event->raw_event_id);
|
||||
} else {
|
||||
if (hw_event->type >= pmc_ops->max_events)
|
||||
if (hw_event->event_id >= pmc_ops->max_events)
|
||||
return -EINVAL;
|
||||
/*
|
||||
* The generic map:
|
||||
*/
|
||||
hwc->config |= pmc_ops->event_map(hw_event->type);
|
||||
hwc->config |= pmc_ops->event_map(hw_event->event_id);
|
||||
}
|
||||
counter->wakeup_pending = 0;
|
||||
|
||||
@@ -715,7 +715,7 @@ perf_handle_group(struct perf_counter *sibling, u64 *status, u64 *overflown)
|
||||
list_for_each_entry(counter, &group_leader->sibling_list, list_entry) {
|
||||
|
||||
x86_perf_counter_update(counter, &counter->hw, counter->hw.idx);
|
||||
perf_store_irq_data(sibling, counter->hw_event.type);
|
||||
perf_store_irq_data(sibling, counter->hw_event.event_config);
|
||||
perf_store_irq_data(sibling, atomic64_read(&counter->count));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user