Message ID | 20210526064237.77853-14-matthew.brost@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Non-interface changing GuC CTBs updates | expand |
On 26.05.2021 08:42, Matthew Brost wrote: > From: Michal Wajdeczko <michal.wajdeczko@intel.com> > > In upcoming patch we will allow more CTB requests to be sent in > parallel to the GuC for processing, so we shouldn't assume any more > that GuC will always reply without 10ms. > > Use bigger value from CONFIG_DRM_I915_GUC_CTB_TIMEOUT instead. > > v2: Add CONFIG_DRM_I915_GUC_CTB_TIMEOUT config option > > Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com> > Signed-off-by: Matthew Brost <matthew.brost@intel.com> > Reviewed-by: Matthew Brost <matthew.brost@intel.com> > --- > drivers/gpu/drm/i915/Kconfig.profile | 9 +++++++++ > drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c | 5 ++++- > 2 files changed, 13 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/Kconfig.profile b/drivers/gpu/drm/i915/Kconfig.profile > index 39328567c200..68ac707755d2 100644 > --- a/drivers/gpu/drm/i915/Kconfig.profile > +++ b/drivers/gpu/drm/i915/Kconfig.profile > @@ -38,6 +38,15 @@ config DRM_I915_USERFAULT_AUTOSUSPEND > May be 0 to disable the extra delay and solely use the device level > runtime pm autosuspend delay tunable. > > +config DRM_I915_GUC_CTB_TIMEOUT > + int "How long to wait for the GuC to make forward progress on CTBs (ms)" maybe worth to provide here explicit allowed range: range 10 60000 and then we can skip runtime adjustment for minimum 10ms timeout > + default 1500 # milliseconds > + help > + Configures the default timeout waiting for GuC the to make forward > + progress on CTBs. e.g. Waiting for a response to requeset. typo > + > + A minimum value of 10 ms is allowed. > + > config DRM_I915_HEARTBEAT_INTERVAL > int "Interval between heartbeat pulses (ms)" > default 2500 # milliseconds > diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c > index 916c2b80c841..5b0dece7a7cd 100644 > --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c > +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c > @@ -436,6 +436,7 @@ static int ct_write(struct intel_guc_ct *ct, > */ > static int wait_for_ct_request_update(struct ct_request *req, u32 *status) > { > + long timeout; > int err; > > /* > @@ -443,10 +444,12 @@ static int wait_for_ct_request_update(struct ct_request *req, u32 *status) > * up to that length of time, then switch to a slower sleep-wait loop. > * No GuC command should ever take longer than 10ms. > */ > + timeout = max(10, CONFIG_DRM_I915_GUC_CTB_TIMEOUT); > + > #define done INTEL_GUC_MSG_IS_RESPONSE(READ_ONCE(req->status)) > err = wait_for_us(done, 10); > if (err) > - err = wait_for(done, 10); > + err = wait_for(done, timeout); > #undef done > > if (unlikely(err)) >
On Wed, May 26, 2021 at 02:25:26PM +0200, Michal Wajdeczko wrote: > > > On 26.05.2021 08:42, Matthew Brost wrote: > > From: Michal Wajdeczko <michal.wajdeczko@intel.com> > > > > In upcoming patch we will allow more CTB requests to be sent in > > parallel to the GuC for processing, so we shouldn't assume any more > > that GuC will always reply without 10ms. > > > > Use bigger value from CONFIG_DRM_I915_GUC_CTB_TIMEOUT instead. > > > > v2: Add CONFIG_DRM_I915_GUC_CTB_TIMEOUT config option > > > > Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com> > > Signed-off-by: Matthew Brost <matthew.brost@intel.com> > > Reviewed-by: Matthew Brost <matthew.brost@intel.com> > > --- > > drivers/gpu/drm/i915/Kconfig.profile | 9 +++++++++ > > drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c | 5 ++++- > > 2 files changed, 13 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/gpu/drm/i915/Kconfig.profile b/drivers/gpu/drm/i915/Kconfig.profile > > index 39328567c200..68ac707755d2 100644 > > --- a/drivers/gpu/drm/i915/Kconfig.profile > > +++ b/drivers/gpu/drm/i915/Kconfig.profile > > @@ -38,6 +38,15 @@ config DRM_I915_USERFAULT_AUTOSUSPEND > > May be 0 to disable the extra delay and solely use the device level > > runtime pm autosuspend delay tunable. > > > > +config DRM_I915_GUC_CTB_TIMEOUT > > + int "How long to wait for the GuC to make forward progress on CTBs (ms)" > > maybe worth to provide here explicit allowed range: > > range 10 60000 > > and then we can skip runtime adjustment for minimum 10ms timeout Didn't know this option, done. > > > + default 1500 # milliseconds > > + help > > + Configures the default timeout waiting for GuC the to make forward > > + progress on CTBs. e.g. Waiting for a response to requeset. > > typo > Fixed. Matt > > + > > + A minimum value of 10 ms is allowed. > > + > > config DRM_I915_HEARTBEAT_INTERVAL > > int "Interval between heartbeat pulses (ms)" > > default 2500 # milliseconds > > diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c > > index 916c2b80c841..5b0dece7a7cd 100644 > > --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c > > +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c > > @@ -436,6 +436,7 @@ static int ct_write(struct intel_guc_ct *ct, > > */ > > static int wait_for_ct_request_update(struct ct_request *req, u32 *status) > > { > > + long timeout; > > int err; > > > > /* > > @@ -443,10 +444,12 @@ static int wait_for_ct_request_update(struct ct_request *req, u32 *status) > > * up to that length of time, then switch to a slower sleep-wait loop. > > * No GuC command should ever take longer than 10ms. > > */ > > + timeout = max(10, CONFIG_DRM_I915_GUC_CTB_TIMEOUT); > > + > > #define done INTEL_GUC_MSG_IS_RESPONSE(READ_ONCE(req->status)) > > err = wait_for_us(done, 10); > > if (err) > > - err = wait_for(done, 10); > > + err = wait_for(done, timeout); > > #undef done > > > > if (unlikely(err)) > >
diff --git a/drivers/gpu/drm/i915/Kconfig.profile b/drivers/gpu/drm/i915/Kconfig.profile index 39328567c200..68ac707755d2 100644 --- a/drivers/gpu/drm/i915/Kconfig.profile +++ b/drivers/gpu/drm/i915/Kconfig.profile @@ -38,6 +38,15 @@ config DRM_I915_USERFAULT_AUTOSUSPEND May be 0 to disable the extra delay and solely use the device level runtime pm autosuspend delay tunable. +config DRM_I915_GUC_CTB_TIMEOUT + int "How long to wait for the GuC to make forward progress on CTBs (ms)" + default 1500 # milliseconds + help + Configures the default timeout waiting for GuC the to make forward + progress on CTBs. e.g. Waiting for a response to requeset. + + A minimum value of 10 ms is allowed. + config DRM_I915_HEARTBEAT_INTERVAL int "Interval between heartbeat pulses (ms)" default 2500 # milliseconds diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c index 916c2b80c841..5b0dece7a7cd 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c @@ -436,6 +436,7 @@ static int ct_write(struct intel_guc_ct *ct, */ static int wait_for_ct_request_update(struct ct_request *req, u32 *status) { + long timeout; int err; /* @@ -443,10 +444,12 @@ static int wait_for_ct_request_update(struct ct_request *req, u32 *status) * up to that length of time, then switch to a slower sleep-wait loop. * No GuC command should ever take longer than 10ms. */ + timeout = max(10, CONFIG_DRM_I915_GUC_CTB_TIMEOUT); + #define done INTEL_GUC_MSG_IS_RESPONSE(READ_ONCE(req->status)) err = wait_for_us(done, 10); if (err) - err = wait_for(done, 10); + err = wait_for(done, timeout); #undef done if (unlikely(err))