[Intel-gfx] [PATCH v3 1/4] drm/i915/guc: symbolic names for GuC submission preferences

Dave Gordon david.s.gordon at intel.com
Tue Aug 2 09:47:22 UTC 2016


On 01/08/16 19:57, Dave Gordon wrote:
> On 01/08/16 14:54, Jani Nikula wrote:
>> On Fri, 22 Jul 2016, Dave Gordon <david.s.gordon at intel.com> wrote:
>>> The existing code that accesses the "enable_guc_submission"
>>> parameter uses explicit numerical values for the various
>>> possibilities, including in one case relying on boolean 0/1
>>> mapping to specific values (which could be confusing for
>>> maintainers).
>>>
>>> So this patch just provides and uses names for the values
>>> representing the DEFAULT, DISABLED, PREFERRED, and MANDATORY
>>> submission options that the user can select (-1, 0, 1, 2
>>> respectively).
>>>
>>> This should produce identical code to the previous version!
>>>
>>> Signed-off-by: Dave Gordon <david.s.gordon at intel.com>
>>> Cc: Tvrtko Ursulin <tvrtko.ursulin at linux.intel.com>
>>> ---
>>>  drivers/gpu/drm/i915/i915_guc_submission.c |  2 +-
>>>  drivers/gpu/drm/i915/intel_guc.h           |  6 ++++++
>>>  drivers/gpu/drm/i915/intel_guc_loader.c    | 15 ++++++++-------
>>>  drivers/gpu/drm/i915/intel_lrc.c           |  6 +++---
>>>  4 files changed, 18 insertions(+), 11 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/i915/i915_guc_submission.c
>>> b/drivers/gpu/drm/i915/i915_guc_submission.c
>>> index 01c1c16..e564c976 100644
>>> --- a/drivers/gpu/drm/i915/i915_guc_submission.c
>>> +++ b/drivers/gpu/drm/i915/i915_guc_submission.c
>>> @@ -971,7 +971,7 @@ int i915_guc_submission_init(struct
>>> drm_i915_private *dev_priv)
>>>      bitmap_clear(guc->doorbell_bitmap, 0, GUC_MAX_DOORBELLS);
>>>      i915_guc_submission_disable(dev_priv);
>>>
>>> -    if (!i915.enable_guc_submission)
>>> +    if (i915.enable_guc_submission == GUC_SUBMISSION_DISABLED)
>>>          return 0; /* not enabled  */
>>>
>>>      if (guc->ctx_pool_obj)
>>> diff --git a/drivers/gpu/drm/i915/intel_guc.h
>>> b/drivers/gpu/drm/i915/intel_guc.h
>>> index 3e3e743..52ecbba 100644
>>> --- a/drivers/gpu/drm/i915/intel_guc.h
>>> +++ b/drivers/gpu/drm/i915/intel_guc.h
>>> @@ -90,6 +90,12 @@ struct i915_guc_client {
>>>      uint64_t submissions[I915_NUM_ENGINES];
>>>  };
>>>
>>> +enum {
>>> +    GUC_SUBMISSION_DEFAULT = -1,
>>> +    GUC_SUBMISSION_DISABLED = 0,
>>> +    GUC_SUBMISSION_PREFERRED,
>>> +    GUC_SUBMISSION_MANDATORY
>>> +};
>>>  enum intel_guc_fw_status {
>>>      GUC_FIRMWARE_FAIL = -1,
>>>      GUC_FIRMWARE_NONE = 0,
>>> diff --git a/drivers/gpu/drm/i915/intel_guc_loader.c
>>> b/drivers/gpu/drm/i915/intel_guc_loader.c
>>> index b883efd..d8bd4cb 100644
>>> --- a/drivers/gpu/drm/i915/intel_guc_loader.c
>>> +++ b/drivers/gpu/drm/i915/intel_guc_loader.c
>>> @@ -189,7 +189,7 @@ static void set_guc_init_params(struct
>>> drm_i915_private *dev_priv)
>>>      }
>>>
>>>      /* If GuC submission is enabled, set up additional parameters
>>> here */
>>> -    if (i915.enable_guc_submission) {
>>> +    if (i915.enable_guc_submission != GUC_SUBMISSION_DISABLED) {
>>>          u32 pgs = i915_gem_obj_ggtt_offset(dev_priv->guc.ctx_pool_obj);
>>>          u32 ctx_in_16 = GUC_MAX_GPU_CONTEXTS / 16;
>>>
>>> @@ -495,7 +495,7 @@ int intel_guc_setup(struct drm_device *dev)
>>>          intel_guc_fw_status_repr(guc_fw->guc_fw_fetch_status),
>>>          intel_guc_fw_status_repr(guc_fw->guc_fw_load_status));
>>>
>>> -    if (i915.enable_guc_submission) {
>>> +    if (i915.enable_guc_submission != GUC_SUBMISSION_DISABLED) {
>>>          err = i915_guc_submission_enable(dev_priv);
>>>          if (err)
>>>              goto fail;
>>> @@ -523,7 +523,7 @@ int intel_guc_setup(struct drm_device *dev)
>>>       */
>>>      if (i915.enable_guc_loading > 1) {
>>>          ret = -EIO;
>>> -    } else if (i915.enable_guc_submission > 1) {
>>> +    } else if (i915.enable_guc_submission >=
>>> GUC_SUBMISSION_MANDATORY) {
>>
>> I like the patches in general, but now these >= and <= seem rather out
>> of place. How about using == and != exclusively?
>>
>> BR,
>> Jani.
>
> That would leave us with undefined behaviour for values outside the
> recognised range. This way it clips out-of-range values to the nearest
> extremum. Of course we could make it fail completely for invalid values,
> but that's just really annoying for the developer or admin who's
> mistyped -1 as -2 or forgotten what the maximum supported value is in
> this release. Alternatively we could convert all out-of-range values to
> "system default" i.e. ignored, which might still be annoying but not
> quite as much.
>
> Any other suggestions for how to handle out-of-range values?
>
> But if we were changing the policy shouldn't that be a separate patch?
> This patch is supposed to change only the way the code is written, with
> no effect to existing behaviour!
>
> .Dave.

Also, if you look ahead to the next patch, you'll see there's a big 
explanatory comment about the use of signed and ordered enums:

+/*
+ * These signed ranges represent user-requested preferences.
+ * Out-of-range values from the user will be clipped towards
+ * zero: any negative value is treated as -1, anything over 2
+ * is just 2. ANY user-supplied value also taints the kernel.
+ */
  enum {
         GUC_SUBMISSION_DEFAULT = -1,
         GUC_SUBMISSION_DISABLED = 0,
         GUC_SUBMISSION_PREFERRED,
         GUC_SUBMISSION_MANDATORY
  };
+enum {
+       FIRMWARE_LOAD_DEFAULT = -1,
+       FIRMWARE_LOAD_DISABLED = 0,
+       FIRMWARE_LOAD_PREFERRED,
+       FIRMWARE_LOAD_MANDATORY
+};
+
+/* These represent the actual firmware status  */
  enum intel_guc_fw_status {
         GUC_FIRMWARE_FAIL = -1,
         GUC_FIRMWARE_NONE = 0,

.Dave.



More information about the Intel-gfx mailing list