From: Mika Kuoppala <mika.kuoppala@linux.intel.com>
To: Chris Wilson <chris@chris-wilson.co.uk>, intel-gfx@lists.freedesktop.org
Cc: matthew.auld@intel.com
Subject: Re: [PATCH 2/3] drm/i915/gtt: Defer the free for alloc error paths
Date: Thu, 04 Jul 2019 13:14:26 +0300 [thread overview]
Message-ID: <87o92a2jjx.fsf@gaia.fi.intel.com> (raw)
In-Reply-To: <20190703171913.16585-3-chris@chris-wilson.co.uk>
Chris Wilson <chris@chris-wilson.co.uk> writes:
> If we hit an error while allocating the page tables, we have to unwind
> the incomplete updates, and wish to free the unused pd. However, we are
> not allowed to be hoding the spinlock at that point, and so must use the
> later free to defer it until after we drop the lock.
>
> <3> [414.363795] BUG: sleeping function called from invalid context at drivers/gpu/drm/i915/i915_gem_gtt.c:472
> <3> [414.364167] in_atomic(): 1, irqs_disabled(): 0, pid: 3905, name: i915_selftest
> <4> [414.364406] 3 locks held by i915_selftest/3905:
> <4> [414.364408] #0: 0000000034fe8aa8 (&dev->mutex){....}, at: device_driver_attach+0x18/0x50
> <4> [414.364415] #1: 000000006bd8a560 (&dev->struct_mutex){+.+.}, at: igt_ctx_exec+0xb7/0x410 [i915]
> <4> [414.364476] #2: 000000003dfdc766 (&(&pd->lock)->rlock){+.+.}, at: gen8_ppgtt_alloc_pdp+0x448/0x540 [i915]
> <3> [414.364529] Preemption disabled at:
> <4> [414.364530] [<0000000000000000>] 0x0
> <4> [414.364696] CPU: 0 PID: 3905 Comm: i915_selftest Tainted: G U 5.2.0-rc7-CI-CI_DRM_6403+ #1
> <4> [414.364698] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.10.1-0-g8891697-prebuilt.qemu-project.org 04/01/2014
> <4> [414.364699] Call Trace:
> <4> [414.364704] dump_stack+0x67/0x9b
> <4> [414.364708] ___might_sleep+0x167/0x250
> <4> [414.364777] vm_free_page+0x24/0xc0 [i915]
> <4> [414.364852] free_pd+0xf/0x20 [i915]
> <4> [414.364897] gen8_ppgtt_alloc_pdp+0x489/0x540 [i915]
> <4> [414.364946] gen8_ppgtt_alloc_4lvl+0x8e/0x2e0 [i915]
> <4> [414.364992] ppgtt_bind_vma+0x2e/0x60 [i915]
> <4> [414.365039] i915_vma_bind+0xe8/0x2c0 [i915]
> <4> [414.365088] __i915_vma_do_pin+0xa1/0xd20 [i915]
>
> Fixes: 1d1b5490b91c ("drm/i915/gtt: Replace struct_mutex serialisation for allocation")
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Matthew Auld <matthew.auld@intel.com>
> Cc: Mika Kuoppala <mika.kuoppala@intel.com>
From another thread,
Reviewed-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
> ---
> drivers/gpu/drm/i915/i915_gem_gtt.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
> index 9e76347e039e..1065753e86fb 100644
> --- a/drivers/gpu/drm/i915/i915_gem_gtt.c
> +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
> @@ -1489,7 +1489,8 @@ static int gen8_ppgtt_alloc_pdp(struct i915_address_space *vm,
> gen8_ppgtt_set_pdpe(pdp, vm->scratch_pd, pdpe);
> GEM_BUG_ON(!atomic_read(&pdp->used));
> atomic_dec(&pdp->used);
> - free_pd(vm, pd);
> + GEM_BUG_ON(alloc);
> + alloc = pd; /* defer the free to after the lock */
> }
> spin_unlock(&pdp->lock);
> unwind:
> @@ -1558,7 +1559,8 @@ static int gen8_ppgtt_alloc_4lvl(struct i915_address_space *vm,
> spin_lock(&pml4->lock);
> if (atomic_dec_and_test(&pdp->used)) {
> gen8_ppgtt_set_pml4e(pml4, vm->scratch_pdp, pml4e);
> - free_pd(vm, pdp);
> + GEM_BUG_ON(alloc);
> + alloc = pdp; /* defer the free until after the lock */
> }
> spin_unlock(&pml4->lock);
> unwind:
> --
> 2.20.1
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2019-07-04 10:14 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-03 17:19 Just a selection of some fine brown paper bags Chris Wilson
2019-07-03 17:19 ` [PATCH 1/3] drm/i915/gem: Defer obj->base.resv fini until RCU callback Chris Wilson
2019-07-03 18:06 ` [PATCH v2] " Chris Wilson
2019-07-04 13:53 ` [PATCH 1/3] " Mika Kuoppala
2019-07-04 14:02 ` Chris Wilson
2019-07-04 14:18 ` Mika Kuoppala
2019-07-04 14:22 ` Chris Wilson
2019-07-03 17:19 ` [PATCH 2/3] drm/i915/gtt: Defer the free for alloc error paths Chris Wilson
2019-07-04 10:14 ` Mika Kuoppala [this message]
2019-07-04 10:28 ` Matthew Auld
2019-07-04 10:40 ` Chris Wilson
2019-07-04 10:58 ` Mika Kuoppala
2019-07-04 11:02 ` Chris Wilson
2019-07-04 11:40 ` Mika Kuoppala
2019-07-03 17:19 ` [PATCH 3/3] drm/i915: Flush the workqueue before draining Chris Wilson
2019-07-04 10:22 ` Mika Kuoppala
2019-07-04 10:26 ` Chris Wilson
2019-07-04 12:39 ` Mika Kuoppala
2019-07-03 19:36 ` ✗ Fi.CI.CHECKPATCH: warning for series starting with [v2] drm/i915/gem: Defer obj->base.resv fini until RCU callback (rev2) Patchwork
2019-07-03 19:53 ` ✓ Fi.CI.BAT: success " Patchwork
2019-07-05 0:35 ` ✓ Fi.CI.IGT: " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87o92a2jjx.fsf@gaia.fi.intel.com \
--to=mika.kuoppala@linux.intel.com \
--cc=chris@chris-wilson.co.uk \
--cc=intel-gfx@lists.freedesktop.org \
--cc=matthew.auld@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.