Module Name:    src
Committed By:   riastradh
Date:           Sun Dec 19 11:56:39 UTC 2021

Modified Files:
        src/sys/external/bsd/drm2/dist/drm/i915: i915_sw_fence.c
        src/sys/external/bsd/drm2/dist/drm/i915/display: intel_display.c

Log Message:
i915: Remove waiter after done, not only after wakeup.

Might be done without any wakeup, in which case the waiter would
remain on the list (even as it becomes stack garbage!).


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 \
    src/sys/external/bsd/drm2/dist/drm/i915/i915_sw_fence.c
cvs rdiff -u -r1.7 -r1.8 \
    src/sys/external/bsd/drm2/dist/drm/i915/display/intel_display.c

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/dist/drm/i915/i915_sw_fence.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_sw_fence.c:1.4 src/sys/external/bsd/drm2/dist/drm/i915/i915_sw_fence.c:1.5
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_sw_fence.c:1.4	Sun Dec 19 11:54:57 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_sw_fence.c	Sun Dec 19 11:56:38 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_sw_fence.c,v 1.4 2021/12/19 11:54:57 riastradh Exp $	*/
+/*	$NetBSD: i915_sw_fence.c,v 1.5 2021/12/19 11:56:38 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -7,7 +7,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i915_sw_fence.c,v 1.4 2021/12/19 11:54:57 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_sw_fence.c,v 1.5 2021/12/19 11:56:38 riastradh Exp $");
 
 #include <linux/slab.h>
 #include <linux/dma-fence.h>
@@ -172,8 +172,6 @@ autoremove_wake_function(struct i915_sw_
 	/* Caller presumably already completed the fence.  */
 	DRM_SPIN_WAKEUP_ALL(&sfw->wq, &sfw->fence->wait.lock);
 
-	list_del_init(&waiter->entry);
-
 	return 0;
 }
 
@@ -195,6 +193,7 @@ i915_sw_fence_wait(struct i915_sw_fence 
 	list_add_tail(&waiter.entry, &fence->wait.head);
 	DRM_SPIN_WAIT_NOINTR_UNTIL(ret, &sfw.wq, &fence->wait.lock,
 	    i915_sw_fence_done(fence));
+	list_del(&waiter.entry);
 	spin_unlock(&fence->wait.lock);
 
 	DRM_DESTROY_WAITQUEUE(&sfw.wq);

Index: src/sys/external/bsd/drm2/dist/drm/i915/display/intel_display.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/display/intel_display.c:1.7 src/sys/external/bsd/drm2/dist/drm/i915/display/intel_display.c:1.8
--- src/sys/external/bsd/drm2/dist/drm/i915/display/intel_display.c:1.7	Sun Dec 19 11:56:23 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_display.c	Sun Dec 19 11:56:38 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_display.c,v 1.7 2021/12/19 11:56:23 riastradh Exp $	*/
+/*	$NetBSD: intel_display.c,v 1.8 2021/12/19 11:56:38 riastradh Exp $	*/
 
 /*
  * Copyright © 2006-2007 Intel Corporation
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_display.c,v 1.7 2021/12/19 11:56:23 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_display.c,v 1.8 2021/12/19 11:56:38 riastradh Exp $");
 
 #include "intel_display.h"	/* for pipe_drmhack */
 
@@ -15285,8 +15285,6 @@ intel_atomic_commit_fence_wake(struct i9
 	    &dev_priv->atomic_commit_lock);
 	spin_unlock(&dev_priv->atomic_commit_lock);
 
-	list_del_init(&waiter->entry);
-
 	return 0;
 }
 
@@ -15310,6 +15308,10 @@ static void intel_atomic_commit_fence_wa
 	    (i915_sw_fence_done(&intel_state->commit_ready) ||
 		test_bit(I915_RESET_MODESET, &dev_priv->gt.reset.flags)));
 	spin_unlock(&dev_priv->atomic_commit_lock);
+
+	spin_lock(&intel_state->commit_ready.wait.lock);
+	list_del(&waiter.entry);
+	spin_unlock(&intel_state->commit_ready.wait.lock);
 }
 
 static void intel_atomic_cleanup_work(struct work_struct *work)

Reply via email to