All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Karthik B S <karthik.b.s@intel.com>
Cc: michel@daenzer.net, igt-dev@lists.freedesktop.org,
	daniel.vetter@intel.com, petri.latvala@intel.com
Subject: Re: [igt-dev] [PATCH i-g-t v8] tests/kms_async_flips: Add test to validate asynchronous flips
Date: Wed, 23 Sep 2020 12:55:06 +0300	[thread overview]
Message-ID: <20200923095506.GZ6112@intel.com> (raw)
In-Reply-To: <c9dbb1b8-af17-2dd4-b9b9-0c6b06f030b2@intel.com>

On Wed, Sep 23, 2020 at 08:23:44AM +0530, Karthik B S wrote:
> 
> 
> On 9/18/2020 5:02 PM, Ville Syrjälä wrote:
> > On Fri, Sep 18, 2020 at 12:13:18PM +0530, Karthik B S wrote:
> >> Asynchronous flips are issued using the page flip IOCTL.
> >> The test consists of two subtests. The first subtest waits for
> >> the page flip event to be received before giving the next flip,
> >> and the second subtest doesn't wait for page flip events.
> >>
> >> The test passes if the IOCTL is successful.
> >>
> >> v2: -Add authors in the test file. (Paulo)
> >>      -Reduce the run time and timeouts to suit IGT needs. (Paulo)
> >>      -Replace igt_debug's with igt_assert's to catch slow flips. (Paulo)
> >>      -Follow IGT coding style regarding spaces. (Paulo)
> >>      -Make set up code part of igt_fixture. (Paulo)
> >>      -Skip the test if async flips are not supported. (Paulo)
> >>      -Replace suggested-by. (Paulo)
> >>      -Added description for test and subtests.
> >>
> >> v3: -Rename the test to kms_async_flips. (Paulo)
> >>      -Modify the TODO comment. (Paulo)
> >>      -Remove igt_debug in flip_handler. (Paulo)
> >>      -Use drmIoctl() in has_async function. (Paulo)
> >>      -Add more details in igt_assert in flip_handler. (Paulo)
> >>      -Remove flag variable in flip_handler. (Paulo)
> >>      -Call igt_assert in flip_handler after the warm up time.
> >>
> >> v4: -Calculate the time stamp in flip_handler from userspace, as the
> >>       kernel will return vbl timestamps and this cannot be used
> >>       for async flips.
> >>      -Add a new subtest to verify that the async flip time stamp
> >>       lies in between the previous and next vblank time stamp. (Daniel)
> >>
> >> v5: -Add test that alternates between sync and async flips. (Ville)
> >>      -Add test to verify invalid async flips. (Ville)
> >>      -Remove the subtest async-flip-without-page-flip-events. (Michel)
> >>      -Remove the intel gpu restriction and make the test generic. (Michel)
> >>
> >> v6: -Change the THRESHOLD from 10 to 8 as failures are seen on CI
> >>       on platforms <= gen10.
> >>      -In older platforms(<= gen10), async address update bit in plane ctl
> >>       is double buffered. Made changes in subtests to accomodate this.
> >>      -Moved the igt_assert from flip_handler to individual subtest as we
> >>       now have four subtests and adding conditions for the assert in
> >>       flip handler is messy.
> >>
> >> v7: -Change flip_interval from int to float for more precision.
> >>      -Remove the fb height change case in 'invalid' subtest as per the
> >>       feedback received on the kernel patches.
> >>      -Add subtest to verify legacy cursor IOCTL. (Ville)
> >>
> >> v8: -Add a cursor flip before async flip in cursor test. (Ville)
> >>      -Make flip_interval double for more precision as failures are seen
> >>       on older platforms on CI.
> >>
> >> Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
> >> Signed-off-by: Karthik B S <karthik.b.s@intel.com>
> >> ---
> >>   tests/Makefile.sources  |   1 +
> >>   tests/kms_async_flips.c | 428 ++++++++++++++++++++++++++++++++++++++++
> >>   tests/meson.build       |   1 +
> >>   3 files changed, 430 insertions(+)
> >>   create mode 100644 tests/kms_async_flips.c
> >>
> >> diff --git a/tests/Makefile.sources b/tests/Makefile.sources
> >> index 6ae95155..f32ea9cf 100644
> >> --- a/tests/Makefile.sources
> >> +++ b/tests/Makefile.sources
> >> @@ -32,6 +32,7 @@ TESTS_progs = \
> >>   	feature_discovery \
> >>   	kms_3d \
> >>   	kms_addfb_basic \
> >> +	kms_async_flips \
> >>   	kms_atomic \
> >>   	kms_atomic_interruptible \
> >>   	kms_atomic_transition \
> >> diff --git a/tests/kms_async_flips.c b/tests/kms_async_flips.c
> >> new file mode 100644
> >> index 00000000..ef63ec45
> >> --- /dev/null
> >> +++ b/tests/kms_async_flips.c
> >> @@ -0,0 +1,428 @@
> >> +/*
> >> + * Copyright © 2020 Intel Corporation
> >> + *
> >> + * Permission is hereby granted, free of charge, to any person obtaining a
> >> + * copy of this software and associated documentation files (the "Software"),
> >> + * to deal in the Software without restriction, including without limitation
> >> + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> >> + * and/or sell copies of the Software, and to permit persons to whom the
> >> + * Software is furnished to do so, subject to the following conditions:
> >> + *
> >> + * The above copyright notice and this permission notice (including the next
> >> + * paragraph) shall be included in all copies or substantial portions of the
> >> + * Software.
> >> + *
> >> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> >> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> >> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
> >> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> >> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> >> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
> >> + * IN THE SOFTWARE.
> >> + *
> >> + * Authors:
> >> + *  Paulo Zanoni <paulo.r.zanoni@intel.com>
> >> + *  Karthik B S <karthik.b.s@intel.com>
> >> + */
> >> +
> >> +#include "igt.h"
> >> +#include "igt_aux.h"
> >> +#include <sys/ioctl.h>
> >> +#include <sys/time.h>
> >> +#include <poll.h>
> >> +
> >> +#define BUFS 4
> > 
> > I'd just truct igt_fb bufs[4], and replace all the other
> > "BUFS" usages with ARRAY_SIZE(bufs).
> 
> Thanks for the review.
> Sure, I'll change this.
> > 
> >> +#define SYNC_FLIP 0
> >> +#define ASYNC_FLIP 1
> > 
> > enum
> > 
> 
> Will update this.
> 
> >> +#define CURSOR_RES 64
> > 
> > Should query that from the kernel so that test is driver agnostic.
> > 
> 
> Sure. Will change this.
> >> +#define CURSOR_POS 128
> >> +
> >> +/*
> >> + * These constants can be tuned in case we start getting unexpected
> >> + * results in CI.
> >> + */
> >> +
> >> +#define WARM_UP_TIME 1
> >> +#define RUN_TIME 2
> >> +#define THRESHOLD 8
> > 
> > A rather non-descriptive name. I guess this is "min flips per frame" or
> > something along those lines?
> > 
> 
> Sure. I will change this to MIN_FLIPS_PER_FRAME.
> >> +
> >> +IGT_TEST_DESCRIPTION("Test asynchrous page flips.");
> > 
> > Check the spelling
> > 
> 
> Will fix this.
> >> +
> >> +typedef struct {
> >> +	int drm_fd;
> >> +	uint32_t crtc_id;
> >> +	struct igt_fb bufs[BUFS];
> >> +	igt_display_t display;
> >> +} data_t;
> >> +
> >> +uint32_t refresh_rate;
> >> +unsigned long flip_timestamp_us;
> >> +double flip_interval;
> > 
> > Hmm. I wonder why these are outside the data_t?
> > 
> 
> Will move the refresh_rate variable inside data_t.
> The other two are getting updated in flip_handler. Hence kept them 
> global. Would you suggest making data_t global. Or any other way I can 
> handle this better?

It should be possible to pass arbitrary data to the event handler.

<snip>
> Sure. Will add a TODO here and add these changes as a follow up.
> >> +		      LOCAL_I915_FORMAT_MOD_Y_TILED, &fb2);
> >> +
> >> +	ret = drmModePageFlip(data->drm_fd, data->crtc_id,
> >> +			      fb1.fb_id, flags, NULL);
> >> +
> >> +	igt_assert(ret == 0);
> > 
> > Not quite sure why we have this first page flip here?
> > 
> 
> First to have an async flip with xtiled buffer and then follow it up 
> with an async flip with a y-tiled buffer, so the second one is expected 
> to fail. Could this be done in one flip? Am I missing something here?

What does the fist async flip achieve for us? Nothing AFAICS. We must
already be scanning out a similar fb or else the first async flip would
also fail.

If it's possible that we are not already scanning out a similar fb to
the first one then we should do a full modeset/atomic commit to make
it so. Otherwise the second async flip is going to be testing random
things.

> >> +
> >> +	wait_flip_event(data);
> >> +
> >> +	/* Flip with a different fb modifier which is expected to be rejected */
> >> +	ret = drmModePageFlip(data->drm_fd, data->crtc_id,
> >> +			      fb2.fb_id, flags, NULL);
> >> +

-- 
Ville Syrjälä
Intel
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

  reply	other threads:[~2020-09-23  9:55 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-18  6:43 [igt-dev] [PATCH i-g-t v8] tests/kms_async_flips: Add test to validate asynchronous flips Karthik B S
2020-09-18  7:50 ` [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_async_flips: Add test to validate asynchronous flips (rev6) Patchwork
2020-09-18  8:47 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
2020-09-18 11:32 ` [igt-dev] [PATCH i-g-t v8] tests/kms_async_flips: Add test to validate asynchronous flips Ville Syrjälä
2020-09-18 11:45   ` Ville Syrjälä
2020-09-23  2:56     ` Karthik B S
2020-09-18 21:18   ` Zanoni, Paulo R
2020-09-23  2:53   ` Karthik B S
2020-09-23  9:55     ` Ville Syrjälä [this message]
2020-09-23 14:12       ` Karthik B S

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200923095506.GZ6112@intel.com \
    --to=ville.syrjala@linux.intel.com \
    --cc=daniel.vetter@intel.com \
    --cc=igt-dev@lists.freedesktop.org \
    --cc=karthik.b.s@intel.com \
    --cc=michel@daenzer.net \
    --cc=petri.latvala@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.