gpu: pvr: make sure the device is powered on in SGX_MISRHandler
authorImre Deak <imre.deak@nokia.com>
Wed, 31 Mar 2010 20:01:36 +0000 (23:01 +0300)
committerGrazvydas Ignotas <notasas@gmail.com>
Sun, 20 May 2012 18:09:40 +0000 (21:09 +0300)
commitf7f6f734b6763eb2075b8dbec6dc14905cd3d2c7
tree0482de4ab4ef265944888af7953d594fcf19dfdd
parent453490a091d114603ee32de392351919946d86dc
gpu: pvr: make sure the device is powered on in SGX_MISRHandler

While SGX_MISRHandler is scheduled another code path of the driver
(IOCTL, SGXOSTimer) can race with it and turn the power off before
it starts to execute.

When this happens we get the following oops backtrace:

 HWRecoveryResetSGX: SGX Hardware Recovery triggered
 Unhandled fault: external abort on non-linefetch (0x1008)
 PC is at HWRecoveryResetSGX+0x74/0x1b8 [pvrsrvkm]
 LR is at preempt_schedule+0x44/0x54
 (HWRecoveryResetSGX+0x0/0x1b8) from (SGX_MISRHandler+0x5c/0x60)
 (SGX_MISRHandler+0x0/0x60) from (PVRSRVMISR+0x44/0xa0)
  r5:bf0a29cc r4:dfbbbcc0
 (PVRSRVMISR+0x0/0xa0) from (MISRWrapper+0x14/0x18)
  r5:00000002 r4:00000000
 (MISRWrapper+0x0/0x18) from (worker_thread+0x1d0/0x2cc)
 (worker_thread+0x0/0x2cc) from (kthread+0x88/0x90)
 (kthread+0x0/0x90) from (do_exit+0x0/0x680)

Signed-off-by: Imre Deak <imre.deak@nokia.com>
pvr/sgxinit.c