All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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 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.