Module Name:    src
Committed By:   riastradh
Date:           Sat May 29 08:45:38 UTC 2021

Modified Files:
        src/sys/external/bsd/drm2/dist/drm/i915: i915_drv.h

Log Message:
i915drmkms: Fix LOCKDEBUG panic and potential deadlock.

This path is taken with a spin lock held, and possibly even in
interrupt context, where taking vmobjlock is not kosher, but we are
guaranteed to have the queue populated and unchanging.

XXX pullup-9


To generate a diff of this commit:
cvs rdiff -u -r1.32 -r1.33 src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.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/dist/drm/i915/i915_drv.h
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.h:1.32 src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.h:1.33
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.h:1.32	Sun Feb 23 15:46:40 2020
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.h	Sat May 29 08:45:38 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_drv.h,v 1.32 2020/02/23 15:46:40 ad Exp $	*/
+/*	$NetBSD: i915_drv.h,v 1.33 2021/05/29 08:45:38 riastradh Exp $	*/
 
 /* i915_drv.h -- Private header for the I915 driver -*- linux-c -*-
  */
@@ -3021,9 +3021,10 @@ i915_gem_object_get_page(struct drm_i915
 		 * lock to prevent them from disappearing.
 		 */
 		KASSERT(obj->pages != NULL);
-		rw_enter(obj->base.filp->vmobjlock, RW_WRITER);
-		page = uvm_pagelookup(obj->base.filp, ptoa(n));
-		rw_exit(obj->base.filp->vmobjlock);
+		TAILQ_FOREACH(page, &obj->pageq, pageq.queue) {
+			if (n-- == 0)
+				break;
+		}
 	}
 	KASSERT(page != NULL);
 	return container_of(page, struct page, p_vmp);

Reply via email to