Module Name: src
Committed By: riastradh
Date: Sun Dec 19 12:41:07 UTC 2021
Modified Files:
src/sys/external/bsd/drm2/include/drm: drm_wait_netbsd.h
Log Message:
drm: Ensure DRM_*WAIT* never counts down from MAX_SCHEDULE_TIMEOUT.
This faux timeout means `wait forever'.
To generate a diff of this commit:
cvs rdiff -u -r1.17 -r1.18 \
src/sys/external/bsd/drm2/include/drm/drm_wait_netbsd.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/external/bsd/drm2/include/drm/drm_wait_netbsd.h
diff -u src/sys/external/bsd/drm2/include/drm/drm_wait_netbsd.h:1.17 src/sys/external/bsd/drm2/include/drm/drm_wait_netbsd.h:1.18
--- src/sys/external/bsd/drm2/include/drm/drm_wait_netbsd.h:1.17 Fri Jul 3 16:23:02 2020
+++ src/sys/external/bsd/drm2/include/drm/drm_wait_netbsd.h Sun Dec 19 12:41:07 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: drm_wait_netbsd.h,v 1.17 2020/07/03 16:23:02 maxv Exp $ */
+/* $NetBSD: drm_wait_netbsd.h,v 1.18 2021/12/19 12:41:07 riastradh Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -41,6 +41,7 @@
#include <linux/mutex.h>
#include <linux/spinlock.h>
+#include <linux/sched.h>
typedef kcondvar_t drm_waitqueue_t;
@@ -144,7 +145,9 @@ DRM_SPIN_WAKEUP_ALL(drm_waitqueue_t *q,
/* XXX errno NetBSD->Linux */ \
(RET) = -cv_timedwait_sig((Q), &(INTERLOCK)->sl_lock, 1); \
_dswo_end = getticks(); \
- if (_dswo_end - _dswo_start < _dswo_ticks) \
+ if (_dswo_ticks == MAX_SCHEDULE_TIMEOUT) \
+ /* nothing, never time out */; \
+ else if (_dswo_end - _dswo_start < _dswo_ticks) \
_dswo_ticks -= _dswo_end - _dswo_start; \
else \
_dswo_ticks = 0; \
@@ -244,7 +247,9 @@ DRM_SPIN_WAKEUP_ALL(drm_waitqueue_t *q,
(RET) = -WAIT((Q), &(INTERLOCK)->mtx_lock, \
MIN(_dtwu_ticks, INT_MAX/2)); \
_dtwu_end = getticks(); \
- if ((_dtwu_end - _dtwu_start) < _dtwu_ticks) \
+ if (_dtwu_ticks == MAX_SCHEDULE_TIMEOUT) \
+ /* nothing, never time out */; \
+ else if ((_dtwu_end - _dtwu_start) < _dtwu_ticks) \
_dtwu_ticks -= _dtwu_end - _dtwu_start; \
else \
_dtwu_ticks = 0; \
@@ -319,7 +324,9 @@ DRM_SPIN_WAKEUP_ALL(drm_waitqueue_t *q,
(RET) = -WAIT((Q), &(INTERLOCK)->sl_lock, \
MIN(_dstwu_ticks, INT_MAX/2)); \
_dstwu_end = getticks(); \
- if ((_dstwu_end - _dstwu_start) < _dstwu_ticks) \
+ if (_dstwu_ticks == MAX_SCHEDULE_TIMEOUT) \
+ /* nothing, never time out */; \
+ else if ((_dstwu_end - _dstwu_start) < _dstwu_ticks) \
_dstwu_ticks -= _dstwu_end - _dstwu_start; \
else \
_dstwu_ticks = 0; \