drm/msm: fix timeout calculation

The 'timeout' value comes from userspace (CLOCK_MONOTONIC), but
converting this directly to jiffies doesn't take into account the
initial jiffies count at boot, which may differ from the base time
of CLOCK_MONOTONIC.

TODO: add ktime_delta_jiffies() when rebasing on 4.1 and use that
instead of ktime_sub/ktime_to_timespec/timespec_to_jiffies combo (as
suggested by Arnd)

v2: switch over from 'struct timespec' to ktime_t throughout, since
'struct timespec' will be deprecated (as suggested by Arnd)
v3: minor cosmetic tweaks

Cc: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Rob Clark <robdclark@gmail.com>
This commit is contained in:
Rob Clark
2015-05-11 11:50:03 -04:00
parent 865807d0a9
commit 56c2da8338
4 changed files with 21 additions and 16 deletions

View File

@@ -204,7 +204,7 @@ int msm_atomic_commit(struct drm_device *dev,
{
int nplanes = dev->mode_config.num_total_plane;
int ncrtcs = dev->mode_config.num_crtc;
struct timespec timeout;
ktime_t timeout;
struct msm_commit *c;
int i, ret;
@@ -281,7 +281,7 @@ int msm_atomic_commit(struct drm_device *dev,
return 0;
}
jiffies_to_timespec(jiffies + msecs_to_jiffies(1000), &timeout);
timeout = ktime_add_ms(ktime_get(), 1000);
ret = msm_wait_fence_interruptable(dev, c->fence, &timeout);
if (ret) {