diff mbox

[i-g-t] igt/kms_universal_plane: Flush pending cleanups

Message ID 20180628105140.7125-1-chris@chris-wilson.co.uk (mailing list archive)
State New, archived
Headers show

Commit Message

Chris Wilson June 28, 2018, 10:51 a.m. UTC
drm_atomic_helper allows for up to one outstanding cleanup task to be in
flight before a new modeset (see stall_commit in stall_checks()), In
lieu of hooking up a debugfs to force flushing of the outstanding work,
submit enough blocking modesets to ensure that the pending work is
completed before continuing.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
 tests/kms_universal_plane.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Maarten Lankhorst June 28, 2018, 11:06 a.m. UTC | #1
Op 28-06-18 om 12:51 schreef Chris Wilson:
> drm_atomic_helper allows for up to one outstanding cleanup task to be in
> flight before a new modeset (see stall_commit in stall_checks()), In
> lieu of hooking up a debugfs to force flushing of the outstanding work,
> submit enough blocking modesets to ensure that the pending work is
> completed before continuing.
>
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> ---
>  tests/kms_universal_plane.c | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/tests/kms_universal_plane.c b/tests/kms_universal_plane.c
> index 58f329e68..f875fd194 100644
> --- a/tests/kms_universal_plane.c
> +++ b/tests/kms_universal_plane.c
> @@ -638,6 +638,7 @@ cursor_leak_test_pipe(data_t *data, enum pipe pipe, igt_output_t *output)
>  	igt_plane_set_fb(primary, NULL);
>  	igt_plane_set_fb(cursor, NULL);
>  	igt_display_commit2(display, COMMIT_LEGACY);
> +	igt_display_commit2(display, COMMIT_LEGACY);
>  	cursor_leak_test_fini(data, output, &background_fb, cursor_fb);
>  
>  	/* We should be back to the same framebuffer count as when we started */

This won't work, we won't commit anything without anything changed, probably best to put the set_fb in the loop too.

Testcase: kms_universal_plane@cursor-fb-leak-*
Chris Wilson June 28, 2018, 11:16 a.m. UTC | #2
Quoting Maarten Lankhorst (2018-06-28 12:06:35)
> Op 28-06-18 om 12:51 schreef Chris Wilson:
> > drm_atomic_helper allows for up to one outstanding cleanup task to be in
> > flight before a new modeset (see stall_commit in stall_checks()), In
> > lieu of hooking up a debugfs to force flushing of the outstanding work,
> > submit enough blocking modesets to ensure that the pending work is
> > completed before continuing.
> >
> > Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> > Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> > ---
> >  tests/kms_universal_plane.c | 1 +
> >  1 file changed, 1 insertion(+)
> >
> > diff --git a/tests/kms_universal_plane.c b/tests/kms_universal_plane.c
> > index 58f329e68..f875fd194 100644
> > --- a/tests/kms_universal_plane.c
> > +++ b/tests/kms_universal_plane.c
> > @@ -638,6 +638,7 @@ cursor_leak_test_pipe(data_t *data, enum pipe pipe, igt_output_t *output)
> >       igt_plane_set_fb(primary, NULL);
> >       igt_plane_set_fb(cursor, NULL);
> >       igt_display_commit2(display, COMMIT_LEGACY);
> > +     igt_display_commit2(display, COMMIT_LEGACY);
> >       cursor_leak_test_fini(data, output, &background_fb, cursor_fb);
> >  
> >       /* We should be back to the same framebuffer count as when we started */
> 
> This won't work, we won't commit anything without anything changed, probably best to put the set_fb in the loop too.

Fill in the details above. :-p

Is that igt or the kernel? I have this belief that when I ask it to do
something, it should ;)

igt_display_commit3(display, COMMIT_LEGACY, DOIT);
-Chris
Maarten Lankhorst June 28, 2018, 11:25 a.m. UTC | #3
Op 28-06-18 om 13:16 schreef Chris Wilson:
> Quoting Maarten Lankhorst (2018-06-28 12:06:35)
>> Op 28-06-18 om 12:51 schreef Chris Wilson:
>>> drm_atomic_helper allows for up to one outstanding cleanup task to be in
>>> flight before a new modeset (see stall_commit in stall_checks()), In
>>> lieu of hooking up a debugfs to force flushing of the outstanding work,
>>> submit enough blocking modesets to ensure that the pending work is
>>> completed before continuing.
>>>
>>> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
>>> Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
>>> ---
>>>  tests/kms_universal_plane.c | 1 +
>>>  1 file changed, 1 insertion(+)
>>>
>>> diff --git a/tests/kms_universal_plane.c b/tests/kms_universal_plane.c
>>> index 58f329e68..f875fd194 100644
>>> --- a/tests/kms_universal_plane.c
>>> +++ b/tests/kms_universal_plane.c
>>> @@ -638,6 +638,7 @@ cursor_leak_test_pipe(data_t *data, enum pipe pipe, igt_output_t *output)
>>>       igt_plane_set_fb(primary, NULL);
>>>       igt_plane_set_fb(cursor, NULL);
>>>       igt_display_commit2(display, COMMIT_LEGACY);
>>> +     igt_display_commit2(display, COMMIT_LEGACY);
>>>       cursor_leak_test_fini(data, output, &background_fb, cursor_fb);
>>>  
>>>       /* We should be back to the same framebuffer count as when we started */
>> This won't work, we won't commit anything without anything changed, probably best to put the set_fb in the loop too.
> Fill in the details above. :-p
>
> Is that igt or the kernel? I have this belief that when I ask it to do
> something, it should ;)
>
> igt_display_commit3(display, COMMIT_LEGACY, DOIT);
> -Chris

But you didn't tell it to do anything, nothing changed from last commit, so nothing gets committed.
Chris Wilson June 28, 2018, 11:34 a.m. UTC | #4
Quoting Maarten Lankhorst (2018-06-28 12:25:18)
> Op 28-06-18 om 13:16 schreef Chris Wilson:
> > Quoting Maarten Lankhorst (2018-06-28 12:06:35)
> >> Op 28-06-18 om 12:51 schreef Chris Wilson:
> >>> drm_atomic_helper allows for up to one outstanding cleanup task to be in
> >>> flight before a new modeset (see stall_commit in stall_checks()), In
> >>> lieu of hooking up a debugfs to force flushing of the outstanding work,
> >>> submit enough blocking modesets to ensure that the pending work is
> >>> completed before continuing.
> >>>
> >>> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> >>> Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> >>> ---
> >>>  tests/kms_universal_plane.c | 1 +
> >>>  1 file changed, 1 insertion(+)
> >>>
> >>> diff --git a/tests/kms_universal_plane.c b/tests/kms_universal_plane.c
> >>> index 58f329e68..f875fd194 100644
> >>> --- a/tests/kms_universal_plane.c
> >>> +++ b/tests/kms_universal_plane.c
> >>> @@ -638,6 +638,7 @@ cursor_leak_test_pipe(data_t *data, enum pipe pipe, igt_output_t *output)
> >>>       igt_plane_set_fb(primary, NULL);
> >>>       igt_plane_set_fb(cursor, NULL);
> >>>       igt_display_commit2(display, COMMIT_LEGACY);
> >>> +     igt_display_commit2(display, COMMIT_LEGACY);
> >>>       cursor_leak_test_fini(data, output, &background_fb, cursor_fb);
> >>>  
> >>>       /* We should be back to the same framebuffer count as when we started */
> >> This won't work, we won't commit anything without anything changed, probably best to put the set_fb in the loop too.
> > Fill in the details above. :-p
> >
> > Is that igt or the kernel? I have this belief that when I ask it to do
> > something, it should ;)
> >
> > igt_display_commit3(display, COMMIT_LEGACY, DOIT);
> > -Chris
> 
> But you didn't tell it to do anything, nothing changed from last commit, so nothing gets committed.

But I want it to reapply the commit I built up. That's how I think of
it, since I'm used to a stateless API.
-Chris
Maarten Lankhorst June 28, 2018, 11:39 a.m. UTC | #5
Op 28-06-18 om 13:34 schreef Chris Wilson:
> Quoting Maarten Lankhorst (2018-06-28 12:25:18)
>> Op 28-06-18 om 13:16 schreef Chris Wilson:
>>> Quoting Maarten Lankhorst (2018-06-28 12:06:35)
>>>> Op 28-06-18 om 12:51 schreef Chris Wilson:
>>>>> drm_atomic_helper allows for up to one outstanding cleanup task to be in
>>>>> flight before a new modeset (see stall_commit in stall_checks()), In
>>>>> lieu of hooking up a debugfs to force flushing of the outstanding work,
>>>>> submit enough blocking modesets to ensure that the pending work is
>>>>> completed before continuing.
>>>>>
>>>>> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
>>>>> Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
>>>>> ---
>>>>>  tests/kms_universal_plane.c | 1 +
>>>>>  1 file changed, 1 insertion(+)
>>>>>
>>>>> diff --git a/tests/kms_universal_plane.c b/tests/kms_universal_plane.c
>>>>> index 58f329e68..f875fd194 100644
>>>>> --- a/tests/kms_universal_plane.c
>>>>> +++ b/tests/kms_universal_plane.c
>>>>> @@ -638,6 +638,7 @@ cursor_leak_test_pipe(data_t *data, enum pipe pipe, igt_output_t *output)
>>>>>       igt_plane_set_fb(primary, NULL);
>>>>>       igt_plane_set_fb(cursor, NULL);
>>>>>       igt_display_commit2(display, COMMIT_LEGACY);
>>>>> +     igt_display_commit2(display, COMMIT_LEGACY);
>>>>>       cursor_leak_test_fini(data, output, &background_fb, cursor_fb);
>>>>>  
>>>>>       /* We should be back to the same framebuffer count as when we started */
>>>> This won't work, we won't commit anything without anything changed, probably best to put the set_fb in the loop too.
>>> Fill in the details above. :-p
>>>
>>> Is that igt or the kernel? I have this belief that when I ask it to do
>>> something, it should ;)
>>>
>>> igt_display_commit3(display, COMMIT_LEGACY, DOIT);
>>> -Chris
>> But you didn't tell it to do anything, nothing changed from last commit, so nothing gets committed.
> But I want it to reapply the commit I built up. That's how I think of
> it, since I'm used to a stateless API.
> -Chris

But there's nothing to apply, the commit is already applied.

That's how the api has always worked, at least. :)

~Maarten
diff mbox

Patch

diff --git a/tests/kms_universal_plane.c b/tests/kms_universal_plane.c
index 58f329e68..f875fd194 100644
--- a/tests/kms_universal_plane.c
+++ b/tests/kms_universal_plane.c
@@ -638,6 +638,7 @@  cursor_leak_test_pipe(data_t *data, enum pipe pipe, igt_output_t *output)
 	igt_plane_set_fb(primary, NULL);
 	igt_plane_set_fb(cursor, NULL);
 	igt_display_commit2(display, COMMIT_LEGACY);
+	igt_display_commit2(display, COMMIT_LEGACY);
 	cursor_leak_test_fini(data, output, &background_fb, cursor_fb);
 
 	/* We should be back to the same framebuffer count as when we started */