aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Chen <b02280@freescale.com>2011-11-16 17:23:07 +0800
committerEric Miao <eric.miao@linaro.org>2011-11-29 16:43:11 +0800
commit4cdf2ecb9709cc299e31cfa9d4217732e19426ff (patch)
tree3ae21289d2f61188deef663ec129e4fca3c609c2
parent49371eff6edc06c0f0b1e85c2dcb9cfba4f52fbb (diff)
downloadlinux-linaro-4cdf2ecb9709cc299e31cfa9d4217732e19426ff.tar.gz
ENGR00162354 ipuv3 device: correct kthread operation for split task
make could_finish to volatile. do_exit in split_task_thread instead of kthread_stop. Signed-off-by: Jason Chen <b02280@freescale.com>
-rw-r--r--drivers/mxc/ipu3/ipu_device.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/drivers/mxc/ipu3/ipu_device.c b/drivers/mxc/ipu3/ipu_device.c
index 0f68441fc83..9395d8a6661 100644
--- a/drivers/mxc/ipu3/ipu_device.c
+++ b/drivers/mxc/ipu3/ipu_device.c
@@ -144,7 +144,7 @@ struct ipu_split_task {
struct ipu_task task;
struct ipu_task_entry *parent_task;
struct task_struct *thread;
- bool could_finish;
+ volatile bool could_finish;
wait_queue_head_t waitq;
int ret;
@@ -944,7 +944,7 @@ static int split_task_thread(void *data)
wake_up_interruptible(&t->waitq);
- return 0;
+ do_exit(0);
}
static int create_split_task(
@@ -1176,7 +1176,6 @@ static int queue_split_task(struct ipu_task_entry *t)
} else {
for (i = 0; i < size; i++) {
wait_event_interruptible(sp_task[i].waitq, sp_task[i].could_finish);
- kthread_stop(sp_task[i].thread);
if (sp_task[i].ret < 0) {
ret = sp_task[i].ret;
dev_err(t->dev,