[i-g-t,v3,4/5] tests/kms: Add parse_bitmask support for user

Joshi, Kunal1 kunal1.joshi at intel.com
Wed Apr 23 12:23:34 UTC 2025


Hello Pranay,

The new command-line option isn’t necessary. Anyone running a single 
test can already change the DRM debug mask on the fly with

echo 0x… > /sys/module/drm/parameters/debug

For CI jobs—where disk space is tight—add an environment variable such 
as |IGT_CI_RUN=1|.
Test cases known to exceed the predefined CI log limits should switch 
from the default verbose mask provided in boot parameters (for example 
|0x1E|) to a lighter mask that still captures the essentials logs.

Also have different masks documented somewhere so others also can do for 
the tests they are looking after.
Bit 0  (0x01) CORE      – DRM core paths
Bit 1  (0x02) DRIVER    – driver-specific code
Bit 2  (0x04) KMS       – modesetting
Bit 3  (0x08) PRIME     – dma-buf sharing
Bit 4  (0x10) ATOMIC    – atomic commits
Bit 5  (0x20) VBLANK    – vblank handling
Bit 7  (0x80) LEASE     – leasing infrastructure
Bit 8  (0x100) DP       – DisplayPort plumbing

Thanks and Regards
Kunal Joshi

On 01-04-2025 14:50, Pranay Samala wrote:
> The user can dynamically provide a mask during execution, giving them
> more control over the debug mask. This is useful in scenarios where
> different masks are needed for different tests or configurations without
> modifying the code itself.
>
> If the user does not provide a mask, the system defaults to 0x04. This
> ensures that the test can still run without requiring any extra input.
>
> Fixes: a2ab0ec12ef4 ("tests/kms_atomic_transition: Reducing debug loglevel dynamically")
> Fixes: 4baeb7397d71 ("tests/intel/kms_dp_linktrain_fallback: Reduce debug loglevel dynamically")
> Fixes: 7a8a3744466f ("tests/kms_cursor_legacy: Reduce debug loglevel dynamically")
> Signed-off-by: Pranay Samala<pranay.samala at intel.com>
> ---
>   tests/intel/kms_dp_linktrain_fallback.c | 37 +++++++++++++++++++------
>   tests/kms_atomic_transition.c           | 24 ++++++++--------
>   tests/kms_cursor_legacy.c               | 37 ++++++++++++++++++-------
>   3 files changed, 68 insertions(+), 30 deletions(-)
>
> diff --git a/tests/intel/kms_dp_linktrain_fallback.c b/tests/intel/kms_dp_linktrain_fallback.c
> index 6a872efd2..a6f7b586f 100644
> --- a/tests/intel/kms_dp_linktrain_fallback.c
> +++ b/tests/intel/kms_dp_linktrain_fallback.c
> @@ -608,12 +608,33 @@ static bool run_dsc_sst_fallaback_test(data_t *data)
>   	return ran;
>   }
>   
> -igt_main
> +static unsigned int parse_bitmask;
> +static unsigned int def_mask = 0x4;
> +
> +static int opt_handler(int opt, int opt_index, void *_data)
> +{
> +	switch (opt) {
> +	case 'b':
> +		parse_bitmask = strtoul(optarg, NULL, 16);
> +		break;
> +	}
> +
> +	return IGT_OPT_HANDLER_SUCCESS;
> +}
> +
> +static const struct option long_opts[] = {
> +	{ .name = "bitmask", .has_arg = true, .val = 'b', },
> +	{}
> +};
> +
> +static const char help_str[] =
> +	"  --bitmask\t\tSpecify a bitmask in hexadecimal\n";
> +
> +igt_main_args("", long_opts, help_str, opt_handler, NULL)
>   {
>   	data_t data = {};
>   
>   	igt_fixture {
> -		int dir, current_log_level;
>   		data.drm_fd = drm_open_driver_master(DRIVER_INTEL |
>   						     DRIVER_XE);
>   		kmstest_set_vt_graphics_mode();
> @@ -621,14 +642,12 @@ igt_main
>   		igt_display_require_output(&data.display);
>   		for_each_pipe(&data.display, data.pipe)
>   			data.n_pipes++;
> -		dir = igt_sysfs_drm_module_params_open();
> -		if (dir >= 0) {
> -			current_log_level = igt_drm_debug_level_get(dir);
> -			close(dir);
>   
> -			if (current_log_level > 10)
> -				igt_drm_debug_level_update(10);
> -		}
> +		if (parse_bitmask)
> +			igt_drm_debug_mask_update(parse_bitmask);
> +		else
> +			igt_drm_debug_mask_update(def_mask);
> +
>   		/*
>   		 * Some environments may have environment
>   		 * variable set to ignore long hpd, disable it for this test
> diff --git a/tests/kms_atomic_transition.c b/tests/kms_atomic_transition.c
> index 2b64424ce..a92edc2b1 100644
> --- a/tests/kms_atomic_transition.c
> +++ b/tests/kms_atomic_transition.c
> @@ -1096,6 +1096,9 @@ static bool pipe_output_combo_valid(igt_display_t *display,
>   	return ret;
>   }
>   
> +static unsigned int parse_bitmask;
> +static unsigned int def_mask = 0x4;
> +
>   static int opt_handler(int opt, int opt_index, void *_data)
>   {
>   	data_t *data = _data;
> @@ -1104,6 +1107,9 @@ static int opt_handler(int opt, int opt_index, void *_data)
>   	case 'e':
>   		data->extended = true;
>   		break;
> +	case 'b':
> +		parse_bitmask = strtoul(optarg, NULL, 16);
> +		break;
>   	}
>   
>   	return IGT_OPT_HANDLER_SUCCESS;
> @@ -1111,11 +1117,13 @@ static int opt_handler(int opt, int opt_index, void *_data)
>   
>   static const struct option long_opts[] = {
>   	{ .name = "extended", .has_arg = false, .val = 'e', },
> +	{ .name = "bitmask", .has_arg = true, .val = 'b', },
>   	{}
>   };

>   
>   static const char help_str[] =
> -	"  --extended\t\tRun the extended tests\n";
> +	"  --extended\t\tRun the extended tests\n"
> +	"  --bitmask\t\tSpecify a bitmask in hexadecimal\n";
>   
>   static data_t data;
>   
> @@ -1174,8 +1182,6 @@ igt_main_args("", long_opts, help_str, opt_handler, &data)
>   	int pipe_count = 0;
>   
>   	igt_fixture {
> -		int dir, current_log_level;
> -
>   		data.drm_fd = drm_open_driver_master(DRIVER_ANY);
>   
>   		kmstest_set_vt_graphics_mode();
> @@ -1188,14 +1194,10 @@ igt_main_args("", long_opts, help_str, opt_handler, &data)
>   		for_each_connected_output(&data.display, output)
>   			count++;
>   
> -		dir = igt_sysfs_drm_module_params_open();
> -		if (dir >= 0) {
> -			current_log_level = igt_drm_debug_level_get(dir);
> -			close(dir);
> -
> -			if (current_log_level > 10)
> -				igt_drm_debug_level_update(10);
> -		}
> +		if (parse_bitmask)
> +			igt_drm_debug_mask_update(parse_bitmask);
> +		else
> +			igt_drm_debug_mask_update(def_mask);
>   	}
>   
>   	igt_describe("Check toggling of primary plane with vblank");
> diff --git a/tests/kms_cursor_legacy.c b/tests/kms_cursor_legacy.c
> index 44f031e7b..09d511935 100644
> --- a/tests/kms_cursor_legacy.c
> +++ b/tests/kms_cursor_legacy.c
> @@ -1823,7 +1823,29 @@ static void modeset_atomic_cursor_hotspot(igt_display_t *display)
>   	igt_remove_fb(display->drm_fd, &cursor_fb);
>   }
>   
> -igt_main
> +static unsigned int parse_bitmask;
> +static unsigned int def_mask = 0x4;
> +
> +static int opt_handler(int opt, int opt_index, void *_data)
> +{
> +	switch (opt) {
> +	case 'b':
> +		parse_bitmask = strtoul(optarg, NULL, 16);
> +		break;
> +	}
> +
> +	return IGT_OPT_HANDLER_SUCCESS;
> +}
> +
> +static const struct option long_opts[] = {
> +	{ .name = "bitmask", .has_arg = true, .val = 'b', },
> +	{}
> +};
> +
> +static const char help_str[] =
> +	"  --bitmask\t\tSpecify a bitmask in hexadecimal\n";
> +
> +igt_main_args("", long_opts, help_str, opt_handler, NULL)
>   {
>   	const int ncpus = sysconf(_SC_NPROCESSORS_ONLN);
>   	igt_display_t display = { .drm_fd = -1 };
> @@ -1839,7 +1861,6 @@ igt_main
>   	};
>   
>   	igt_fixture {
> -		int dir, current_log_level;
>   		display.drm_fd = drm_open_driver_master(DRIVER_ANY);
>   		kmstest_set_vt_graphics_mode();
>   
> @@ -1851,14 +1872,10 @@ igt_main
>   		 */
>   		intel_psr2_restore = i915_psr2_sel_fetch_to_psr1(display.drm_fd, NULL);
>   
> -		dir = igt_sysfs_drm_module_params_open();
> -		if (dir >= 0) {
> -			current_log_level = igt_drm_debug_level_get(dir);
> -			close(dir);
> -
> -			if (current_log_level > 10)
> -				igt_drm_debug_level_update(10);
> -		}
> +		if (parse_bitmask)
> +			igt_drm_debug_mask_update(parse_bitmask);
> +		else
> +			igt_drm_debug_mask_update(def_mask);
>   	}
>   
>   	igt_describe("Test checks how many cursor updates we can fit between vblanks "
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/igt-dev/attachments/20250423/fdb47b9b/attachment.htm>


More information about the igt-dev mailing list