[igt-dev] [PATCH i-g-t 2/2] tests/debugfs_test: Add subtest guc_log_relay

Chris Wilson chris at chris-wilson.co.uk
Tue Apr 10 14:06:31 UTC 2018


Quoting Piotr Piórkowski (2018-04-10 14:52:27)
> We doesn't have any tests to verify functionality of i915_guc_log_relay.
> I think we should test this component.
> 
> Let's add simple subtest to debugfs_test, which will test:
> - opening the i915_guc_log_relay and creating a file guc_log0,
> - flushing GuC log buffer,
> - closing i915_guc_log_relay with removing from debugfs guc_log0.
> 
> Signed-off-by: Piotr Piórkowski <piotr.piorkowski at intel.com>
> Cc: Sagar Arun Kamble <sagar.a.kamble at intel.com>
> Cc: Lukasz Fiedorowicz <lukasz.fiedorowicz at intel.com>
> Cc: Michal Wajdeczko <michal.wajdeczko at intel.com>
> Cc: Michał Winiarski <michal.winiarski at intel.com>
> ---
>  tests/debugfs_test.c | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 87 insertions(+)
> 
> diff --git a/tests/debugfs_test.c b/tests/debugfs_test.c
> index 2e87e442..f9a859a4 100644
> --- a/tests/debugfs_test.c
> +++ b/tests/debugfs_test.c
> @@ -87,6 +87,18 @@ static void read_and_discard_sysfs_entries(int path_fd, int indent)
>         closedir(dir);
>  }
>  
> +static bool is_guc_loaded(int gfx_fd)
> +{
> +       bool load = false;
> +
> +       // Look for: "status: fetch SUCCESS, load SUCCESS" in debugfs
> +       load = igt_debugfs_search(gfx_fd, "i915_guc_load_status",
> +       "    status: fetch SUCCESS, load SUCCESS");
> +       igt_debug("GuC %s loaded\n", load ? "is" : "is not");
> +
> +       return load;
> +}
> +
>  igt_main
>  {
>         int fd = -1, debugfs;
> @@ -173,6 +185,81 @@ igt_main
>                 igt_success();
>         }
>  
> +       igt_subtest("guc_log_relay") {
> +
> +               #define I915_GUC_LOG_RELAY_FILE  "i915_guc_log_relay"
> +               #define GUC_LOG_FILE  "guc_log0"
> +
> +               int page_size = getpagesize();
> +               int gen;
> +               int fd_relay = -1, fd_log = -1;
> +               int sysfs_parameters_dir;
> +               ssize_t read_size;
> +               uint32_t enable_guc_param;
> +               uint8_t *buffer = malloc(page_size);
> +
> +               gen = intel_gen(intel_get_drm_devid(fd));
> +               igt_require(gen >= 9);
> +
> +               /* We check if the guc is enabled in i915 parameters*/
> +               sysfs_parameters_dir = igt_sysfs_open_parameters(fd);
> +               igt_assert(sysfs_parameters_dir >= 0);
> +               enable_guc_param = igt_sysfs_get_u32(sysfs_parameters_dir,
> +                                                       "enable_guc");
> +               igt_require(enable_guc_param != 0);

If you need the guc, load the guc. This isn't a general debugfs test.

> +
> +               /* GuC should be loaded */
> +               igt_assert(is_guc_loaded(fd));
> +
> +               debugfs = igt_debugfs_dir(fd);
> +
> +               fd_relay = openat(debugfs, I915_GUC_LOG_RELAY_FILE, O_RDWR);
> +               igt_assert(fd_relay > 0);
> +
> +               /*
> +                * The GUC_LOG_FILE should be created
> +                *      after opening the I915_GUC_LOG_RELAY_FILE file
> +                */
> +               fd_log = igt_debugfs_open(fd, GUC_LOG_FILE, O_RDONLY);
> +               igt_assert(fd_log > 0);
> +
> +               /*
> +                * We want to check flush and read from GUC_LOG_FILE.
> +                * First, we read all available bytes from buffer
> +                * (if any bytes are ready to be read).
> +                */
> +
> +               do {
> +                       read_size = read(fd_log, buffer, page_size);
> +                       igt_debug("Shall attempt to read %d bytes from file %s. \
> +                                       The number of bytes actually read: %li\n",
> +                                       page_size, GUC_LOG_FILE, read_size);
> +               } while (read_size != 0);
> +
> +               /*
> +                * When buffer is empty, we trigger a flush
> +                * by sending anything to the file I915_GUC_LOG_RELAY_FILE
> +                */
> +               write(fd_relay, buffer, 1);
> +
> +               /* We read again and now we should get some bytes */
> +               read_size = read(fd_log, buffer, page_size);
> +               igt_debug("Shall attempt to read %d bytes from file %s. \
> +                               The number of bytes actually read: %li\n",
> +                               page_size, GUC_LOG_FILE, read_size);
> +               igt_assert(read_size > 0);
> +
> +               /*
> +                * Now we try close the I915_GUC_LOG_RELAY_FILE file.
> +                * This should cause the GUC_LOG_FILE file to be closed
> +                * and removed from debugfs
> +                */
> +               close(fd_relay);
> +               igt_assert(!igt_debugfs_is_file_exists(fd, GUC_LOG_FILE));

Pardon?
-Chris


More information about the igt-dev mailing list