drivers: cci: reject groups spanning multiple HW PMUs
authorSuzuki K. Poulose <suzuki.poulose@arm.com>
Tue, 17 Mar 2015 18:15:00 +0000 (18:15 +0000)
committerWill Deacon <will.deacon@arm.com>
Fri, 27 Mar 2015 13:44:11 +0000 (13:44 +0000)
commitb1862199be6098855b598b69f5098d2fb4cecfcb
treec91684b61d6b94c74e77359175a2726e1d0262b1
parent06e5801b8cb3fc057d88cb4dc03c0b64b2744cda
drivers: cci: reject groups spanning multiple HW PMUs

The perf core implicitly rejects events spanning multiple HW PMUs, as in
these cases the event->ctx will differ. However this validation is
performed after pmu::event_init() is called in perf_init_event(), and
thus pmu::event_init() may be called with a group leader from a
different HW PMU.

The CCI PMU driver does not take this fact into account, and assumes
that the any other hardware event belongs to the CCI. There are two
issues with it :

1) It is wrong and we should reject such groups.
2) Validation allocates an temporary idx for this non-cci event, which leads
to wrong calculation of the counter availability, and eventually lesser
number of events in the group.

This patch updates the CCI PMU driver to first test for and reject
events from other PMUs, which is the right thing to do.

Cc: Will Deacon <will.deacon@arm.com>
Acked-by: Mark Rutland <mark.rutland@arm.com>
Acked-by: Peter Ziljstra (Intel) <peterz@infradead.org>
Signed-off-by: Suzuki K. Poulose <suzuki.poulose@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
drivers/bus/arm-cci.c