From: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
To: Chris Wilson <chris@chris-wilson.co.uk>, intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH] drm/i915: Prevent recursive deadlock on releasing a busy userptr
Date: Mon, 01 Sep 2014 14:23:17 +0100 [thread overview]
Message-ID: <54047345.1020201@linux.intel.com> (raw)
In-Reply-To: <1407417640-8493-1-git-send-email-chris@chris-wilson.co.uk>
On 08/07/2014 02:20 PM, Chris Wilson wrote:
> During release of the GEM object we hold the struct_mutex. As the
> object may be holding onto the last reference for the task->mm,
> calling mmput() may trigger exit_mmap() which close the vma
> which will call drm_gem_vm_close() and attempt to reacquire
> the struct_mutex. In order to avoid that recursion, we have
> to defer the mmput() until after we drop the struct_mutex,
> i.e. we need to schedule a worker to do the clean up. A further issue
> spotted by Tvrtko was caused when we took a GTT mmapping of a userptr
> buffer object. In that case, we would never call mmput as the object
> would be cyclically referenced by the GTT mmapping and not freed upon
> process exit - keeping the entire process mm alive after the process
> task was reaped. The fix employed is to replace the mm_users/mmput()
> reference handling to mm_count/mmdrop() for the shared i915_mm_struct.
>
> INFO: task test_surfaces:1632 blocked for more than 120 seconds.
> Tainted: GF O 3.14.5+ #1
> "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
> test_surfaces D 0000000000000000 0 1632 1590 0x00000082
> ffff88014914baa8 0000000000000046 0000000000000000 ffff88014914a010
> 0000000000012c40 0000000000012c40 ffff8800a0058210 ffff88014784b010
> ffff88014914a010 ffff880037b1c820 ffff8800a0058210 ffff880037b1c824
> Call Trace:
> [<ffffffff81582499>] schedule+0x29/0x70
> [<ffffffff815825fe>] schedule_preempt_disabled+0xe/0x10
> [<ffffffff81583b93>] __mutex_lock_slowpath+0x183/0x220
> [<ffffffff81583c53>] mutex_lock+0x23/0x40
> [<ffffffffa005c2a3>] drm_gem_vm_close+0x33/0x70 [drm]
> [<ffffffff8115a483>] remove_vma+0x33/0x70
> [<ffffffff8115a5dc>] exit_mmap+0x11c/0x170
> [<ffffffff8104d6eb>] mmput+0x6b/0x100
> [<ffffffffa00f44b9>] i915_gem_userptr_release+0x89/0xc0 [i915]
> [<ffffffffa00e6706>] i915_gem_free_object+0x126/0x250 [i915]
> [<ffffffffa005c06a>] drm_gem_object_free+0x2a/0x40 [drm]
> [<ffffffffa005cc32>] drm_gem_object_handle_unreference_unlocked+0xe2/0x120 [drm]
> [<ffffffffa005ccd4>] drm_gem_object_release_handle+0x64/0x90 [drm]
> [<ffffffff8127ffeb>] idr_for_each+0xab/0x100
> [<ffffffffa005cc70>] ? drm_gem_object_handle_unreference_unlocked+0x120/0x120 [drm]
> [<ffffffff81583c46>] ? mutex_lock+0x16/0x40
> [<ffffffffa005c354>] drm_gem_release+0x24/0x40 [drm]
> [<ffffffffa005b82b>] drm_release+0x3fb/0x480 [drm]
> [<ffffffff8118d482>] __fput+0xb2/0x260
> [<ffffffff8118d6de>] ____fput+0xe/0x10
> [<ffffffff8106f27f>] task_work_run+0x8f/0xf0
> [<ffffffff81052228>] do_exit+0x1a8/0x480
> [<ffffffff81052551>] do_group_exit+0x51/0xc0
> [<ffffffff810525d7>] SyS_exit_group+0x17/0x20
> [<ffffffff8158e092>] system_call_fastpath+0x16/0x1b
>
> v2: Incorporate feedback from Tvrtko and remove the unnessary mm
> referencing when creating the i915_mm_struct and improve some of the
> function names and comments.
[snip]
I reviewed this some weeks back and did not spot any issues.
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Thanks,
Tvrtko
next prev parent reply other threads:[~2014-09-01 13:23 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-07 13:20 [PATCH] drm/i915: Prevent recursive deadlock on releasing a busy userptr Chris Wilson
2014-09-01 13:23 ` Tvrtko Ursulin [this message]
2014-09-02 9:35 ` Daniel Vetter
2014-09-02 9:38 ` Chris Wilson
2014-09-02 12:48 ` Jani Nikula
2014-09-03 12:22 ` Jani Nikula
-- strict thread matches above, loose matches on Subject: below --
2014-09-02 7:21 Chris Wilson
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=54047345.1020201@linux.intel.com \
--to=tvrtko.ursulin@linux.intel.com \
--cc=chris@chris-wilson.co.uk \
--cc=intel-gfx@lists.freedesktop.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox