Commit 1ffedc06 authored by Daniel Vetter's avatar Daniel Vetter

Revert "drm/i915: fix context/engine cleanup order"

This reverts commit 1b39a917.

Chris retracted his reviewed-by (which I failed to notice) and somehow
it blows up (I did it again!) as reported by Mika with the below
backtrace on module reload:

[   58.170374] IP: [<ffffffffa00e04d3>]
intel_logical_ring_cleanup+0x83/0x100 [i915]
...
[   58.170469] Call Trace:
[   58.170479]  [<ffffffffa00d0ed4>] i915_gem_cleanup_engines+0x34/0x60
[i915]
[   58.170493]  [<ffffffffa0154520>] i915_driver_unload+0x140/0x220
[i915]
[   58.170497]  [<ffffffff8154a4f4>] drm_dev_unregister+0x24/0xa0
[   58.170501]  [<ffffffff8154aace>] drm_put_dev+0x1e/0x60
[   58.170506]  [<ffffffffa00912a0>] i915_pci_remove+0x10/0x20 [i915]
[   58.170510]  [<ffffffff814766e4>] pci_device_remove+0x34/0xb0
[   58.170514]  [<ffffffff8156e7d5>] __device_release_driver+0x95/0x140
[   58.170518]  [<ffffffff8156e97c>] driver_detach+0xbc/0xc0
[   58.170521]  [<ffffffff8156d883>] bus_remove_driver+0x53/0xd0
[   58.170525]  [<ffffffff8156f3a7>] driver_unregister+0x27/0x50
[   58.170528]  [<ffffffff81475725>] pci_unregister_driver+0x25/0x70
[   58.170531]  [<ffffffff8154c274>] drm_pci_exit+0x74/0x90
[   58.170543]  [<ffffffffa0154cb0>] i915_exit+0x20/0x1aa [i915]
[   58.170548]  [<ffffffff8111846f>] SyS_delete_module+0x18f/0x1f0

Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Dave Gordon <david.s.gordon@intel.com>
Cc: Nick Hoath <nicholas.hoath@intel.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@intel.com>
parent e26e1b97
...@@ -444,8 +444,8 @@ static int i915_load_modeset_init(struct drm_device *dev) ...@@ -444,8 +444,8 @@ static int i915_load_modeset_init(struct drm_device *dev)
cleanup_gem: cleanup_gem:
mutex_lock(&dev->struct_mutex); mutex_lock(&dev->struct_mutex);
i915_gem_cleanup_ringbuffer(dev);
i915_gem_context_fini(dev); i915_gem_context_fini(dev);
i915_gem_cleanup_engines(dev);
mutex_unlock(&dev->struct_mutex); mutex_unlock(&dev->struct_mutex);
cleanup_irq: cleanup_irq:
intel_guc_ucode_fini(dev); intel_guc_ucode_fini(dev);
...@@ -1256,8 +1256,8 @@ int i915_driver_unload(struct drm_device *dev) ...@@ -1256,8 +1256,8 @@ int i915_driver_unload(struct drm_device *dev)
intel_guc_ucode_fini(dev); intel_guc_ucode_fini(dev);
mutex_lock(&dev->struct_mutex); mutex_lock(&dev->struct_mutex);
i915_gem_cleanup_ringbuffer(dev);
i915_gem_context_fini(dev); i915_gem_context_fini(dev);
i915_gem_cleanup_engines(dev);
mutex_unlock(&dev->struct_mutex); mutex_unlock(&dev->struct_mutex);
intel_fbc_cleanup_cfb(dev_priv); intel_fbc_cleanup_cfb(dev_priv);
......
...@@ -3058,7 +3058,7 @@ int i915_gem_init_rings(struct drm_device *dev); ...@@ -3058,7 +3058,7 @@ int i915_gem_init_rings(struct drm_device *dev);
int __must_check i915_gem_init_hw(struct drm_device *dev); int __must_check i915_gem_init_hw(struct drm_device *dev);
int i915_gem_l3_remap(struct drm_i915_gem_request *req, int slice); int i915_gem_l3_remap(struct drm_i915_gem_request *req, int slice);
void i915_gem_init_swizzling(struct drm_device *dev); void i915_gem_init_swizzling(struct drm_device *dev);
void i915_gem_cleanup_engines(struct drm_device *dev); void i915_gem_cleanup_ringbuffer(struct drm_device *dev);
int __must_check i915_gpu_idle(struct drm_device *dev); int __must_check i915_gpu_idle(struct drm_device *dev);
int __must_check i915_gem_suspend(struct drm_device *dev); int __must_check i915_gem_suspend(struct drm_device *dev);
void __i915_add_request(struct drm_i915_gem_request *req, void __i915_add_request(struct drm_i915_gem_request *req,
......
...@@ -4913,7 +4913,7 @@ i915_gem_init_hw(struct drm_device *dev) ...@@ -4913,7 +4913,7 @@ i915_gem_init_hw(struct drm_device *dev)
req = i915_gem_request_alloc(ring, NULL); req = i915_gem_request_alloc(ring, NULL);
if (IS_ERR(req)) { if (IS_ERR(req)) {
ret = PTR_ERR(req); ret = PTR_ERR(req);
i915_gem_cleanup_engines(dev); i915_gem_cleanup_ringbuffer(dev);
goto out; goto out;
} }
...@@ -4926,7 +4926,7 @@ i915_gem_init_hw(struct drm_device *dev) ...@@ -4926,7 +4926,7 @@ i915_gem_init_hw(struct drm_device *dev)
if (ret && ret != -EIO) { if (ret && ret != -EIO) {
DRM_ERROR("PPGTT enable ring #%d failed %d\n", i, ret); DRM_ERROR("PPGTT enable ring #%d failed %d\n", i, ret);
i915_gem_request_cancel(req); i915_gem_request_cancel(req);
i915_gem_cleanup_engines(dev); i915_gem_cleanup_ringbuffer(dev);
goto out; goto out;
} }
...@@ -4934,7 +4934,7 @@ i915_gem_init_hw(struct drm_device *dev) ...@@ -4934,7 +4934,7 @@ i915_gem_init_hw(struct drm_device *dev)
if (ret && ret != -EIO) { if (ret && ret != -EIO) {
DRM_ERROR("Context enable ring #%d failed %d\n", i, ret); DRM_ERROR("Context enable ring #%d failed %d\n", i, ret);
i915_gem_request_cancel(req); i915_gem_request_cancel(req);
i915_gem_cleanup_engines(dev); i915_gem_cleanup_ringbuffer(dev);
goto out; goto out;
} }
...@@ -5009,7 +5009,7 @@ int i915_gem_init(struct drm_device *dev) ...@@ -5009,7 +5009,7 @@ int i915_gem_init(struct drm_device *dev)
} }
void void
i915_gem_cleanup_engines(struct drm_device *dev) i915_gem_cleanup_ringbuffer(struct drm_device *dev)
{ {
struct drm_i915_private *dev_priv = dev->dev_private; struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_engine_cs *ring; struct intel_engine_cs *ring;
...@@ -5018,14 +5018,13 @@ i915_gem_cleanup_engines(struct drm_device *dev) ...@@ -5018,14 +5018,13 @@ i915_gem_cleanup_engines(struct drm_device *dev)
for_each_ring(ring, dev_priv, i) for_each_ring(ring, dev_priv, i)
dev_priv->gt.cleanup_ring(ring); dev_priv->gt.cleanup_ring(ring);
if (i915.enable_execlists) { if (i915.enable_execlists)
/* /*
* Neither the BIOS, ourselves or any other kernel * Neither the BIOS, ourselves or any other kernel
* expects the system to be in execlists mode on startup, * expects the system to be in execlists mode on startup,
* so we need to reset the GPU back to legacy mode. * so we need to reset the GPU back to legacy mode.
*/ */
intel_gpu_reset(dev); intel_gpu_reset(dev);
}
} }
static void static void
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment