arm64: kernel: fix architected PMU registers unconditional access
authorLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Wed, 13 Jan 2016 14:50:03 +0000 (14:50 +0000)
committerBen Hutchings <ben@decadent.org.uk>
Wed, 15 Jun 2016 20:29:34 +0000 (21:29 +0100)
commitd0c534747e0d4fd2fb1fcf0a685aeded8b0f6c47
tree9eb04501e2e5b9028a1e37bc97f1fd3d078b0e35
parent66a315418f82f9d97f4233cd71e3b54105ffefd1
arm64: kernel: fix architected PMU registers unconditional access

commit f436b2ac90a095746beb6729b8ee8ed87c9eaede upstream.

The Performance Monitors extension is an optional feature of the
AArch64 architecture, therefore, in order to access Performance
Monitors registers safely, the kernel should detect the architected
PMU unit presence through the ID_AA64DFR0_EL1 register PMUVer field
before accessing them.

This patch implements a guard by reading the ID_AA64DFR0_EL1 register
PMUVer field to detect the architected PMU presence and prevent accessing
PMU system registers if the Performance Monitors extension is not
implemented in the core.

Cc: Peter Maydell <peter.maydell@linaro.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Fixes: 60792ad349f3 ("arm64: kernel: enforce pmuserenr_el0 initialization and restore")
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Reported-by: Guenter Roeck <linux@roeck-us.net>
Tested-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
arch/arm64/kernel/head.S
arch/arm64/mm/proc-macros.S
arch/arm64/mm/proc.S