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 |
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(>->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 --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(>->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); }
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(-)