]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/commitdiff
drm/i915: Mark GEM wedged right after marking device unplugged
authorJanusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
Sat, 6 Apr 2019 10:40:34 +0000 (11:40 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Sat, 6 Apr 2019 11:42:27 +0000 (12:42 +0100)
As soon as a device is considered unplugged, not only prevent pending
users from accessing the device structures but also cancel all their
pending requests so all consumed resources can be cleaned up as soon
as possible.

Suggested-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20190406104034.31380-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/i915_drv.c
drivers/gpu/drm/i915/i915_drv.h

index 0bbf3f5db5fc7a465a0d2ecbefe44397326e6109..c695b3a4deae9bcdfbe6e3503b192ab7422ee025 100644 (file)
@@ -1907,6 +1907,13 @@ void i915_driver_unload(struct drm_device *dev)
 
        i915_driver_unregister(dev_priv);
 
+       /*
+        * After unregistering the device to prevent any new users, cancel
+        * all in-flight requests so that we can quickly unbind the active
+        * resources.
+        */
+       i915_gem_set_wedged(dev_priv);
+
        /* Flush any external code that still may be under the RCU lock */
        synchronize_rcu();
 
index 4af815c3c02d3131a237cfa22c10213e7a580413..b9bedfa9652dc71d3f8572455226a01e3957dcc1 100644 (file)
@@ -2917,6 +2917,7 @@ static inline void i915_gem_drain_workqueue(struct drm_i915_private *i915)
        int pass = 2;
        do {
                rcu_barrier();
+               i915_gem_drain_freed_objects(i915);
                drain_workqueue(i915->wq);
        } while (--pass);
 }