ARM: 7417/1: vfp: ensure preemption is disabled when enabling VFP access
authorWill Deacon <will.deacon@arm.com>
Fri, 11 May 2012 16:42:37 +0000 (17:42 +0100)
committerBen Hutchings <ben@decadent.org.uk>
Sun, 20 May 2012 21:56:46 +0000 (22:56 +0100)
commitf5dd890ef7c905ac61c3d3be1569df06849f74a3
tree5bdefe7421e8268af2a0a5038fa7866484f6009e
parent3af384d0469065da1646d275efffb7dbbe0e435c
ARM: 7417/1: vfp: ensure preemption is disabled when enabling VFP access

commit 998de4acb2ba188d20768d1065658377a2e7d29b upstream.

The vfp_enable function enables access to the VFP co-processor register
space (cp10 and cp11) on the current CPU and must be called with
preemption disabled. Unfortunately, the vfp_init late initcall does not
disable preemption and can lead to an oops during boot if thread
migration occurs at the wrong time and we end up attempting to access
the FPSID on a CPU with VFP access disabled.

This patch fixes the initcall to call vfp_enable from a non-preemptible
context on each CPU and adds a BUG_ON(preemptible) to ensure that any
similar problems are easily spotted in the future.

Reported-by: Hyungwoo Yang <hwoo.yang@gmail.com>
Signed-off-by: Hyungwoo Yang <hyungwooy@nvidia.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
arch/arm/vfp/vfpmodule.c