diff options
author | Erik Kurzinger <ekurzinger@nvidia.com> | 2024-01-19 08:32:08 -0800 |
---|---|---|
committer | Simon Ser <contact@emersion.fr> | 2024-02-22 11:27:49 +0100 |
commit | d3f552488a7307e83d14be4bdf45a760f61f2886 (patch) | |
tree | 60be0712f1500f41d699d0a0e2208e3042c4c8bd | |
parent | 18226ba52159257d4c2f777a168cc09adb3c1ac0 (diff) | |
download | linux-d3f552488a7307e83d14be4bdf45a760f61f2886.tar.gz linux-d3f552488a7307e83d14be4bdf45a760f61f2886.tar.bz2 linux-d3f552488a7307e83d14be4bdf45a760f61f2886.zip |
drm/syncobj: call might_sleep before waiting for fence submission
If either the DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT or
DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE flags are passed to
drm_syncobj_array_wait_timeout, the function might sleep if the fence at
one of the given timeline points has not yet been submitted. Therefore,
we should call might_sleep in that case to catch potential bugs.
Signed-off-by: Erik Kurzinger <ekurzinger@nvidia.com>
Signed-off-by: Simon Ser <contact@emersion.fr>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Acked-by: Simon Ser <contact@emersion.fr>
Link: https://patchwork.freedesktop.org/patch/msgid/20240119163208.3723457-3-ekurzinger@nvidia.com
-rw-r--r-- | drivers/gpu/drm/drm_syncobj.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c index fada77f04a8c..4dd790367765 100644 --- a/drivers/gpu/drm/drm_syncobj.c +++ b/drivers/gpu/drm/drm_syncobj.c @@ -1044,8 +1044,10 @@ static signed long drm_syncobj_array_wait_timeout(struct drm_syncobj **syncobjs, uint32_t signaled_count, i; if (flags & (DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT | - DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE)) + DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE)) { + might_sleep(); lockdep_assert_none_held_once(); + } points = kmalloc_array(count, sizeof(*points), GFP_KERNEL); if (points == NULL) |