[igt-dev] [PATCH i-g-t] runner: Use 'abort' as result if a test caused an abort

Kamil Konieczny kamil.konieczny at linux.intel.com
Tue Nov 15 16:51:55 UTC 2022


On 2022-11-15 at 13:50:02 +0200, Petri Latvala wrote:
> ... when possible, which is when using socket comms.
--^ Please put here words. With that fixed

Reviewed-by: Kamil Konieczny <kamil.konieczny at linux.intel.com>

> 
> Signed-off-by: Petri Latvala <petri.latvala at intel.com>
> Cc: Arkadiusz Hiler <arek at hiler.eu>
> Cc: Kamil Konieczny <kamil.konieczny at linux.intel.com>
> ---
> 
> This changes result types for everything that causes a taint. The plan
> is to re-run this change in premerge testing multiple times to flush
> out as many of those cases as possible to adjust the cibuglog filters
> for existing issues before merging.
> 
> 
>  runner/executor.c | 40 +++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 39 insertions(+), 1 deletion(-)
> 
> diff --git a/runner/executor.c b/runner/executor.c
> index 2feef2c9..94d97948 100644
> --- a/runner/executor.c
> +++ b/runner/executor.c
> @@ -2164,6 +2164,31 @@ static void code_coverage_stop(struct settings *settings, const char *job_name,
>  	run_as_root(argv, sigfd, abortreason);
>  }
>  
> +/* Open the comms file if the test used socket comms */
> +static int open_comms_if_valid(int resdirfd, size_t testidx)
> +{
> +	struct comms_visitor emptyvisitor = {};
> +	char name[32];
> +	int dirfd, commsfd;
> +
> +	snprintf(name, sizeof(name), "%zd", testidx);
> +	dirfd = openat(resdirfd, name, O_DIRECTORY | O_RDONLY);
> +	if (dirfd < 0)
> +		return -1;
> +
> +	commsfd = openat(dirfd, "comms", O_RDWR);
> +	close(dirfd);
> +
> +	if (commsfd < 0)
> +		return -1;
> +
> +	if (comms_read_dump(commsfd, &emptyvisitor) == COMMSPARSE_SUCCESS)
> +		return commsfd;
> +
> +	close(commsfd);
> +	return -1;
> +}
> +
>  bool execute(struct execute_state *state,
>  	     struct settings *settings,
>  	     struct job_list *job_list)
> @@ -2320,7 +2345,20 @@ bool execute(struct execute_state *state,
>  			char *next = (state->next + 1 < job_list->size ?
>  				      entry_display_name(&job_list->entries[state->next + 1]) :
>  				      strdup("nothing"));
> -			write_abort_file(resdirfd, reason, prev, next);
> +			int commsfd;
> +
> +			commsfd = open_comms_if_valid(resdirfd, state->next);
> +			if (commsfd >= 0) {
> +				lseek(commsfd, 0, SEEK_END);
> +				write_packet_with_canary(commsfd, runnerpacket_log(STDOUT_FILENO, "\nThis test caused an abort condition: "), false);
> +				write_packet_with_canary(commsfd, runnerpacket_log(STDOUT_FILENO, reason), false);
> +				write_packet_with_canary(commsfd, runnerpacket_resultoverride("abort"), settings->sync);
> +
> +				close(commsfd);
> +			} else {
> +				write_abort_file(resdirfd, reason, prev, next);
> +			}
> +
>  			free(prev);
>  			free(next);
>  			free(reason);
> -- 
> 2.30.2
> 


More information about the igt-dev mailing list