Summary: | [BAT BYT] "HW access outside of RPM atomic section" on driver unload | ||
---|---|---|---|
Product: | DRI | Reporter: | Tvrtko Ursulin <tvrtko.ursulin> |
Component: | DRM/Intel | Assignee: | Chris Wilson <chris> |
Status: | CLOSED FIXED | QA Contact: | Intel GFX Bugs mailing list <intel-gfx-bugs> |
Severity: | critical | ||
Priority: | highest | CC: | intel-gfx-bugs |
Version: | DRI git | ||
Hardware: | Other | ||
OS: | All | ||
Whiteboard: | |||
i915 platform: | BYT | i915 features: | GEM/Other |
Description
Tvrtko Ursulin
2016-05-24 10:36:28 UTC
Oh, fun. diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index f78d4ca..981d279 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -3428,6 +3428,9 @@ int i915_gpu_idle(struct drm_device *dev) /* Flush everything onto the inactive list. */ for_each_engine(engine, dev_priv) { + if (engine->last_context == NULL) + continue; + if (!i915.enable_execlists) { struct drm_i915_gem_request *req; So this would catch the straightforward load/unload, it would not if any work was done in between that left the default context uninitialised. We can either flag it as initialised and never load the golden render state for the default context (which is valid as it should never be executed itself, and the render state should be applied to all other contexts on first use), or we go full monty and follow my planned route of making suspend lockless and not emitting a batch here at all for !execlists: https://cgit.freedesktop.org/~ickle/linux-2.6/commit/?h=tasklet&id=f8fff5e32923a56ea5ce73a4ae68968bc60b70c8 First two steps are pretty simple though... commit c7c3c07d16dd51faddeb6ae665d360be030b31b0 Author: Chris Wilson <chris@chris-wilson.co.uk> Date: Fri Jun 24 14:55:54 2016 +0100 drm/i915: Treat kernel context as initialised |
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.