mirror of
				https://github.com/tiagovignatti/intel-gpu-tools.git
				synced 2025-11-04 03:58:27 +00:00 
			
		
		
		
	lib: igt_fork_hang_helper must be run in fixtures
Because it opens an intel-specific drm fd. Fixes crashes when running igt on no-intel. Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
This commit is contained in:
		
							parent
							
								
									39e44dfa4c
								
							
						
					
					
						commit
						d8d1eab318
					
				
							
								
								
									
										23
									
								
								lib/igt_gt.c
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								lib/igt_gt.c
									
									
									
									
									
								
							@ -190,31 +190,22 @@ hang_helper_process(pid_t pid, int fd)
 | 
			
		||||
 * This is useful to exercise slow running code (such as aperture placement)
 | 
			
		||||
 * which needs to be robust against a GPU reset.
 | 
			
		||||
 *
 | 
			
		||||
 * In tests with subtests this function can be called outside of failure
 | 
			
		||||
 * catching code blocks like #igt_fixture or #igt_subtest.
 | 
			
		||||
 * This function automatically skips when test requirements aren't met using
 | 
			
		||||
 * igt_skip().
 | 
			
		||||
 */
 | 
			
		||||
int igt_fork_hang_helper(void)
 | 
			
		||||
void igt_fork_hang_helper(void)
 | 
			
		||||
{
 | 
			
		||||
	int fd, gen;
 | 
			
		||||
 | 
			
		||||
	if (igt_only_list_subtests())
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	fd = drm_open_driver(DRIVER_INTEL);
 | 
			
		||||
	if (fd == -1)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	gen = intel_gen(intel_get_drm_devid(fd));
 | 
			
		||||
	if (gen < 5) {
 | 
			
		||||
		close(fd);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	igt_skip_on(gen < 5);
 | 
			
		||||
 | 
			
		||||
	igt_fork_helper(&hang_helper)
 | 
			
		||||
		hang_helper_process(getppid(), fd);
 | 
			
		||||
 | 
			
		||||
	close(fd);
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -227,10 +218,8 @@ int igt_fork_hang_helper(void)
 | 
			
		||||
 */
 | 
			
		||||
void igt_stop_hang_helper(void)
 | 
			
		||||
{
 | 
			
		||||
	if (igt_only_list_subtests())
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	igt_stop_helper(&hang_helper);
 | 
			
		||||
	if (hang_helper.running)
 | 
			
		||||
		igt_stop_helper(&hang_helper);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 | 
			
		||||
@ -36,7 +36,7 @@ typedef struct igt_hang_ring {
 | 
			
		||||
struct igt_hang_ring igt_hang_ring(int fd, int ring);
 | 
			
		||||
void igt_post_hang_ring(int fd, struct igt_hang_ring arg);
 | 
			
		||||
 | 
			
		||||
int igt_fork_hang_helper(void);
 | 
			
		||||
void igt_fork_hang_helper(void);
 | 
			
		||||
void igt_stop_hang_helper(void);
 | 
			
		||||
 | 
			
		||||
int igt_open_forcewake_handle(void);
 | 
			
		||||
 | 
			
		||||
@ -220,22 +220,22 @@ igt_main
 | 
			
		||||
		major_evictions(fd, size, count);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (igt_fork_hang_helper()) {
 | 
			
		||||
		igt_subtest("minor-hang") {
 | 
			
		||||
			size = 1024 * 1024;
 | 
			
		||||
			count = 3*gem_aperture_size(fd) / size / 4;
 | 
			
		||||
			minor_evictions(fd, size, count);
 | 
			
		||||
		}
 | 
			
		||||
	igt_subtest("minor-hang") {
 | 
			
		||||
		igt_fork_hang_helper();
 | 
			
		||||
		size = 1024 * 1024;
 | 
			
		||||
		count = 3*gem_aperture_size(fd) / size / 4;
 | 
			
		||||
		minor_evictions(fd, size, count);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
		igt_subtest("major-hang") {
 | 
			
		||||
			size = 3*gem_aperture_size(fd) / 4;
 | 
			
		||||
			count = 4;
 | 
			
		||||
			major_evictions(fd, size, count);
 | 
			
		||||
		}
 | 
			
		||||
		igt_stop_hang_helper();
 | 
			
		||||
	igt_subtest("major-hang") {
 | 
			
		||||
		size = 3*gem_aperture_size(fd) / 4;
 | 
			
		||||
		count = 4;
 | 
			
		||||
		major_evictions(fd, size, count);
 | 
			
		||||
	}
 | 
			
		||||
	igt_stop_signal_helper();
 | 
			
		||||
 | 
			
		||||
	igt_fixture
 | 
			
		||||
	igt_fixture {
 | 
			
		||||
		igt_stop_hang_helper();
 | 
			
		||||
		close(fd);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -243,32 +243,32 @@ igt_main
 | 
			
		||||
		test_major_evictions(fd, size, count);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (igt_fork_hang_helper()) {
 | 
			
		||||
		igt_fixture {
 | 
			
		||||
			size = 1024 * 1024;
 | 
			
		||||
			count = 3*gem_aperture_size(fd) / size / 4;
 | 
			
		||||
		}
 | 
			
		||||
	igt_fixture {
 | 
			
		||||
		igt_fork_hang_helper();
 | 
			
		||||
 | 
			
		||||
		igt_subtest("mlocked-hang")
 | 
			
		||||
			test_mlocked_evictions(fd, size, count);
 | 
			
		||||
 | 
			
		||||
		igt_subtest("swapping-hang")
 | 
			
		||||
			test_swapping_evictions(fd, size, count);
 | 
			
		||||
 | 
			
		||||
		igt_subtest("minor-hang")
 | 
			
		||||
			test_minor_evictions(fd, size, count);
 | 
			
		||||
 | 
			
		||||
		igt_subtest("major-hang") {
 | 
			
		||||
			size = 3*gem_aperture_size(fd) / 4;
 | 
			
		||||
			count = 4;
 | 
			
		||||
			test_major_evictions(fd, size, count);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		igt_stop_hang_helper();
 | 
			
		||||
		size = 1024 * 1024;
 | 
			
		||||
		count = 3*gem_aperture_size(fd) / size / 4;
 | 
			
		||||
	}
 | 
			
		||||
	igt_stop_signal_helper();
 | 
			
		||||
 | 
			
		||||
	igt_subtest("mlocked-hang")
 | 
			
		||||
		test_mlocked_evictions(fd, size, count);
 | 
			
		||||
 | 
			
		||||
	igt_subtest("swapping-hang")
 | 
			
		||||
		test_swapping_evictions(fd, size, count);
 | 
			
		||||
 | 
			
		||||
	igt_subtest("minor-hang")
 | 
			
		||||
		test_minor_evictions(fd, size, count);
 | 
			
		||||
 | 
			
		||||
	igt_subtest("major-hang") {
 | 
			
		||||
		size = 3*gem_aperture_size(fd) / 4;
 | 
			
		||||
		count = 4;
 | 
			
		||||
		test_major_evictions(fd, size, count);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	igt_stop_hang_helper();
 | 
			
		||||
 | 
			
		||||
	igt_fixture {
 | 
			
		||||
		igt_stop_signal_helper();
 | 
			
		||||
		close(fd);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user