[Intel-gfx] [PATCH 01/31] drm/i915/debugfs: Create generic string tokenize function and update CRC control parsing

Sagar Arun Kamble sagar.a.kamble at intel.com
Thu Sep 28 09:10:45 UTC 2017


Thanks for the review Michal. Will update as suggested.

On 9/21/2017 8:42 PM, Michal Wajdeczko wrote:
> On Tue, 19 Sep 2017 19:41:37 +0200, Sagar Arun Kamble 
> <sagar.a.kamble at intel.com> wrote:
>
>> Input string parsing used in CRC control parameter parsing is generic
>> and can be reused for other debugfs interfaces. Hence name it as
>> buffer_tokenize instead of tieing to display_crc. Also fix the function
>> desciption for CRC control parsing that was misplaced at tokenize 
>> function.
>>
>> Cc: Tomeu Vizoso <tomeu.vizoso at collabora.com>
>> Signed-off-by: Sagar Arun Kamble <sagar.a.kamble at intel.com>
>> Acked-by: Radoslaw Szwichtenberg <radoslaw.szwichtenberg at intel.com>
>> ---
>>  drivers/gpu/drm/i915/i915_drv.h       |  1 +
>>  drivers/gpu/drm/i915/intel_pipe_crc.c | 88 
>> +++++++++++++++++------------------
>>  2 files changed, 45 insertions(+), 44 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/i915_drv.h 
>> b/drivers/gpu/drm/i915/i915_drv.h
>> index 6d7d871..4d5ffde 100644
>> --- a/drivers/gpu/drm/i915/i915_drv.h
>> +++ b/drivers/gpu/drm/i915/i915_drv.h
>> @@ -3847,6 +3847,7 @@ u32 i915_gem_fence_alignment(struct 
>> drm_i915_private *dev_priv, u32 size,
>>  int i915_debugfs_register(struct drm_i915_private *dev_priv);
>>  int i915_debugfs_connector_add(struct drm_connector *connector);
>>  void intel_display_crc_init(struct drm_i915_private *dev_priv);
>> +int buffer_tokenize(char *buf, char *words[], int max_words);
>>  #else
>>  static inline int i915_debugfs_register(struct drm_i915_private 
>> *dev_priv) {return 0;}
>>  static inline int i915_debugfs_connector_add(struct drm_connector 
>> *connector)
>> diff --git a/drivers/gpu/drm/i915/intel_pipe_crc.c 
>> b/drivers/gpu/drm/i915/intel_pipe_crc.c
>> index 96043a5..2e312b8 100644
>> --- a/drivers/gpu/drm/i915/intel_pipe_crc.c
>> +++ b/drivers/gpu/drm/i915/intel_pipe_crc.c
>> @@ -710,49 +710,6 @@ static int pipe_crc_set_source(struct 
>> drm_i915_private *dev_priv,
>>      return ret;
>>  }
>> -/*
>> - * Parse pipe CRC command strings:
>> - *   command: wsp* object wsp+ name wsp+ source wsp*
>> - *   object: 'pipe'
>> - *   name: (A | B | C)
>> - *   source: (none | plane1 | plane2 | pf)
>> - *   wsp: (#0x20 | #0x9 | #0xA)+
>> - *
>> - * eg.:
>> - *  "pipe A plane1"  ->  Start CRC computations on plane1 of pipe A
>> - *  "pipe A none"    ->  Stop CRC
>> - */
>> -static int display_crc_ctl_tokenize(char *buf, char *words[], int 
>> max_words)
>> -{
>> -    int n_words = 0;
>> -
>> -    while (*buf) {
>> -        char *end;
>> -
>> -        /* skip leading white space */
>> -        buf = skip_spaces(buf);
>> -        if (!*buf)
>> -            break;    /* end of buffer */
>> -
>> -        /* find end of word */
>> -        for (end = buf; *end && !isspace(*end); end++)
>> -            ;
>> -
>> -        if (n_words == max_words) {
>> -            DRM_DEBUG_DRIVER("too many words, allowed <= %d\n",
>> -                     max_words);
>> -            return -EINVAL;    /* ran out of words[] before bytes */
>> -        }
>> -
>> -        if (*end)
>> -            *end++ = '\0';
>> -        words[n_words++] = buf;
>> -        buf = end;
>> -    }
>> -
>> -    return n_words;
>> -}
>> -
>>  enum intel_pipe_crc_object {
>>      PIPE_CRC_OBJECT_PIPE,
>>  };
>> @@ -806,6 +763,49 @@ static int display_crc_ctl_parse_pipe(const char 
>> *buf, enum pipe *pipe)
>>      return -EINVAL;
>>  }
>> +int buffer_tokenize(char *buf, char *words[], int max_words)
>> +{
>> +    int n_words = 0;
>> +
>> +    while (*buf) {
>> +        char *end;
>> +
>> +        /* skip leading white space */
>> +        buf = skip_spaces(buf);
>> +        if (!*buf)
>> +            break;    /* end of buffer */
>> +
>> +        /* find end of word */
>> +        for (end = buf; *end && !isspace(*end); end++)
>> +            ;
>> +
>> +        if (n_words == max_words) {
>> +            DRM_DEBUG_DRIVER("too many words, allowed <= %d\n",
>> +                     max_words);
>> +            return -EINVAL;    /* ran out of words[] before bytes */
>> +        }
>> +
>> +        if (*end)
>> +            *end++ = '\0';
>> +        words[n_words++] = buf;
>> +        buf = end;
>> +    }
>> +
>> +    return n_words;
>> +}
>
> You should move this function to i915_debugfs.c
>
>> +
>> +/*
>> + * Parse pipe CRC command strings:
>> + *   command: wsp* object wsp+ name wsp+ source wsp*
>> + *   object: 'pipe'
>> + *   name: (A | B | C)
>> + *   source: (none | plane1 | plane2 | pf)
>> + *   wsp: (#0x20 | #0x9 | #0xA)+
>> + *
>> + * eg.:
>> + *  "pipe A plane1"  ->  Start CRC computations on plane1 of pipe A
>> + *  "pipe A none"    ->  Stop CRC
>> + */
>>  static int display_crc_ctl_parse(struct drm_i915_private *dev_priv,
>>                   char *buf, size_t len)
>>  {
>> @@ -816,7 +816,7 @@ static int display_crc_ctl_parse(struct 
>> drm_i915_private *dev_priv,
>>      enum intel_pipe_crc_object object;
>>      enum intel_pipe_crc_source source;
>> -    n_words = display_crc_ctl_tokenize(buf, words, N_WORDS);
>> +    n_words = buffer_tokenize(buf, words, N_WORDS);
>>      if (n_words != N_WORDS) {
>>          DRM_DEBUG_DRIVER("tokenize failed, a command is %d words\n",
>>                   N_WORDS);



More information about the Intel-gfx mailing list