diff mbox series

[v2] drm/i915: Teach record_defaults to operate on the intel_gt

Message ID 20191022141935.15733-1-chris@chris-wilson.co.uk (mailing list archive)
State New, archived
Headers show
Series [v2] drm/i915: Teach record_defaults to operate on the intel_gt | expand

Commit Message

Chris Wilson Oct. 22, 2019, 2:19 p.m. UTC
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>
---
 drivers/gpu/drm/i915/gem/i915_gem_pm.c         |  7 +------
 drivers/gpu/drm/i915/gem/i915_gem_pm.h         |  1 -
 drivers/gpu/drm/i915/i915_gem.c                | 14 ++++++++------
 drivers/gpu/drm/i915/selftests/i915_selftest.c | 13 +++++++++++--
 4 files changed, 20 insertions(+), 15 deletions(-)

Comments

Tvrtko Ursulin Oct. 22, 2019, 4:05 p.m. UTC | #1
On 22/10/2019 15:19, Chris Wilson wrote:
> 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>
> ---
>   drivers/gpu/drm/i915/gem/i915_gem_pm.c         |  7 +------
>   drivers/gpu/drm/i915/gem/i915_gem_pm.h         |  1 -
>   drivers/gpu/drm/i915/i915_gem.c                | 14 ++++++++------
>   drivers/gpu/drm/i915/selftests/i915_selftest.c | 13 +++++++++++--
>   4 files changed, 20 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_pm.c b/drivers/gpu/drm/i915/gem/i915_gem_pm.c
> index ee3279c76566..9bc0cf3139e3 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_pm.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_pm.c
> @@ -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);
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_pm.h b/drivers/gpu/drm/i915/gem/i915_gem_pm.h
> index a017572778d5..26b78dbdc225 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_pm.h
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_pm.h
> @@ -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);
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index ca64a0c9b762..b882988056bd 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -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"
> @@ -1072,7 +1073,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;
> @@ -1088,7 +1089,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;
>   
> @@ -1096,7 +1097,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;
> @@ -1125,7 +1127,7 @@ static int __intel_engines_record_defaults(struct drm_i915_private *i915)
>   	}
>   
>   	/* 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;
>   	}
> @@ -1184,7 +1186,7 @@ static int __intel_engines_record_defaults(struct drm_i915_private *i915)
>   	 * 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;
> @@ -1298,7 +1300,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;
>   
> diff --git a/drivers/gpu/drm/i915/selftests/i915_selftest.c b/drivers/gpu/drm/i915/selftests/i915_selftest.c
> index 825a8286cbe8..92c9193cdc85 100644
> --- a/drivers/gpu/drm/i915/selftests/i915_selftest.c
> +++ b/drivers/gpu/drm/i915/selftests/i915_selftest.c
> @@ -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);
>   }
>   
> 

Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Regards,

Tvrtko
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_pm.c b/drivers/gpu/drm/i915/gem/i915_gem_pm.c
index ee3279c76566..9bc0cf3139e3 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_pm.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_pm.c
@@ -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);
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_pm.h b/drivers/gpu/drm/i915/gem/i915_gem_pm.h
index a017572778d5..26b78dbdc225 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_pm.h
+++ b/drivers/gpu/drm/i915/gem/i915_gem_pm.h
@@ -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);
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index ca64a0c9b762..b882988056bd 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -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"
@@ -1072,7 +1073,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;
@@ -1088,7 +1089,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;
 
@@ -1096,7 +1097,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;
@@ -1125,7 +1127,7 @@  static int __intel_engines_record_defaults(struct drm_i915_private *i915)
 	}
 
 	/* 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;
 	}
@@ -1184,7 +1186,7 @@  static int __intel_engines_record_defaults(struct drm_i915_private *i915)
 	 * 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;
@@ -1298,7 +1300,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;
 
diff --git a/drivers/gpu/drm/i915/selftests/i915_selftest.c b/drivers/gpu/drm/i915/selftests/i915_selftest.c
index 825a8286cbe8..92c9193cdc85 100644
--- a/drivers/gpu/drm/i915/selftests/i915_selftest.c
+++ b/drivers/gpu/drm/i915/selftests/i915_selftest.c
@@ -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);
 }