* [PATCH i-g-t 01/12] tests/amdgpu/amd_mode_switch: Prepare for returning NULL from igt_crtc_for_pipe()
2026-03-16 11:19 [PATCH i-g-t 00/12] Prepare for returning NULL from igt_crtc_for_pipe() Jani Nikula
@ 2026-03-16 11:19 ` Jani Nikula
2026-03-18 18:01 ` Kamil Konieczny
2026-03-16 11:19 ` [PATCH i-g-t 02/12] tests/amdgpu/amd_multidisplay_modeset: " Jani Nikula
` (15 subsequent siblings)
16 siblings, 1 reply; 26+ messages in thread
From: Jani Nikula @ 2026-03-16 11:19 UTC (permalink / raw)
To: igt-dev; +Cc: jani.nikula
After checking there are enough pipes, AMD should always have the
CRTCs. Assert that the CRTC is valid.
This prepares for returning NULL for invalid pipes from
igt_crtc_for_pipe() by ensuring the test logic is sound.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
tests/amdgpu/amd_mode_switch.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/tests/amdgpu/amd_mode_switch.c b/tests/amdgpu/amd_mode_switch.c
index 4da07c412996..ffa2952bb5c2 100644
--- a/tests/amdgpu/amd_mode_switch.c
+++ b/tests/amdgpu/amd_mode_switch.c
@@ -98,6 +98,8 @@ static void run_mode_switch_first_last(data_t *data, int num_pipes)
for (j = 0; j < num_pipes; j++) {
igt_crtc_t *crtc = igt_crtc_for_pipe(display, j);
+ igt_assert_f(crtc->valid, "There is no pipe %s\n", kmstest_pipe_name(j));
+
output = data->output[j];
if (!igt_output_is_connected(output))
continue;
--
2.47.3
^ permalink raw reply related [flat|nested] 26+ messages in thread* Re: [PATCH i-g-t 01/12] tests/amdgpu/amd_mode_switch: Prepare for returning NULL from igt_crtc_for_pipe()
2026-03-16 11:19 ` [PATCH i-g-t 01/12] tests/amdgpu/amd_mode_switch: " Jani Nikula
@ 2026-03-18 18:01 ` Kamil Konieczny
2026-03-18 20:01 ` Harry Wentland
0 siblings, 1 reply; 26+ messages in thread
From: Kamil Konieczny @ 2026-03-18 18:01 UTC (permalink / raw)
To: Jani Nikula; +Cc: igt-dev, Aurabindo Pillai, Harry Wentland, Vitaly Prosyak
Hi Jani,
On 2026-03-16 at 13:19:03 +0200, Jani Nikula wrote:
> After checking there are enough pipes, AMD should always have the
> CRTCs. Assert that the CRTC is valid.
>
> This prepares for returning NULL for invalid pipes from
> igt_crtc_for_pipe() by ensuring the test logic is sound.
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
+cc AMD devs
Cc: Aurabindo Pillai <aurabindo.pillai@amd.com>
Cc: Harry Wentland <harry.wentland@amd.com>
Cc: Vitaly Prosyak <vitaly.prosyak@amd.com>
> ---
> tests/amdgpu/amd_mode_switch.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/tests/amdgpu/amd_mode_switch.c b/tests/amdgpu/amd_mode_switch.c
> index 4da07c412996..ffa2952bb5c2 100644
> --- a/tests/amdgpu/amd_mode_switch.c
> +++ b/tests/amdgpu/amd_mode_switch.c
> @@ -98,6 +98,8 @@ static void run_mode_switch_first_last(data_t *data, int num_pipes)
> for (j = 0; j < num_pipes; j++) {
> igt_crtc_t *crtc = igt_crtc_for_pipe(display, j);
>
> + igt_assert_f(crtc->valid, "There is no pipe %s\n", kmstest_pipe_name(j));
> +
> output = data->output[j];
> if (!igt_output_is_connected(output))
> continue;
> --
> 2.47.3
>
^ permalink raw reply [flat|nested] 26+ messages in thread* Re: [PATCH i-g-t 01/12] tests/amdgpu/amd_mode_switch: Prepare for returning NULL from igt_crtc_for_pipe()
2026-03-18 18:01 ` Kamil Konieczny
@ 2026-03-18 20:01 ` Harry Wentland
2026-03-18 21:00 ` Alex Hung
2026-03-19 8:36 ` Jani Nikula
0 siblings, 2 replies; 26+ messages in thread
From: Harry Wentland @ 2026-03-18 20:01 UTC (permalink / raw)
To: Kamil Konieczny, Jani Nikula, igt-dev, Aurabindo Pillai,
Vitaly Prosyak
On 2026-03-18 14:01, Kamil Konieczny wrote:
> Hi Jani,
> On 2026-03-16 at 13:19:03 +0200, Jani Nikula wrote:
>> After checking there are enough pipes, AMD should always have the
>> CRTCs. Assert that the CRTC is valid.
>>
>> This prepares for returning NULL for invalid pipes from
>> igt_crtc_for_pipe() by ensuring the test logic is sound.
>>
>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>
> +cc AMD devs
> Cc: Aurabindo Pillai <aurabindo.pillai@amd.com>
> Cc: Harry Wentland <harry.wentland@amd.com>
> Cc: Vitaly Prosyak <vitaly.prosyak@amd.com>
>
>> ---
>> tests/amdgpu/amd_mode_switch.c | 2 ++
>> 1 file changed, 2 insertions(+)
>>
>> diff --git a/tests/amdgpu/amd_mode_switch.c b/tests/amdgpu/amd_mode_switch.c
>> index 4da07c412996..ffa2952bb5c2 100644
>> --- a/tests/amdgpu/amd_mode_switch.c
>> +++ b/tests/amdgpu/amd_mode_switch.c
>> @@ -98,6 +98,8 @@ static void run_mode_switch_first_last(data_t *data, int num_pipes)
>> for (j = 0; j < num_pipes; j++) {
>> igt_crtc_t *crtc = igt_crtc_for_pipe(display, j);
>>
>> + igt_assert_f(crtc->valid, "There is no pipe %s\n", kmstest_pipe_name(j));
>> +
Not sure I follow how this prepares for returning NULL
from igt_crtc_for_pipe(). Wouldn't this do the opposite
and hit a NULL pointer with crtc->valid if the function
returns NULL?
Harry
>> output = data->output[j];
>> if (!igt_output_is_connected(output))
>> continue;
>> --
>> 2.47.3
>>
^ permalink raw reply [flat|nested] 26+ messages in thread* Re: [PATCH i-g-t 01/12] tests/amdgpu/amd_mode_switch: Prepare for returning NULL from igt_crtc_for_pipe()
2026-03-18 20:01 ` Harry Wentland
@ 2026-03-18 21:00 ` Alex Hung
2026-03-19 8:36 ` Jani Nikula
1 sibling, 0 replies; 26+ messages in thread
From: Alex Hung @ 2026-03-18 21:00 UTC (permalink / raw)
To: Harry Wentland, Kamil Konieczny, Jani Nikula, igt-dev,
Aurabindo Pillai, Vitaly Prosyak
On 3/18/26 14:01, Harry Wentland wrote:
>
>
> On 2026-03-18 14:01, Kamil Konieczny wrote:
>> Hi Jani,
>> On 2026-03-16 at 13:19:03 +0200, Jani Nikula wrote:
>>> After checking there are enough pipes, AMD should always have the
>>> CRTCs. Assert that the CRTC is valid.
>>>
>>> This prepares for returning NULL for invalid pipes from
>>> igt_crtc_for_pipe() by ensuring the test logic is sound.
>>>
>>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>
>> +cc AMD devs
>> Cc: Aurabindo Pillai <aurabindo.pillai@amd.com>
>> Cc: Harry Wentland <harry.wentland@amd.com>
>> Cc: Vitaly Prosyak <vitaly.prosyak@amd.com>
>>
>>> ---
>>> tests/amdgpu/amd_mode_switch.c | 2 ++
>>> 1 file changed, 2 insertions(+)
>>>
>>> diff --git a/tests/amdgpu/amd_mode_switch.c b/tests/amdgpu/amd_mode_switch.c
>>> index 4da07c412996..ffa2952bb5c2 100644
>>> --- a/tests/amdgpu/amd_mode_switch.c
>>> +++ b/tests/amdgpu/amd_mode_switch.c
>>> @@ -98,6 +98,8 @@ static void run_mode_switch_first_last(data_t *data, int num_pipes)
>>> for (j = 0; j < num_pipes; j++) {
>>> igt_crtc_t *crtc = igt_crtc_for_pipe(display, j);
>>>
>>> + igt_assert_f(crtc->valid, "There is no pipe %s\n", kmstest_pipe_name(j));
>>> +
>
> Not sure I follow how this prepares for returning NULL
> from igt_crtc_for_pipe(). Wouldn't this do the opposite
> and hit a NULL pointer with crtc->valid if the function
> returns NULL?
>
> Harry
>
This patch may be no longer applicable because the for-loop is replaced
by for_each_crtc(...) which already checks crtc->valid.
However, Harry's comment is still applicable to patch 2
>>> output = data->output[j];
>>> if (!igt_output_is_connected(output))
>>> continue;
>>> --
>>> 2.47.3
>>>
>
^ permalink raw reply [flat|nested] 26+ messages in thread* Re: [PATCH i-g-t 01/12] tests/amdgpu/amd_mode_switch: Prepare for returning NULL from igt_crtc_for_pipe()
2026-03-18 20:01 ` Harry Wentland
2026-03-18 21:00 ` Alex Hung
@ 2026-03-19 8:36 ` Jani Nikula
1 sibling, 0 replies; 26+ messages in thread
From: Jani Nikula @ 2026-03-19 8:36 UTC (permalink / raw)
To: Harry Wentland, Kamil Konieczny, igt-dev, Aurabindo Pillai,
Vitaly Prosyak
On Wed, 18 Mar 2026, Harry Wentland <harry.wentland@amd.com> wrote:
> On 2026-03-18 14:01, Kamil Konieczny wrote:
>> Hi Jani,
>> On 2026-03-16 at 13:19:03 +0200, Jani Nikula wrote:
>>> After checking there are enough pipes, AMD should always have the
>>> CRTCs. Assert that the CRTC is valid.
>>>
>>> This prepares for returning NULL for invalid pipes from
>>> igt_crtc_for_pipe() by ensuring the test logic is sound.
>>>
>>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>
>> +cc AMD devs
>> Cc: Aurabindo Pillai <aurabindo.pillai@amd.com>
>> Cc: Harry Wentland <harry.wentland@amd.com>
>> Cc: Vitaly Prosyak <vitaly.prosyak@amd.com>
>>
>>> ---
>>> tests/amdgpu/amd_mode_switch.c | 2 ++
>>> 1 file changed, 2 insertions(+)
>>>
>>> diff --git a/tests/amdgpu/amd_mode_switch.c b/tests/amdgpu/amd_mode_switch.c
>>> index 4da07c412996..ffa2952bb5c2 100644
>>> --- a/tests/amdgpu/amd_mode_switch.c
>>> +++ b/tests/amdgpu/amd_mode_switch.c
>>> @@ -98,6 +98,8 @@ static void run_mode_switch_first_last(data_t *data, int num_pipes)
>>> for (j = 0; j < num_pipes; j++) {
>>> igt_crtc_t *crtc = igt_crtc_for_pipe(display, j);
>>>
>>> + igt_assert_f(crtc->valid, "There is no pipe %s\n", kmstest_pipe_name(j));
>>> +
>
> Not sure I follow how this prepares for returning NULL
> from igt_crtc_for_pipe(). Wouldn't this do the opposite
> and hit a NULL pointer with crtc->valid if the function
> returns NULL?
Should've explained myself better.
Currently igt_crtc_for_pipe() always returns a non-NULL pointer to a
crtc, which may or may not be valid.
Asserting crtc->valid ensures the CRTC really is valid here.
When changing igt_crtc_for_pipe() to return NULL for !crtc->valid CRTCs,
we'd also change s/crtc->valid/crtc/g.
BR,
Jani.
>
> Harry
>
>>> output = data->output[j];
>>> if (!igt_output_is_connected(output))
>>> continue;
>>> --
>>> 2.47.3
>>>
>
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH i-g-t 02/12] tests/amdgpu/amd_multidisplay_modeset: Prepare for returning NULL from igt_crtc_for_pipe()
2026-03-16 11:19 [PATCH i-g-t 00/12] Prepare for returning NULL from igt_crtc_for_pipe() Jani Nikula
2026-03-16 11:19 ` [PATCH i-g-t 01/12] tests/amdgpu/amd_mode_switch: " Jani Nikula
@ 2026-03-16 11:19 ` Jani Nikula
2026-03-18 18:03 ` Kamil Konieczny
2026-03-16 11:19 ` [PATCH i-g-t 03/12] tests/intel/kms_cdclk: use igt_next_crtc() Jani Nikula
` (14 subsequent siblings)
16 siblings, 1 reply; 26+ messages in thread
From: Jani Nikula @ 2026-03-16 11:19 UTC (permalink / raw)
To: igt-dev; +Cc: jani.nikula
AMD should always have enough CRTCs for the test. Assert this is the
case by checking the CRTC is valid.
This prepares for returning NULL for invalid pipes from
igt_crtc_for_pipe() by ensuring the test logic is sound.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
tests/amdgpu/amd_multidisplay_modeset.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/tests/amdgpu/amd_multidisplay_modeset.c b/tests/amdgpu/amd_multidisplay_modeset.c
index 40d1e5d7f42b..ebcfea8ee35f 100644
--- a/tests/amdgpu/amd_multidisplay_modeset.c
+++ b/tests/amdgpu/amd_multidisplay_modeset.c
@@ -327,6 +327,8 @@ static void multiple_display_test(struct data_t *data, enum sub_test test_mode)
crtc = igt_crtc_for_pipe(display, j);
+ igt_assert_f(crtc->valid, "There is no pipe %s\n", kmstest_pipe_name(j));
+
igt_create_pattern_fb(data->fd, kmode->hdisplay,
kmode->vdisplay, DRM_FORMAT_XRGB8888,
0, (buf + j));
--
2.47.3
^ permalink raw reply related [flat|nested] 26+ messages in thread* Re: [PATCH i-g-t 02/12] tests/amdgpu/amd_multidisplay_modeset: Prepare for returning NULL from igt_crtc_for_pipe()
2026-03-16 11:19 ` [PATCH i-g-t 02/12] tests/amdgpu/amd_multidisplay_modeset: " Jani Nikula
@ 2026-03-18 18:03 ` Kamil Konieczny
2026-03-18 21:03 ` Alex Hung
0 siblings, 1 reply; 26+ messages in thread
From: Kamil Konieczny @ 2026-03-18 18:03 UTC (permalink / raw)
To: Jani Nikula; +Cc: igt-dev, Alex Hung, Hersen Wu, Vitaly Prosyak
Hi Jani,
On 2026-03-16 at 13:19:04 +0200, Jani Nikula wrote:
> AMD should always have enough CRTCs for the test. Assert this is the
> case by checking the CRTC is valid.
>
> This prepares for returning NULL for invalid pipes from
> igt_crtc_for_pipe() by ensuring the test logic is sound.
>
+cc AMD devs
Cc: Alex Hung <alex.hung@amd.com>
Cc: Hersen Wu <hersenxs.wu@amd.com>
Cc: Vitaly Prosyak <vitaly.prosyak@amd.com>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
> tests/amdgpu/amd_multidisplay_modeset.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/tests/amdgpu/amd_multidisplay_modeset.c b/tests/amdgpu/amd_multidisplay_modeset.c
> index 40d1e5d7f42b..ebcfea8ee35f 100644
> --- a/tests/amdgpu/amd_multidisplay_modeset.c
> +++ b/tests/amdgpu/amd_multidisplay_modeset.c
> @@ -327,6 +327,8 @@ static void multiple_display_test(struct data_t *data, enum sub_test test_mode)
>
> crtc = igt_crtc_for_pipe(display, j);
>
> + igt_assert_f(crtc->valid, "There is no pipe %s\n", kmstest_pipe_name(j));
> +
> igt_create_pattern_fb(data->fd, kmode->hdisplay,
> kmode->vdisplay, DRM_FORMAT_XRGB8888,
> 0, (buf + j));
> --
> 2.47.3
>
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH i-g-t 02/12] tests/amdgpu/amd_multidisplay_modeset: Prepare for returning NULL from igt_crtc_for_pipe()
2026-03-18 18:03 ` Kamil Konieczny
@ 2026-03-18 21:03 ` Alex Hung
2026-03-20 10:42 ` Jani Nikula
0 siblings, 1 reply; 26+ messages in thread
From: Alex Hung @ 2026-03-18 21:03 UTC (permalink / raw)
To: Kamil Konieczny, Jani Nikula, igt-dev, Vitaly Prosyak,
Harry Wentland
On 3/18/26 12:03, Kamil Konieczny wrote:
> Hi Jani,
> On 2026-03-16 at 13:19:04 +0200, Jani Nikula wrote:
>> AMD should always have enough CRTCs for the test. Assert this is the
>> case by checking the CRTC is valid.
>>
>> This prepares for returning NULL for invalid pipes from
>> igt_crtc_for_pipe() by ensuring the test logic is sound.
>>
> +cc AMD devs
> Cc: Alex Hung <alex.hung@amd.com>
> Cc: Hersen Wu <hersenxs.wu@amd.com>
> Cc: Vitaly Prosyak <vitaly.prosyak@amd.com>
>
>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>> ---
>> tests/amdgpu/amd_multidisplay_modeset.c | 2 ++
>> 1 file changed, 2 insertions(+)
>>
>> diff --git a/tests/amdgpu/amd_multidisplay_modeset.c b/tests/amdgpu/amd_multidisplay_modeset.c
>> index 40d1e5d7f42b..ebcfea8ee35f 100644
>> --- a/tests/amdgpu/amd_multidisplay_modeset.c
>> +++ b/tests/amdgpu/amd_multidisplay_modeset.c
>> @@ -327,6 +327,8 @@ static void multiple_display_test(struct data_t *data, enum sub_test test_mode)
>>
>> crtc = igt_crtc_for_pipe(display, j);
>>
>> + igt_assert_f(crtc->valid, "There is no pipe %s\n", kmstest_pipe_name(j));
>> +
As pointed out by Harry in patch 1, igt_crtc_for_pipe can return NULL
when pipe == PIPE_NONE, and it would be a NULL dereference.
How about just checking crtc?
"igt_assert_f(crtc, "There is no pipe %s\n", kmstest_pipe_name(j));"
>> igt_create_pattern_fb(data->fd, kmode->hdisplay,
>> kmode->vdisplay, DRM_FORMAT_XRGB8888,
>> 0, (buf + j));
>> --
>> 2.47.3
>>
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH i-g-t 02/12] tests/amdgpu/amd_multidisplay_modeset: Prepare for returning NULL from igt_crtc_for_pipe()
2026-03-18 21:03 ` Alex Hung
@ 2026-03-20 10:42 ` Jani Nikula
0 siblings, 0 replies; 26+ messages in thread
From: Jani Nikula @ 2026-03-20 10:42 UTC (permalink / raw)
To: Alex Hung, Kamil Konieczny, igt-dev, Vitaly Prosyak,
Harry Wentland
On Wed, 18 Mar 2026, Alex Hung <alex.hung@amd.com> wrote:
> On 3/18/26 12:03, Kamil Konieczny wrote:
>> Hi Jani,
>> On 2026-03-16 at 13:19:04 +0200, Jani Nikula wrote:
>>> AMD should always have enough CRTCs for the test. Assert this is the
>>> case by checking the CRTC is valid.
>>>
>>> This prepares for returning NULL for invalid pipes from
>>> igt_crtc_for_pipe() by ensuring the test logic is sound.
>>>
>> +cc AMD devs
>> Cc: Alex Hung <alex.hung@amd.com>
>> Cc: Hersen Wu <hersenxs.wu@amd.com>
>> Cc: Vitaly Prosyak <vitaly.prosyak@amd.com>
>>
>>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>> ---
>>> tests/amdgpu/amd_multidisplay_modeset.c | 2 ++
>>> 1 file changed, 2 insertions(+)
>>>
>>> diff --git a/tests/amdgpu/amd_multidisplay_modeset.c b/tests/amdgpu/amd_multidisplay_modeset.c
>>> index 40d1e5d7f42b..ebcfea8ee35f 100644
>>> --- a/tests/amdgpu/amd_multidisplay_modeset.c
>>> +++ b/tests/amdgpu/amd_multidisplay_modeset.c
>>> @@ -327,6 +327,8 @@ static void multiple_display_test(struct data_t *data, enum sub_test test_mode)
>>>
>>> crtc = igt_crtc_for_pipe(display, j);
>>>
>>> + igt_assert_f(crtc->valid, "There is no pipe %s\n", kmstest_pipe_name(j));
>>> +
>
> As pointed out by Harry in patch 1, igt_crtc_for_pipe can return NULL
> when pipe == PIPE_NONE, and it would be a NULL dereference.
>
> How about just checking crtc?
>
> "igt_assert_f(crtc, "There is no pipe %s\n", kmstest_pipe_name(j));"
Like I said, currently crtc is always != NULL, but might have
!crtc->valid, and the latter is what we want to ensure in this series.
I've sent v2 of the series with more explanation in the cover letter and
commit messages [1].
BR,
Jani.
[1] https://lore.kernel.org/r/cover.1774002591.git.jani.nikula@intel.com
>
>>> igt_create_pattern_fb(data->fd, kmode->hdisplay,
>>> kmode->vdisplay, DRM_FORMAT_XRGB8888,
>>> 0, (buf + j));
>>> --
>>> 2.47.3
>>>
>
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH i-g-t 03/12] tests/intel/kms_cdclk: use igt_next_crtc()
2026-03-16 11:19 [PATCH i-g-t 00/12] Prepare for returning NULL from igt_crtc_for_pipe() Jani Nikula
2026-03-16 11:19 ` [PATCH i-g-t 01/12] tests/amdgpu/amd_mode_switch: " Jani Nikula
2026-03-16 11:19 ` [PATCH i-g-t 02/12] tests/amdgpu/amd_multidisplay_modeset: " Jani Nikula
@ 2026-03-16 11:19 ` Jani Nikula
2026-03-16 11:19 ` [PATCH i-g-t 04/12] tests/intel/kms_joiner: Prepare for returning NULL from igt_crtc_for_pipe() Jani Nikula
` (13 subsequent siblings)
16 siblings, 0 replies; 26+ messages in thread
From: Jani Nikula @ 2026-03-16 11:19 UTC (permalink / raw)
To: igt-dev; +Cc: jani.nikula, Mika Kahola
The test doesn't care about pipes, but rather just another CRTC, so
prefer igt_next_crtc() over igt_crtc_for_pipe(). The i < count loop is
really just about count here, not about specific pipes.
Reviewed-by: Mika Kahola <mika.kahola@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
tests/intel/kms_cdclk.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/tests/intel/kms_cdclk.c b/tests/intel/kms_cdclk.c
index 20b8a5f0a018..662bdbe439e5 100644
--- a/tests/intel/kms_cdclk.c
+++ b/tests/intel/kms_cdclk.c
@@ -240,10 +240,13 @@ static void set_mode(data_t *data, int count, drmModeModeInfo *mode,
igt_output_t **valid_outputs, struct igt_fb fb)
{
igt_display_t *display = &data->display;
+ igt_crtc_t *crtc = NULL;
for (int i = 0; i < count; i++) {
- igt_crtc_t *crtc = igt_crtc_for_pipe(display, i);
- igt_plane_t *plane = igt_crtc_get_plane_type(crtc, DRM_PLANE_TYPE_PRIMARY);
+ igt_plane_t *plane;
+
+ crtc = igt_next_crtc(display, crtc);
+ plane = igt_crtc_get_plane_type(crtc, DRM_PLANE_TYPE_PRIMARY);
igt_output_override_mode(valid_outputs[i], &mode[i]);
@@ -259,6 +262,7 @@ static void test_mode_transition_on_all_outputs(data_t *data)
drmModeModeInfo *mode, mode_highres[IGT_MAX_PIPES] = {0}, mode_lowres[IGT_MAX_PIPES] = {0};
igt_output_t *valid_outputs[IGT_MAX_PIPES] = {NULL};
igt_output_t *output;
+ igt_crtc_t *crtc = NULL;
int count = 0;
int cdclk_ref, cdclk_new;
uint16_t width = 0, height = 0;
@@ -288,7 +292,7 @@ static void test_mode_transition_on_all_outputs(data_t *data)
"Number of valid outputs (%d) must be greater than or equal to 2\n", count);
for (int i = 0; i < count; i++) {
- igt_crtc_t *crtc = igt_crtc_for_pipe(display, i);
+ crtc = igt_next_crtc(display, crtc);
mode = igt_output_get_mode(valid_outputs[i]);
igt_assert(mode);
--
2.47.3
^ permalink raw reply related [flat|nested] 26+ messages in thread* [PATCH i-g-t 04/12] tests/intel/kms_joiner: Prepare for returning NULL from igt_crtc_for_pipe()
2026-03-16 11:19 [PATCH i-g-t 00/12] Prepare for returning NULL from igt_crtc_for_pipe() Jani Nikula
` (2 preceding siblings ...)
2026-03-16 11:19 ` [PATCH i-g-t 03/12] tests/intel/kms_cdclk: use igt_next_crtc() Jani Nikula
@ 2026-03-16 11:19 ` Jani Nikula
2026-03-16 11:19 ` [PATCH i-g-t 05/12] tests/intel/kms_joiner_helper: " Jani Nikula
` (12 subsequent siblings)
16 siblings, 0 replies; 26+ messages in thread
From: Jani Nikula @ 2026-03-16 11:19 UTC (permalink / raw)
To: igt-dev; +Cc: jani.nikula
Assert that the pipe is really there during testing.
Add some local variables to make the logic easier to follow.
This prepares for returning NULL for invalid pipes from
igt_crtc_for_pipe() by ensuring the test logic is sound.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
tests/intel/kms_joiner.c | 66 +++++++++++++++++++++++++++++-----------
1 file changed, 48 insertions(+), 18 deletions(-)
diff --git a/tests/intel/kms_joiner.c b/tests/intel/kms_joiner.c
index a582f6f93029..f8ea65a3b01a 100644
--- a/tests/intel/kms_joiner.c
+++ b/tests/intel/kms_joiner.c
@@ -143,10 +143,13 @@ static enum pipe get_next_master_pipe(data_t *data, uint32_t available_pipe_mask
static enum pipe setup_pipe(data_t *data, igt_output_t *output, enum pipe pipe, uint32_t available_pipe_mask)
{
igt_display_t *display = &data->display;
- igt_crtc_t *crtc = igt_crtc_for_pipe(display, pipe);
+ igt_crtc_t *crtc;
enum pipe master_pipe;
uint32_t attempt_mask;
+ crtc = igt_crtc_for_pipe(display, pipe);
+ igt_assert_f(crtc->valid, "There is no pipe %s\n", kmstest_pipe_name(pipe));
+
attempt_mask = BIT(crtc->pipe);
master_pipe = get_next_master_pipe(data, available_pipe_mask & attempt_mask);
@@ -164,14 +167,18 @@ static enum pipe setup_pipe(data_t *data, igt_output_t *output, enum pipe pipe,
static void set_joiner_mode(data_t *data, igt_output_t *output, drmModeModeInfo *mode)
{
igt_display_t *display = &data->display;
+ igt_crtc_t *crtc;
+ enum pipe pipe = PIPE_A;
igt_plane_t *primary;
igt_fb_t fb;
igt_info("Committing joiner mode for output %s with mode %dx%d@%d\n",
output->name, mode->hdisplay, mode->vdisplay, mode->vrefresh);
- igt_output_set_crtc(output,
- igt_crtc_for_pipe(display, PIPE_A));
+ crtc = igt_crtc_for_pipe(display, pipe);
+ igt_assert_f(crtc->valid, "There is no pipe %s\n", kmstest_pipe_name(pipe));
+
+ igt_output_set_crtc(output, crtc);
igt_output_override_mode(output, mode);
primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
igt_create_pattern_fb(data->drm_fd, mode->hdisplay, mode->vdisplay, DRM_FORMAT_XRGB8888,
@@ -374,6 +381,9 @@ static void test_invalid_modeset_two_joiner(data_t *data,
continue;
for (j = 0; j < INVALID_TEST_OUTPUT; j++) {
+ igt_crtc_t *crtc;
+ enum pipe pipe = data->pipe_seq[i + j];
+
output = outputs[j];
if (!force_joiner) {
@@ -385,10 +395,12 @@ static void test_invalid_modeset_two_joiner(data_t *data,
}
igt_assert(kmstest_mode_is_valid(&mode));
- igt_output_set_crtc(output,
- igt_crtc_for_pipe(display, data->pipe_seq[i + j]));
+ crtc = igt_crtc_for_pipe(display, pipe);
+ igt_assert_f(crtc->valid, "There is no pipe %s\n", kmstest_pipe_name(pipe));
+
+ igt_output_set_crtc(output, crtc);
igt_info("Assigning pipe %s to %s with mode %dx%d@%d%s",
- kmstest_pipe_name(data->pipe_seq[i + j]),
+ igt_crtc_name(crtc),
igt_output_name(output), mode.hdisplay,
mode.vdisplay, mode.vrefresh,
j == INVALID_TEST_OUTPUT - 1 ? "\n" : ", ");
@@ -422,6 +434,9 @@ static void test_joiner_on_last_pipe(data_t *data, bool force_joiner)
outputs = force_joiner ? data->non_big_joiner_output : data->big_joiner_output;
for (i = 0; i < len; i++) {
+ igt_crtc_t *crtc;
+ enum pipe pipe = data->pipe_seq[data->n_pipes - 1];
+
igt_display_reset(&data->display);
igt_display_commit2(&data->display, COMMIT_ATOMIC);
output = outputs[i];
@@ -434,12 +449,14 @@ static void test_joiner_on_last_pipe(data_t *data, bool force_joiner)
mode = *igt_output_get_mode(output);
}
- igt_output_set_crtc(output,
- igt_crtc_for_pipe(display, data->pipe_seq[data->n_pipes - 1]));
- igt_info(" Assigning pipe %s to %s with mode %dx%d@%d\n",
- kmstest_pipe_name(data->pipe_seq[data->n_pipes - 1]),
- igt_output_name(output), mode.hdisplay,
- mode.vdisplay, mode.vrefresh);
+ crtc = igt_crtc_for_pipe(display, pipe);
+ igt_assert_f(crtc->valid, "There is no pipe %s\n", kmstest_pipe_name(pipe));
+
+ igt_output_set_crtc(output, crtc);
+ igt_info("Assigning pipe %s to %s with mode %dx%d@%d\n",
+ igt_crtc_name(crtc),
+ igt_output_name(output), mode.hdisplay,
+ mode.vdisplay, mode.vrefresh);
primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
igt_create_pattern_fb(data->drm_fd, mode.hdisplay, mode.vdisplay,
DRM_FORMAT_XRGB8888,
@@ -484,6 +501,9 @@ static void test_ultra_joiner(data_t *data, bool invalid_pipe, bool two_display,
}
for (j = 0; j < data->n_pipes; j++) {
+ igt_crtc_t *crtc;
+ enum pipe pipe;
+
/* Ultra joiner is only valid on PIPE_A */
if (invalid_pipe && j == PIPE_A)
continue;
@@ -492,8 +512,11 @@ static void test_ultra_joiner(data_t *data, bool invalid_pipe, bool two_display,
if (two_display && j != PIPE_A)
continue;
- igt_output_set_crtc(output,
- igt_crtc_for_pipe(display, data->pipe_seq[j]));
+ pipe = data->pipe_seq[j];
+ crtc = igt_crtc_for_pipe(display, pipe);
+ igt_assert_f(crtc->valid, "There is no pipe %s\n", kmstest_pipe_name(pipe));
+
+ igt_output_set_crtc(output, crtc);
primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
igt_create_pattern_fb(data->drm_fd, mode.hdisplay, mode.vdisplay, DRM_FORMAT_XRGB8888,
@@ -514,8 +537,11 @@ static void test_ultra_joiner(data_t *data, bool invalid_pipe, bool two_display,
mode1 = igt_output_get_mode(non_ultra_joiner_output);
- igt_output_set_crtc(non_ultra_joiner_output,
- igt_crtc_for_pipe(display, data->pipe_seq[k]));
+ pipe = data->pipe_seq[k];
+ crtc = igt_crtc_for_pipe(display, pipe);
+ igt_assert_f(crtc->valid, "There is no pipe %s\n", kmstest_pipe_name(pipe));
+
+ igt_output_set_crtc(non_ultra_joiner_output, crtc);
plane = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
igt_plane_set_fb(plane, &fb);
@@ -562,8 +588,12 @@ static void test_basic_max_non_joiner(data_t *data)
for (pipe = 0; pipe < data->n_pipes; pipe++) {
igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), output->name) {
- igt_output_set_crtc(output,
- igt_crtc_for_pipe(display, pipe));
+ igt_crtc_t *crtc;
+
+ crtc = igt_crtc_for_pipe(display, pipe);
+ igt_assert_f(crtc->valid, "There is no pipe %s\n", kmstest_pipe_name(pipe));
+
+ igt_output_set_crtc(output, crtc);
igt_require(max_non_joiner_mode_found(data->drm_fd,
output->config.connector,
max_dotclock, &mode));
--
2.47.3
^ permalink raw reply related [flat|nested] 26+ messages in thread* [PATCH i-g-t 05/12] tests/intel/kms_joiner_helper: Prepare for returning NULL from igt_crtc_for_pipe()
2026-03-16 11:19 [PATCH i-g-t 00/12] Prepare for returning NULL from igt_crtc_for_pipe() Jani Nikula
` (3 preceding siblings ...)
2026-03-16 11:19 ` [PATCH i-g-t 04/12] tests/intel/kms_joiner: Prepare for returning NULL from igt_crtc_for_pipe() Jani Nikula
@ 2026-03-16 11:19 ` Jani Nikula
2026-03-16 11:19 ` [PATCH i-g-t 06/12] tests/intel/kms_pipe_b_c_ivb: " Jani Nikula
` (11 subsequent siblings)
16 siblings, 0 replies; 26+ messages in thread
From: Jani Nikula @ 2026-03-16 11:19 UTC (permalink / raw)
To: igt-dev; +Cc: jani.nikula
Assert that the pipe is really there during testing. Refactor the code
slightly to reduce duplication while at it.
This prepares for returning NULL for invalid pipes from
igt_crtc_for_pipe() by ensuring the test logic is sound.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
tests/intel/kms_joiner_helper.c | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/tests/intel/kms_joiner_helper.c b/tests/intel/kms_joiner_helper.c
index 7dd87c5c36ea..724ce41a892b 100644
--- a/tests/intel/kms_joiner_helper.c
+++ b/tests/intel/kms_joiner_helper.c
@@ -141,6 +141,8 @@ bool igt_assign_pipes_for_outputs(int drm_fd,
igt_output_t *out;
for (idx = 0; idx < num_outputs; idx++) {
+ igt_crtc_t *crtc;
+
out = outputs[idx];
needed = get_required_pipes(drm_fd, out);
if (needed < 0)
@@ -160,6 +162,9 @@ bool igt_assign_pipes_for_outputs(int drm_fd,
needed, kmstest_pipe_name(start),
kmstest_pipe_name(start + needed - 1), out->name);
+ crtc = igt_crtc_for_pipe(out->display, start);
+ igt_assert_f(crtc->valid, "There is no pipe %s\n", kmstest_pipe_name(start));
+
if (needed > 1) {
mp = get_next_master_pipe(BIT(start));
@@ -168,13 +173,10 @@ bool igt_assign_pipes_for_outputs(int drm_fd,
out->name);
return false;
}
- igt_output_set_crtc(out,
- igt_crtc_for_pipe(out->display, start));
- igt_debug("Using pipe %s as master.\n",
- kmstest_pipe_name(start));
- } else
- igt_output_set_crtc(out,
- igt_crtc_for_pipe(out->display, start));
+ igt_debug("Using pipe %s as master.\n", igt_crtc_name(crtc));
+ }
+
+ igt_output_set_crtc(out, crtc);
for (i = 0; i < needed; i++)
*used_pipes_mask |= BIT(start + i);
--
2.47.3
^ permalink raw reply related [flat|nested] 26+ messages in thread* [PATCH i-g-t 06/12] tests/intel/kms_pipe_b_c_ivb: Prepare for returning NULL from igt_crtc_for_pipe()
2026-03-16 11:19 [PATCH i-g-t 00/12] Prepare for returning NULL from igt_crtc_for_pipe() Jani Nikula
` (4 preceding siblings ...)
2026-03-16 11:19 ` [PATCH i-g-t 05/12] tests/intel/kms_joiner_helper: " Jani Nikula
@ 2026-03-16 11:19 ` Jani Nikula
2026-03-16 11:19 ` [PATCH i-g-t 07/12] tests/intel/kms_pipe_stress: " Jani Nikula
` (10 subsequent siblings)
16 siblings, 0 replies; 26+ messages in thread
From: Jani Nikula @ 2026-03-16 11:19 UTC (permalink / raw)
To: igt-dev; +Cc: jani.nikula
Figure out igt_crtc_t pointers for pipes B and C once the beginning, and
skip the test if either isn't available.
This is really a no-op, as IVB will have pipes B and C, but prepares for
cleanly returning NULL from igt_crtc_for_pipe().
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
tests/intel/kms_pipe_b_c_ivb.c | 28 ++++++++++++++++++----------
1 file changed, 18 insertions(+), 10 deletions(-)
diff --git a/tests/intel/kms_pipe_b_c_ivb.c b/tests/intel/kms_pipe_b_c_ivb.c
index 11c97e23c5e4..0e017706373c 100644
--- a/tests/intel/kms_pipe_b_c_ivb.c
+++ b/tests/intel/kms_pipe_b_c_ivb.c
@@ -65,6 +65,8 @@ IGT_TEST_DESCRIPTION(
typedef struct {
int drm_fd;
igt_display_t display;
+ igt_crtc_t *crtc_b;
+ igt_crtc_t *crtc_c;
} data_t;
drmModeModeInfo mode_3_lanes = {
@@ -173,8 +175,8 @@ find_outputs(data_t *data, igt_output_t **output1, igt_output_t **output2)
static void
test_dpms(data_t *data)
{
- igt_crtc_t *crtc_b = igt_crtc_for_pipe(&data->display, PIPE_B);
- igt_crtc_t *crtc_c = igt_crtc_for_pipe(&data->display, PIPE_C);
+ igt_crtc_t *crtc_b = data->crtc_b;
+ igt_crtc_t *crtc_c = data->crtc_c;
igt_output_t *output1, *output2;
int ret;
@@ -202,8 +204,8 @@ test_dpms(data_t *data)
static void
test_lane_reduction(data_t *data)
{
- igt_crtc_t *crtc_b = igt_crtc_for_pipe(&data->display, PIPE_B);
- igt_crtc_t *crtc_c = igt_crtc_for_pipe(&data->display, PIPE_C);
+ igt_crtc_t *crtc_b = data->crtc_b;
+ igt_crtc_t *crtc_c = data->crtc_c;
igt_output_t *output1, *output2;
int ret;
@@ -235,8 +237,8 @@ test_lane_reduction(data_t *data)
static void
test_disable_pipe_B(data_t *data)
{
- igt_crtc_t *crtc_b = igt_crtc_for_pipe(&data->display, PIPE_B);
- igt_crtc_t *crtc_c = igt_crtc_for_pipe(&data->display, PIPE_C);
+ igt_crtc_t *crtc_b = data->crtc_b;
+ igt_crtc_t *crtc_c = data->crtc_c;
igt_output_t *output1, *output2;
int ret;
@@ -271,8 +273,8 @@ test_disable_pipe_B(data_t *data)
static void
test_from_C_to_B_with_3_lanes(data_t *data)
{
- igt_crtc_t *crtc_b = igt_crtc_for_pipe(&data->display, PIPE_B);
- igt_crtc_t *crtc_c = igt_crtc_for_pipe(&data->display, PIPE_C);
+ igt_crtc_t *crtc_b = data->crtc_b;
+ igt_crtc_t *crtc_c = data->crtc_c;
igt_output_t *output1, *output2;
int ret;
@@ -302,8 +304,8 @@ test_from_C_to_B_with_3_lanes(data_t *data)
static void
test_fail_enable_pipe_C_while_B_has_3_lanes(data_t *data)
{
- igt_crtc_t *crtc_b = igt_crtc_for_pipe(&data->display, PIPE_B);
- igt_crtc_t *crtc_c = igt_crtc_for_pipe(&data->display, PIPE_C);
+ igt_crtc_t *crtc_b = data->crtc_b;
+ igt_crtc_t *crtc_c = data->crtc_c;
igt_output_t *output1, *output2;
int ret;
@@ -339,6 +341,12 @@ int igt_main()
kmstest_set_vt_graphics_mode();
igt_display_require(&data.display, data.drm_fd);
igt_display_require_output(&data.display);
+
+ data.crtc_b = igt_crtc_for_pipe(&data.display, PIPE_B);
+ igt_skip_on(!data.crtc_b->valid);
+
+ data.crtc_c = igt_crtc_for_pipe(&data.display, PIPE_C);
+ igt_skip_on(!data.crtc_c->valid);
}
igt_describe("Tests pipe-B and pipe-C interactions in IVB by enabling pipe-B with mode "
--
2.47.3
^ permalink raw reply related [flat|nested] 26+ messages in thread* [PATCH i-g-t 07/12] tests/intel/kms_pipe_stress: Prepare for returning NULL from igt_crtc_for_pipe()
2026-03-16 11:19 [PATCH i-g-t 00/12] Prepare for returning NULL from igt_crtc_for_pipe() Jani Nikula
` (5 preceding siblings ...)
2026-03-16 11:19 ` [PATCH i-g-t 06/12] tests/intel/kms_pipe_b_c_ivb: " Jani Nikula
@ 2026-03-16 11:19 ` Jani Nikula
2026-03-16 11:19 ` [PATCH i-g-t 08/12] tests/kms_bw: fix misleading indent Jani Nikula
` (9 subsequent siblings)
16 siblings, 0 replies; 26+ messages in thread
From: Jani Nikula @ 2026-03-16 11:19 UTC (permalink / raw)
To: igt-dev; +Cc: jani.nikula
Ensure we only operate on valid CRTCs. Either assert or continue the
loop, depending on the case.
This prepares for returning NULL for invalid pipes from
igt_crtc_for_pipe() by ensuring the test logic is sound.
The test is a bit weird because the pipe (or just int i) is conflated
and used for more things than just the pipe. I think the test could use
some refactoring around these parts, but I'm unsure how exactly. I hope
this is the minimal fix that gets the job done for NULL returns from
igt_crtc_for_pipe().
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
tests/intel/kms_pipe_stress.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/tests/intel/kms_pipe_stress.c b/tests/intel/kms_pipe_stress.c
index 85ab2ec50621..79538a2aca6e 100644
--- a/tests/intel/kms_pipe_stress.c
+++ b/tests/intel/kms_pipe_stress.c
@@ -579,6 +579,7 @@ static void stress_pipes(struct data *data, struct timespec *start,
continue;
crtc = igt_crtc_for_pipe(display, pipe);
+ igt_assert_f(crtc->valid, "There is no pipe %s\n", kmstest_pipe_name(pipe));
igt_assert_f(crtc->n_planes < MAX_PLANES,
"Currently we don't support more than %d planes!",
@@ -740,6 +741,7 @@ static void destroy_framebuffers(struct data *data)
continue;
crtc = igt_crtc_for_pipe(display, i);
+ igt_assert_f(crtc->valid, "There is no pipe %s\n", kmstest_pipe_name(i));
for (j = 0; j < MAX_PLANES; j++) {
if (data->fb[i * MAX_PLANES + j].fb_id) {
@@ -801,6 +803,8 @@ static void prepare_test(struct data *data)
igt_assert(data->highest_mode[i]);
crtc = igt_crtc_for_pipe(display, i);
+ if (!crtc->valid)
+ continue;
if (data->highest_mode[i]) {
igt_info("Using mode: \n");
--
2.47.3
^ permalink raw reply related [flat|nested] 26+ messages in thread* [PATCH i-g-t 08/12] tests/kms_bw: fix misleading indent
2026-03-16 11:19 [PATCH i-g-t 00/12] Prepare for returning NULL from igt_crtc_for_pipe() Jani Nikula
` (6 preceding siblings ...)
2026-03-16 11:19 ` [PATCH i-g-t 07/12] tests/intel/kms_pipe_stress: " Jani Nikula
@ 2026-03-16 11:19 ` Jani Nikula
2026-03-16 11:19 ` [PATCH i-g-t 09/12] tests/kms_bw: clarify what's going on with proper variable naming Jani Nikula
` (8 subsequent siblings)
16 siblings, 0 replies; 26+ messages in thread
From: Jani Nikula @ 2026-03-16 11:19 UTC (permalink / raw)
To: igt-dev; +Cc: jani.nikula
igt_subtest_f() starts a block. Indent the run_test_linear_tiling()
calls properly.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
tests/kms_bw.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/tests/kms_bw.c b/tests/kms_bw.c
index a6cb46e8244f..1c339f252a3e 100644
--- a/tests/kms_bw.c
+++ b/tests/kms_bw.c
@@ -317,17 +317,15 @@ int igt_main()
* _amount_ of pipes */
for (i = 0; i < IGT_MAX_PIPES; i++) {
for (j = 0; j < ARRAY_SIZE(test_mode); j++) {
- igt_subtest_f("linear-tiling-%d-displays-%s", i+1,
- test_mode[j].name)
- run_test_linear_tiling(&data, i, &test_mode[j], false);
+ igt_subtest_f("linear-tiling-%d-displays-%s", i+1, test_mode[j].name)
+ run_test_linear_tiling(&data, i, &test_mode[j], false);
}
}
for (i = 0; i < IGT_MAX_PIPES; i++) {
for (j = 0; j < ARRAY_SIZE(test_mode); j++) {
- igt_subtest_f("connected-linear-tiling-%d-displays-%s", i+1,
- test_mode[j].name)
- run_test_linear_tiling(&data, i, &test_mode[j], true);
+ igt_subtest_f("connected-linear-tiling-%d-displays-%s", i+1, test_mode[j].name)
+ run_test_linear_tiling(&data, i, &test_mode[j], true);
}
}
--
2.47.3
^ permalink raw reply related [flat|nested] 26+ messages in thread* [PATCH i-g-t 09/12] tests/kms_bw: clarify what's going on with proper variable naming
2026-03-16 11:19 [PATCH i-g-t 00/12] Prepare for returning NULL from igt_crtc_for_pipe() Jani Nikula
` (7 preceding siblings ...)
2026-03-16 11:19 ` [PATCH i-g-t 08/12] tests/kms_bw: fix misleading indent Jani Nikula
@ 2026-03-16 11:19 ` Jani Nikula
2026-03-16 11:19 ` [PATCH i-g-t 10/12] tests/kms_bw: avoid igt_crtc_for_pipe() and crtc->pipe usage Jani Nikula
` (7 subsequent siblings)
16 siblings, 0 replies; 26+ messages in thread
From: Jani Nikula @ 2026-03-16 11:19 UTC (permalink / raw)
To: igt-dev; +Cc: jani.nikula
Use "n_crtc" to mean the number of CRTCs, and pass that around instead
of "pipe" that was actually the number of CRTCs minus one. Small things
like this make a huge difference in the readability, especially when the
-1 is embedded into >= comparisons.
Note: I would've preferred to pull the n_crtcs into the top level loop,
but unfortunately that leads into a discrepancy with the supposedly
dynamic test documentation generation, which has pipes up to 16. The
simple but dumb way appears to be to just generate all the subtests, and
then skip.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
tests/kms_bw.c | 29 +++++++++++++++++------------
1 file changed, 17 insertions(+), 12 deletions(-)
diff --git a/tests/kms_bw.c b/tests/kms_bw.c
index 1c339f252a3e..056aa667d795 100644
--- a/tests/kms_bw.c
+++ b/tests/kms_bw.c
@@ -216,7 +216,7 @@ static bool output_mode_supported(igt_output_t *output, const drmModeModeInfo *m
return false;
}
-static void run_test_linear_tiling(data_t *data, int pipe, const drmModeModeInfo *mode, bool physical) {
+static void run_test_linear_tiling(data_t *data, int n_crtcs, const drmModeModeInfo *mode, bool physical) {
igt_display_t *display = &data->display;
igt_output_t *output;
struct igt_fb buffer[IGT_MAX_PIPES];
@@ -230,16 +230,16 @@ static void run_test_linear_tiling(data_t *data, int pipe, const drmModeModeInfo
* not give the numver of valid crtcs and always return IGT_MAX_PIPES */
for_each_crtc(display, crtc) num_pipes++;
- igt_skip_on_f(pipe >= num_pipes,
- "ASIC does not have %d pipes\n", pipe + 1);
+ igt_skip_on_f(n_crtcs > num_pipes,
+ "ASIC does not have %d pipes\n", n_crtcs);
test_init(data, physical);
- igt_skip_on_f(physical && pipe >= data->connected_outputs,
- "Only %d connected need %d connected\n", data->connected_outputs, pipe + 1);
+ igt_skip_on_f(physical && n_crtcs > data->connected_outputs,
+ "Only %d connected need %d connected\n", data->connected_outputs, n_crtcs);
/* create buffers */
- for (i = 0; i <= pipe; i++) {
+ for (i = 0; i < n_crtcs; i++) {
crtc = igt_crtc_for_pipe(display, i);
output = physical ? data->connected_output[i] : data->output[i];
@@ -272,7 +272,7 @@ static void run_test_linear_tiling(data_t *data, int pipe, const drmModeModeInfo
igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
- for (i = 0; i <= pipe; i++) {
+ for (i = 0; i < n_crtcs; i++) {
output = physical ? data->connected_output[i] : data->output[i];
if (!output || !output_mode_supported(output, mode)) {
continue;
@@ -283,7 +283,7 @@ static void run_test_linear_tiling(data_t *data, int pipe, const drmModeModeInfo
"CRC is zero\n");
}
- for (i = pipe; i >= 0; i--) {
+ for (i = n_crtcs - 1; i >= 0; i--) {
output = physical ? data->connected_output[i] : data->output[i];
if (!output || !output_mode_supported(output, mode))
continue;
@@ -297,6 +297,7 @@ static void run_test_linear_tiling(data_t *data, int pipe, const drmModeModeInfo
int igt_main()
{
data_t data;
+ int n_crtcs;
int i = 0, j = 0;
memset(&data, 0, sizeof(data));
@@ -316,16 +317,20 @@ int igt_main()
/* We're not using for_each_pipe_static because we need the
* _amount_ of pipes */
for (i = 0; i < IGT_MAX_PIPES; i++) {
+ n_crtcs = i + 1;
+
for (j = 0; j < ARRAY_SIZE(test_mode); j++) {
- igt_subtest_f("linear-tiling-%d-displays-%s", i+1, test_mode[j].name)
- run_test_linear_tiling(&data, i, &test_mode[j], false);
+ igt_subtest_f("linear-tiling-%d-displays-%s", n_crtcs, test_mode[j].name)
+ run_test_linear_tiling(&data, n_crtcs, &test_mode[j], false);
}
}
for (i = 0; i < IGT_MAX_PIPES; i++) {
+ n_crtcs = i + 1;
+
for (j = 0; j < ARRAY_SIZE(test_mode); j++) {
- igt_subtest_f("connected-linear-tiling-%d-displays-%s", i+1, test_mode[j].name)
- run_test_linear_tiling(&data, i, &test_mode[j], true);
+ igt_subtest_f("connected-linear-tiling-%d-displays-%s", n_crtcs, test_mode[j].name)
+ run_test_linear_tiling(&data, n_crtcs, &test_mode[j], true);
}
}
--
2.47.3
^ permalink raw reply related [flat|nested] 26+ messages in thread* [PATCH i-g-t 10/12] tests/kms_bw: avoid igt_crtc_for_pipe() and crtc->pipe usage
2026-03-16 11:19 [PATCH i-g-t 00/12] Prepare for returning NULL from igt_crtc_for_pipe() Jani Nikula
` (8 preceding siblings ...)
2026-03-16 11:19 ` [PATCH i-g-t 09/12] tests/kms_bw: clarify what's going on with proper variable naming Jani Nikula
@ 2026-03-16 11:19 ` Jani Nikula
2026-03-16 11:19 ` [PATCH i-g-t 11/12] tests/kms_explicit_fence: store igt_crtc_t* instead of pipe in data Jani Nikula
` (6 subsequent siblings)
16 siblings, 0 replies; 26+ messages in thread
From: Jani Nikula @ 2026-03-16 11:19 UTC (permalink / raw)
To: igt-dev; +Cc: jani.nikula
The test doesn't really care about pipes. It does conflate a lot of
loops with pipes. Try to avoid that by using the CRTC index instead.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
tests/kms_bw.c | 17 ++++++++---------
1 file changed, 8 insertions(+), 9 deletions(-)
diff --git a/tests/kms_bw.c b/tests/kms_bw.c
index 056aa667d795..4df5c2cee885 100644
--- a/tests/kms_bw.c
+++ b/tests/kms_bw.c
@@ -125,12 +125,11 @@ static void test_init(data_t *data, bool physical)
data->connected_outputs = 0;
for_each_crtc(display, crtc) {
- data->crtc[crtc->pipe] = crtc;
- data->primary[crtc->pipe] = igt_crtc_get_plane_type(crtc,
- DRM_PLANE_TYPE_PRIMARY);
- data->pipe_crc[crtc->pipe] =
- igt_crtc_crc_new(crtc,
- IGT_PIPE_CRC_SOURCE_AUTO);
+ data->crtc[crtc->crtc_index] = crtc;
+ data->primary[crtc->crtc_index] =
+ igt_crtc_get_plane_type(crtc, DRM_PLANE_TYPE_PRIMARY);
+ data->pipe_crc[crtc->crtc_index] =
+ igt_crtc_crc_new(crtc, IGT_PIPE_CRC_SOURCE_AUTO);
}
for (i = 0; i < display->n_outputs && i < max_pipes; i++) {
@@ -163,8 +162,8 @@ static void test_fini(data_t *data)
igt_crtc_t *crtc;
for_each_crtc(display, crtc) {
- if (data->pipe_crc[crtc->pipe])
- igt_pipe_crc_free(data->pipe_crc[crtc->pipe]);
+ if (data->pipe_crc[crtc->crtc_index])
+ igt_pipe_crc_free(data->pipe_crc[crtc->crtc_index]);
}
igt_display_reset(display);
@@ -240,7 +239,7 @@ static void run_test_linear_tiling(data_t *data, int n_crtcs, const drmModeModeI
/* create buffers */
for (i = 0; i < n_crtcs; i++) {
- crtc = igt_crtc_for_pipe(display, i);
+ crtc = data->crtc[i];
output = physical ? data->connected_output[i] : data->output[i];
if (!output || !output_mode_supported(output, mode)) {
--
2.47.3
^ permalink raw reply related [flat|nested] 26+ messages in thread* [PATCH i-g-t 11/12] tests/kms_explicit_fence: store igt_crtc_t* instead of pipe in data
2026-03-16 11:19 [PATCH i-g-t 00/12] Prepare for returning NULL from igt_crtc_for_pipe() Jani Nikula
` (9 preceding siblings ...)
2026-03-16 11:19 ` [PATCH i-g-t 10/12] tests/kms_bw: avoid igt_crtc_for_pipe() and crtc->pipe usage Jani Nikula
@ 2026-03-16 11:19 ` Jani Nikula
2026-03-16 11:19 ` [PATCH i-g-t 12/12] lib/kms: convert igt_crtc_for_pipe() into a proper function Jani Nikula
` (5 subsequent siblings)
16 siblings, 0 replies; 26+ messages in thread
From: Jani Nikula @ 2026-03-16 11:19 UTC (permalink / raw)
To: igt-dev; +Cc: jani.nikula
The CRTC originates from for_each_crtc_with_single_output() and is thus
always valid. Just store the igt_crtc_t* pointer instead of the pipe in
data, so that we can avoid igt_crtc_for_pipe() lookups and its return
value checks.
While at it, also fix the call to igt_pipe_crc_new() by passing the CRTC
index instead of pipe to it.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
tests/kms_explicit_fence.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/tests/kms_explicit_fence.c b/tests/kms_explicit_fence.c
index a7d127c93afc..0b85a9402383 100644
--- a/tests/kms_explicit_fence.c
+++ b/tests/kms_explicit_fence.c
@@ -54,7 +54,7 @@ typedef struct {
int drm_fd;
igt_display_t display;
igt_output_t *output;
- enum pipe pipe;
+ igt_crtc_t *crtc;
igt_plane_t *primary;
igt_plane_t *overlay1;
igt_plane_t *overlay2;
@@ -91,7 +91,7 @@ static void setup_output(data_t *data)
DRM_PLANE_TYPE_OVERLAY,
1);
data->output = output;
- data->pipe = crtc->pipe;
+ data->crtc = crtc;
data->mode = igt_output_get_mode(output);
data->width = data->mode->hdisplay;
data->height = data->mode->vdisplay;
@@ -141,7 +141,7 @@ static void create_fbs(data_t *data)
static void setup_initial_modeset(data_t *data)
{
/* Initial modeset to establish baseline (no fences) */
- igt_output_set_crtc(data->output, igt_crtc_for_pipe(&data->display, data->pipe));
+ igt_output_set_crtc(data->output, data->crtc);
igt_plane_set_fb(data->primary, &data->primary_fb);
igt_plane_set_fb(data->overlay1, &data->overlay1_fb);
igt_plane_set_position(data->overlay1, OVERLAY1_POS_X, OVERLAY1_POS_Y);
@@ -250,7 +250,7 @@ static void multiplane_atomic_fence_wait(data_t *data)
data->overlay1_fb.width, OVERLAY1_POS_Y);
/* Request OUT_FENCE to track when display update completes */
- igt_crtc_request_out_fence(igt_crtc_for_pipe(&data->display, data->pipe));
+ igt_crtc_request_out_fence(data->crtc);
/*
* The atomic commit should succeed immediately (NONBLOCK mode),
@@ -268,7 +268,7 @@ static void multiplane_atomic_fence_wait(data_t *data)
igt_assert_eq(ret, 0);
/* Get the out fence to monitor completion */
- out_fence = igt_crtc_for_pipe(&data->display, data->pipe)->out_fence_fd;
+ out_fence = data->crtc->out_fence_fd;
igt_assert(out_fence >= 0);
/* Verify overlay2 fence (last one) is still unsignaled */
@@ -324,7 +324,7 @@ static void multiplane_atomic_fence_wait(data_t *data)
igt_plane_set_fence_fd(planes[i], -1);
}
close(out_fence);
- igt_crtc_for_pipe(&data->display, data->pipe)->out_fence_fd = -1;
+ data->crtc->out_fence_fd = -1;
}
static void reset_display_state(data_t *data)
@@ -349,7 +349,7 @@ int igt_main()
setup_output(&data);
create_fbs(&data);
- data.pipe_crc = igt_pipe_crc_new(data.drm_fd, data.pipe,
+ data.pipe_crc = igt_pipe_crc_new(data.drm_fd, data.crtc->crtc_index,
IGT_PIPE_CRC_SOURCE_AUTO);
}
--
2.47.3
^ permalink raw reply related [flat|nested] 26+ messages in thread* [PATCH i-g-t 12/12] lib/kms: convert igt_crtc_for_pipe() into a proper function
2026-03-16 11:19 [PATCH i-g-t 00/12] Prepare for returning NULL from igt_crtc_for_pipe() Jani Nikula
` (10 preceding siblings ...)
2026-03-16 11:19 ` [PATCH i-g-t 11/12] tests/kms_explicit_fence: store igt_crtc_t* instead of pipe in data Jani Nikula
@ 2026-03-16 11:19 ` Jani Nikula
2026-03-16 14:54 ` [PATCH i-g-t 00/12] Prepare for returning NULL from igt_crtc_for_pipe() Ville Syrjälä
` (4 subsequent siblings)
16 siblings, 0 replies; 26+ messages in thread
From: Jani Nikula @ 2026-03-16 11:19 UTC (permalink / raw)
To: igt-dev; +Cc: jani.nikula
The usage of igt_crtc_for_pipe() has been reduced so much that having it
as static inline is no longer justified for performance reasons. Prefer
hiding the implementation details instead by turning it into a proper
function.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
lib/igt_kms.c | 8 ++++++++
lib/igt_kms.h | 8 +-------
2 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index 57f5e099a313..e831e3938f12 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -8032,6 +8032,14 @@ igt_crtc_t *igt_crtc_for_crtc_index(igt_display_t *display, int crtc_index)
return NULL;
}
+igt_crtc_t *igt_crtc_for_pipe(igt_display_t *display, enum pipe pipe)
+{
+ if (pipe == PIPE_NONE)
+ return NULL;
+
+ return &display->crtcs[pipe];
+}
+
/*
* igt_first_crtc:
* @display: pointer to igt_display_t
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 0bb2734ea3d7..19ebaf199d9b 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -575,15 +575,9 @@ int igt_display_n_crtcs(igt_display_t *display);
const char *igt_crtc_name(igt_crtc_t *crtc);
-static inline igt_crtc_t *igt_crtc_for_pipe(igt_display_t *display, enum pipe pipe)
-{
- if (pipe == PIPE_NONE)
- return NULL;
-
- return &display->crtcs[pipe];
-}
igt_crtc_t *igt_crtc_for_crtc_id(igt_display_t *display, uint32_t crtc_id);
igt_crtc_t *igt_crtc_for_crtc_index(igt_display_t *display, int crtc_index);
+igt_crtc_t *igt_crtc_for_pipe(igt_display_t *display, enum pipe pipe);
igt_crtc_t *igt_first_crtc(igt_display_t *display);
igt_crtc_t *igt_first_crtc_with_single_output(igt_display_t *display, igt_output_t **ret_output);
igt_crtc_t *igt_next_crtc(igt_display_t *display, igt_crtc_t *crtc);
--
2.47.3
^ permalink raw reply related [flat|nested] 26+ messages in thread* Re: [PATCH i-g-t 00/12] Prepare for returning NULL from igt_crtc_for_pipe()
2026-03-16 11:19 [PATCH i-g-t 00/12] Prepare for returning NULL from igt_crtc_for_pipe() Jani Nikula
` (11 preceding siblings ...)
2026-03-16 11:19 ` [PATCH i-g-t 12/12] lib/kms: convert igt_crtc_for_pipe() into a proper function Jani Nikula
@ 2026-03-16 14:54 ` Ville Syrjälä
2026-03-17 7:50 ` Jani Nikula
2026-03-17 6:02 ` ✓ Xe.CI.BAT: success for " Patchwork
` (3 subsequent siblings)
16 siblings, 1 reply; 26+ messages in thread
From: Ville Syrjälä @ 2026-03-16 14:54 UTC (permalink / raw)
To: Jani Nikula; +Cc: igt-dev
On Mon, Mar 16, 2026 at 01:19:02PM +0200, Jani Nikula wrote:
> We want to return NULL for invalid pipes from igt_crtc_for_pipe(), so
> that we don't need to have igt_crtc_t objects with crtc->valid == false
> around.
>
> The primary way to prepare for this is to avoid using
> igt_crtc_for_pipe() altogether. We've done a *lot* of that already, and
> continue to do so here.
>
> For the remaining ones, start off by ensuring crtc->valid == true, one
> way or other. This ensures the test logic is sane and actually operates
> on valid CRTCs. Once this prep is done, we can actually return NULL from
> igt_crtc_for_pipe(), and check for crtc != NULL instead of crtc->valid
> == true.
I was hoping to make igt_crtc_for_pipe() just skip if the CRTC
doesn't exist. But maybe there are still too many places that
assume they can ask for any pipe and not skip?
>
> BR,
> Jani.
>
>
> Jani Nikula (12):
> tests/amdgpu/amd_mode_switch: Prepare for returning NULL from
> igt_crtc_for_pipe()
> tests/amdgpu/amd_multidisplay_modeset: Prepare for returning NULL from
> igt_crtc_for_pipe()
> tests/intel/kms_cdclk: use igt_next_crtc()
> tests/intel/kms_joiner: Prepare for returning NULL from
> igt_crtc_for_pipe()
> tests/intel/kms_joiner_helper: Prepare for returning NULL from
> igt_crtc_for_pipe()
> tests/intel/kms_pipe_b_c_ivb: Prepare for returning NULL from
> igt_crtc_for_pipe()
> tests/intel/kms_pipe_stress: Prepare for returning NULL from
> igt_crtc_for_pipe()
> tests/kms_bw: fix misleading indent
> tests/kms_bw: clarify what's going on with proper variable naming
> tests/kms_bw: avoid igt_crtc_for_pipe() and crtc->pipe usage
> tests/kms_explicit_fence: store igt_crtc_t* instead of pipe in data
> lib/kms: convert igt_crtc_for_pipe() into a proper function
>
> lib/igt_kms.c | 8 +++
> lib/igt_kms.h | 8 +--
> tests/amdgpu/amd_mode_switch.c | 2 +
> tests/amdgpu/amd_multidisplay_modeset.c | 2 +
> tests/intel/kms_cdclk.c | 10 ++--
> tests/intel/kms_joiner.c | 66 ++++++++++++++++++-------
> tests/intel/kms_joiner_helper.c | 16 +++---
> tests/intel/kms_pipe_b_c_ivb.c | 28 +++++++----
> tests/intel/kms_pipe_stress.c | 4 ++
> tests/kms_bw.c | 48 +++++++++---------
> tests/kms_explicit_fence.c | 14 +++---
> 11 files changed, 131 insertions(+), 75 deletions(-)
>
> --
> 2.47.3
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 26+ messages in thread* Re: [PATCH i-g-t 00/12] Prepare for returning NULL from igt_crtc_for_pipe()
2026-03-16 14:54 ` [PATCH i-g-t 00/12] Prepare for returning NULL from igt_crtc_for_pipe() Ville Syrjälä
@ 2026-03-17 7:50 ` Jani Nikula
0 siblings, 0 replies; 26+ messages in thread
From: Jani Nikula @ 2026-03-17 7:50 UTC (permalink / raw)
To: Ville Syrjälä; +Cc: igt-dev
On Mon, 16 Mar 2026, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> On Mon, Mar 16, 2026 at 01:19:02PM +0200, Jani Nikula wrote:
>> We want to return NULL for invalid pipes from igt_crtc_for_pipe(), so
>> that we don't need to have igt_crtc_t objects with crtc->valid == false
>> around.
>>
>> The primary way to prepare for this is to avoid using
>> igt_crtc_for_pipe() altogether. We've done a *lot* of that already, and
>> continue to do so here.
>>
>> For the remaining ones, start off by ensuring crtc->valid == true, one
>> way or other. This ensures the test logic is sane and actually operates
>> on valid CRTCs. Once this prep is done, we can actually return NULL from
>> igt_crtc_for_pipe(), and check for crtc != NULL instead of crtc->valid
>> == true.
>
> I was hoping to make igt_crtc_for_pipe() just skip if the CRTC
> doesn't exist. But maybe there are still too many places that
> assume they can ask for any pipe and not skip?
At the very least the joiner logic has to gracefully check if a pipe
exists or not, without impacting test execution status.
The alternative would be to have igt_crtc_for_pipe() skip, but introduce
igt_pipe_exists() or somesuch for the check. That might lead to some
places requiring both, though.
Partially I'm also interested in the test results here; are there tests
that have been using invalid CRTCs...
BR,
Jani.
>
>>
>> BR,
>> Jani.
>>
>>
>> Jani Nikula (12):
>> tests/amdgpu/amd_mode_switch: Prepare for returning NULL from
>> igt_crtc_for_pipe()
>> tests/amdgpu/amd_multidisplay_modeset: Prepare for returning NULL from
>> igt_crtc_for_pipe()
>> tests/intel/kms_cdclk: use igt_next_crtc()
>> tests/intel/kms_joiner: Prepare for returning NULL from
>> igt_crtc_for_pipe()
>> tests/intel/kms_joiner_helper: Prepare for returning NULL from
>> igt_crtc_for_pipe()
>> tests/intel/kms_pipe_b_c_ivb: Prepare for returning NULL from
>> igt_crtc_for_pipe()
>> tests/intel/kms_pipe_stress: Prepare for returning NULL from
>> igt_crtc_for_pipe()
>> tests/kms_bw: fix misleading indent
>> tests/kms_bw: clarify what's going on with proper variable naming
>> tests/kms_bw: avoid igt_crtc_for_pipe() and crtc->pipe usage
>> tests/kms_explicit_fence: store igt_crtc_t* instead of pipe in data
>> lib/kms: convert igt_crtc_for_pipe() into a proper function
>>
>> lib/igt_kms.c | 8 +++
>> lib/igt_kms.h | 8 +--
>> tests/amdgpu/amd_mode_switch.c | 2 +
>> tests/amdgpu/amd_multidisplay_modeset.c | 2 +
>> tests/intel/kms_cdclk.c | 10 ++--
>> tests/intel/kms_joiner.c | 66 ++++++++++++++++++-------
>> tests/intel/kms_joiner_helper.c | 16 +++---
>> tests/intel/kms_pipe_b_c_ivb.c | 28 +++++++----
>> tests/intel/kms_pipe_stress.c | 4 ++
>> tests/kms_bw.c | 48 +++++++++---------
>> tests/kms_explicit_fence.c | 14 +++---
>> 11 files changed, 131 insertions(+), 75 deletions(-)
>>
>> --
>> 2.47.3
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 26+ messages in thread
* ✓ Xe.CI.BAT: success for Prepare for returning NULL from igt_crtc_for_pipe()
2026-03-16 11:19 [PATCH i-g-t 00/12] Prepare for returning NULL from igt_crtc_for_pipe() Jani Nikula
` (12 preceding siblings ...)
2026-03-16 14:54 ` [PATCH i-g-t 00/12] Prepare for returning NULL from igt_crtc_for_pipe() Ville Syrjälä
@ 2026-03-17 6:02 ` Patchwork
2026-03-17 11:45 ` ✗ i915.CI.BAT: failure " Patchwork
` (2 subsequent siblings)
16 siblings, 0 replies; 26+ messages in thread
From: Patchwork @ 2026-03-17 6:02 UTC (permalink / raw)
To: Jani Nikula; +Cc: igt-dev
[-- Attachment #1: Type: text/plain, Size: 986 bytes --]
== Series Details ==
Series: Prepare for returning NULL from igt_crtc_for_pipe()
URL : https://patchwork.freedesktop.org/series/163278/
State : success
== Summary ==
CI Bug Log - changes from XEIGT_8806_BAT -> XEIGTPW_14778_BAT
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (14 -> 14)
------------------------------
No changes in participating hosts
Changes
-------
No changes found
Build changes
-------------
* IGT: IGT_8806 -> IGTPW_14778
* Linux: xe-4731-a25d8c583e1e52bde77d371081a7c3fcd0a2e820 -> xe-4732-72df5434544ebbfc63b3649354fb0276b9b4db6a
IGTPW_14778: 14778
IGT_8806: 8806
xe-4731-a25d8c583e1e52bde77d371081a7c3fcd0a2e820: a25d8c583e1e52bde77d371081a7c3fcd0a2e820
xe-4732-72df5434544ebbfc63b3649354fb0276b9b4db6a: 72df5434544ebbfc63b3649354fb0276b9b4db6a
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/index.html
[-- Attachment #2: Type: text/html, Size: 1545 bytes --]
^ permalink raw reply [flat|nested] 26+ messages in thread* ✗ i915.CI.BAT: failure for Prepare for returning NULL from igt_crtc_for_pipe()
2026-03-16 11:19 [PATCH i-g-t 00/12] Prepare for returning NULL from igt_crtc_for_pipe() Jani Nikula
` (13 preceding siblings ...)
2026-03-17 6:02 ` ✓ Xe.CI.BAT: success for " Patchwork
@ 2026-03-17 11:45 ` Patchwork
2026-03-18 11:06 ` ✗ Xe.CI.FULL: " Patchwork
2026-03-19 16:07 ` [PATCH i-g-t 00/12] " Ville Syrjälä
16 siblings, 0 replies; 26+ messages in thread
From: Patchwork @ 2026-03-17 11:45 UTC (permalink / raw)
To: Jani Nikula; +Cc: igt-dev
[-- Attachment #1: Type: text/plain, Size: 4712 bytes --]
== Series Details ==
Series: Prepare for returning NULL from igt_crtc_for_pipe()
URL : https://patchwork.freedesktop.org/series/163278/
State : failure
== Summary ==
CI Bug Log - changes from IGT_8806 -> IGTPW_14778
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with IGTPW_14778 absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in IGTPW_14778, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14778/index.html
Participating hosts (42 -> 40)
------------------------------
Missing (2): bat-dg2-13 fi-snb-2520m
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in IGTPW_14778:
### IGT changes ###
#### Possible regressions ####
* igt@i915_pm_rpm@module-reload:
- bat-mtlp-8: [PASS][1] -> [INCOMPLETE][2]
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8806/bat-mtlp-8/igt@i915_pm_rpm@module-reload.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14778/bat-mtlp-8/igt@i915_pm_rpm@module-reload.html
Known issues
------------
Here are the changes found in IGTPW_14778 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@i915_selftest@live@late_gt_pm:
- fi-cfl-8109u: [PASS][3] -> [DMESG-WARN][4] ([i915#13735]) +80 other tests dmesg-warn
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8806/fi-cfl-8109u/igt@i915_selftest@live@late_gt_pm.html
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14778/fi-cfl-8109u/igt@i915_selftest@live@late_gt_pm.html
* igt@i915_selftest@live@workarounds:
- bat-dg2-9: [PASS][5] -> [DMESG-FAIL][6] ([i915#12061]) +1 other test dmesg-fail
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8806/bat-dg2-9/igt@i915_selftest@live@workarounds.html
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14778/bat-dg2-9/igt@i915_selftest@live@workarounds.html
* igt@kms_hdmi_inject@inject-audio:
- fi-tgl-1115g4: [PASS][7] -> [FAIL][8] ([i915#14867])
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8806/fi-tgl-1115g4/igt@kms_hdmi_inject@inject-audio.html
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14778/fi-tgl-1115g4/igt@kms_hdmi_inject@inject-audio.html
* igt@kms_pipe_crc_basic@read-crc:
- fi-cfl-8109u: [PASS][9] -> [DMESG-WARN][10] ([i915#13735] / [i915#15673]) +49 other tests dmesg-warn
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8806/fi-cfl-8109u/igt@kms_pipe_crc_basic@read-crc.html
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14778/fi-cfl-8109u/igt@kms_pipe_crc_basic@read-crc.html
#### Possible fixes ####
* igt@i915_selftest@live:
- bat-dg2-8: [DMESG-FAIL][11] ([i915#12061]) -> [PASS][12] +1 other test pass
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8806/bat-dg2-8/igt@i915_selftest@live.html
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14778/bat-dg2-8/igt@i915_selftest@live.html
* igt@i915_selftest@live@workarounds:
- bat-mtlp-9: [DMESG-FAIL][13] ([i915#12061]) -> [PASS][14] +1 other test pass
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8806/bat-mtlp-9/igt@i915_selftest@live@workarounds.html
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14778/bat-mtlp-9/igt@i915_selftest@live@workarounds.html
- bat-arls-6: [DMESG-FAIL][15] ([i915#12061]) -> [PASS][16] +1 other test pass
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8806/bat-arls-6/igt@i915_selftest@live@workarounds.html
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14778/bat-arls-6/igt@i915_selftest@live@workarounds.html
[i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
[i915#13735]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13735
[i915#14867]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14867
[i915#15673]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15673
Build changes
-------------
* CI: CI-20190529 -> None
* IGT: IGT_8806 -> IGTPW_14778
* Linux: CI_DRM_18160 -> CI_DRM_18161
CI-20190529: 20190529
CI_DRM_18160: a25d8c583e1e52bde77d371081a7c3fcd0a2e820 @ git://anongit.freedesktop.org/gfx-ci/linux
CI_DRM_18161: 72df5434544ebbfc63b3649354fb0276b9b4db6a @ git://anongit.freedesktop.org/gfx-ci/linux
IGTPW_14778: 14778
IGT_8806: 8806
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14778/index.html
[-- Attachment #2: Type: text/html, Size: 5806 bytes --]
^ permalink raw reply [flat|nested] 26+ messages in thread* ✗ Xe.CI.FULL: failure for Prepare for returning NULL from igt_crtc_for_pipe()
2026-03-16 11:19 [PATCH i-g-t 00/12] Prepare for returning NULL from igt_crtc_for_pipe() Jani Nikula
` (14 preceding siblings ...)
2026-03-17 11:45 ` ✗ i915.CI.BAT: failure " Patchwork
@ 2026-03-18 11:06 ` Patchwork
2026-03-19 16:07 ` [PATCH i-g-t 00/12] " Ville Syrjälä
16 siblings, 0 replies; 26+ messages in thread
From: Patchwork @ 2026-03-18 11:06 UTC (permalink / raw)
To: Jani Nikula; +Cc: igt-dev
[-- Attachment #1: Type: text/plain, Size: 36779 bytes --]
== Series Details ==
Series: Prepare for returning NULL from igt_crtc_for_pipe()
URL : https://patchwork.freedesktop.org/series/163278/
State : failure
== Summary ==
CI Bug Log - changes from XEIGT_8806_FULL -> XEIGTPW_14778_FULL
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with XEIGTPW_14778_FULL absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in XEIGTPW_14778_FULL, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
Participating hosts (2 -> 2)
------------------------------
No changes in participating hosts
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in XEIGTPW_14778_FULL:
### IGT changes ###
#### Possible regressions ####
* igt@kms_bw@connected-linear-tiling-2-displays-2560x1440p:
- shard-bmg: [PASS][1] -> [SKIP][2]
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-9/igt@kms_bw@connected-linear-tiling-2-displays-2560x1440p.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-2/igt@kms_bw@connected-linear-tiling-2-displays-2560x1440p.html
* igt@kms_bw@connected-linear-tiling-3-displays-2560x1440p:
- shard-bmg: NOTRUN -> [SKIP][3] +1 other test skip
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-7/igt@kms_bw@connected-linear-tiling-3-displays-2560x1440p.html
* igt@kms_flip@blocking-absolute-wf_vblank-interruptible:
- shard-bmg: [PASS][4] -> [ABORT][5] +1 other test abort
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-7/igt@kms_flip@blocking-absolute-wf_vblank-interruptible.html
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-2/igt@kms_flip@blocking-absolute-wf_vblank-interruptible.html
* igt@kms_flip@blocking-absolute-wf_vblank-interruptible@d-hdmi-a3:
- shard-bmg: [PASS][6] -> [DMESG-WARN][7] +5 other tests dmesg-warn
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-7/igt@kms_flip@blocking-absolute-wf_vblank-interruptible@d-hdmi-a3.html
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-2/igt@kms_flip@blocking-absolute-wf_vblank-interruptible@d-hdmi-a3.html
* igt@xe_pmu@gt-frequency:
- shard-bmg: [PASS][8] -> [WARN][9] +1 other test warn
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-2/igt@xe_pmu@gt-frequency.html
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-9/igt@xe_pmu@gt-frequency.html
#### Warnings ####
* igt@kms_bw@connected-linear-tiling-2-displays-1920x1080p:
- shard-lnl: [SKIP][10] ([Intel XE#2191] / [Intel XE#7373]) -> [SKIP][11] +7 other tests skip
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-lnl-5/igt@kms_bw@connected-linear-tiling-2-displays-1920x1080p.html
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-lnl-3/igt@kms_bw@connected-linear-tiling-2-displays-1920x1080p.html
* igt@kms_bw@connected-linear-tiling-3-displays-1920x1080p:
- shard-bmg: [SKIP][12] ([Intel XE#2314] / [Intel XE#2894] / [Intel XE#7373]) -> [SKIP][13] +5 other tests skip
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-4/igt@kms_bw@connected-linear-tiling-3-displays-1920x1080p.html
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-8/igt@kms_bw@connected-linear-tiling-3-displays-1920x1080p.html
* igt@kms_bw@connected-linear-tiling-4-displays-2560x1440p:
- shard-lnl: [SKIP][14] ([Intel XE#1512] / [Intel XE#7392]) -> [SKIP][15] +7 other tests skip
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-lnl-6/igt@kms_bw@connected-linear-tiling-4-displays-2560x1440p.html
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-lnl-5/igt@kms_bw@connected-linear-tiling-4-displays-2560x1440p.html
Known issues
------------
Here are the changes found in XEIGTPW_14778_FULL that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@kms_big_fb@4-tiled-32bpp-rotate-270:
- shard-bmg: NOTRUN -> [SKIP][16] ([Intel XE#2327])
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-10/igt@kms_big_fb@4-tiled-32bpp-rotate-270.html
* igt@kms_big_fb@y-tiled-8bpp-rotate-90:
- shard-bmg: NOTRUN -> [SKIP][17] ([Intel XE#1124]) +4 other tests skip
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-5/igt@kms_big_fb@y-tiled-8bpp-rotate-90.html
* igt@kms_bw@connected-linear-tiling-1-displays-3840x2160p:
- shard-bmg: [PASS][18] -> [SKIP][19] ([Intel XE#7621])
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-5/igt@kms_bw@connected-linear-tiling-1-displays-3840x2160p.html
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-7/igt@kms_bw@connected-linear-tiling-1-displays-3840x2160p.html
* igt@kms_ccs@bad-aux-stride-yf-tiled-ccs:
- shard-bmg: NOTRUN -> [SKIP][20] ([Intel XE#2887]) +4 other tests skip
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-2/igt@kms_ccs@bad-aux-stride-yf-tiled-ccs.html
* igt@kms_chamelium_color@degamma:
- shard-bmg: NOTRUN -> [SKIP][21] ([Intel XE#2325] / [Intel XE#7358]) +1 other test skip
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-9/igt@kms_chamelium_color@degamma.html
* igt@kms_chamelium_frames@dp-frame-dump:
- shard-bmg: NOTRUN -> [SKIP][22] ([Intel XE#2252]) +1 other test skip
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-2/igt@kms_chamelium_frames@dp-frame-dump.html
* igt@kms_content_protection@lic-type-0-hdcp14@pipe-a-dp-2:
- shard-bmg: NOTRUN -> [FAIL][23] ([Intel XE#1178] / [Intel XE#3304] / [Intel XE#7374]) +2 other tests fail
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-9/igt@kms_content_protection@lic-type-0-hdcp14@pipe-a-dp-2.html
* igt@kms_content_protection@lic-type-1:
- shard-bmg: NOTRUN -> [SKIP][24] ([Intel XE#2341])
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-7/igt@kms_content_protection@lic-type-1.html
* igt@kms_cursor_crc@cursor-onscreen-32x10:
- shard-bmg: NOTRUN -> [SKIP][25] ([Intel XE#2320]) +1 other test skip
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-9/igt@kms_cursor_crc@cursor-onscreen-32x10.html
* igt@kms_cursor_legacy@2x-cursor-vs-flip-legacy:
- shard-bmg: [PASS][26] -> [SKIP][27] ([Intel XE#2291]) +2 other tests skip
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-7/igt@kms_cursor_legacy@2x-cursor-vs-flip-legacy.html
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-5/igt@kms_cursor_legacy@2x-cursor-vs-flip-legacy.html
* igt@kms_cursor_legacy@cursora-vs-flipb-atomic:
- shard-bmg: NOTRUN -> [SKIP][28] ([Intel XE#2291])
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-5/igt@kms_cursor_legacy@cursora-vs-flipb-atomic.html
* igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size:
- shard-bmg: [PASS][29] -> [SKIP][30] ([Intel XE#2291] / [Intel XE#7343])
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-4/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size.html
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-5/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size.html
* igt@kms_fbc_dirty_rect@fbc-dirty-rectangle-different-formats:
- shard-bmg: NOTRUN -> [SKIP][31] ([Intel XE#4422] / [Intel XE#7442])
[31]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-8/igt@kms_fbc_dirty_rect@fbc-dirty-rectangle-different-formats.html
* igt@kms_fbcon_fbt@fbc-suspend:
- shard-bmg: NOTRUN -> [SKIP][32] ([Intel XE#4156] / [Intel XE#7425])
[32]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-9/igt@kms_fbcon_fbt@fbc-suspend.html
* igt@kms_flip@2x-flip-vs-dpms-on-nop-interruptible:
- shard-bmg: [PASS][33] -> [SKIP][34] ([Intel XE#2316]) +5 other tests skip
[33]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-8/igt@kms_flip@2x-flip-vs-dpms-on-nop-interruptible.html
[34]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-5/igt@kms_flip@2x-flip-vs-dpms-on-nop-interruptible.html
* igt@kms_flip_scaled_crc@flip-32bpp-yuv-linear-to-32bpp-yuv-linear-reflect-x:
- shard-bmg: NOTRUN -> [SKIP][35] ([Intel XE#7179])
[35]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-5/igt@kms_flip_scaled_crc@flip-32bpp-yuv-linear-to-32bpp-yuv-linear-reflect-x.html
* igt@kms_frontbuffer_tracking@drrs-2p-primscrn-indfb-pgflip-blt:
- shard-bmg: NOTRUN -> [SKIP][36] ([Intel XE#2311]) +7 other tests skip
[36]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-9/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-indfb-pgflip-blt.html
* igt@kms_frontbuffer_tracking@drrs-argb161616f-draw-mmap-wc:
- shard-bmg: NOTRUN -> [SKIP][37] ([Intel XE#7061] / [Intel XE#7356])
[37]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-3/igt@kms_frontbuffer_tracking@drrs-argb161616f-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbc-1p-primscrn-indfb-pgflip-blt:
- shard-bmg: NOTRUN -> [SKIP][38] ([Intel XE#4141]) +7 other tests skip
[38]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-9/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-indfb-pgflip-blt.html
* igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-indfb-draw-render:
- shard-bmg: NOTRUN -> [SKIP][39] ([Intel XE#2312]) +1 other test skip
[39]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-5/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbcdrrs-tiling-y:
- shard-bmg: NOTRUN -> [SKIP][40] ([Intel XE#2352] / [Intel XE#7399])
[40]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-3/igt@kms_frontbuffer_tracking@fbcdrrs-tiling-y.html
* igt@kms_frontbuffer_tracking@psr-2p-scndscrn-cur-indfb-draw-render:
- shard-bmg: NOTRUN -> [SKIP][41] ([Intel XE#2313]) +11 other tests skip
[41]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-8/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-cur-indfb-draw-render.html
* igt@kms_hdr@invalid-metadata-sizes:
- shard-bmg: [PASS][42] -> [SKIP][43] ([Intel XE#1503])
[42]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-7/igt@kms_hdr@invalid-metadata-sizes.html
[43]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-5/igt@kms_hdr@invalid-metadata-sizes.html
* igt@kms_joiner@invalid-modeset-big-joiner:
- shard-bmg: NOTRUN -> [SKIP][44] ([Intel XE#6901])
[44]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-9/igt@kms_joiner@invalid-modeset-big-joiner.html
* igt@kms_plane@pixel-format-y-tiled-modifier-source-clamping:
- shard-bmg: NOTRUN -> [SKIP][45] ([Intel XE#7283])
[45]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-8/igt@kms_plane@pixel-format-y-tiled-modifier-source-clamping.html
* igt@kms_plane_cursor@primary:
- shard-bmg: [PASS][46] -> [FAIL][47] ([Intel XE#7299]) +1 other test fail
[46]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-6/igt@kms_plane_cursor@primary.html
[47]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-2/igt@kms_plane_cursor@primary.html
* igt@kms_plane_multiple@tiling-yf:
- shard-bmg: NOTRUN -> [SKIP][48] ([Intel XE#5020] / [Intel XE#7348])
[48]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-4/igt@kms_plane_multiple@tiling-yf.html
* igt@kms_pm_dc@dc3co-vpb-simulation:
- shard-bmg: NOTRUN -> [SKIP][49] ([Intel XE#2391] / [Intel XE#6927])
[49]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-1/igt@kms_pm_dc@dc3co-vpb-simulation.html
* igt@kms_pm_dc@dc5-psr:
- shard-lnl: [PASS][50] -> [FAIL][51] ([Intel XE#7340])
[50]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-lnl-7/igt@kms_pm_dc@dc5-psr.html
[51]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-lnl-6/igt@kms_pm_dc@dc5-psr.html
* igt@kms_psr2_sf@fbc-psr2-plane-move-sf-dmg-area:
- shard-bmg: NOTRUN -> [SKIP][52] ([Intel XE#1489]) +2 other tests skip
[52]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-9/igt@kms_psr2_sf@fbc-psr2-plane-move-sf-dmg-area.html
* igt@kms_psr@fbc-psr-basic:
- shard-bmg: NOTRUN -> [SKIP][53] ([Intel XE#2234] / [Intel XE#2850]) +5 other tests skip
[53]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-3/igt@kms_psr@fbc-psr-basic.html
* igt@kms_rotation_crc@primary-y-tiled-reflect-x-90:
- shard-bmg: NOTRUN -> [SKIP][54] ([Intel XE#3414] / [Intel XE#3904] / [Intel XE#7342]) +1 other test skip
[54]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-9/igt@kms_rotation_crc@primary-y-tiled-reflect-x-90.html
* igt@kms_sharpness_filter@filter-scaler-downscale:
- shard-bmg: NOTRUN -> [SKIP][55] ([Intel XE#6503]) +1 other test skip
[55]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-2/igt@kms_sharpness_filter@filter-scaler-downscale.html
* igt@kms_vrr@flipline:
- shard-bmg: NOTRUN -> [SKIP][56] ([Intel XE#1499])
[56]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-8/igt@kms_vrr@flipline.html
* igt@kms_vrr@lobf:
- shard-bmg: NOTRUN -> [SKIP][57] ([Intel XE#2168] / [Intel XE#7444])
[57]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-4/igt@kms_vrr@lobf.html
* igt@xe_create@multigpu-create-massive-size:
- shard-bmg: NOTRUN -> [SKIP][58] ([Intel XE#2504] / [Intel XE#7319] / [Intel XE#7350])
[58]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-5/igt@xe_create@multigpu-create-massive-size.html
* igt@xe_eudebug@basic-close:
- shard-bmg: NOTRUN -> [SKIP][59] ([Intel XE#4837]) +1 other test skip
[59]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-9/igt@xe_eudebug@basic-close.html
* igt@xe_eudebug_online@breakpoint-many-sessions-tiles:
- shard-bmg: NOTRUN -> [SKIP][60] ([Intel XE#4837] / [Intel XE#6665]) +2 other tests skip
[60]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-8/igt@xe_eudebug_online@breakpoint-many-sessions-tiles.html
* igt@xe_eudebug_online@pagefault-write-stress:
- shard-bmg: NOTRUN -> [SKIP][61] ([Intel XE#6665] / [Intel XE#6681])
[61]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-1/igt@xe_eudebug_online@pagefault-write-stress.html
* igt@xe_eudebug_sriov@deny-eudebug:
- shard-bmg: NOTRUN -> [SKIP][62] ([Intel XE#5793] / [Intel XE#7320] / [Intel XE#7464])
[62]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-9/igt@xe_eudebug_sriov@deny-eudebug.html
* igt@xe_evict@evict-small-external-multi-queue-cm:
- shard-bmg: NOTRUN -> [SKIP][63] ([Intel XE#7140]) +1 other test skip
[63]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-2/igt@xe_evict@evict-small-external-multi-queue-cm.html
* igt@xe_exec_basic@multigpu-many-execqueues-many-vm-null-rebind:
- shard-bmg: NOTRUN -> [SKIP][64] ([Intel XE#2322] / [Intel XE#7372]) +4 other tests skip
[64]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-9/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-null-rebind.html
* igt@xe_exec_fault_mode@once-multi-queue-userptr-invalidate-prefetch:
- shard-bmg: NOTRUN -> [SKIP][65] ([Intel XE#7136]) +3 other tests skip
[65]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-1/igt@xe_exec_fault_mode@once-multi-queue-userptr-invalidate-prefetch.html
* igt@xe_exec_multi_queue@few-execs-preempt-mode-basic:
- shard-bmg: NOTRUN -> [SKIP][66] ([Intel XE#6874]) +10 other tests skip
[66]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-2/igt@xe_exec_multi_queue@few-execs-preempt-mode-basic.html
* igt@xe_exec_system_allocator@pat-index-madvise-pat-idx-uc-single-vma:
- shard-lnl: [PASS][67] -> [FAIL][68] ([Intel XE#5625])
[67]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-lnl-2/igt@xe_exec_system_allocator@pat-index-madvise-pat-idx-uc-single-vma.html
[68]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-lnl-2/igt@xe_exec_system_allocator@pat-index-madvise-pat-idx-uc-single-vma.html
* igt@xe_exec_threads@threads-multi-queue-cm-fd-userptr:
- shard-bmg: NOTRUN -> [SKIP][69] ([Intel XE#7138]) +3 other tests skip
[69]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-6/igt@xe_exec_threads@threads-multi-queue-cm-fd-userptr.html
* igt@xe_multigpu_svm@mgpu-concurrent-access-prefetch:
- shard-bmg: NOTRUN -> [SKIP][70] ([Intel XE#6964]) +2 other tests skip
[70]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-4/igt@xe_multigpu_svm@mgpu-concurrent-access-prefetch.html
* igt@xe_oa@oa-tlb-invalidate:
- shard-bmg: NOTRUN -> [SKIP][71] ([Intel XE#2248] / [Intel XE#7325] / [Intel XE#7393])
[71]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-9/igt@xe_oa@oa-tlb-invalidate.html
* igt@xe_pat@pat-index-xelpg:
- shard-bmg: NOTRUN -> [SKIP][72] ([Intel XE#2236])
[72]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-1/igt@xe_pat@pat-index-xelpg.html
* igt@xe_peer2peer@read:
- shard-bmg: NOTRUN -> [SKIP][73] ([Intel XE#2427] / [Intel XE#6953] / [Intel XE#7326] / [Intel XE#7353])
[73]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-8/igt@xe_peer2peer@read.html
* igt@xe_query@multigpu-query-cs-cycles:
- shard-bmg: NOTRUN -> [SKIP][74] ([Intel XE#944])
[74]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-9/igt@xe_query@multigpu-query-cs-cycles.html
* igt@xe_sriov_flr@flr-twice:
- shard-bmg: [PASS][75] -> [FAIL][76] ([Intel XE#6569])
[75]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-10/igt@xe_sriov_flr@flr-twice.html
[76]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-1/igt@xe_sriov_flr@flr-twice.html
* igt@xe_sriov_vram@vf-access-provisioned:
- shard-bmg: [PASS][77] -> [FAIL][78] ([Intel XE#5937]) +1 other test fail
[77]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-5/igt@xe_sriov_vram@vf-access-provisioned.html
[78]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-2/igt@xe_sriov_vram@vf-access-provisioned.html
#### Possible fixes ####
* igt@kms_atomic_transition@plane-all-transition-nonblocking-fencing:
- shard-bmg: [INCOMPLETE][79] ([Intel XE#1727] / [Intel XE#6819] / [Intel XE#6904]) -> [PASS][80]
[79]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-3/igt@kms_atomic_transition@plane-all-transition-nonblocking-fencing.html
[80]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-3/igt@kms_atomic_transition@plane-all-transition-nonblocking-fencing.html
* igt@kms_atomic_transition@plane-all-transition-nonblocking-fencing@pipe-b-dp-2:
- shard-bmg: [DMESG-FAIL][81] ([Intel XE#1727] / [Intel XE#6819]) -> [PASS][82]
[81]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-3/igt@kms_atomic_transition@plane-all-transition-nonblocking-fencing@pipe-b-dp-2.html
[82]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-3/igt@kms_atomic_transition@plane-all-transition-nonblocking-fencing@pipe-b-dp-2.html
* igt@kms_cursor_legacy@cursora-vs-flipb-atomic-transitions:
- shard-bmg: [SKIP][83] ([Intel XE#2291]) -> [PASS][84]
[83]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-5/igt@kms_cursor_legacy@cursora-vs-flipb-atomic-transitions.html
[84]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-4/igt@kms_cursor_legacy@cursora-vs-flipb-atomic-transitions.html
* igt@kms_cursor_legacy@cursora-vs-flipb-varying-size:
- shard-bmg: [DMESG-WARN][85] ([Intel XE#5354]) -> [PASS][86] +1 other test pass
[85]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-4/igt@kms_cursor_legacy@cursora-vs-flipb-varying-size.html
[86]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-3/igt@kms_cursor_legacy@cursora-vs-flipb-varying-size.html
* igt@kms_cursor_legacy@cursorb-vs-flipb-varying-size:
- shard-bmg: [SKIP][87] ([Intel XE#2291] / [Intel XE#7343]) -> [PASS][88]
[87]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-5/igt@kms_cursor_legacy@cursorb-vs-flipb-varying-size.html
[88]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-6/igt@kms_cursor_legacy@cursorb-vs-flipb-varying-size.html
* igt@kms_flip@2x-flip-vs-absolute-wf_vblank-interruptible:
- shard-bmg: [SKIP][89] ([Intel XE#2316]) -> [PASS][90] +7 other tests pass
[89]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-5/igt@kms_flip@2x-flip-vs-absolute-wf_vblank-interruptible.html
[90]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-3/igt@kms_flip@2x-flip-vs-absolute-wf_vblank-interruptible.html
* igt@kms_flip@flip-vs-expired-vblank@b-edp1:
- shard-lnl: [FAIL][91] ([Intel XE#301]) -> [PASS][92] +1 other test pass
[91]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-lnl-6/igt@kms_flip@flip-vs-expired-vblank@b-edp1.html
[92]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-lnl-4/igt@kms_flip@flip-vs-expired-vblank@b-edp1.html
* igt@kms_flip@wf_vblank-ts-check:
- shard-bmg: [FAIL][93] ([Intel XE#3098]) -> [PASS][94] +1 other test pass
[93]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-4/igt@kms_flip@wf_vblank-ts-check.html
[94]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-4/igt@kms_flip@wf_vblank-ts-check.html
* igt@kms_hdmi_inject@inject-audio:
- shard-bmg: [SKIP][95] ([Intel XE#7308]) -> [PASS][96]
[95]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-6/igt@kms_hdmi_inject@inject-audio.html
[96]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-3/igt@kms_hdmi_inject@inject-audio.html
* igt@kms_hdr@invalid-hdr:
- shard-bmg: [SKIP][97] ([Intel XE#1503]) -> [PASS][98] +1 other test pass
[97]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-10/igt@kms_hdr@invalid-hdr.html
[98]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-1/igt@kms_hdr@invalid-hdr.html
* igt@kms_plane_multiple@2x-tiling-4:
- shard-bmg: [SKIP][99] ([Intel XE#4596]) -> [PASS][100]
[99]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-5/igt@kms_plane_multiple@2x-tiling-4.html
[100]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-10/igt@kms_plane_multiple@2x-tiling-4.html
* igt@kms_setmode@basic:
- shard-bmg: [FAIL][101] ([Intel XE#6361]) -> [PASS][102] +2 other tests pass
[101]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-5/igt@kms_setmode@basic.html
[102]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-10/igt@kms_setmode@basic.html
* igt@kms_setmode@basic@pipe-a-edp-1:
- shard-lnl: [FAIL][103] ([Intel XE#6361]) -> [PASS][104] +1 other test pass
[103]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-lnl-4/igt@kms_setmode@basic@pipe-a-edp-1.html
[104]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-lnl-3/igt@kms_setmode@basic@pipe-a-edp-1.html
* igt@kms_sharpness_filter@invalid-plane-with-filter@pipe-a-edp-1-invalid-plane-with-filter:
- shard-lnl: [DMESG-WARN][105] -> [PASS][106] +1 other test pass
[105]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-lnl-1/igt@kms_sharpness_filter@invalid-plane-with-filter@pipe-a-edp-1-invalid-plane-with-filter.html
[106]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-lnl-4/igt@kms_sharpness_filter@invalid-plane-with-filter@pipe-a-edp-1-invalid-plane-with-filter.html
* igt@xe_exec_system_allocator@fault-benchmark:
- shard-bmg: [FAIL][107] ([Intel XE#7550]) -> [PASS][108]
[107]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-6/igt@xe_exec_system_allocator@fault-benchmark.html
[108]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-4/igt@xe_exec_system_allocator@fault-benchmark.html
* igt@xe_exec_system_allocator@many-stride-mmap-race:
- shard-bmg: [INCOMPLETE][109] -> [PASS][110]
[109]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-9/igt@xe_exec_system_allocator@many-stride-mmap-race.html
[110]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-6/igt@xe_exec_system_allocator@many-stride-mmap-race.html
#### Warnings ####
* igt@kms_content_protection@lic-type-0:
- shard-bmg: [SKIP][111] ([Intel XE#2341]) -> [FAIL][112] ([Intel XE#1178] / [Intel XE#3304] / [Intel XE#7374])
[111]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-5/igt@kms_content_protection@lic-type-0.html
[112]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-1/igt@kms_content_protection@lic-type-0.html
* igt@kms_content_protection@suspend-resume:
- shard-bmg: [FAIL][113] ([Intel XE#1178] / [Intel XE#3304] / [Intel XE#7374]) -> [SKIP][114] ([Intel XE#6705])
[113]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-4/igt@kms_content_protection@suspend-resume.html
[114]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-5/igt@kms_content_protection@suspend-resume.html
* igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-render:
- shard-bmg: [SKIP][115] ([Intel XE#2311]) -> [SKIP][116] ([Intel XE#2312]) +4 other tests skip
[115]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-6/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-render.html
[116]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-5/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-render:
- shard-bmg: [SKIP][117] ([Intel XE#2312]) -> [SKIP][118] ([Intel XE#4141]) +3 other tests skip
[117]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-5/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-render.html
[118]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-3/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-shrfb-pgflip-blt:
- shard-bmg: [SKIP][119] ([Intel XE#4141]) -> [SKIP][120] ([Intel XE#2312]) +5 other tests skip
[119]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-shrfb-pgflip-blt.html
[120]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-5/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-shrfb-pgflip-blt.html
* igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-wc:
- shard-bmg: [SKIP][121] ([Intel XE#2312]) -> [SKIP][122] ([Intel XE#2311]) +11 other tests skip
[121]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-5/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-wc.html
[122]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-4/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@psr-2p-primscrn-indfb-plflip-blt:
- shard-bmg: [SKIP][123] ([Intel XE#2313]) -> [SKIP][124] ([Intel XE#2312]) +12 other tests skip
[123]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-4/igt@kms_frontbuffer_tracking@psr-2p-primscrn-indfb-plflip-blt.html
[124]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-5/igt@kms_frontbuffer_tracking@psr-2p-primscrn-indfb-plflip-blt.html
* igt@kms_frontbuffer_tracking@psr-2p-scndscrn-spr-indfb-draw-mmap-wc:
- shard-bmg: [SKIP][125] ([Intel XE#2312]) -> [SKIP][126] ([Intel XE#2313]) +13 other tests skip
[125]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8806/shard-bmg-5/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-spr-indfb-draw-mmap-wc.html
[126]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/shard-bmg-7/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-spr-indfb-draw-mmap-wc.html
[Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
[Intel XE#1178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1178
[Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
[Intel XE#1499]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1499
[Intel XE#1503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1503
[Intel XE#1512]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1512
[Intel XE#1727]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1727
[Intel XE#2168]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2168
[Intel XE#2191]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2191
[Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
[Intel XE#2236]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2236
[Intel XE#2248]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2248
[Intel XE#2252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2252
[Intel XE#2291]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2291
[Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
[Intel XE#2312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2312
[Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
[Intel XE#2314]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2314
[Intel XE#2316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2316
[Intel XE#2320]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2320
[Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
[Intel XE#2325]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2325
[Intel XE#2327]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2327
[Intel XE#2341]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2341
[Intel XE#2352]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2352
[Intel XE#2391]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2391
[Intel XE#2427]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2427
[Intel XE#2504]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2504
[Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
[Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887
[Intel XE#2894]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2894
[Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
[Intel XE#3098]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3098
[Intel XE#3304]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3304
[Intel XE#3414]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3414
[Intel XE#3904]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3904
[Intel XE#4141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4141
[Intel XE#4156]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4156
[Intel XE#4422]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4422
[Intel XE#4596]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4596
[Intel XE#4837]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4837
[Intel XE#5020]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5020
[Intel XE#5354]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5354
[Intel XE#5625]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5625
[Intel XE#5793]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5793
[Intel XE#5937]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5937
[Intel XE#6361]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6361
[Intel XE#6503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6503
[Intel XE#6569]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6569
[Intel XE#6665]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6665
[Intel XE#6681]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6681
[Intel XE#6705]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6705
[Intel XE#6819]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6819
[Intel XE#6874]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6874
[Intel XE#6901]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6901
[Intel XE#6904]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6904
[Intel XE#6927]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6927
[Intel XE#6953]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6953
[Intel XE#6964]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6964
[Intel XE#7061]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7061
[Intel XE#7136]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7136
[Intel XE#7138]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7138
[Intel XE#7140]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7140
[Intel XE#7179]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7179
[Intel XE#7283]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7283
[Intel XE#7299]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7299
[Intel XE#7308]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7308
[Intel XE#7319]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7319
[Intel XE#7320]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7320
[Intel XE#7325]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7325
[Intel XE#7326]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7326
[Intel XE#7340]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7340
[Intel XE#7342]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7342
[Intel XE#7343]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7343
[Intel XE#7348]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7348
[Intel XE#7350]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7350
[Intel XE#7353]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7353
[Intel XE#7356]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7356
[Intel XE#7358]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7358
[Intel XE#7372]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7372
[Intel XE#7373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7373
[Intel XE#7374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7374
[Intel XE#7392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7392
[Intel XE#7393]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7393
[Intel XE#7399]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7399
[Intel XE#7425]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7425
[Intel XE#7442]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7442
[Intel XE#7444]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7444
[Intel XE#7464]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7464
[Intel XE#7550]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7550
[Intel XE#7621]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7621
[Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944
Build changes
-------------
* IGT: IGT_8806 -> IGTPW_14778
* Linux: xe-4731-a25d8c583e1e52bde77d371081a7c3fcd0a2e820 -> xe-4732-72df5434544ebbfc63b3649354fb0276b9b4db6a
IGTPW_14778: 14778
IGT_8806: 8806
xe-4731-a25d8c583e1e52bde77d371081a7c3fcd0a2e820: a25d8c583e1e52bde77d371081a7c3fcd0a2e820
xe-4732-72df5434544ebbfc63b3649354fb0276b9b4db6a: 72df5434544ebbfc63b3649354fb0276b9b4db6a
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14778/index.html
[-- Attachment #2: Type: text/html, Size: 41329 bytes --]
^ permalink raw reply [flat|nested] 26+ messages in thread* Re: [PATCH i-g-t 00/12] Prepare for returning NULL from igt_crtc_for_pipe()
2026-03-16 11:19 [PATCH i-g-t 00/12] Prepare for returning NULL from igt_crtc_for_pipe() Jani Nikula
` (15 preceding siblings ...)
2026-03-18 11:06 ` ✗ Xe.CI.FULL: " Patchwork
@ 2026-03-19 16:07 ` Ville Syrjälä
16 siblings, 0 replies; 26+ messages in thread
From: Ville Syrjälä @ 2026-03-19 16:07 UTC (permalink / raw)
To: Jani Nikula; +Cc: igt-dev
On Mon, Mar 16, 2026 at 01:19:02PM +0200, Jani Nikula wrote:
> We want to return NULL for invalid pipes from igt_crtc_for_pipe(), so
> that we don't need to have igt_crtc_t objects with crtc->valid == false
> around.
>
> The primary way to prepare for this is to avoid using
> igt_crtc_for_pipe() altogether. We've done a *lot* of that already, and
> continue to do so here.
>
> For the remaining ones, start off by ensuring crtc->valid == true, one
> way or other. This ensures the test logic is sane and actually operates
> on valid CRTCs. Once this prep is done, we can actually return NULL from
> igt_crtc_for_pipe(), and check for crtc != NULL instead of crtc->valid
> == true.
Looks OK to me. Eventually I think I'd like igt_crtc_for_pipe() to
skip on its own to reduce the work each tests has to do, but it
seems too early for that at this time.
Series is
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> BR,
> Jani.
>
>
> Jani Nikula (12):
> tests/amdgpu/amd_mode_switch: Prepare for returning NULL from
> igt_crtc_for_pipe()
> tests/amdgpu/amd_multidisplay_modeset: Prepare for returning NULL from
> igt_crtc_for_pipe()
> tests/intel/kms_cdclk: use igt_next_crtc()
> tests/intel/kms_joiner: Prepare for returning NULL from
> igt_crtc_for_pipe()
> tests/intel/kms_joiner_helper: Prepare for returning NULL from
> igt_crtc_for_pipe()
> tests/intel/kms_pipe_b_c_ivb: Prepare for returning NULL from
> igt_crtc_for_pipe()
> tests/intel/kms_pipe_stress: Prepare for returning NULL from
> igt_crtc_for_pipe()
> tests/kms_bw: fix misleading indent
> tests/kms_bw: clarify what's going on with proper variable naming
> tests/kms_bw: avoid igt_crtc_for_pipe() and crtc->pipe usage
> tests/kms_explicit_fence: store igt_crtc_t* instead of pipe in data
> lib/kms: convert igt_crtc_for_pipe() into a proper function
>
> lib/igt_kms.c | 8 +++
> lib/igt_kms.h | 8 +--
> tests/amdgpu/amd_mode_switch.c | 2 +
> tests/amdgpu/amd_multidisplay_modeset.c | 2 +
> tests/intel/kms_cdclk.c | 10 ++--
> tests/intel/kms_joiner.c | 66 ++++++++++++++++++-------
> tests/intel/kms_joiner_helper.c | 16 +++---
> tests/intel/kms_pipe_b_c_ivb.c | 28 +++++++----
> tests/intel/kms_pipe_stress.c | 4 ++
> tests/kms_bw.c | 48 +++++++++---------
> tests/kms_explicit_fence.c | 14 +++---
> 11 files changed, 131 insertions(+), 75 deletions(-)
>
> --
> 2.47.3
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 26+ messages in thread