drm/i915: Teach record_defaults to operate on the intel_gt
authorChris Wilson <chris@chris-wilson.co.uk>
Tue, 22 Oct 2019 14:19:35 +0000 (15:19 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 22 Oct 2019 19:43:07 +0000 (20:43 +0100)
Again we wish to operate on the engines, which are owned by the
intel_gt. As such it is easier, and much more consistent, to pass the
intel_gt parameter.

v2: Unexport i915_gem_load_power_context()

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20191022141935.15733-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/gem/i915_gem_pm.c
drivers/gpu/drm/i915/gem/i915_gem_pm.h
drivers/gpu/drm/i915/i915_gem.c
drivers/gpu/drm/i915/selftests/i915_selftest.c

index ee3279c76566a6b11f13de094b12ebc7dde6bfd7..9bc0cf3139e3f9d62d7c2395f3ab52a2e1353b51 100644 (file)
@@ -37,11 +37,6 @@ static bool switch_to_kernel_context_sync(struct intel_gt *gt)
        return result;
 }
 
-bool i915_gem_load_power_context(struct drm_i915_private *i915)
-{
-       return switch_to_kernel_context_sync(&i915->gt);
-}
-
 static void user_forcewake(struct intel_gt *gt, bool suspend)
 {
        int count = atomic_read(&gt->user_wakeref);
@@ -171,7 +166,7 @@ void i915_gem_resume(struct drm_i915_private *i915)
        intel_uc_resume(&i915->gt.uc);
 
        /* Always reload a context for powersaving. */
-       if (!i915_gem_load_power_context(i915))
+       if (!switch_to_kernel_context_sync(&i915->gt))
                goto err_wedged;
 
        user_forcewake(&i915->gt, false);
index a017572778d5ae13dd03a7c26bd5b84905348d33..26b78dbdc225665360784ad6c0741b5718bd3b74 100644 (file)
@@ -12,7 +12,6 @@
 struct drm_i915_private;
 struct work_struct;
 
-bool i915_gem_load_power_context(struct drm_i915_private *i915);
 void i915_gem_resume(struct drm_i915_private *i915);
 
 void i915_gem_idle_work_handler(struct work_struct *work);
index e86f0a4e4c6a8ab3e6b4a8f5b91005c2e85c030c..319e96d833fa468156aa362731222f4ead35663d 100644 (file)
@@ -48,6 +48,7 @@
 #include "gt/intel_engine_user.h"
 #include "gt/intel_gt.h"
 #include "gt/intel_gt_pm.h"
+#include "gt/intel_gt_requests.h"
 #include "gt/intel_mocs.h"
 #include "gt/intel_reset.h"
 #include "gt/intel_renderstate.h"
@@ -1069,7 +1070,7 @@ void i915_gem_sanitize(struct drm_i915_private *i915)
        intel_runtime_pm_put(&i915->runtime_pm, wakeref);
 }
 
-static int __intel_engines_record_defaults(struct drm_i915_private *i915)
+static int __intel_engines_record_defaults(struct intel_gt *gt)
 {
        struct i915_request *requests[I915_NUM_ENGINES] = {};
        struct intel_engine_cs *engine;
@@ -1085,7 +1086,7 @@ static int __intel_engines_record_defaults(struct drm_i915_private *i915)
         * from the same default HW values.
         */
 
-       for_each_engine(engine, i915, id) {
+       for_each_engine(engine, gt, id) {
                struct intel_context *ce;
                struct i915_request *rq;
 
@@ -1093,7 +1094,8 @@ static int __intel_engines_record_defaults(struct drm_i915_private *i915)
                GEM_BUG_ON(!engine->kernel_context);
                engine->serial++; /* force the kernel context switch */
 
-               ce = intel_context_create(i915->kernel_context, engine);
+               ce = intel_context_create(engine->kernel_context->gem_context,
+                                         engine);
                if (IS_ERR(ce)) {
                        err = PTR_ERR(ce);
                        goto out;
@@ -1122,7 +1124,7 @@ err_rq:
        }
 
        /* Flush the default context image to memory, and enable powersaving. */
-       if (!i915_gem_load_power_context(i915)) {
+       if (intel_gt_wait_for_idle(gt, I915_GEM_IDLE_TIMEOUT) == -ETIME) {
                err = -EIO;
                goto out;
        }
@@ -1181,7 +1183,7 @@ out:
         * this is by declaring ourselves wedged.
         */
        if (err)
-               intel_gt_set_wedged(&i915->gt);
+               intel_gt_set_wedged(gt);
 
        for (id = 0; id < ARRAY_SIZE(requests); id++) {
                struct intel_context *ce;
@@ -1295,7 +1297,7 @@ int i915_gem_init(struct drm_i915_private *dev_priv)
        if (ret)
                goto err_gt;
 
-       ret = __intel_engines_record_defaults(dev_priv);
+       ret = __intel_engines_record_defaults(&dev_priv->gt);
        if (ret)
                goto err_gt;
 
index 825a8286cbe84f3e395fd29a15394d14b8e36900..92c9193cdc85328ad21e766808550a149e2c4914 100644 (file)
@@ -23,8 +23,9 @@
 
 #include <linux/random.h>
 
-#include "../i915_drv.h"
-#include "../i915_selftest.h"
+#include "gt/intel_gt_pm.h"
+#include "i915_drv.h"
+#include "i915_selftest.h"
 
 #include "igt_flush_test.h"
 
@@ -256,6 +257,10 @@ int __i915_live_setup(void *data)
 {
        struct drm_i915_private *i915 = data;
 
+       /* The selftests expect an idle system */
+       if (intel_gt_pm_wait_for_idle(&i915->gt))
+               return -EIO;
+
        return intel_gt_terminally_wedged(&i915->gt);
 }
 
@@ -275,6 +280,10 @@ int __intel_gt_live_setup(void *data)
 {
        struct intel_gt *gt = data;
 
+       /* The selftests expect an idle system */
+       if (intel_gt_pm_wait_for_idle(gt))
+               return -EIO;
+
        return intel_gt_terminally_wedged(gt);
 }