diff mbox

[igt] lib: add igt_debugfs_read()

Message ID 1437498503-24646-1-git-send-email-przanoni@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Paulo Zanoni July 21, 2015, 5:08 p.m. UTC
From: Paulo Zanoni <paulo.r.zanoni@intel.com>

A helpful function for when you want to read a whole debugfs file to a
string and don't want to worry about opening and closing file
descriptors and asserting buffer sizes.

We've been using this already for kms_frontbuffer_tracking and
kms_fbcon_fbt, so the only test with new code here is kms_fbc_crc.

Also notice that for kms_fbc_crc we had to increase the buffer size
since the file can sometimes be bigger than 64 bytes - depending on
the reason why FBC is disabled.

Of course, there are probably many other programs we can patch, but
I'm not doing this now.

Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
---
 lib/igt_debugfs.c                | 27 +++++++++++++++++++++++++++
 lib/igt_debugfs.h                |  1 +
 tests/kms_fbc_crc.c              | 18 ++++--------------
 tests/kms_fbcon_fbt.c            | 25 ++++---------------------
 tests/kms_frontbuffer_tracking.c | 33 ++++++++-------------------------
 5 files changed, 44 insertions(+), 60 deletions(-)

Comments

Daniel Vetter July 21, 2015, 5:43 p.m. UTC | #1
On Tue, Jul 21, 2015 at 02:08:23PM -0300, Paulo Zanoni wrote:
> From: Paulo Zanoni <paulo.r.zanoni@intel.com>
> 
> A helpful function for when you want to read a whole debugfs file to a
> string and don't want to worry about opening and closing file
> descriptors and asserting buffer sizes.
> 
> We've been using this already for kms_frontbuffer_tracking and
> kms_fbcon_fbt, so the only test with new code here is kms_fbc_crc.
> 
> Also notice that for kms_fbc_crc we had to increase the buffer size
> since the file can sometimes be bigger than 64 bytes - depending on
> the reason why FBC is disabled.
> 
> Of course, there are probably many other programs we can patch, but
> I'm not doing this now.
> 
> Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
> ---
>  lib/igt_debugfs.c                | 27 +++++++++++++++++++++++++++
>  lib/igt_debugfs.h                |  1 +
>  tests/kms_fbc_crc.c              | 18 ++++--------------
>  tests/kms_fbcon_fbt.c            | 25 ++++---------------------
>  tests/kms_frontbuffer_tracking.c | 33 ++++++++-------------------------
>  5 files changed, 44 insertions(+), 60 deletions(-)
> 
> diff --git a/lib/igt_debugfs.c b/lib/igt_debugfs.c
> index a2c6fe2..bc1bb05 100644
> --- a/lib/igt_debugfs.c
> +++ b/lib/igt_debugfs.c
> @@ -185,6 +185,33 @@ FILE *igt_debugfs_fopen(const char *filename,
>  	return fopen(buf, mode);
>  }
>  
> +/**
> + * igt_debugfs_read:
> + * @filename: file name
> + * @buf: buffer where the contents will be stored, allocated by the caller
> + * @buf_size: size of the buffer
> + *
> + * This function opens the debugfs file, reads it, stores the content in the
> + * provided buffer, then closes the file. Users should make sure that the buffer
> + * provided is big enough to fit the whole file, plus one byte.

Hm if we want a helper function to slurp in an entire file I'd go with one
that mallocs a suitably big buffer. That means more free calls, but imo
that's less onerous than getting buffer sizes right (well at least for a
library function).

If you don't like that I'd rename this with a __ prefix and do a

#define igt_debugfs_read(file, buf) \
	__igt_debugfs_read((file), (buf), sizeof(buf))

That way it's fairly impossible to get the static sizing wrong at least.
-Daniel

> + */
> +void igt_debugfs_read(const char *filename, char *buf, int buf_size)
> +{
> +	FILE *file;
> +	size_t n_read;
> +
> +	file = igt_debugfs_fopen(filename, "r");
> +	igt_assert(file);
> +
> +	n_read = fread(buf, 1, buf_size - 1, file);
> +	igt_assert(n_read > 0);
> +	igt_assert(feof(file));
> +
> +	buf[n_read] = '\0';
> +
> +	igt_assert(fclose(file) == 0);
> +}
> +
>  /*
>   * Pipe CRC
>   */
> diff --git a/lib/igt_debugfs.h b/lib/igt_debugfs.h
> index ece7148..a0bb75e 100644
> --- a/lib/igt_debugfs.h
> +++ b/lib/igt_debugfs.h
> @@ -34,6 +34,7 @@ enum pipe;
>  int igt_debugfs_open(const char *filename, int mode);
>  FILE *igt_debugfs_fopen(const char *filename,
>  			const char *mode);
> +void igt_debugfs_read(const char *filename, char *buf, int buf_size);
>  
>  /*
>   * Pipe CRC
> diff --git a/tests/kms_fbc_crc.c b/tests/kms_fbc_crc.c
> index f2a86a6..28cc165 100644
> --- a/tests/kms_fbc_crc.c
> +++ b/tests/kms_fbc_crc.c
> @@ -215,14 +215,9 @@ static void fill_mmap_gtt(data_t *data, uint32_t handle, unsigned char color)
>  
>  static bool fbc_enabled(data_t *data)
>  {
> -	FILE *status;
> -	char str[64] = {};
> +	char str[128] = {};
>  
> -	status = igt_debugfs_fopen("i915_fbc_status", "r");
> -	igt_assert(status);
> -
> -	igt_assert(fread(str, 1, sizeof(str) - 1, status) > 0);
> -	fclose(status);
> +	igt_debugfs_read("i915_fbc_status", str, sizeof(str));
>  	return strstr(str, "FBC enabled") != NULL;
>  }
>  
> @@ -544,8 +539,7 @@ igt_main
>  	igt_skip_on_simulation();
>  
>  	igt_fixture {
> -		char buf[64];
> -		FILE *status;
> +		char buf[128];
>  
>  		data.drm_fd = drm_open_any_master();
>  		kmstest_set_vt_graphics_mode();
> @@ -554,11 +548,7 @@ igt_main
>  
>  		igt_require_pipe_crc();
>  
> -		status = igt_debugfs_fopen("i915_fbc_status", "r");
> -		igt_require_f(status, "No i915_fbc_status found\n");
> -		igt_assert_lt(0, fread(buf, 1, sizeof(buf), status));
> -		fclose(status);
> -		buf[sizeof(buf) - 1] = '\0';
> +		igt_debugfs_read("i915_fbc_status", buf, sizeof(buf));
>  		igt_require_f(!strstr(buf, "unsupported on this chipset"),
>  			      "FBC not supported\n");
>  
> diff --git a/tests/kms_fbcon_fbt.c b/tests/kms_fbcon_fbt.c
> index f075014..c201fde 100644
> --- a/tests/kms_fbcon_fbt.c
> +++ b/tests/kms_fbcon_fbt.c
> @@ -86,28 +86,11 @@ static void teardown_drm(struct drm_info *drm)
>  	igt_assert(close(drm->fd) == 0);
>  }
>  
> -static void debugfs_read(const char *filename, char *buf, int buf_size)
> -{
> -	FILE *file;
> -	size_t n_read;
> -
> -	file = igt_debugfs_fopen(filename, "r");
> -	igt_assert(file);
> -
> -	n_read = fread(buf, 1, buf_size - 1, file);
> -	igt_assert(n_read > 0);
> -	igt_assert(feof(file));
> -
> -	buf[n_read] = '\0';
> -
> -	igt_assert(fclose(file) == 0);
> -}
> -
>  static bool fbc_supported_on_chipset(void)
>  {
>  	char buf[128];
>  
> -	debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
> +	igt_debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
>  	return !strstr(buf, "FBC unsupported on this chipset\n");
>  }
>  
> @@ -120,7 +103,7 @@ static bool fbc_is_enabled(void)
>  {
>  	char buf[128];
>  
> -	debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
> +	igt_debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
>  	return strstr(buf, "FBC enabled\n");
>  }
>  
> @@ -172,7 +155,7 @@ static bool psr_supported_on_chipset(void)
>  {
>  	char buf[256];
>  
> -	debugfs_read("i915_edp_psr_status", buf, ARRAY_SIZE(buf));
> +	igt_debugfs_read("i915_edp_psr_status", buf, ARRAY_SIZE(buf));
>  	return strstr(buf, "Sink_Support: yes\n");
>  }
>  
> @@ -185,7 +168,7 @@ static bool psr_is_enabled(void)
>  {
>  	char buf[256];
>  
> -	debugfs_read("i915_edp_psr_status", buf, ARRAY_SIZE(buf));
> +	igt_debugfs_read("i915_edp_psr_status", buf, ARRAY_SIZE(buf));
>  	return strstr(buf, "\nActive: yes\n");
>  }
>  
> diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c
> index e9be045..e162e91 100644
> --- a/tests/kms_frontbuffer_tracking.c
> +++ b/tests/kms_frontbuffer_tracking.c
> @@ -556,28 +556,11 @@ static bool set_mode_for_params(struct modeset_params *params)
>  	return (rc == 0);
>  }
>  
> -static void debugfs_read(const char *filename, char *buf, int buf_size)
> -{
> -	FILE *file;
> -	size_t n_read;
> -
> -	file = igt_debugfs_fopen(filename, "r");
> -	igt_assert(file);
> -
> -	n_read = fread(buf, 1, buf_size - 1, file);
> -	igt_assert(n_read > 0);
> -	igt_assert(feof(file));
> -
> -	buf[n_read] = '\0';
> -
> -	igt_assert(fclose(file) == 0);
> -}
> -
>  static bool fbc_is_enabled(void)
>  {
>  	char buf[128];
>  
> -	debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
> +	igt_debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
>  	return strstr(buf, "FBC enabled\n");
>  }
>  
> @@ -585,7 +568,7 @@ static bool psr_is_enabled(void)
>  {
>  	char buf[256];
>  
> -	debugfs_read("i915_edp_psr_status", buf, ARRAY_SIZE(buf));
> +	igt_debugfs_read("i915_edp_psr_status", buf, ARRAY_SIZE(buf));
>  	return (strstr(buf, "\nActive: yes\n"));
>  }
>  
> @@ -596,7 +579,7 @@ static struct timespec fbc_get_last_action(void)
>  	char *action;
>  	ssize_t n_read;
>  
> -	debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
> +	igt_debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
>  
>  	action = strstr(buf, "\nLast action:");
>  	igt_assert(action);
> @@ -645,7 +628,7 @@ static void fbc_setup_last_action(void)
>  	char buf[128];
>  	char *action;
>  
> -	debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
> +	igt_debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
>  
>  	action = strstr(buf, "\nLast action:");
>  	if (!action) {
> @@ -664,7 +647,7 @@ static bool fbc_is_compressing(void)
>  {
>  	char buf[128];
>  
> -	debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
> +	igt_debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
>  	return strstr(buf, "\nCompressing: yes\n") != NULL;
>  }
>  
> @@ -677,7 +660,7 @@ static void fbc_setup_compressing(void)
>  {
>  	char buf[128];
>  
> -	debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
> +	igt_debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
>  
>  	if (strstr(buf, "\nCompressing:"))
>  		fbc.supports_compressing = true;
> @@ -1187,7 +1170,7 @@ static bool fbc_supported_on_chipset(void)
>  {
>  	char buf[128];
>  
> -	debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
> +	igt_debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
>  	return !strstr(buf, "FBC unsupported on this chipset\n");
>  }
>  
> @@ -1211,7 +1194,7 @@ static bool psr_sink_has_support(void)
>  {
>  	char buf[256];
>  
> -	debugfs_read("i915_edp_psr_status", buf, ARRAY_SIZE(buf));
> +	igt_debugfs_read("i915_edp_psr_status", buf, ARRAY_SIZE(buf));
>  	return strstr(buf, "Sink_Support: yes\n");
>  }
>  
> -- 
> 2.1.4
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
Paulo Zanoni July 21, 2015, 6:01 p.m. UTC | #2
2015-07-21 14:43 GMT-03:00 Daniel Vetter <daniel@ffwll.ch>:
> On Tue, Jul 21, 2015 at 02:08:23PM -0300, Paulo Zanoni wrote:
>> From: Paulo Zanoni <paulo.r.zanoni@intel.com>
>>
>> A helpful function for when you want to read a whole debugfs file to a
>> string and don't want to worry about opening and closing file
>> descriptors and asserting buffer sizes.
>>
>> We've been using this already for kms_frontbuffer_tracking and
>> kms_fbcon_fbt, so the only test with new code here is kms_fbc_crc.
>>
>> Also notice that for kms_fbc_crc we had to increase the buffer size
>> since the file can sometimes be bigger than 64 bytes - depending on
>> the reason why FBC is disabled.
>>
>> Of course, there are probably many other programs we can patch, but
>> I'm not doing this now.
>>
>> Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
>> ---
>>  lib/igt_debugfs.c                | 27 +++++++++++++++++++++++++++
>>  lib/igt_debugfs.h                |  1 +
>>  tests/kms_fbc_crc.c              | 18 ++++--------------
>>  tests/kms_fbcon_fbt.c            | 25 ++++---------------------
>>  tests/kms_frontbuffer_tracking.c | 33 ++++++++-------------------------
>>  5 files changed, 44 insertions(+), 60 deletions(-)
>>
>> diff --git a/lib/igt_debugfs.c b/lib/igt_debugfs.c
>> index a2c6fe2..bc1bb05 100644
>> --- a/lib/igt_debugfs.c
>> +++ b/lib/igt_debugfs.c
>> @@ -185,6 +185,33 @@ FILE *igt_debugfs_fopen(const char *filename,
>>       return fopen(buf, mode);
>>  }
>>
>> +/**
>> + * igt_debugfs_read:
>> + * @filename: file name
>> + * @buf: buffer where the contents will be stored, allocated by the caller
>> + * @buf_size: size of the buffer
>> + *
>> + * This function opens the debugfs file, reads it, stores the content in the
>> + * provided buffer, then closes the file. Users should make sure that the buffer
>> + * provided is big enough to fit the whole file, plus one byte.
>
> Hm if we want a helper function to slurp in an entire file I'd go with one
> that mallocs a suitably big buffer. That means more free calls, but imo
> that's less onerous than getting buffer sizes right (well at least for a
> library function).

Since the files are usually very small, I'm not a big fan of the
malloc/free version. But maybe we could have both the malloc and the
non-malloc version in case we start having to deal with big debugfs
files.

>
> If you don't like that I'd rename this with a __ prefix and do a
>
> #define igt_debugfs_read(file, buf) \
>         __igt_debugfs_read((file), (buf), sizeof(buf))
>
> That way it's fairly impossible to get the static sizing wrong at least.

Good idea! I'll do this.

> -Daniel
>
>> + */
>> +void igt_debugfs_read(const char *filename, char *buf, int buf_size)
>> +{
>> +     FILE *file;
>> +     size_t n_read;
>> +
>> +     file = igt_debugfs_fopen(filename, "r");
>> +     igt_assert(file);
>> +
>> +     n_read = fread(buf, 1, buf_size - 1, file);
>> +     igt_assert(n_read > 0);
>> +     igt_assert(feof(file));
>> +
>> +     buf[n_read] = '\0';
>> +
>> +     igt_assert(fclose(file) == 0);
>> +}
>> +
>>  /*
>>   * Pipe CRC
>>   */
>> diff --git a/lib/igt_debugfs.h b/lib/igt_debugfs.h
>> index ece7148..a0bb75e 100644
>> --- a/lib/igt_debugfs.h
>> +++ b/lib/igt_debugfs.h
>> @@ -34,6 +34,7 @@ enum pipe;
>>  int igt_debugfs_open(const char *filename, int mode);
>>  FILE *igt_debugfs_fopen(const char *filename,
>>                       const char *mode);
>> +void igt_debugfs_read(const char *filename, char *buf, int buf_size);
>>
>>  /*
>>   * Pipe CRC
>> diff --git a/tests/kms_fbc_crc.c b/tests/kms_fbc_crc.c
>> index f2a86a6..28cc165 100644
>> --- a/tests/kms_fbc_crc.c
>> +++ b/tests/kms_fbc_crc.c
>> @@ -215,14 +215,9 @@ static void fill_mmap_gtt(data_t *data, uint32_t handle, unsigned char color)
>>
>>  static bool fbc_enabled(data_t *data)
>>  {
>> -     FILE *status;
>> -     char str[64] = {};
>> +     char str[128] = {};
>>
>> -     status = igt_debugfs_fopen("i915_fbc_status", "r");
>> -     igt_assert(status);
>> -
>> -     igt_assert(fread(str, 1, sizeof(str) - 1, status) > 0);
>> -     fclose(status);
>> +     igt_debugfs_read("i915_fbc_status", str, sizeof(str));
>>       return strstr(str, "FBC enabled") != NULL;
>>  }
>>
>> @@ -544,8 +539,7 @@ igt_main
>>       igt_skip_on_simulation();
>>
>>       igt_fixture {
>> -             char buf[64];
>> -             FILE *status;
>> +             char buf[128];
>>
>>               data.drm_fd = drm_open_any_master();
>>               kmstest_set_vt_graphics_mode();
>> @@ -554,11 +548,7 @@ igt_main
>>
>>               igt_require_pipe_crc();
>>
>> -             status = igt_debugfs_fopen("i915_fbc_status", "r");
>> -             igt_require_f(status, "No i915_fbc_status found\n");
>> -             igt_assert_lt(0, fread(buf, 1, sizeof(buf), status));
>> -             fclose(status);
>> -             buf[sizeof(buf) - 1] = '\0';
>> +             igt_debugfs_read("i915_fbc_status", buf, sizeof(buf));
>>               igt_require_f(!strstr(buf, "unsupported on this chipset"),
>>                             "FBC not supported\n");
>>
>> diff --git a/tests/kms_fbcon_fbt.c b/tests/kms_fbcon_fbt.c
>> index f075014..c201fde 100644
>> --- a/tests/kms_fbcon_fbt.c
>> +++ b/tests/kms_fbcon_fbt.c
>> @@ -86,28 +86,11 @@ static void teardown_drm(struct drm_info *drm)
>>       igt_assert(close(drm->fd) == 0);
>>  }
>>
>> -static void debugfs_read(const char *filename, char *buf, int buf_size)
>> -{
>> -     FILE *file;
>> -     size_t n_read;
>> -
>> -     file = igt_debugfs_fopen(filename, "r");
>> -     igt_assert(file);
>> -
>> -     n_read = fread(buf, 1, buf_size - 1, file);
>> -     igt_assert(n_read > 0);
>> -     igt_assert(feof(file));
>> -
>> -     buf[n_read] = '\0';
>> -
>> -     igt_assert(fclose(file) == 0);
>> -}
>> -
>>  static bool fbc_supported_on_chipset(void)
>>  {
>>       char buf[128];
>>
>> -     debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
>> +     igt_debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
>>       return !strstr(buf, "FBC unsupported on this chipset\n");
>>  }
>>
>> @@ -120,7 +103,7 @@ static bool fbc_is_enabled(void)
>>  {
>>       char buf[128];
>>
>> -     debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
>> +     igt_debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
>>       return strstr(buf, "FBC enabled\n");
>>  }
>>
>> @@ -172,7 +155,7 @@ static bool psr_supported_on_chipset(void)
>>  {
>>       char buf[256];
>>
>> -     debugfs_read("i915_edp_psr_status", buf, ARRAY_SIZE(buf));
>> +     igt_debugfs_read("i915_edp_psr_status", buf, ARRAY_SIZE(buf));
>>       return strstr(buf, "Sink_Support: yes\n");
>>  }
>>
>> @@ -185,7 +168,7 @@ static bool psr_is_enabled(void)
>>  {
>>       char buf[256];
>>
>> -     debugfs_read("i915_edp_psr_status", buf, ARRAY_SIZE(buf));
>> +     igt_debugfs_read("i915_edp_psr_status", buf, ARRAY_SIZE(buf));
>>       return strstr(buf, "\nActive: yes\n");
>>  }
>>
>> diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c
>> index e9be045..e162e91 100644
>> --- a/tests/kms_frontbuffer_tracking.c
>> +++ b/tests/kms_frontbuffer_tracking.c
>> @@ -556,28 +556,11 @@ static bool set_mode_for_params(struct modeset_params *params)
>>       return (rc == 0);
>>  }
>>
>> -static void debugfs_read(const char *filename, char *buf, int buf_size)
>> -{
>> -     FILE *file;
>> -     size_t n_read;
>> -
>> -     file = igt_debugfs_fopen(filename, "r");
>> -     igt_assert(file);
>> -
>> -     n_read = fread(buf, 1, buf_size - 1, file);
>> -     igt_assert(n_read > 0);
>> -     igt_assert(feof(file));
>> -
>> -     buf[n_read] = '\0';
>> -
>> -     igt_assert(fclose(file) == 0);
>> -}
>> -
>>  static bool fbc_is_enabled(void)
>>  {
>>       char buf[128];
>>
>> -     debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
>> +     igt_debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
>>       return strstr(buf, "FBC enabled\n");
>>  }
>>
>> @@ -585,7 +568,7 @@ static bool psr_is_enabled(void)
>>  {
>>       char buf[256];
>>
>> -     debugfs_read("i915_edp_psr_status", buf, ARRAY_SIZE(buf));
>> +     igt_debugfs_read("i915_edp_psr_status", buf, ARRAY_SIZE(buf));
>>       return (strstr(buf, "\nActive: yes\n"));
>>  }
>>
>> @@ -596,7 +579,7 @@ static struct timespec fbc_get_last_action(void)
>>       char *action;
>>       ssize_t n_read;
>>
>> -     debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
>> +     igt_debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
>>
>>       action = strstr(buf, "\nLast action:");
>>       igt_assert(action);
>> @@ -645,7 +628,7 @@ static void fbc_setup_last_action(void)
>>       char buf[128];
>>       char *action;
>>
>> -     debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
>> +     igt_debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
>>
>>       action = strstr(buf, "\nLast action:");
>>       if (!action) {
>> @@ -664,7 +647,7 @@ static bool fbc_is_compressing(void)
>>  {
>>       char buf[128];
>>
>> -     debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
>> +     igt_debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
>>       return strstr(buf, "\nCompressing: yes\n") != NULL;
>>  }
>>
>> @@ -677,7 +660,7 @@ static void fbc_setup_compressing(void)
>>  {
>>       char buf[128];
>>
>> -     debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
>> +     igt_debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
>>
>>       if (strstr(buf, "\nCompressing:"))
>>               fbc.supports_compressing = true;
>> @@ -1187,7 +1170,7 @@ static bool fbc_supported_on_chipset(void)
>>  {
>>       char buf[128];
>>
>> -     debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
>> +     igt_debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
>>       return !strstr(buf, "FBC unsupported on this chipset\n");
>>  }
>>
>> @@ -1211,7 +1194,7 @@ static bool psr_sink_has_support(void)
>>  {
>>       char buf[256];
>>
>> -     debugfs_read("i915_edp_psr_status", buf, ARRAY_SIZE(buf));
>> +     igt_debugfs_read("i915_edp_psr_status", buf, ARRAY_SIZE(buf));
>>       return strstr(buf, "Sink_Support: yes\n");
>>  }
>>
>> --
>> 2.1.4
>>
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx@lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> http://blog.ffwll.ch
diff mbox

Patch

diff --git a/lib/igt_debugfs.c b/lib/igt_debugfs.c
index a2c6fe2..bc1bb05 100644
--- a/lib/igt_debugfs.c
+++ b/lib/igt_debugfs.c
@@ -185,6 +185,33 @@  FILE *igt_debugfs_fopen(const char *filename,
 	return fopen(buf, mode);
 }
 
+/**
+ * igt_debugfs_read:
+ * @filename: file name
+ * @buf: buffer where the contents will be stored, allocated by the caller
+ * @buf_size: size of the buffer
+ *
+ * This function opens the debugfs file, reads it, stores the content in the
+ * provided buffer, then closes the file. Users should make sure that the buffer
+ * provided is big enough to fit the whole file, plus one byte.
+ */
+void igt_debugfs_read(const char *filename, char *buf, int buf_size)
+{
+	FILE *file;
+	size_t n_read;
+
+	file = igt_debugfs_fopen(filename, "r");
+	igt_assert(file);
+
+	n_read = fread(buf, 1, buf_size - 1, file);
+	igt_assert(n_read > 0);
+	igt_assert(feof(file));
+
+	buf[n_read] = '\0';
+
+	igt_assert(fclose(file) == 0);
+}
+
 /*
  * Pipe CRC
  */
diff --git a/lib/igt_debugfs.h b/lib/igt_debugfs.h
index ece7148..a0bb75e 100644
--- a/lib/igt_debugfs.h
+++ b/lib/igt_debugfs.h
@@ -34,6 +34,7 @@  enum pipe;
 int igt_debugfs_open(const char *filename, int mode);
 FILE *igt_debugfs_fopen(const char *filename,
 			const char *mode);
+void igt_debugfs_read(const char *filename, char *buf, int buf_size);
 
 /*
  * Pipe CRC
diff --git a/tests/kms_fbc_crc.c b/tests/kms_fbc_crc.c
index f2a86a6..28cc165 100644
--- a/tests/kms_fbc_crc.c
+++ b/tests/kms_fbc_crc.c
@@ -215,14 +215,9 @@  static void fill_mmap_gtt(data_t *data, uint32_t handle, unsigned char color)
 
 static bool fbc_enabled(data_t *data)
 {
-	FILE *status;
-	char str[64] = {};
+	char str[128] = {};
 
-	status = igt_debugfs_fopen("i915_fbc_status", "r");
-	igt_assert(status);
-
-	igt_assert(fread(str, 1, sizeof(str) - 1, status) > 0);
-	fclose(status);
+	igt_debugfs_read("i915_fbc_status", str, sizeof(str));
 	return strstr(str, "FBC enabled") != NULL;
 }
 
@@ -544,8 +539,7 @@  igt_main
 	igt_skip_on_simulation();
 
 	igt_fixture {
-		char buf[64];
-		FILE *status;
+		char buf[128];
 
 		data.drm_fd = drm_open_any_master();
 		kmstest_set_vt_graphics_mode();
@@ -554,11 +548,7 @@  igt_main
 
 		igt_require_pipe_crc();
 
-		status = igt_debugfs_fopen("i915_fbc_status", "r");
-		igt_require_f(status, "No i915_fbc_status found\n");
-		igt_assert_lt(0, fread(buf, 1, sizeof(buf), status));
-		fclose(status);
-		buf[sizeof(buf) - 1] = '\0';
+		igt_debugfs_read("i915_fbc_status", buf, sizeof(buf));
 		igt_require_f(!strstr(buf, "unsupported on this chipset"),
 			      "FBC not supported\n");
 
diff --git a/tests/kms_fbcon_fbt.c b/tests/kms_fbcon_fbt.c
index f075014..c201fde 100644
--- a/tests/kms_fbcon_fbt.c
+++ b/tests/kms_fbcon_fbt.c
@@ -86,28 +86,11 @@  static void teardown_drm(struct drm_info *drm)
 	igt_assert(close(drm->fd) == 0);
 }
 
-static void debugfs_read(const char *filename, char *buf, int buf_size)
-{
-	FILE *file;
-	size_t n_read;
-
-	file = igt_debugfs_fopen(filename, "r");
-	igt_assert(file);
-
-	n_read = fread(buf, 1, buf_size - 1, file);
-	igt_assert(n_read > 0);
-	igt_assert(feof(file));
-
-	buf[n_read] = '\0';
-
-	igt_assert(fclose(file) == 0);
-}
-
 static bool fbc_supported_on_chipset(void)
 {
 	char buf[128];
 
-	debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
+	igt_debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
 	return !strstr(buf, "FBC unsupported on this chipset\n");
 }
 
@@ -120,7 +103,7 @@  static bool fbc_is_enabled(void)
 {
 	char buf[128];
 
-	debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
+	igt_debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
 	return strstr(buf, "FBC enabled\n");
 }
 
@@ -172,7 +155,7 @@  static bool psr_supported_on_chipset(void)
 {
 	char buf[256];
 
-	debugfs_read("i915_edp_psr_status", buf, ARRAY_SIZE(buf));
+	igt_debugfs_read("i915_edp_psr_status", buf, ARRAY_SIZE(buf));
 	return strstr(buf, "Sink_Support: yes\n");
 }
 
@@ -185,7 +168,7 @@  static bool psr_is_enabled(void)
 {
 	char buf[256];
 
-	debugfs_read("i915_edp_psr_status", buf, ARRAY_SIZE(buf));
+	igt_debugfs_read("i915_edp_psr_status", buf, ARRAY_SIZE(buf));
 	return strstr(buf, "\nActive: yes\n");
 }
 
diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c
index e9be045..e162e91 100644
--- a/tests/kms_frontbuffer_tracking.c
+++ b/tests/kms_frontbuffer_tracking.c
@@ -556,28 +556,11 @@  static bool set_mode_for_params(struct modeset_params *params)
 	return (rc == 0);
 }
 
-static void debugfs_read(const char *filename, char *buf, int buf_size)
-{
-	FILE *file;
-	size_t n_read;
-
-	file = igt_debugfs_fopen(filename, "r");
-	igt_assert(file);
-
-	n_read = fread(buf, 1, buf_size - 1, file);
-	igt_assert(n_read > 0);
-	igt_assert(feof(file));
-
-	buf[n_read] = '\0';
-
-	igt_assert(fclose(file) == 0);
-}
-
 static bool fbc_is_enabled(void)
 {
 	char buf[128];
 
-	debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
+	igt_debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
 	return strstr(buf, "FBC enabled\n");
 }
 
@@ -585,7 +568,7 @@  static bool psr_is_enabled(void)
 {
 	char buf[256];
 
-	debugfs_read("i915_edp_psr_status", buf, ARRAY_SIZE(buf));
+	igt_debugfs_read("i915_edp_psr_status", buf, ARRAY_SIZE(buf));
 	return (strstr(buf, "\nActive: yes\n"));
 }
 
@@ -596,7 +579,7 @@  static struct timespec fbc_get_last_action(void)
 	char *action;
 	ssize_t n_read;
 
-	debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
+	igt_debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
 
 	action = strstr(buf, "\nLast action:");
 	igt_assert(action);
@@ -645,7 +628,7 @@  static void fbc_setup_last_action(void)
 	char buf[128];
 	char *action;
 
-	debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
+	igt_debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
 
 	action = strstr(buf, "\nLast action:");
 	if (!action) {
@@ -664,7 +647,7 @@  static bool fbc_is_compressing(void)
 {
 	char buf[128];
 
-	debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
+	igt_debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
 	return strstr(buf, "\nCompressing: yes\n") != NULL;
 }
 
@@ -677,7 +660,7 @@  static void fbc_setup_compressing(void)
 {
 	char buf[128];
 
-	debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
+	igt_debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
 
 	if (strstr(buf, "\nCompressing:"))
 		fbc.supports_compressing = true;
@@ -1187,7 +1170,7 @@  static bool fbc_supported_on_chipset(void)
 {
 	char buf[128];
 
-	debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
+	igt_debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
 	return !strstr(buf, "FBC unsupported on this chipset\n");
 }
 
@@ -1211,7 +1194,7 @@  static bool psr_sink_has_support(void)
 {
 	char buf[256];
 
-	debugfs_read("i915_edp_psr_status", buf, ARRAY_SIZE(buf));
+	igt_debugfs_read("i915_edp_psr_status", buf, ARRAY_SIZE(buf));
 	return strstr(buf, "Sink_Support: yes\n");
 }