From: Matt Roper <matthew.d.roper@intel.com>
To: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH i-g-t] kms_cursor_crc: Move igt_pipe_crc_{new, free} to init
Date: Thu, 22 May 2014 10:06:37 -0700 [thread overview]
Message-ID: <20140522170637.GM31484@intel.com> (raw)
In-Reply-To: <20140522170109.GY27580@intel.com>
On Thu, May 22, 2014 at 08:01:09PM +0300, Ville Syrjälä wrote:
> On Thu, May 22, 2014 at 09:47:39AM -0700, Matt Roper wrote:
> > If a subtest fails, cleanup_crtc() never gets called. Currently that
> > also causes igt_pipe_crc_free() to never be called, leading all
> > subsequent subtests to also fail with -EBUSY at igt_pipe_crc_new().
> > Move the calls to igt_pipe_crc_{new,free} into igt_main so that
> > we don't need to worry about closing and reopening the CRC
> > filedescriptor for each subtest.
>
> IIRC we can't call them at init because when you call igt_pipe_crc_new()
> the pipe->port mapping has to be properly set up so that the auto crc
> source will know what to do.
>
> The subtest failure case is the reason why at the start of every subtest
> we call igt_pipe_crc_free() before calling igt_pipe_crc_new(). Are you
> saying that's not working as intended?
Right, you're working on a fresh test_data structure for each call of
run_test(), so you've already lost the test_data->pipe_crc pointer that
you're trying to check for NULL there.
I guess the right fix is to move the pipe_crc pointer up into data_t
rather than test_data_t?
Matt
>
> >
> > Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
> > ---
> > tests/kms_cursor_crc.c | 21 ++++++++++++++-------
> > 1 file changed, 14 insertions(+), 7 deletions(-)
> >
> > diff --git a/tests/kms_cursor_crc.c b/tests/kms_cursor_crc.c
> > index 06625ee..1b90baa 100644
> > --- a/tests/kms_cursor_crc.c
> > +++ b/tests/kms_cursor_crc.c
> > @@ -39,11 +39,14 @@
> > #define DRM_CAP_CURSOR_HEIGHT 0x9
> > #endif
> >
> > +#define MAX_PIPES 3
> > +
> > typedef struct {
> > int drm_fd;
> > igt_display_t display;
> > struct igt_fb primary_fb;
> > struct igt_fb fb;
> > + igt_pipe_crc_t *pipe_crcs[MAX_PIPES];
> > } data_t;
> >
> > typedef struct {
> > @@ -251,12 +254,6 @@ static bool prepare_crtc(test_data_t *test_data, igt_output_t *output,
> >
> > igt_display_commit(display);
> >
> > - /* create the pipe_crc object for this pipe */
> > - if (test_data->pipe_crc)
> > - igt_pipe_crc_free(test_data->pipe_crc);
> > -
> > - test_data->pipe_crc = igt_pipe_crc_new(test_data->pipe,
> > - INTEL_PIPE_CRC_SOURCE_AUTO);
> > if (!test_data->pipe_crc) {
> > igt_info("auto crc not supported on this connector with pipe %i\n",
> > test_data->pipe);
> > @@ -289,7 +286,6 @@ static void cleanup_crtc(test_data_t *test_data, igt_output_t *output)
> > igt_display_t *display = &data->display;
> > igt_plane_t *primary;
> >
> > - igt_pipe_crc_free(test_data->pipe_crc);
> > test_data->pipe_crc = NULL;
> >
> > igt_remove_fb(data->drm_fd, &data->primary_fb);
> > @@ -315,6 +311,7 @@ static void run_test(data_t *data, void (*testfunc)(test_data_t *), int cursor_w
> > test_data.output = output;
> > for (p = 0; p < igt_display_get_n_pipes(display); p++) {
> > test_data.pipe = p;
> > + test_data.pipe_crc = data->pipe_crcs[p];
> >
> > if (!prepare_crtc(&test_data, output, cursor_w, cursor_h))
> > continue;
> > @@ -385,6 +382,7 @@ igt_main
> > uint64_t cursor_width = 64, cursor_height = 64;
> > data_t data = {};
> > int ret;
> > + int p;
> >
> > igt_skip_on_simulation();
> >
> > @@ -405,11 +403,20 @@ igt_main
> > igt_require_pipe_crc();
> >
> > igt_display_init(&data.display, data.drm_fd);
> > +
> > + for (p = 0; p < igt_display_get_n_pipes(&data.display); p++)
> > + data.pipe_crcs[p] = igt_pipe_crc_new(p,
> > + INTEL_PIPE_CRC_SOURCE_AUTO);
> > }
> >
> > run_test_generic(&data, cursor_width);
> >
> > igt_fixture {
> > + for (p = 0; p < igt_display_get_n_pipes(&data.display); p++) {
> > + if (data.pipe_crcs[p])
> > + igt_pipe_crc_free(data.pipe_crcs[p]);
> > + }
> > +
> > igt_display_fini(&data.display);
> > }
> > }
> > --
> > 1.8.5.1
> >
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
> --
> Ville Syrjälä
> Intel OTC
--
Matt Roper
Graphics Software Engineer
IoTG Platform Enabling & Development
Intel Corporation
(916) 356-2795
next prev parent reply other threads:[~2014-05-22 17:05 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-22 16:47 [PATCH i-g-t] kms_cursor_crc: Move igt_pipe_crc_{new, free} to init Matt Roper
2014-05-22 17:01 ` Ville Syrjälä
2014-05-22 17:06 ` Matt Roper [this message]
2014-05-22 17:12 ` Ville Syrjälä
2014-05-22 17:31 ` [PATCH i-g-t] kms_cursor_crc: Combine data_t and test_data_t Matt Roper
2014-05-22 20:23 ` [PATCH i-g-t] kms_cursor_crc: Move igt_pipe_crc_{new, free} to init Daniel Vetter
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=20140522170637.GM31484@intel.com \
--to=matthew.d.roper@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=ville.syrjala@linux.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.