Skip to content

Commit

Permalink
drm/nouveau: base fence timeout on time of emission
Browse files Browse the repository at this point in the history
Wait loop can be interrupted by signal, so if signals are raised
periodically (e.g. SIGALRM) this loop may never finish. Use
emission time as a base for fence timeout.

Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
  • Loading branch information
Marcin Slusarz authored and Ben Skeggs committed May 24, 2012
1 parent d58086d commit 695b95b
Showing 1 changed file with 4 additions and 1 deletion.
5 changes: 4 additions & 1 deletion drivers/gpu/drm/nouveau/nouveau_fence.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ struct nouveau_fence {

uint32_t sequence;
bool signalled;
unsigned long timeout;

void (*work)(void *priv, bool signalled);
void *priv;
Expand Down Expand Up @@ -172,6 +173,7 @@ nouveau_fence_emit(struct nouveau_fence *fence)
}
OUT_RING (chan, fence->sequence);
FIRE_RING(chan);
fence->timeout = jiffies + 3 * DRM_HZ;

return 0;
}
Expand Down Expand Up @@ -230,7 +232,8 @@ __nouveau_fence_signalled(void *sync_obj, void *sync_arg)
int
__nouveau_fence_wait(void *sync_obj, void *sync_arg, bool lazy, bool intr)
{
unsigned long timeout = jiffies + (3 * DRM_HZ);
struct nouveau_fence *fence = nouveau_fence(sync_obj);
unsigned long timeout = fence->timeout;
unsigned long sleep_time = NSEC_PER_MSEC / 1000;
ktime_t t;
int ret = 0;
Expand Down

0 comments on commit 695b95b

Please sign in to comment.