diff options
| author | riastradh <riastradh@NetBSD.org> | 2021-12-19 12:36:31 +0000 |
|---|---|---|
| committer | riastradh <riastradh@NetBSD.org> | 2021-12-19 12:36:31 +0000 |
| commit | d3469f4c29f42a34f4eef445587da1c70aab09ff (patch) | |
| tree | c17eb36781b7e9634d334eeb3ba6b906ab0b9e79 /sys/external | |
| parent | 204d88724f2de12a187f06a8c6ae655117b2d72f (diff) | |
drm: Must hold event_lock around wait on event_queue.
We must not have hit this path before if it never crashed!
Diffstat (limited to 'sys/external')
| -rw-r--r-- | sys/external/bsd/drm2/dist/drm/drm_vblank.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/external/bsd/drm2/dist/drm/drm_vblank.c b/sys/external/bsd/drm2/dist/drm/drm_vblank.c index b371c985d2d..9ced81bd7ed 100644 --- a/sys/external/bsd/drm2/dist/drm/drm_vblank.c +++ b/sys/external/bsd/drm2/dist/drm/drm_vblank.c @@ -1,4 +1,4 @@ -/* $NetBSD: drm_vblank.c,v 1.14 2021/12/19 12:32:01 riastradh Exp $ */ +/* $NetBSD: drm_vblank.c,v 1.15 2021/12/19 12:36:31 riastradh Exp $ */ /* * drm_irq.c IRQ and vblank support @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: drm_vblank.c,v 1.14 2021/12/19 12:32:01 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: drm_vblank.c,v 1.15 2021/12/19 12:36:31 riastradh Exp $"); #include <linux/export.h> #include <linux/moduleparam.h> @@ -1787,10 +1787,12 @@ int drm_wait_vblank_ioctl(struct drm_device *dev, void *data, DRM_DEBUG("waiting on vblank count %"PRIu64", crtc %u\n", req_seq, pipe); + spin_lock(&dev->event_lock); DRM_SPIN_TIMED_WAIT_UNTIL(wait, &vblank->queue, &dev->event_lock, msecs_to_jiffies(3000), (vblank_passed(drm_vblank_count(dev, pipe), req_seq) || !READ_ONCE(vblank->enabled))); + spin_unlock(&dev->event_lock); switch (wait) { case 0: |
