mirror of
https://github.com/tiagovignatti/intel-gpu-tools.git
synced 2025-06-21 14:56:18 +00:00
lib: add igt_debugfs_read()
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. v2: Add the macro to wrap sizeof() (Daniel). v3: Add documentation for the macro too (Daniel). Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
This commit is contained in:
parent
ffd7321c70
commit
995f2738ad
@ -185,6 +185,33 @@ FILE *igt_debugfs_fopen(const char *filename,
|
|||||||
return fopen(buf, mode);
|
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
|
* Pipe CRC
|
||||||
*/
|
*/
|
||||||
|
@ -34,6 +34,18 @@ enum pipe;
|
|||||||
int igt_debugfs_open(const char *filename, int mode);
|
int igt_debugfs_open(const char *filename, int mode);
|
||||||
FILE *igt_debugfs_fopen(const char *filename,
|
FILE *igt_debugfs_fopen(const char *filename,
|
||||||
const char *mode);
|
const char *mode);
|
||||||
|
void __igt_debugfs_read(const char *filename, char *buf, int buf_size);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* igt_debugfs_read:
|
||||||
|
* @filename: name of the debugfs file
|
||||||
|
* @buf: buffer where the contents will be stored, allocated by the caller.
|
||||||
|
*
|
||||||
|
* This is just a convenience wrapper for __igt_debugfs_read. See its
|
||||||
|
* documentation.
|
||||||
|
*/
|
||||||
|
#define igt_debugfs_read(filename, buf) \
|
||||||
|
__igt_debugfs_read((filename), (buf), sizeof(buf))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Pipe CRC
|
* Pipe CRC
|
||||||
|
@ -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)
|
static bool fbc_enabled(data_t *data)
|
||||||
{
|
{
|
||||||
FILE *status;
|
char str[128] = {};
|
||||||
char str[64] = {};
|
|
||||||
|
|
||||||
status = igt_debugfs_fopen("i915_fbc_status", "r");
|
igt_debugfs_read("i915_fbc_status", str);
|
||||||
igt_assert(status);
|
|
||||||
|
|
||||||
igt_assert(fread(str, 1, sizeof(str) - 1, status) > 0);
|
|
||||||
fclose(status);
|
|
||||||
return strstr(str, "FBC enabled") != NULL;
|
return strstr(str, "FBC enabled") != NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -544,8 +539,7 @@ igt_main
|
|||||||
igt_skip_on_simulation();
|
igt_skip_on_simulation();
|
||||||
|
|
||||||
igt_fixture {
|
igt_fixture {
|
||||||
char buf[64];
|
char buf[128];
|
||||||
FILE *status;
|
|
||||||
|
|
||||||
data.drm_fd = drm_open_any_master();
|
data.drm_fd = drm_open_any_master();
|
||||||
kmstest_set_vt_graphics_mode();
|
kmstest_set_vt_graphics_mode();
|
||||||
@ -554,11 +548,7 @@ igt_main
|
|||||||
|
|
||||||
igt_require_pipe_crc();
|
igt_require_pipe_crc();
|
||||||
|
|
||||||
status = igt_debugfs_fopen("i915_fbc_status", "r");
|
igt_debugfs_read("i915_fbc_status", buf);
|
||||||
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_require_f(!strstr(buf, "unsupported on this chipset"),
|
igt_require_f(!strstr(buf, "unsupported on this chipset"),
|
||||||
"FBC not supported\n");
|
"FBC not supported\n");
|
||||||
|
|
||||||
|
@ -86,28 +86,11 @@ static void teardown_drm(struct drm_info *drm)
|
|||||||
igt_assert(close(drm->fd) == 0);
|
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)
|
static bool fbc_supported_on_chipset(void)
|
||||||
{
|
{
|
||||||
char buf[128];
|
char buf[128];
|
||||||
|
|
||||||
debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
|
igt_debugfs_read("i915_fbc_status", buf);
|
||||||
return !strstr(buf, "FBC unsupported on this chipset\n");
|
return !strstr(buf, "FBC unsupported on this chipset\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -120,7 +103,7 @@ static bool fbc_is_enabled(void)
|
|||||||
{
|
{
|
||||||
char buf[128];
|
char buf[128];
|
||||||
|
|
||||||
debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
|
igt_debugfs_read("i915_fbc_status", buf);
|
||||||
return strstr(buf, "FBC enabled\n");
|
return strstr(buf, "FBC enabled\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,7 +155,7 @@ static bool psr_supported_on_chipset(void)
|
|||||||
{
|
{
|
||||||
char buf[256];
|
char buf[256];
|
||||||
|
|
||||||
debugfs_read("i915_edp_psr_status", buf, ARRAY_SIZE(buf));
|
igt_debugfs_read("i915_edp_psr_status", buf);
|
||||||
return strstr(buf, "Sink_Support: yes\n");
|
return strstr(buf, "Sink_Support: yes\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -185,7 +168,7 @@ static bool psr_is_enabled(void)
|
|||||||
{
|
{
|
||||||
char buf[256];
|
char buf[256];
|
||||||
|
|
||||||
debugfs_read("i915_edp_psr_status", buf, ARRAY_SIZE(buf));
|
igt_debugfs_read("i915_edp_psr_status", buf);
|
||||||
return strstr(buf, "\nActive: yes\n");
|
return strstr(buf, "\nActive: yes\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -556,28 +556,11 @@ static bool set_mode_for_params(struct modeset_params *params)
|
|||||||
return (rc == 0);
|
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)
|
static bool fbc_is_enabled(void)
|
||||||
{
|
{
|
||||||
char buf[128];
|
char buf[128];
|
||||||
|
|
||||||
debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
|
igt_debugfs_read("i915_fbc_status", buf);
|
||||||
return strstr(buf, "FBC enabled\n");
|
return strstr(buf, "FBC enabled\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -585,7 +568,7 @@ static bool psr_is_enabled(void)
|
|||||||
{
|
{
|
||||||
char buf[256];
|
char buf[256];
|
||||||
|
|
||||||
debugfs_read("i915_edp_psr_status", buf, ARRAY_SIZE(buf));
|
igt_debugfs_read("i915_edp_psr_status", buf);
|
||||||
return (strstr(buf, "\nActive: yes\n"));
|
return (strstr(buf, "\nActive: yes\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -596,7 +579,7 @@ static struct timespec fbc_get_last_action(void)
|
|||||||
char *action;
|
char *action;
|
||||||
ssize_t n_read;
|
ssize_t n_read;
|
||||||
|
|
||||||
debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
|
igt_debugfs_read("i915_fbc_status", buf);
|
||||||
|
|
||||||
action = strstr(buf, "\nLast action:");
|
action = strstr(buf, "\nLast action:");
|
||||||
igt_assert(action);
|
igt_assert(action);
|
||||||
@ -645,7 +628,7 @@ static void fbc_setup_last_action(void)
|
|||||||
char buf[128];
|
char buf[128];
|
||||||
char *action;
|
char *action;
|
||||||
|
|
||||||
debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
|
igt_debugfs_read("i915_fbc_status", buf);
|
||||||
|
|
||||||
action = strstr(buf, "\nLast action:");
|
action = strstr(buf, "\nLast action:");
|
||||||
if (!action) {
|
if (!action) {
|
||||||
@ -664,7 +647,7 @@ static bool fbc_is_compressing(void)
|
|||||||
{
|
{
|
||||||
char buf[128];
|
char buf[128];
|
||||||
|
|
||||||
debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
|
igt_debugfs_read("i915_fbc_status", buf);
|
||||||
return strstr(buf, "\nCompressing: yes\n") != NULL;
|
return strstr(buf, "\nCompressing: yes\n") != NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -677,7 +660,7 @@ static void fbc_setup_compressing(void)
|
|||||||
{
|
{
|
||||||
char buf[128];
|
char buf[128];
|
||||||
|
|
||||||
debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
|
igt_debugfs_read("i915_fbc_status", buf);
|
||||||
|
|
||||||
if (strstr(buf, "\nCompressing:"))
|
if (strstr(buf, "\nCompressing:"))
|
||||||
fbc.supports_compressing = true;
|
fbc.supports_compressing = true;
|
||||||
@ -1205,7 +1188,7 @@ static bool fbc_supported_on_chipset(void)
|
|||||||
{
|
{
|
||||||
char buf[128];
|
char buf[128];
|
||||||
|
|
||||||
debugfs_read("i915_fbc_status", buf, ARRAY_SIZE(buf));
|
igt_debugfs_read("i915_fbc_status", buf);
|
||||||
return !strstr(buf, "FBC unsupported on this chipset\n");
|
return !strstr(buf, "FBC unsupported on this chipset\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1229,7 +1212,7 @@ static bool psr_sink_has_support(void)
|
|||||||
{
|
{
|
||||||
char buf[256];
|
char buf[256];
|
||||||
|
|
||||||
debugfs_read("i915_edp_psr_status", buf, ARRAY_SIZE(buf));
|
igt_debugfs_read("i915_edp_psr_status", buf);
|
||||||
return strstr(buf, "Sink_Support: yes\n");
|
return strstr(buf, "Sink_Support: yes\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user