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);