diff options
author | Quinn Jensen <quinn.jensen@freescale.com> | 2007-10-24 21:20:56 -0600 |
---|---|---|
committer | Quinn Jensen <quinn.jensen@freescale.com> | 2007-10-24 21:20:56 -0600 |
commit | 331e051a04d3d1a5195566698aa3f384f289f80f (patch) | |
tree | b24b86ffe5aa30cd143db2fb9ee7cd096ec0497b /drivers/mxc/vpu | |
parent | ab0623cb532304b507552f4004e7492de531e816 (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.c | 9 |
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; |