[igt-dev] [PATCH igt] tests/msm: Read the devcore back in recovery tests

Kamil Konieczny kamil.konieczny at linux.intel.com
Mon Dec 12 14:13:47 UTC 2022


Hi Rob,

before sending again please rebase on current igt (see logs from
gitlab).
I have also one small nit below.

On 2022-12-11 at 11:53:02 -0800, Rob Clark wrote:
> From: Rob Clark <robdclark at chromium.org>
> 
> This also adds coverage for codepaths related to reading back the
> devcore file from sysfs, to help catch issues like
> https://gitlab.freedesktop.org/drm/msm/-/issues/20
> 
> Signed-off-by: Rob Clark <robdclark at chromium.org>
> ---
>  tests/msm/msm_recovery.c | 42 ++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 42 insertions(+)
> 
> diff --git a/tests/msm/msm_recovery.c b/tests/msm/msm_recovery.c
> index e01087b4..4c2f2846 100644
> --- a/tests/msm/msm_recovery.c
> +++ b/tests/msm/msm_recovery.c
> @@ -22,14 +22,54 @@
>   */
>  
>  #include <fcntl.h>
> +#include <glob.h>
>  
>  #include "igt.h"
>  #include "igt_msm.h"
> +#include "igt_io.h"
>  
>  static struct msm_device *dev;
>  static struct msm_bo *scratch_bo;
>  static uint32_t *scratch;
>  
> +/*
> + * Helper to read and clear devcore.  We want to read it completely to ensure
> + * we catch any kernel side regressions like:
> + * https://gitlab.freedesktop.org/drm/msm/-/issues/20
> + */
> +
> +static void
> +read_and_clear_devcore(void)
> +{
> +	glob_t glob_buf = {0};
> +	int ret, fd;
> +
> +	ret = glob("/sys/class/devcoredump/devcd*/data", GLOB_NOSORT, NULL, &glob_buf);
> +	if ((ret == GLOB_NOMATCH) || !glob_buf.gl_pathc)
> +		return;
> +
> +	fd = open(glob_buf.gl_pathv[0], O_RDWR);
> +
> +	if (fd >= 0) {
> +		char buf[0x1000];
> +
> +		/*
> +		 * We want to read the entire file but we can throw away the
> +		 * contents.. we just want to make sure that we exercise the
> +		 * kernel side codepaths hit when reading the devcore from
> +		 * sysfs
> +		 */
> +		do {
> +			ret = igt_readn(fd, buf, sizeof(buf));
> +		} while (ret > 0);
> +
> +		/* Clear the devcore: */
> +		igt_writen(fd, "1", 1);

Put here:
		fclose(fd);

Regards,
Kamil

> +	}
> +
> +	globfree(&glob_buf);
> +}
> +
>  /*
>   * Helpers for cmdstream packet building:
>   */
> @@ -102,6 +142,8 @@ do_hang_test(struct msm_pipe *pipe)
>  			continue;
>  		igt_assert_eq(scratch[1+i], 2+i);
>  	}
> +
> +	read_and_clear_devcore();
>  }
>  
>  /*
> -- 
> 2.38.1
> 


More information about the igt-dev mailing list