mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
msm_fb : Add timeout while waiting for vsync event
Avoid eternal wait for vsync event when client tries to read the corresponding sysfs entry. This will avoid hangs when client tries to read in corner cases where the Timing Generator or the clock or IRQ gets disabled. CRs-fixed: 406752 Change-Id: I773687220b868823a9e4bfdae74361ee6487c5c6 Signed-off-by: Pradeep Jilagam <pjilagam@codeaurora.org> Signed-off-by: Siddhartha Agrawal <agrawals@codeaurora.org>
This commit is contained in:
parent
7fa332360f
commit
eb35bd3bc5
4 changed files with 25 additions and 12 deletions
|
@ -669,9 +669,12 @@ static ssize_t vsync_show_event(struct device *dev,
|
|||
vctrl->wait_vsync_cnt++;
|
||||
spin_unlock_irqrestore(&vctrl->spin_lock, flags);
|
||||
|
||||
ret = wait_for_completion_interruptible(&vctrl->vsync_comp);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
ret = wait_for_completion_interruptible_timeout(&vctrl->vsync_comp,
|
||||
msecs_to_jiffies(VSYNC_PERIOD * 4));
|
||||
if (ret <= 0) {
|
||||
vctrl->wait_vsync_cnt = 0;
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&vctrl->spin_lock, flags);
|
||||
vsync_tick = ktime_to_ns(vctrl->vsync_time);
|
||||
|
|
|
@ -395,9 +395,12 @@ static ssize_t vsync_show_event(struct device *dev,
|
|||
INIT_COMPLETION(vctrl->vsync_comp);
|
||||
vctrl->wait_vsync_cnt++;
|
||||
spin_unlock_irqrestore(&vctrl->spin_lock, flags);
|
||||
ret = wait_for_completion_interruptible(&vctrl->vsync_comp);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
ret = wait_for_completion_interruptible_timeout(&vctrl->vsync_comp,
|
||||
msecs_to_jiffies(VSYNC_PERIOD * 4));
|
||||
if (ret <= 0) {
|
||||
vctrl->wait_vsync_cnt = 0;
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&vctrl->spin_lock, flags);
|
||||
vsync_tick = ktime_to_ns(vctrl->vsync_time);
|
||||
|
|
|
@ -337,9 +337,13 @@ static ssize_t vsync_show_event(struct device *dev,
|
|||
INIT_COMPLETION(vctrl->vsync_comp);
|
||||
vctrl->wait_vsync_cnt++;
|
||||
spin_unlock_irqrestore(&vctrl->spin_lock, flags);
|
||||
ret = wait_for_completion_interruptible(&vctrl->vsync_comp);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = wait_for_completion_interruptible_timeout(&vctrl->vsync_comp,
|
||||
msecs_to_jiffies(VSYNC_PERIOD * 4));
|
||||
if (ret <= 0) {
|
||||
vctrl->wait_vsync_cnt = 0;
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&vctrl->spin_lock, flags);
|
||||
vsync_tick = ktime_to_ns(vctrl->vsync_time);
|
||||
|
|
|
@ -380,9 +380,12 @@ static ssize_t vsync_show_event(struct device *dev,
|
|||
INIT_COMPLETION(vctrl->vsync_comp);
|
||||
vctrl->wait_vsync_cnt++;
|
||||
spin_unlock_irqrestore(&vctrl->spin_lock, flags);
|
||||
ret = wait_for_completion_interruptible(&vctrl->vsync_comp);
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = wait_for_completion_interruptible_timeout(&vctrl->vsync_comp,
|
||||
msecs_to_jiffies(VSYNC_PERIOD * 4));
|
||||
if (ret <= 0) {
|
||||
vctrl->wait_vsync_cnt = 0;
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&vctrl->spin_lock, flags);
|
||||
vsync_tick = ktime_to_ns(vctrl->vsync_time);
|
||||
|
|
Loading…
Reference in a new issue