summaryrefslogtreecommitdiff
path: root/drivers/mxc/vpu
diff options
context:
space:
mode:
authorQuinn Jensen <quinn.jensen@freescale.com>2007-10-24 21:20:56 -0600
committerQuinn Jensen <quinn.jensen@freescale.com>2007-10-24 21:20:56 -0600
commit331e051a04d3d1a5195566698aa3f384f289f80f (patch)
treeb24b86ffe5aa30cd143db2fb9ee7cd096ec0497b /drivers/mxc/vpu
parentab0623cb532304b507552f4004e7492de531e816 (diff)
CR 34440439: Under heavy load v4l2 ioctls sometimes return error (EINTR
Patch for CR 34440439: Under heavy load v4l2 ioctls sometimes return error (EINTR or ETIME). This patch fixes vpu v4l2 interrupt code to be more robust. Applies to linux 2.6.22 kernel for MX platforms. Ported to 2.6.22 by Ross Wille http://www.bitshrine.org/gpp/linux-2.6.22-mx-CR-34440439-Under-heavy-load-v4l2-ioctls-s.patch
Diffstat (limited to 'drivers/mxc/vpu')
-rw-r--r--drivers/mxc/vpu/mxc_vpu.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/mxc/vpu/mxc_vpu.c b/drivers/mxc/vpu/mxc_vpu.c
index be9e443f83a8..d78b4700f531 100644
--- a/drivers/mxc/vpu/mxc_vpu.c
+++ b/drivers/mxc/vpu/mxc_vpu.c
@@ -66,6 +66,7 @@ static struct clk *vpu_clk;
/* implement the blocking ioctl */
static int codec_done = 0;
static wait_queue_head_t vpu_queue;
+static int wait_intr_cnt = 0;
/*!
* Private function to free buffers
@@ -257,10 +258,14 @@ static int vpu_ioctl(struct inode *inode, struct file *filp, u_int cmd,
msecs_to_jiffies(timeout))) {
printk(KERN_WARNING "VPU blocking: timeout.\n");
ret = -ETIME;
+ return ret;
} else if (signal_pending(current)) {
- printk(KERN_WARNING
- "VPU interrupt received.\n");
+ if (wait_intr_cnt == 0) {
+ printk(KERN_WARNING "VPU interrupt received.\n");
+ }
+ wait_intr_cnt++;
ret = -ERESTARTSYS;
+ return ret;
}
codec_done = 0;