Chris Wilson
e9681366ea
drm/i915: Do not store the error pointer for a failed userptr registration
If we fail to create our mmu notification, we report the error back and
currently store the error inside the i915_mm_struct. This not only causes
subsequent registerations of the same mm to fail (an issue if the first
was interrupted by a signal and needed to be restarted) but also causes
us to eventually try and free the error pointer.
[ 73.419599] BUG: unable to handle kernel NULL pointer dereference at 000000000000004c
[ 73.419831] IP: [<ffffffff8114af33>] mmu_notifier_unregister+0x23/0x130
[ 73.420065] PGD 8650c067 PUD 870bb067 PMD 0
[ 73.420319] Oops: 0000 [#1] SMP DEBUG_PAGEALLOC
[ 73.420580] CPU: 0 PID: 42 Comm: kworker/0:1 Tainted: G W 3.17.0-rc6+ #1561
[ 73.420837] Hardware name: Intel Corporation SandyBridge Platform/LosLunas CRB, BIOS ASNBCPT1.86C.0075.P00.1106281639 06/28/2011
[ 73.421405] Workqueue: events __i915_mm_struct_free__worker
[ 73.421724] task: ffff880088a81220 ti: ffff880088168000 task.ti: ffff880088168000
[ 73.422051] RIP: 0010:[<ffffffff8114af33>] [<ffffffff8114af33>] mmu_notifier_unregister+0x23/0x130
[ 73.422410] RSP: 0018:ffff88008816bd50 EFLAGS: 00010286
[ 73.422765] RAX: 0000000000000003 RBX: ffff880086485400 RCX: 0000000000000000
[ 73.423137] RDX: ffff88016d80ee90 RSI: ffff880086485400 RDI: 0000000000000044
[ 73.423513] RBP: ffff88008816bd70 R08: 0000000000000001 R09: 0000000000000000
[ 73.423895] R10: 0000000000000320 R11: 0000000000000001 R12: 0000000000000044
[ 73.424282] R13: ffff880166e5f008 R14: ffff88016d815200 R15: ffff880166e5f040
[ 73.424682] FS: 0000000000000000(0000) GS:ffff88016d800000(0000) knlGS:0000000000000000
[ 73.425099] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 73.425537] CR2: 000000000000004c CR3: 0000000087f5f000 CR4: 00000000000407f0
[ 73.426157] Stack:
[ 73.426597] ffff880088a81248 ffff880166e5f038 fffffffffffffffc ffff880166e5f008
[ 73.427096] ffff88008816bd98 ffffffff814a75f2 ffff880166e5f038 ffff8800880f8a28
[ 73.427603] ffff88016d812ac0 ffff88008816be00 ffffffff8106321a ffffffff810631af
[ 73.428119] Call Trace:
[ 73.428606] [<ffffffff814a75f2>] __i915_mm_struct_free__worker+0x42/0x80
[ 73.429116] [<ffffffff8106321a>] process_one_work+0x1ba/0x610
[ 73.429632] [<ffffffff810631af>] ? process_one_work+0x14f/0x610
[ 73.430153] [<ffffffff810636db>] worker_thread+0x6b/0x4a0
[ 73.430671] [<ffffffff8108d67d>] ? trace_hardirqs_on+0xd/0x10
[ 73.431501] [<ffffffff81063670>] ? process_one_work+0x610/0x610
[ 73.432030] [<ffffffff8106a206>] kthread+0xf6/0x110
[ 73.432561] [<ffffffff8106a110>] ? __kthread_parkme+0x80/0x80
[ 73.433100] [<ffffffff8169c22c>] ret_from_fork+0x7c/0xb0
[ 73.433644] [<ffffffff8106a110>] ? __kthread_parkme+0x80/0x80
[ 73.434194] Code: 0f 1f 84 00 00 00 00 00 66 66 66 66 90 8b 46 4c 85 c0 0f 8e 10 01 00 00 55 48 89 e5 41 55 41 54 53 48 89 f3 49 89 fc 48 83 ec 08 <48> 83 7f 08 00 0f 84 b1 00 00 00 48 c7 c7 40 e6 ac 82 e8 26 65
[ 73.435942] RIP [<ffffffff8114af33>] mmu_notifier_unregister+0x23/0x130
[ 73.437017] RSP <ffff88008816bd50>
[ 73.437704] CR2: 000000000000004c
Fixes regression from commit ad46cb533d
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date: Thu Aug 7 14:20:40 2014 +0100
drm/i915: Prevent recursive deadlock on releasing a busy userptr
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=84207
Testcase: igt/gem_render_copy_redux
Testcase: igt/gem_userptr_blits/create-destroy-sync
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Jacek Danecki <jacek.danecki@intel.com>
Cc: "Gong, Zhipeng" <zhipeng.gong@intel.com>
Cc: Jacek Danecki <jacek.danecki@intel.com>
Cc: "Ursulin, Tvrtko" <tvrtko.ursulin@intel.com>
Cc: stable@vger.kernel.org
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
2014-09-29 15:19:59 +02:00
..
2014-09-11 15:09:30 +02:00
2014-09-06 11:27:15 +09:00
2014-08-13 18:27:40 -06:00
2014-08-31 13:23:45 +01:00
2014-08-25 15:39:23 -04:00
2014-09-13 09:39:55 -07:00
2014-07-31 01:07:28 +02:00
2014-09-05 13:25:01 -07:00
2014-08-15 10:26:01 +05:30
2014-08-08 11:14:29 -07:00
2014-08-08 11:14:29 -07:00
2014-07-23 10:18:07 -07:00
2014-09-08 00:02:58 +02:00
2014-08-27 15:40:45 +01:00
2014-08-14 18:10:33 -06:00
2014-07-23 00:51:30 +02:00
2014-09-11 10:54:25 +05:30
2014-08-28 11:59:09 +05:30
2014-08-15 17:56:45 -06:00
2014-07-23 10:22:35 +09:00
2014-08-06 09:38:14 -07:00
2014-08-22 08:45:40 +01:00
2014-08-29 14:31:43 +02:00
2014-09-29 15:19:59 +02:00
2014-08-27 09:38:06 -07:00
2014-08-06 20:06:14 -07:00
2014-08-04 17:32:24 -07:00
2014-08-28 11:18:47 -07:00
2014-07-29 11:46:28 +03:00
2014-09-04 19:59:42 +02:00
2014-08-05 21:16:46 -07:00
2014-08-15 17:06:40 -04:00
2014-08-04 18:36:12 -07:00
2014-08-29 20:13:00 -07:00
2014-09-11 10:08:36 -07:00
2014-09-05 16:01:46 +02:00
2014-09-03 12:08:10 +00:00
2014-08-22 11:31:30 -07:00
2014-09-02 10:02:13 -07:00
2014-08-06 18:01:19 -07:00
2014-08-07 17:23:16 -07:00
2014-07-29 01:57:25 -07:00
2014-09-10 11:20:47 -04:00
2014-08-08 15:57:28 -07:00
2014-07-29 19:26:30 -05:00
2014-07-25 17:16:58 -04:00
2014-08-28 15:57:55 +01:00
2014-09-08 14:38:14 -07:00
2014-08-14 18:10:33 -06:00
2014-09-06 12:12:09 -07:00
2014-09-07 16:11:10 -07:00
2014-07-23 01:14:41 +02:00
2014-09-14 00:10:38 -04:00
2014-08-16 09:03:58 +01:00
2014-08-27 14:35:04 +02:00
2014-08-08 15:57:25 -07:00
2014-09-03 08:45:48 -07:00
2014-08-07 08:50:34 -07:00
2014-08-28 11:17:43 +05:30
2014-09-10 14:25:51 +02:00
2014-09-03 10:45:12 -07:00
2014-07-30 00:23:09 +02:00
2014-08-08 11:14:29 -07:00
2014-09-03 01:29:00 +02:00
2014-08-12 12:15:14 -06:00
2014-08-18 10:58:43 +02:00
2014-08-12 12:15:14 -06:00
2014-08-07 17:17:39 -07:00
2014-08-29 16:28:16 -07:00
2014-09-08 08:27:00 -07:00
2014-08-05 18:57:18 -07:00
2014-08-29 11:21:49 -07:00
2014-08-22 12:28:16 +09:00
2014-08-31 13:46:19 +01:00
2014-08-25 15:39:22 -04:00
2014-09-16 11:38:04 +10:00
2014-08-06 20:10:32 -07:00
2014-07-22 10:13:00 +08:00
2014-08-26 14:54:48 -07:00
2014-09-08 16:33:56 -07:00
2014-09-11 15:08:14 -07:00
2014-09-08 16:03:21 -07:00
2014-08-08 10:39:16 -06:00
2014-09-16 11:38:04 +10:00
2014-07-27 21:07:15 +09:30
2014-08-08 15:57:30 -07:00
2014-08-07 08:47:00 -07:00
2014-09-11 16:52:29 -07:00
2014-08-04 17:32:24 -07:00
2014-08-04 18:34:04 -07:00