]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ENGR00273500 IPUv3 dev: use wait_event_interruptible for ipu task
authorLiu Ying <Ying.Liu@freescale.com>
Thu, 1 Aug 2013 08:32:11 +0000 (16:32 +0800)
committerLothar Waßmann <LW@KARO-electronics.de>
Wed, 20 Aug 2014 08:06:09 +0000 (10:06 +0200)
The ipu task thread checks outstanding tasks to be done on waiting
event uninterruptibly on the function find_task()'s return value.
However, sleeping on waiting event uninterruptibly contributes to
system load average value. This patch changes wait_event() to
wait_event_interruptible() to avoid the load average value inflation.

Signed-off-by: Liu Ying <Ying.Liu@freescale.com>
(cherry picked from commit ec9479ffc757eaefa9b8d4942c37e3634e15599c)

drivers/mxc/ipu3/ipu_device.c

index be36e37cf58ca17ca06d95c1a6bd30a64d464ca1..5814adb55837d34b163da7d3addfa174a23c1bde 100644 (file)
@@ -3155,7 +3155,7 @@ static int ipu_task_thread(void *argv)
                int split_parent;
                int split_child;
 
-               wait_event(thread_waitq, find_task(&tsk, curr_thread_id));
+               wait_event_interruptible(thread_waitq, find_task(&tsk, curr_thread_id));
 
                if (!tsk) {
                        pr_err("thread:%d can not find task.\n",
@@ -3207,7 +3207,7 @@ static int ipu_task_thread(void *argv)
                                        dev_err(tsk->dev,
                                        "ERR: no-0x%x,can not get split_tsk0\n",
                                        tsk->task_no);
-                               wake_up(&thread_waitq);
+                               wake_up_interruptible(&thread_waitq);
                                get_res_do_task(sp_tsk0);
                                dev_dbg(sp_tsk0->dev,
                                        "thread:%d complete tsk no:0x%x.\n",
@@ -3311,7 +3311,7 @@ int ipu_queue_task(struct ipu_task *task)
        tsk->task_in_list = 1;
        dev_dbg(tsk->dev, "[0x%p,no-0x%x] list_add_tail\n", tsk, tsk->task_no);
        spin_unlock_irqrestore(&ipu_task_list_lock, flags);
-       wake_up(&thread_waitq);
+       wake_up_interruptible(&thread_waitq);
 
        ret = wait_event_timeout(tsk->task_waitq, atomic_read(&tsk->done),
                                                msecs_to_jiffies(tsk->timeout));