[Intel-gfx] [PATCH] drm/i915: Remove the vma from the object list upon close
Tvrtko Ursulin
tvrtko.ursulin at linux.intel.com
Mon Nov 7 11:06:01 UTC 2016
On 04/11/2016 16:12, Chris Wilson wrote:
> Currently, the vma is being unlink from the object lookup on destroy.
> However, we are meant to be decoupling it upon close so that the user
> cannot access the closed vma whilst it remains active on the GPU.
>
> [ 34.074858] kernel BUG at drivers/gpu/drm/i915/i915_gem_gtt.c:3561!
> [ 34.074875] invalid opcode: 0000 [#1] PREEMPT SMP
> [ 34.074888] Modules linked in: snd_hda_intel i915 x86_pkg_temp_thermal coretemp crct10dif_pclmul crc32_pclmul ghash_clmulni_intel lpc_ich mei_me mei snd_hda_codec_realtek snd_hda_codec_generic snd_hda_codec_hdmi snd_hda_codec snd_hwdep snd_hda_core i2c_designware_platform i2c_designware_core snd_pcm e1000e ptp pps_core sdhci_acpi sdhci mmc_core i2c_hid [last unloaded: i915]
> [ 34.075010] CPU: 1 PID: 6224 Comm: gem_close_race Tainted: G U 4.9.0-rc3-CI-CI_DRM_1800+ #1
> [ 34.075034] Hardware name: /NUC5i7RYB, BIOS RYBDWi35.86A.0355.2016.0224.1501 02/24/2016
> [ 34.075057] task: ffff8802459a8040 task.stack: ffffc90000524000
> [ 34.075074] RIP: 0010:[<ffffffffa0392cbc>] [<ffffffffa0392cbc>] i915_gem_obj_lookup_or_create_vma+0x8c/0xc0 [i915]
> [ 34.075118] RSP: 0018:ffffc90000527b68 EFLAGS: 00010202
> [ 34.075135] RAX: ffff8802426c5e40 RBX: 0000000000000000 RCX: ffff8802447fc2a8
> [ 34.075158] RDX: 0000000000000000 RSI: ffff8802447fc2a8 RDI: ffff880248a4a880
> [ 34.075181] RBP: ffffc90000527b88 R08: 0000000000000008 R09: 0000000000000000
> [ 34.075203] R10: 0000000000000001 R11: 0000000000000000 R12: ffff880248a4a880
> [ 34.075225] R13: ffff8802447fc2a8 R14: ffff880243e9afa8 R15: ffff880248a4a9c8
> [ 34.075248] FS: 00007f9b43e59740(0000) GS:ffff880256c80000(0000) knlGS:0000000000000000
> [ 34.075273] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [ 34.075292] CR2: 00007f9b43419140 CR3: 000000024455d000 CR4: 00000000003406e0
> [ 34.075314] Stack:
> [ 34.075323] 0000000000000000 ffffc90000527bd0 ffff880243cb8008 ffff880243e9afa8
> [ 34.075353] ffffc90000527c08 ffffffffa03874c7 ffffc90000527bb8 ffff880243e9afa8
> [ 34.075383] ffff880243e9afb0 ffffc90000527e10 ffff8802447fc2a8 ffff880243cb8040
> [ 34.075414] Call Trace:
> [ 34.075435] [<ffffffffa03874c7>] eb_lookup_vmas.isra.7+0x247/0x330 [i915]
> [ 34.075468] [<ffffffffa0388c34>] i915_gem_do_execbuffer.isra.15+0x604/0x1a10 [i915]
> [ 34.075507] [<ffffffffa039c957>] ? i915_gem_object_get_sg+0x347/0x380 [i915]
> [ 34.075532] [<ffffffff811a69ce>] ? __might_fault+0x3e/0x90
> [ 34.075562] [<ffffffffa038a430>] i915_gem_execbuffer2+0xc0/0x250 [i915]
> [ 34.075585] [<ffffffff81552926>] drm_ioctl+0x1f6/0x480
> [ 34.075604] [<ffffffff8100107a>] ? trace_hardirqs_on_thunk+0x1a/0x1c
> [ 34.075635] [<ffffffffa038a370>] ? i915_gem_execbuffer+0x330/0x330 [i915]
> [ 34.075658] [<ffffffff81202d2e>] do_vfs_ioctl+0x8e/0x690
> [ 34.075677] [<ffffffff8181582d>] ? _raw_spin_unlock_irqrestore+0x3d/0x60
> [ 34.075700] [<ffffffff810fcd51>] ? SyS_timer_settime+0x141/0x1e0
> [ 34.075721] [<ffffffff810d6de2>] ? trace_hardirqs_on_caller+0x122/0x1b0
> [ 34.075742] [<ffffffff8120336c>] SyS_ioctl+0x3c/0x70
> [ 34.075760] [<ffffffff8181602e>] entry_SYSCALL_64_fastpath+0x1c/0xb1
> [ 34.075781] Code: 44 a0 48 c7 c2 9a 7e 43 a0 be e0 0d 00 00 48 c7 c7 a0 45 44 a0 e8 55 b8 ce e0 48 85 db 74 a3 49 83 bd f8 03 00 00 00 74 99 0f 0b <0f> 0b 48 89 da 4c 89 ee 4c 89 e7 e8 04 a9 ff ff 48 89 da 49 89
> [ 34.075955] RIP [<ffffffffa0392cbc>] i915_gem_obj_lookup_or_create_vma+0x8c/0xc0 [i915]
> [ 34.075994] RSP <ffffc90000527b68>
>
> Testcase: igt/gem_close_race/basic-threads
> Fixes: db6c2b4151f2 ("drm/i915: Store the vma in an rbtree...")
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> ---
> drivers/gpu/drm/i915/i915_gem_gtt.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
> index 52999e51a946..c5e77e040627 100644
> --- a/drivers/gpu/drm/i915/i915_gem_gtt.c
> +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
> @@ -3403,7 +3403,6 @@ void i915_vma_destroy(struct i915_vma *vma)
> GEM_BUG_ON(!i915_vma_is_closed(vma));
> GEM_BUG_ON(vma->fence);
>
> - rb_erase(&vma->obj_node, &vma->obj->vma_tree);
> list_del(&vma->vm_link);
> if (!i915_vma_is_ggtt(vma))
> i915_ppgtt_put(i915_vm_to_ppgtt(vma->vm));
> @@ -3416,7 +3415,9 @@ void i915_vma_close(struct i915_vma *vma)
> GEM_BUG_ON(i915_vma_is_closed(vma));
> vma->flags |= I915_VMA_CLOSED;
>
> - list_del_init(&vma->obj_link);
> + list_del(&vma->obj_link);
> + rb_erase(&vma->obj_node, &vma->obj->vma_tree);
> +
> if (!i915_vma_is_active(vma) && !i915_vma_is_pinned(vma))
> WARN_ON(i915_vma_unbind(vma));
> }
>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
Regards,
Tvrtko
More information about the Intel-gfx
mailing list