diff options
author | Stephen Boyd <sboyd@codeaurora.org> | 2013-01-14 22:50:42 +0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2013-01-16 20:51:10 +0400 |
commit | 568dca15aa2a0f4ddee255894ec393a159f13147 (patch) | |
tree | f60bbd141dbda5325c1cb005920b43c08f03243e /arch/hexagon | |
parent | 8a3a180d21793f2e4386b3cb61c48322564fc80a (diff) | |
download | linux-568dca15aa2a0f4ddee255894ec393a159f13147.tar.xz |
ARM: 7627/1: Predicate preempt logic on PREEMP_COUNT not PREEMPT alone
Patrik Kluba reports that the preempt count becomes invalid due
to the preempt_enable() call being unbalanced with a
preempt_disable() call in the vfp assembly routines. This happens
because preempt_enable() and preempt_disable() update preempt
counts under PREEMPT_COUNT=y but the vfp assembly routines do so
under PREEMPT=y. In a configuration where PREEMPT=n and
DEBUG_ATOMIC_SLEEP=y, PREEMPT_COUNT=y and so the preempt_enable()
call in VFP_bounce() keeps subtracting from the preempt count
until it goes negative.
Fix this by always using PREEMPT_COUNT to decided when to update
preempt counts in the ARM assembly code.
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
Reported-by: Patrik Kluba <pkluba@dension.com>
Tested-by: Patrik Kluba <pkluba@dension.com>
Cc: <stable@vger.kernel.org> # 2.6.30
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/hexagon')
0 files changed, 0 insertions, 0 deletions