BACKPORT: 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)
committerJeff Vander Stoep <jeffv@google.com>
Sun, 18 Sep 2016 20:54:47 +0000 (13:54 -0700)
commit350a6a0fe0fe70d15a59084c8f4863d10271887f
treed2335ce0077e4de7bc11b78b426fe58b0d708b1f
parentb10551a35399a277afe9b2e28266e2a00a5f6253
BACKPORT: arm64: kernel: fix architected PMU registers unconditional access

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>
Cc: <stable@vger.kernel.org>
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>
Bug: 30369029
Patchset: rework-pagetable

(cherry picked from commit f436b2ac90a095746beb6729b8ee8ed87c9eaede)
Signed-off-by: Jeff Vander Stoep <jeffv@google.com>
Change-Id: Ie442b9feba5d143bd6b6c82d70190fc8bc95298d
arch/arm64/kernel/head.S
arch/arm64/mm/proc-macros.S
arch/arm64/mm/proc.S