linux_dsm_epyc7002/drivers/gpu/drm/i915
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
..
dvo_ch7xxx.c drm/i915: Remove spurious semicolons 2014-04-09 21:54:33 +02:00
dvo_ch7017.c
dvo_ivch.c drm/i915: Remove spurious semicolons 2014-04-09 21:54:33 +02:00
dvo_ns2501.c drm/i915: Check pixel clock in ns2501 mode_valid hook 2014-09-03 11:05:21 +02:00
dvo_sil164.c drm/i915: Remove spurious semicolons 2014-04-09 21:54:33 +02:00
dvo_tfp410.c drm/i915: Remove spurious semicolons 2014-04-09 21:54:33 +02:00
dvo.h
i915_cmd_parser.c drm/i915: Fix up checks for aliasing ppgtt 2014-08-13 14:23:31 +02:00
i915_debugfs.c drm/i915: Objects on the unbound list may still have an active reference 2014-09-19 14:41:14 +02:00
i915_dma.c Merge tag 'drm-intel-next-2014-09-05' of git://anongit.freedesktop.org/drm-intel into drm-next 2014-09-16 16:02:09 +10:00
i915_drv.c drm/i915: Don't reinit hpd interrupts after gpu reset 2014-09-19 14:41:16 +02:00
i915_drv.h Revert "drm/i915/bdw: BDW Software Turbo" 2014-09-29 15:08:56 +02:00
i915_gem_context.c drm/i915/bdw: Apply workarounds in render ring init function 2014-09-03 11:04:42 +02:00
i915_gem_debug.c drm/i915: prefer struct drm_i915_private to drm_i915_private_t 2014-03-31 15:34:21 +02:00
i915_gem_dmabuf.c dma-buf: use reservation objects 2014-07-08 13:03:20 -07:00
i915_gem_evict.c drm/i915: fix another use-after-free in i915_gem_evict_everything 2014-09-19 14:41:16 +02:00
i915_gem_execbuffer.c drm/i915: Only track real ppgtt for a context 2014-08-13 14:23:33 +02:00
i915_gem_gtt.c drm/i915/bdw: Do not initialize PPGTT in the legacy way for execlists 2014-09-03 11:04:13 +02:00
i915_gem_gtt.h drm/i915: Rework GPU reset sequence to match driver load & thaw 2014-09-03 10:54:09 +02:00
i915_gem_render_state.c drm/i915/bdw: Render state init for Execlists 2014-09-03 11:04:52 +02:00
i915_gem_render_state.h drm/i915/bdw: Render state init for Execlists 2014-09-03 11:04:52 +02:00
i915_gem_stolen.c drm/i915: Extend BIOS stolen mem handling to all platform 2014-09-19 14:41:19 +02:00
i915_gem_tiling.c drm/i915/bdw: Let the memory controller do all the swizzling 2014-09-03 11:04:33 +02:00
i915_gem_userptr.c drm/i915: Do not store the error pointer for a failed userptr registration 2014-09-29 15:19:59 +02:00
i915_gem.c drm/i915: Match GTT space sanity checker with implementation 2014-09-19 14:41:18 +02:00
i915_gpu_error.c drm/i915: Differentiate between LLC or snooped for the user 2014-09-03 11:04:25 +02:00
i915_ioc32.c drm: Remove DRM_ARRAY_SIZE() for ARRAY_SIZE() 2014-06-10 09:36:17 +10:00
i915_irq.c Revert "drm/i915/bdw: BDW Software Turbo" 2014-09-29 15:08:56 +02:00
i915_params.c Merge tag 'drm-intel-next-2014-09-01' of git://anongit.freedesktop.org/drm-intel into drm-next 2014-09-03 08:30:48 +10:00
i915_reg.h Revert "drm/i915/bdw: BDW Software Turbo" 2014-09-29 15:08:56 +02:00
i915_suspend.c drm/i915: disable GT power saving early during system suspend 2014-05-22 21:53:27 +02:00
i915_sysfs.c drm/i915: Differentiate between LLC or snooped for the user 2014-09-03 11:04:25 +02:00
i915_trace_points.c
i915_trace.h drm/i915: s/intel_ring_buffer/intel_engine_cs 2014-05-22 23:01:05 +02:00
i915_ums.c
intel_acpi.c
intel_bios.c Merge tag 'drm-intel-next-2014-09-05' of git://anongit.freedesktop.org/drm-intel into drm-next 2014-09-16 16:02:09 +10:00
intel_bios.h drm/i915: Add support for Video Burst Mode for MIPI DSI 2014-08-08 17:43:45 +02:00
intel_crt.c drm/i915: Remove bogus __init annotation from DMI callbacks 2014-08-28 09:54:27 +03:00
intel_ddi.c drm/i915: Rewrite ABS_DIFF() in a safer manner 2014-09-04 15:08:53 +02:00
intel_display.c Revert "drm/i915/bdw: BDW Software Turbo" 2014-09-29 15:08:56 +02:00
intel_dp_mst.c drm/i915: fix build without fbdev. 2014-07-22 20:11:29 +10:00
intel_dp.c drm/i915: Use EIO instead of EAGAIN for sink CRC error. 2014-09-19 14:41:20 +02:00
intel_drv.h drm/i915: Check for a stalled page flip after each vblank 2014-09-05 09:29:16 +02:00
intel_dsi_cmd.c drm/i915: Align intel_dsi*.c files a bit 2014-08-08 17:43:45 +02:00
intel_dsi_cmd.h drm/i915: wait for all DSI FIFOs to be empty 2014-08-07 11:07:15 +02:00
intel_dsi_panel_vbt.c drm/i915: Add support for Video Burst Mode for MIPI DSI 2014-08-08 17:43:45 +02:00
intel_dsi_pll.c drm/i915: Align intel_dsi*.c files a bit 2014-08-08 17:43:45 +02:00
intel_dsi.c drm/i915: Align intel_dsi*.c files a bit 2014-08-08 17:43:45 +02:00
intel_dsi.h drm/i915: Add support for Video Burst Mode for MIPI DSI 2014-08-08 17:43:45 +02:00
intel_dvo.c drm/i915: Don't call DVO mode_set hook on DPMS changes 2014-09-03 11:05:14 +02:00
intel_fbdev.c drm/i915: make fbdev initialization asynchronous v2 2014-09-03 11:05:01 +02:00
intel_hdmi.c drm/i915/hdmi, dp: Do not dereference the encoder in the connector destroy 2014-09-19 14:41:12 +02:00
intel_i2c.c drm/i915: Kill duplicated cdclk readout code from i2c 2014-07-07 11:27:52 +02:00
intel_lrc.c drm/i915: add cherryview specfic forcewake in execlists_elsp_write 2014-09-19 14:41:17 +02:00
intel_lrc.h drm/i915/bdw: Render state init for Execlists 2014-09-03 11:04:52 +02:00
intel_lvds.c Linux 3.17-rc5 2014-09-16 11:38:04 +10:00
intel_modes.c
intel_opregion.c Linux 3.16 2014-08-05 09:04:59 +10:00
intel_overlay.c drm/i915: use helpers 2014-07-18 14:25:15 +10:00
intel_panel.c Merge tag 'drm-intel-next-2014-09-05' of git://anongit.freedesktop.org/drm-intel into drm-next 2014-09-16 16:02:09 +10:00
intel_pm.c Revert "drm/i915/bdw: BDW Software Turbo" 2014-09-29 15:08:56 +02:00
intel_renderstate_gen6.c drm/i915: Simplify processing of the golden render context state 2014-06-16 19:53:09 +02:00
intel_renderstate_gen7.c drm/i915: Simplify processing of the golden render context state 2014-06-16 19:53:09 +02:00
intel_renderstate_gen8.c drm/i915: Simplify processing of the golden render context state 2014-06-16 19:53:09 +02:00
intel_renderstate.h drm/i915/bdw: Render state init for Execlists 2014-09-03 11:04:52 +02:00
intel_ringbuffer.c drm/i915/bdw: Cleanup pre prod workarounds 2014-09-24 10:38:41 +02:00
intel_ringbuffer.h drm/i915/bdw: Apply workarounds in render ring init function 2014-09-03 11:04:42 +02:00
intel_sdvo_regs.h
intel_sdvo.c Merge tag 'topic/core-stuff-2014-06-30' of git://anongit.freedesktop.org/drm-intel into drm-next 2014-07-08 11:04:35 +10:00
intel_sideband.c drm/i915: vlv/chv: fix DSI sideband register accessing 2014-05-19 17:50:14 +02:00
intel_sprite.c drm/i915: init sprites with univeral plane init function 2014-09-03 15:43:47 +02:00
intel_tv.c drm/i915: Wait for vblank before enabling the TV encoder 2014-09-08 18:07:08 +03:00
intel_uncore.c drm/i915: Use IS_BROADWELL() instead of IS_GEN8() in forcewake code 2014-09-03 15:14:32 +02:00
Kconfig drm/i915: Ditch UMS config option 2014-07-24 10:59:53 +02:00
Makefile drm/i915/bdw: New source and header file for LRs, LRCs and Execlists 2014-08-11 16:00:07 +02:00