On Wed, Aug 19, 2020 at 02:34:14PM +0100, Alexandru Elisei wrote: > From: Mark Rutland <mark.rutl...@arm.com> > > Currently we access the counter registers and their respective type > registers indirectly. This requires us to write to PMSELR, issue an ISB, > then access the relevant PMXEV* registers. > > This is unfortunate, because: > > * Under virtualization, accessing one register requires two traps to > the hypervisor, even though we could access the register directly with > a single trap. > > * We have to issue an ISB which we could otherwise avoid the cost of. > > * When we use NMIs, the NMI handler will have to save/restore the select > register in case the code it preempted was attempting to access a > counter or its type register. > > We can avoid these issues by directly accessing the relevant registers. > This patch adds helpers to do so. > > In armv8pmu_enable_event() we still need the ISB to prevent the PE from > reordering the write to PMINTENSET_EL1 register. If the interrupt is > enabled before we disable the counter and the new event is configured, > we might get an interrupt triggered by the previously programmed event > overflowing, but which we wrongly attribute to the event that we are > enabling. > > In the process, remove the comment that refers to the ARMv7 PMU. > > Cc: Julien Thierry <julien.thierry.k...@gmail.com> > Cc: Will Deacon <will.dea...@arm.com> > Cc: Peter Zijlstra <pet...@infradead.org> > Cc: Ingo Molnar <mi...@redhat.com> > Cc: Arnaldo Carvalho de Melo <a...@kernel.org> > Cc: Alexander Shishkin <alexander.shish...@linux.intel.com> > Cc: Jiri Olsa <jo...@redhat.com> > Cc: Namhyung Kim <namhy...@kernel.org> > Cc: Catalin Marinas <catalin.mari...@arm.com> > Signed-off-by: Mark Rutland <mark.rutl...@arm.com> > [Julien T.: Don't inline read/write functions to avoid big code-size > increase, remove unused read_pmevtypern function, > fix counter index issue.] > Signed-off-by: Julien Thierry <julien.thie...@arm.com> > [Removed comment, removed trailing semicolons in macros, added ISB]
nit: but it's customary to prefix these with your name, so it's easy to figure out who made changes (like Julien did above). (similar comment for other patches in this series) > @@ -620,9 +686,14 @@ static void armv8pmu_enable_event(struct perf_event > *event) > * Disable counter > */ > armv8pmu_disable_event_counter(event); > + /* > + * Make sure the effects of disabling the counter are visible before we > + * start configuring the event. > + */ > + isb(); With the isb() added by patch 1, why don't we just make these implicit in armv8_{enable,disable}_event_counter() ? Will