rk29: vpu_service: fix bug when __cancel_delayed_work and delay work run at the same...
author陈恒明 <chm@rock-chips.com>
Tue, 19 Jul 2011 09:57:31 +0000 (17:57 +0800)
committer陈恒明 <chm@rock-chips.com>
Tue, 19 Jul 2011 09:57:31 +0000 (17:57 +0800)
if in inturrept use async interface else use sync interface

arch/arm/mach-rk29/vpu_service.c

index b0d08b29967dcadf526a94d50e63e12cc56b8daf..35c64a99815d627f5be1d83e43ecb280b42e7f9c 100644 (file)
@@ -391,7 +391,11 @@ static void try_set_reg(void)
                            ((VPU_PP  == reg->type) && (NULL == service.reg_pproc)) ||
                            ((VPU_ENC == reg->type) && (NULL == service.reg_codec))) {
                        reg_from_wait_to_run(reg);
-                       __cancel_delayed_work(&vpu_service_power_off_work);
+                       if (in_interrupt()) {
+                               __cancel_delayed_work(&vpu_service_power_off_work);
+                       } else {
+                               cancel_delayed_work(&vpu_service_power_off_work);
+                       }
                        vpu_service_power_on();
                        reg_copy_to_hw(reg);
                }