* [PATCH i-g-t 0/7] kms_vblank: Move tests over from kms_flip.
@ 2018-01-04 13:15 Maarten Lankhorst
2018-01-04 13:15 ` [PATCH i-g-t 1/7] tests/kms_flip: Remove blt/rcs flip tests Maarten Lankhorst
` (7 more replies)
0 siblings, 8 replies; 9+ messages in thread
From: Maarten Lankhorst @ 2018-01-04 13:15 UTC (permalink / raw)
To: intel-gfx
kms_flip is meant for finding issues with page flip, but was used for
finding bugs in the vblank ioctl too. Move over some tests from kms_flip
to kms_vblank, and reduce their runtime to a minimum.
Maarten Lankhorst (7):
tests/kms_flip: Remove blt/rcs flip tests.
tests/kms_flip: Move kms_flip.vblank-vs-hang to kms_vblank
kms_vblank: Reorganize subtests by pipe
kms_vblank: Make the -hang tests work as intended
kms_vblank: Add tests implemented in kms_flip
kms_flip: Remove redundant vblank tests.
kms_vblank: Remove teardown code from cleanup_crtc
tests/kms_flip.c | 55 +--------------
tests/kms_vblank.c | 204 +++++++++++++++++++++++++++++++++++++++--------------
2 files changed, 152 insertions(+), 107 deletions(-)
--
2.15.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH i-g-t 1/7] tests/kms_flip: Remove blt/rcs flip tests.
2018-01-04 13:15 [PATCH i-g-t 0/7] kms_vblank: Move tests over from kms_flip Maarten Lankhorst
@ 2018-01-04 13:15 ` Maarten Lankhorst
2018-01-04 13:15 ` [PATCH i-g-t 2/7] tests/kms_flip: Move kms_flip.vblank-vs-hang to kms_vblank Maarten Lankhorst
` (6 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Maarten Lankhorst @ 2018-01-04 13:15 UTC (permalink / raw)
To: intel-gfx
With the removal of mmio flips, blt and rcs flips are no longer
different from doing busy testing in kms_busy.
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
tests/kms_flip.c | 37 +------------------------------------
1 file changed, 1 insertion(+), 36 deletions(-)
diff --git a/tests/kms_flip.c b/tests/kms_flip.c
index 39ee68d233e5..7689e65b521a 100644
--- a/tests/kms_flip.c
+++ b/tests/kms_flip.c
@@ -45,8 +45,7 @@
#include "igt_stats.h"
#define TEST_DPMS (1 << 0)
-#define TEST_WITH_DUMMY_BCS (1 << 1)
-#define TEST_WITH_DUMMY_RCS (1 << 2)
+
#define TEST_PAN (1 << 3)
#define TEST_MODESET (1 << 4)
#define TEST_CHECK_TS (1 << 5)
@@ -668,8 +667,6 @@ static unsigned int run_test_step(struct test_output *o)
struct vblank_reply vbl_reply;
unsigned int target_seq;
igt_hang_t hang;
- igt_spin_t *spin_rcs = 0;
- igt_spin_t *spin_bcs = 0;
target_seq = o->vblank_state.seq_step;
/* Absolute waits only works once we have a frame counter. */
@@ -691,20 +688,6 @@ static unsigned int run_test_step(struct test_output *o)
if (!(o->flags & TEST_SINGLE_BUFFER))
o->current_fb_id = !o->current_fb_id;
- if (o->flags & TEST_WITH_DUMMY_BCS) {
- spin_bcs = igt_spin_batch_new(drm_fd, 0, I915_EXEC_BLT,
- o->fb_info[o->current_fb_id].gem_handle);
- igt_spin_batch_set_timeout(spin_bcs,
- NSEC_PER_SEC);
- }
-
- if (o->flags & TEST_WITH_DUMMY_RCS) {
- spin_rcs = igt_spin_batch_new(drm_fd, 0, I915_EXEC_RENDER,
- o->fb_info[o->current_fb_id].gem_handle);
- igt_spin_batch_set_timeout(spin_rcs,
- NSEC_PER_SEC);
- }
-
if (o->flags & TEST_FB_RECREATE)
recreate_fb(o);
new_fb_id = o->fb_ids[o->current_fb_id];
@@ -809,10 +792,6 @@ static unsigned int run_test_step(struct test_output *o)
completed_events = EVENT_VBLANK;
}
}
- if (spin_rcs)
- igt_spin_batch_free(drm_fd, spin_rcs);
- if (spin_bcs)
- igt_spin_batch_free(drm_fd, spin_bcs);
if (do_flip && (o->flags & TEST_EBUSY))
igt_assert(do_page_flip(o, new_fb_id, true) == -EBUSY);
@@ -1065,10 +1044,6 @@ static unsigned int wait_for_events(struct test_output *o)
evctx.vblank_handler = vblank_handler;
evctx.page_flip_handler = page_flip_handler;
- /* make timeout lax with the dummy load */
- if (o->flags & (TEST_WITH_DUMMY_BCS | TEST_WITH_DUMMY_RCS))
- timeout.tv_sec *= 60;
-
FD_ZERO(&fds);
FD_SET(drm_fd, &fds);
do {
@@ -1568,15 +1543,7 @@ int main(int argc, char **argv)
{ 30, TEST_VBLANK | TEST_VBLANK_BLOCK | TEST_VBLANK_ABSOLUTE,
"blocking-absolute-wf_vblank" },
{ 60, TEST_VBLANK | TEST_DPMS | TEST_EINVAL, "wf_vblank-vs-dpms" },
- { 60, TEST_VBLANK | TEST_DPMS | TEST_WITH_DUMMY_BCS,
- "blt-wf_vblank-vs-dpms" },
- { 60, TEST_VBLANK | TEST_DPMS | TEST_WITH_DUMMY_RCS,
- "rcs-wf_vblank-vs-dpms" },
{ 60, TEST_VBLANK | TEST_MODESET | TEST_EINVAL, "wf_vblank-vs-modeset" },
- { 60, TEST_VBLANK | TEST_MODESET | TEST_WITH_DUMMY_BCS,
- "blt-wf_vblank-vs-modeset" },
- { 60, TEST_VBLANK | TEST_MODESET | TEST_WITH_DUMMY_RCS,
- "rcs-wf_vblank-vs-modeset" },
{ 10, TEST_FLIP | TEST_BASIC, "plain-flip" },
{ 30, TEST_FLIP | TEST_EBUSY , "busy-flip" },
{ 30, TEST_FLIP | TEST_FENCE_STRESS , "flip-vs-fences" },
@@ -1586,8 +1553,6 @@ int main(int argc, char **argv)
{ 30, TEST_FLIP | TEST_RMFB | TEST_MODESET , "flip-vs-rmfb" },
{ 20, TEST_FLIP | TEST_DPMS | TEST_EINVAL | TEST_BASIC, "flip-vs-dpms" },
{ 30, TEST_FLIP | TEST_PAN, "flip-vs-panning" },
- { 60, TEST_FLIP | TEST_PAN | TEST_WITH_DUMMY_BCS, "blt-flip-vs-panning" },
- { 60, TEST_FLIP | TEST_PAN | TEST_WITH_DUMMY_RCS, "render-flip-vs-panning" },
{ 20, TEST_FLIP | TEST_MODESET | TEST_EINVAL | TEST_BASIC, "flip-vs-modeset" },
{ 30, TEST_FLIP | TEST_VBLANK_EXPIRED_SEQ,
"flip-vs-expired-vblank" },
--
2.15.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH i-g-t 2/7] tests/kms_flip: Move kms_flip.vblank-vs-hang to kms_vblank
2018-01-04 13:15 [PATCH i-g-t 0/7] kms_vblank: Move tests over from kms_flip Maarten Lankhorst
2018-01-04 13:15 ` [PATCH i-g-t 1/7] tests/kms_flip: Remove blt/rcs flip tests Maarten Lankhorst
@ 2018-01-04 13:15 ` Maarten Lankhorst
2018-01-04 13:15 ` [PATCH i-g-t 3/7] kms_vblank: Reorganize subtests by pipe Maarten Lankhorst
` (5 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Maarten Lankhorst @ 2018-01-04 13:15 UTC (permalink / raw)
To: intel-gfx
There's no need to test this more than once.
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
tests/kms_flip.c | 10 +---------
tests/kms_vblank.c | 18 ++++++++++++++----
2 files changed, 15 insertions(+), 13 deletions(-)
diff --git a/tests/kms_flip.c b/tests/kms_flip.c
index 7689e65b521a..50c16b0debbf 100644
--- a/tests/kms_flip.c
+++ b/tests/kms_flip.c
@@ -72,7 +72,7 @@
#define TEST_SUSPEND (1 << 26)
#define TEST_TS_CONT (1 << 27)
#define TEST_BO_TOOBIG (1 << 28)
-#define TEST_HANG_ONCE (1 << 29)
+
#define TEST_BASIC (1 << 30)
#define EVENT_FLIP (1 << 0)
@@ -1071,13 +1071,8 @@ static unsigned int wait_for_events(struct test_output *o)
static unsigned event_loop(struct test_output *o, unsigned duration_ms)
{
unsigned long start, end;
- igt_hang_t hang;
int count = 0;
- memset(&hang, 0, sizeof(hang));
- if (o->flags & TEST_HANG_ONCE)
- hang = hang_gpu(drm_fd);
-
start = gettime_us();
while (1) {
@@ -1097,8 +1092,6 @@ static unsigned event_loop(struct test_output *o, unsigned duration_ms)
end = gettime_us();
- unhang_gpu(drm_fd, hang);
-
/* Flush any remaining events */
if (o->pending_events)
wait_for_events(o);
@@ -1565,7 +1558,6 @@ int main(int argc, char **argv)
TEST_CHECK_TS, "flip-vs-blocking-wf-vblank" },
{ 30, TEST_FLIP | TEST_MODESET | TEST_HANG | TEST_NOEVENT, "flip-vs-modeset-vs-hang" },
{ 30, TEST_FLIP | TEST_PAN | TEST_HANG, "flip-vs-panning-vs-hang" },
- { 30, TEST_VBLANK | TEST_HANG_ONCE, "vblank-vs-hang" },
{ 1, TEST_FLIP | TEST_EINVAL | TEST_FB_BAD_TILING, "flip-vs-bad-tiling" },
{ 1, TEST_DPMS_OFF | TEST_MODESET | TEST_FLIP,
diff --git a/tests/kms_vblank.c b/tests/kms_vblank.c
index 342e4ef23b97..9a5a98743fa6 100644
--- a/tests/kms_vblank.c
+++ b/tests/kms_vblank.c
@@ -54,6 +54,7 @@ typedef struct {
#define IDLE 1
#define BUSY 2
#define FORKED 4
+#define HANG 8
} data_t;
static double elapsed(const struct timespec *start,
@@ -122,6 +123,8 @@ static void run_test(data_t *data, int fd, void (*testfunc)(data_t *, int, int))
enum pipe p;
for_each_pipe_with_valid_output(display, p, output) {
+ igt_hang_t hang;
+
data->pipe = p;
prepare_crtc(data, fd, output);
@@ -131,6 +134,9 @@ static void run_test(data_t *data, int fd, void (*testfunc)(data_t *, int, int))
igt_output_name(output),
nchildren);
+ if (data->flags & HANG)
+ hang = igt_hang_ring(display->drm_fd, I915_EXEC_DEFAULT);
+
if (data->flags & BUSY) {
union drm_wait_vblank vbl;
@@ -153,6 +159,9 @@ static void run_test(data_t *data, int fd, void (*testfunc)(data_t *, int, int))
igt_assert(poll(&(struct pollfd){fd, POLLIN}, 1, 0) == 0);
+ if (data->flags & HANG)
+ igt_post_hang_ring(fd, hang);
+
igt_info("\n%s on pipe %s, connector %s: PASSED\n\n",
igt_subtest_name(),
kmstest_pipe_name(data->pipe),
@@ -324,9 +333,9 @@ igt_main
void (*func)(data_t *, int, int);
unsigned int valid;
} funcs[] = {
- { "accuracy", accuracy, IDLE },
- { "query", vblank_query, IDLE | FORKED | BUSY },
- { "wait", vblank_wait, IDLE | FORKED | BUSY },
+ { "accuracy", accuracy, IDLE | HANG },
+ { "query", vblank_query, IDLE | FORKED | BUSY | HANG },
+ { "wait", vblank_wait, IDLE | FORKED | BUSY | HANG },
{ }
}, *f;
const struct {
@@ -357,7 +366,8 @@ igt_main
if (m->flags & ~f->valid)
continue;
- igt_subtest_f("%s-%s", f->name, m->name) {
+ igt_subtest_f("%s-%s%s", f->name, m->name,
+ m->flags & HANG ? "-hang" : "") {
data.flags = m->flags;
run_test(&data, fd, f->func);
}
--
2.15.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH i-g-t 3/7] kms_vblank: Reorganize subtests by pipe
2018-01-04 13:15 [PATCH i-g-t 0/7] kms_vblank: Move tests over from kms_flip Maarten Lankhorst
2018-01-04 13:15 ` [PATCH i-g-t 1/7] tests/kms_flip: Remove blt/rcs flip tests Maarten Lankhorst
2018-01-04 13:15 ` [PATCH i-g-t 2/7] tests/kms_flip: Move kms_flip.vblank-vs-hang to kms_vblank Maarten Lankhorst
@ 2018-01-04 13:15 ` Maarten Lankhorst
2018-01-04 13:15 ` [PATCH i-g-t 4/7] kms_vblank: Make the -hang tests work as intended Maarten Lankhorst
` (4 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Maarten Lankhorst @ 2018-01-04 13:15 UTC (permalink / raw)
To: intel-gfx
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
tests/kms_vblank.c | 102 ++++++++++++++++++++++++++++-------------------------
1 file changed, 53 insertions(+), 49 deletions(-)
diff --git a/tests/kms_vblank.c b/tests/kms_vblank.c
index 9a5a98743fa6..a83500635976 100644
--- a/tests/kms_vblank.c
+++ b/tests/kms_vblank.c
@@ -119,57 +119,48 @@ static void run_test(data_t *data, int fd, void (*testfunc)(data_t *, int, int))
int nchildren =
data->flags & FORKED ? sysconf(_SC_NPROCESSORS_ONLN) : 1;
igt_display_t *display = &data->display;
- igt_output_t *output;
- enum pipe p;
-
- for_each_pipe_with_valid_output(display, p, output) {
- igt_hang_t hang;
+ igt_output_t *output = data->output;
+ igt_hang_t hang;
- data->pipe = p;
- prepare_crtc(data, fd, output);
+ prepare_crtc(data, fd, output);
- igt_info("Beginning %s on pipe %s, connector %s (%d threads)\n",
- igt_subtest_name(),
- kmstest_pipe_name(data->pipe),
- igt_output_name(output),
- nchildren);
+ igt_info("Beginning %s on pipe %s, connector %s (%d threads)\n",
+ igt_subtest_name(), kmstest_pipe_name(data->pipe),
+ igt_output_name(output), nchildren);
- if (data->flags & HANG)
- hang = igt_hang_ring(display->drm_fd, I915_EXEC_DEFAULT);
+ if (data->flags & HANG)
+ hang = igt_hang_ring(display->drm_fd, I915_EXEC_DEFAULT);
- if (data->flags & BUSY) {
- union drm_wait_vblank vbl;
+ if (data->flags & BUSY) {
+ union drm_wait_vblank vbl;
- memset(&vbl, 0, sizeof(vbl));
- vbl.request.type =
- DRM_VBLANK_RELATIVE | DRM_VBLANK_EVENT;
- vbl.request.type |= kmstest_get_vbl_flag(data->pipe);
- vbl.request.sequence = 120 + 12;
- igt_assert_eq(wait_vblank(fd, &vbl), 0);
- }
+ memset(&vbl, 0, sizeof(vbl));
+ vbl.request.type =
+ DRM_VBLANK_RELATIVE | DRM_VBLANK_EVENT;
+ vbl.request.type |= kmstest_get_vbl_flag(data->pipe);
+ vbl.request.sequence = 120 + 12;
+ igt_assert_eq(wait_vblank(fd, &vbl), 0);
+ }
- igt_fork(child, nchildren)
- testfunc(data, fd, nchildren);
- igt_waitchildren();
+ igt_fork(child, nchildren)
+ testfunc(data, fd, nchildren);
+ igt_waitchildren();
- if (data->flags & BUSY) {
- struct drm_event_vblank buf;
- igt_assert_eq(read(fd, &buf, sizeof(buf)), sizeof(buf));
- }
+ if (data->flags & BUSY) {
+ struct drm_event_vblank buf;
+ igt_assert_eq(read(fd, &buf, sizeof(buf)), sizeof(buf));
+ }
- igt_assert(poll(&(struct pollfd){fd, POLLIN}, 1, 0) == 0);
+ igt_assert(poll(&(struct pollfd){fd, POLLIN}, 1, 0) == 0);
- if (data->flags & HANG)
- igt_post_hang_ring(fd, hang);
+ if (data->flags & HANG)
+ igt_post_hang_ring(fd, hang);
- igt_info("\n%s on pipe %s, connector %s: PASSED\n\n",
- igt_subtest_name(),
- kmstest_pipe_name(data->pipe),
- igt_output_name(output));
+ igt_info("\n%s on pipe %s, connector %s: PASSED\n\n",
+ igt_subtest_name(), kmstest_pipe_name(data->pipe), igt_output_name(output));
- /* cleanup what prepare_crtc() has done */
- cleanup_crtc(data, fd, output);
- }
+ /* cleanup what prepare_crtc() has done */
+ cleanup_crtc(data, fd, output);
}
static void crtc_id_subtest(data_t *data, int fd)
@@ -338,6 +329,8 @@ igt_main
{ "wait", vblank_wait, IDLE | FORKED | BUSY | HANG },
{ }
}, *f;
+ enum pipe p;
+
const struct {
const char *name;
unsigned int flags;
@@ -361,15 +354,26 @@ igt_main
igt_subtest("crtc-id")
crtc_id_subtest(&data, fd);
- for (f = funcs; f->name; f++) {
- for (m = modes; m->name; m++) {
- if (m->flags & ~f->valid)
- continue;
-
- igt_subtest_f("%s-%s%s", f->name, m->name,
- m->flags & HANG ? "-hang" : "") {
- data.flags = m->flags;
- run_test(&data, fd, f->func);
+ for_each_pipe_static(p) igt_subtest_group {
+ igt_fixture
+ igt_display_require_output_on_pipe(&data.display, p);
+
+ data.pipe = p;
+
+ for (f = funcs; f->name; f++) {
+ for (m = modes; m->name; m++) {
+ if (m->flags & ~f->valid)
+ continue;
+
+ igt_subtest_f("pipe-%s-%s-%s%s",
+ kmstest_pipe_name(data.pipe),
+ f->name, m->name,
+ m->flags & HANG ? "-hang" : "") {
+ for_each_valid_output_on_pipe(&data.display, data.pipe, data.output) {
+ data.flags = m->flags;
+ run_test(&data, fd, f->func);
+ }
+ }
}
}
}
--
2.15.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH i-g-t 4/7] kms_vblank: Make the -hang tests work as intended
2018-01-04 13:15 [PATCH i-g-t 0/7] kms_vblank: Move tests over from kms_flip Maarten Lankhorst
` (2 preceding siblings ...)
2018-01-04 13:15 ` [PATCH i-g-t 3/7] kms_vblank: Reorganize subtests by pipe Maarten Lankhorst
@ 2018-01-04 13:15 ` Maarten Lankhorst
2018-01-04 13:15 ` [PATCH i-g-t 5/7] kms_vblank: Add tests implemented in kms_flip Maarten Lankhorst
` (3 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Maarten Lankhorst @ 2018-01-04 13:15 UTC (permalink / raw)
To: intel-gfx
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
tests/kms_vblank.c | 31 ++++++++++++++++++++++---------
1 file changed, 22 insertions(+), 9 deletions(-)
diff --git a/tests/kms_vblank.c b/tests/kms_vblank.c
index a83500635976..45301ca5110f 100644
--- a/tests/kms_vblank.c
+++ b/tests/kms_vblank.c
@@ -54,7 +54,7 @@ typedef struct {
#define IDLE 1
#define BUSY 2
#define FORKED 4
-#define HANG 8
+#define NOHANG 8
} data_t;
static double elapsed(const struct timespec *start,
@@ -128,7 +128,7 @@ static void run_test(data_t *data, int fd, void (*testfunc)(data_t *, int, int))
igt_subtest_name(), kmstest_pipe_name(data->pipe),
igt_output_name(output), nchildren);
- if (data->flags & HANG)
+ if (!(data->flags & NOHANG))
hang = igt_hang_ring(display->drm_fd, I915_EXEC_DEFAULT);
if (data->flags & BUSY) {
@@ -153,7 +153,7 @@ static void run_test(data_t *data, int fd, void (*testfunc)(data_t *, int, int))
igt_assert(poll(&(struct pollfd){fd, POLLIN}, 1, 0) == 0);
- if (data->flags & HANG)
+ if (!(data->flags & NOHANG))
igt_post_hang_ring(fd, hang);
igt_info("\n%s on pipe %s, connector %s: PASSED\n\n",
@@ -324,9 +324,9 @@ igt_main
void (*func)(data_t *, int, int);
unsigned int valid;
} funcs[] = {
- { "accuracy", accuracy, IDLE | HANG },
- { "query", vblank_query, IDLE | FORKED | BUSY | HANG },
- { "wait", vblank_wait, IDLE | FORKED | BUSY | HANG },
+ { "accuracy", accuracy, IDLE },
+ { "query", vblank_query, IDLE | FORKED | BUSY },
+ { "wait", vblank_wait, IDLE | FORKED | BUSY },
{ }
}, *f;
enum pipe p;
@@ -365,15 +365,28 @@ igt_main
if (m->flags & ~f->valid)
continue;
- igt_subtest_f("pipe-%s-%s-%s%s",
+ igt_subtest_f("pipe-%s-%s-%s",
kmstest_pipe_name(data.pipe),
- f->name, m->name,
- m->flags & HANG ? "-hang" : "") {
+ f->name, m->name) {
+ for_each_valid_output_on_pipe(&data.display, data.pipe, data.output) {
+ data.flags = m->flags | NOHANG;
+ run_test(&data, fd, f->func);
+ }
+ }
+
+ /* Skip the -hang version if NOHANG flag is set */
+ if (f->valid & NOHANG)
+ continue;
+
+ igt_subtest_f("pipe-%s-%s-%s-hang",
+ kmstest_pipe_name(data.pipe),
+ f->name, m->name) {
for_each_valid_output_on_pipe(&data.display, data.pipe, data.output) {
data.flags = m->flags;
run_test(&data, fd, f->func);
}
}
+
}
}
}
--
2.15.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH i-g-t 5/7] kms_vblank: Add tests implemented in kms_flip
2018-01-04 13:15 [PATCH i-g-t 0/7] kms_vblank: Move tests over from kms_flip Maarten Lankhorst
` (3 preceding siblings ...)
2018-01-04 13:15 ` [PATCH i-g-t 4/7] kms_vblank: Make the -hang tests work as intended Maarten Lankhorst
@ 2018-01-04 13:15 ` Maarten Lankhorst
2018-01-04 13:15 ` [PATCH i-g-t 6/7] kms_flip: Remove redundant vblank tests Maarten Lankhorst
` (2 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Maarten Lankhorst @ 2018-01-04 13:15 UTC (permalink / raw)
To: intel-gfx
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
tests/kms_vblank.c | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 82 insertions(+), 6 deletions(-)
diff --git a/tests/kms_vblank.c b/tests/kms_vblank.c
index 45301ca5110f..f2fa11523d50 100644
--- a/tests/kms_vblank.c
+++ b/tests/kms_vblank.c
@@ -51,10 +51,14 @@ typedef struct {
igt_output_t *output;
enum pipe pipe;
unsigned int flags;
-#define IDLE 1
-#define BUSY 2
-#define FORKED 4
-#define NOHANG 8
+#define IDLE 0x1
+#define BUSY 0x2
+#define FORKED 0x4
+#define NOHANG 0x8
+#define MODESET 0x10
+#define DPMS 0x20
+#define SUSPEND 0x40
+#define RPM 0x80
} data_t;
static double elapsed(const struct timespec *start,
@@ -124,6 +128,9 @@ static void run_test(data_t *data, int fd, void (*testfunc)(data_t *, int, int))
prepare_crtc(data, fd, output);
+ if (data->flags & RPM)
+ igt_require(igt_setup_runtime_pm());
+
igt_info("Beginning %s on pipe %s, connector %s (%d threads)\n",
igt_subtest_name(), kmstest_pipe_name(data->pipe),
igt_output_name(output), nchildren);
@@ -315,6 +322,69 @@ static void vblank_wait(data_t *data, int fd, int nchildren)
elapsed(&start, &end, count));
}
+static int get_vblank(int fd, enum pipe pipe, unsigned flags)
+{
+ union drm_wait_vblank vbl;
+
+ memset(&vbl, 0, sizeof(vbl));
+ vbl.request.type = DRM_VBLANK_RELATIVE | kmstest_get_vbl_flag(pipe) | flags;
+ do_or_die(igt_ioctl(fd, DRM_IOCTL_WAIT_VBLANK, &vbl));
+
+ return vbl.reply.sequence;
+}
+
+static void vblank_ts_cont(data_t *data, int fd, int nchildren)
+{
+ igt_display_t *display = &data->display;
+ igt_output_t *output = data->output;
+ int seq1, seq2;
+ union drm_wait_vblank vbl;
+
+ seq1 = get_vblank(fd, data->pipe, 0);
+
+ if (data->flags & DPMS) {
+ igt_output_set_prop_value(output, IGT_CONNECTOR_DPMS, DRM_MODE_DPMS_OFF);
+ igt_display_commit(display);
+ }
+
+ if (data->flags & MODESET) {
+ igt_output_set_pipe(output, PIPE_NONE);
+ igt_display_commit2(display, display->is_atomic ? COMMIT_ATOMIC : COMMIT_LEGACY);
+ }
+
+ if (data->flags & RPM)
+ igt_assert(igt_wait_for_pm_status(IGT_RUNTIME_PM_STATUS_SUSPENDED));
+
+ if (data->flags & SUSPEND)
+ igt_system_suspend_autoresume(SUSPEND_STATE_MEM,
+ SUSPEND_TEST_NONE);
+
+ if (data->flags & (MODESET | DPMS)) {
+ /* Attempting to do a vblank while disabled should return -EINVAL */
+ memset(&vbl, 0, sizeof(vbl));
+ vbl.request.type = DRM_VBLANK_RELATIVE;
+ vbl.request.type |= kmstest_get_vbl_flag(data->pipe);
+ igt_assert_eq(wait_vblank(fd, &vbl), -EINVAL);
+ }
+
+ if (data->flags & DPMS) {
+ igt_output_set_prop_value(output, IGT_CONNECTOR_DPMS, DRM_MODE_DPMS_ON);
+ igt_display_commit(display);
+ }
+
+ if (data->flags & MODESET) {
+ igt_output_set_pipe(output, data->pipe);
+ igt_display_commit2(display, display->is_atomic ? COMMIT_ATOMIC : COMMIT_LEGACY);
+ }
+
+ seq2 = get_vblank(fd, data->pipe, 0);
+
+ igt_debug("testing ts continuity: Current frame %u, old frame %u\n", seq2, seq1);
+
+ igt_assert_f(seq2 - seq1 >= 0, "unexpected vblank seq %u, should be >= %u\n", seq2, seq1);
+ igt_assert_f(seq2 - seq1 <= 150, "unexpected vblank seq %u, should be < %u\n", seq2, seq1 + 150);
+}
+
igt_main
{
int fd;
@@ -327,6 +397,7 @@ igt_main
{ "accuracy", accuracy, IDLE },
{ "query", vblank_query, IDLE | FORKED | BUSY },
{ "wait", vblank_wait, IDLE | FORKED | BUSY },
+ { "ts-continuation", vblank_ts_cont, IDLE | SUSPEND | MODESET | DPMS | RPM },
{ }
}, *f;
enum pipe p;
@@ -339,6 +410,11 @@ igt_main
{ "forked", IDLE | FORKED },
{ "busy", BUSY },
{ "forked-busy", BUSY | FORKED },
+ { "dpms-rpm", DPMS | RPM },
+ { "dpms-suspend", DPMS | SUSPEND },
+ { "suspend", SUSPEND },
+ { "modeset", MODESET },
+ { "modeset-rpm", MODESET | RPM },
{ }
}, *m;
@@ -374,8 +450,8 @@ igt_main
}
}
- /* Skip the -hang version if NOHANG flag is set */
- if (f->valid & NOHANG)
+ /* Skip the -hang version if NOHANG or RPM flag is set */
+ if (f->valid & (NOHANG | RPM))
continue;
igt_subtest_f("pipe-%s-%s-%s-hang",
--
2.15.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH i-g-t 6/7] kms_flip: Remove redundant vblank tests.
2018-01-04 13:15 [PATCH i-g-t 0/7] kms_vblank: Move tests over from kms_flip Maarten Lankhorst
` (4 preceding siblings ...)
2018-01-04 13:15 ` [PATCH i-g-t 5/7] kms_vblank: Add tests implemented in kms_flip Maarten Lankhorst
@ 2018-01-04 13:15 ` Maarten Lankhorst
2018-01-04 13:15 ` [PATCH i-g-t 7/7] kms_vblank: Remove teardown code from cleanup_crtc Maarten Lankhorst
2018-01-04 13:36 ` ✗ Fi.CI.BAT: failure for kms_vblank: Move tests over from kms_flip Patchwork
7 siblings, 0 replies; 9+ messages in thread
From: Maarten Lankhorst @ 2018-01-04 13:15 UTC (permalink / raw)
To: intel-gfx
wf_vblank is redundant with wf_vblank-ts-check, which also performs
a check but runs in the same way.
The -EINVAL vblank tests are reproduced in kms_vblank, as are the
vblank-vs-* tests.
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
tests/kms_flip.c | 8 --------
1 file changed, 8 deletions(-)
diff --git a/tests/kms_flip.c b/tests/kms_flip.c
index 50c16b0debbf..710ea52b4a8a 100644
--- a/tests/kms_flip.c
+++ b/tests/kms_flip.c
@@ -1527,7 +1527,6 @@ int main(int argc, char **argv)
int flags;
const char *name;
} tests[] = {
- { 30, TEST_VBLANK, "wf_vblank" },
{ 30, TEST_VBLANK | TEST_CHECK_TS, "wf_vblank-ts-check" },
{ 30, TEST_VBLANK | TEST_VBLANK_BLOCK | TEST_CHECK_TS,
"blocking-wf_vblank" },
@@ -1535,8 +1534,6 @@ int main(int argc, char **argv)
"absolute-wf_vblank" },
{ 30, TEST_VBLANK | TEST_VBLANK_BLOCK | TEST_VBLANK_ABSOLUTE,
"blocking-absolute-wf_vblank" },
- { 60, TEST_VBLANK | TEST_DPMS | TEST_EINVAL, "wf_vblank-vs-dpms" },
- { 60, TEST_VBLANK | TEST_MODESET | TEST_EINVAL, "wf_vblank-vs-modeset" },
{ 10, TEST_FLIP | TEST_BASIC, "plain-flip" },
{ 30, TEST_FLIP | TEST_EBUSY , "busy-flip" },
{ 30, TEST_FLIP | TEST_FENCE_STRESS , "flip-vs-fences" },
@@ -1568,11 +1565,6 @@ int main(int argc, char **argv)
{ 0, TEST_ENOENT | TEST_NOEVENT, "nonexisting-fb" },
{ 10, TEST_DPMS_OFF | TEST_DPMS | TEST_VBLANK_RACE, "dpms-vs-vblank-race" },
{ 10, TEST_MODESET | TEST_VBLANK_RACE, "modeset-vs-vblank-race" },
- { 10, TEST_VBLANK | TEST_DPMS | TEST_RPM | TEST_TS_CONT, "vblank-vs-dpms-rpm" },
- { 10, TEST_VBLANK | TEST_MODESET | TEST_RPM | TEST_TS_CONT, "vblank-vs-modeset-rpm" },
- { 0, TEST_VBLANK | TEST_DPMS | TEST_SUSPEND | TEST_TS_CONT, "vblank-vs-dpms-suspend" },
- { 0, TEST_VBLANK | TEST_MODESET | TEST_SUSPEND | TEST_TS_CONT, "vblank-vs-modeset-suspend" },
- { 0, TEST_VBLANK | TEST_SUSPEND | TEST_TS_CONT, "vblank-vs-suspend" },
{ 0, TEST_BO_TOOBIG | TEST_NO_2X_OUTPUT, "bo-too-big" },
};
int i;
--
2.15.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH i-g-t 7/7] kms_vblank: Remove teardown code from cleanup_crtc
2018-01-04 13:15 [PATCH i-g-t 0/7] kms_vblank: Move tests over from kms_flip Maarten Lankhorst
` (5 preceding siblings ...)
2018-01-04 13:15 ` [PATCH i-g-t 6/7] kms_flip: Remove redundant vblank tests Maarten Lankhorst
@ 2018-01-04 13:15 ` Maarten Lankhorst
2018-01-04 13:36 ` ✗ Fi.CI.BAT: failure for kms_vblank: Move tests over from kms_flip Patchwork
7 siblings, 0 replies; 9+ messages in thread
From: Maarten Lankhorst @ 2018-01-04 13:15 UTC (permalink / raw)
To: intel-gfx
New way of doing things is calling igt_display_reset() before any
setup code. This way if the configuration stays the same, the initial
modeset will be a noop.
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
tests/kms_vblank.c | 11 ++---------
1 file changed, 2 insertions(+), 9 deletions(-)
diff --git a/tests/kms_vblank.c b/tests/kms_vblank.c
index f2fa11523d50..3d8004ef6c3f 100644
--- a/tests/kms_vblank.c
+++ b/tests/kms_vblank.c
@@ -74,6 +74,8 @@ static void prepare_crtc(data_t *data, int fd, igt_output_t *output)
igt_display_t *display = &data->display;
igt_plane_t *primary;
+ igt_display_reset(display);
+
/* select the pipe we want to use */
igt_output_set_pipe(output, data->pipe);
@@ -95,16 +97,7 @@ static void prepare_crtc(data_t *data, int fd, igt_output_t *output)
static void cleanup_crtc(data_t *data, int fd, igt_output_t *output)
{
- igt_display_t *display = &data->display;
- igt_plane_t *primary;
-
igt_remove_fb(fd, &data->primary_fb);
-
- primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
- igt_plane_set_fb(primary, NULL);
-
- igt_output_set_pipe(output, PIPE_ANY);
- igt_display_commit(display);
}
static int wait_vblank(int fd, union drm_wait_vblank *vbl)
--
2.15.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 9+ messages in thread
* ✗ Fi.CI.BAT: failure for kms_vblank: Move tests over from kms_flip.
2018-01-04 13:15 [PATCH i-g-t 0/7] kms_vblank: Move tests over from kms_flip Maarten Lankhorst
` (6 preceding siblings ...)
2018-01-04 13:15 ` [PATCH i-g-t 7/7] kms_vblank: Remove teardown code from cleanup_crtc Maarten Lankhorst
@ 2018-01-04 13:36 ` Patchwork
7 siblings, 0 replies; 9+ messages in thread
From: Patchwork @ 2018-01-04 13:36 UTC (permalink / raw)
To: Maarten Lankhorst; +Cc: intel-gfx
== Series Details ==
Series: kms_vblank: Move tests over from kms_flip.
URL : https://patchwork.freedesktop.org/series/36006/
State : failure
== Summary ==
Applying: tests/kms_flip: Remove blt/rcs flip tests.
Using index info to reconstruct a base tree...
M tests/kms_flip.c
Falling back to patching base and 3-way merge...
Auto-merging tests/kms_flip.c
CONFLICT (content): Merge conflict in tests/kms_flip.c
Patch failed at 0001 tests/kms_flip: Remove blt/rcs flip tests.
The copy of the patch that failed is found in: .git/rebase-apply/patch
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2018-01-04 13:36 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-01-04 13:15 [PATCH i-g-t 0/7] kms_vblank: Move tests over from kms_flip Maarten Lankhorst
2018-01-04 13:15 ` [PATCH i-g-t 1/7] tests/kms_flip: Remove blt/rcs flip tests Maarten Lankhorst
2018-01-04 13:15 ` [PATCH i-g-t 2/7] tests/kms_flip: Move kms_flip.vblank-vs-hang to kms_vblank Maarten Lankhorst
2018-01-04 13:15 ` [PATCH i-g-t 3/7] kms_vblank: Reorganize subtests by pipe Maarten Lankhorst
2018-01-04 13:15 ` [PATCH i-g-t 4/7] kms_vblank: Make the -hang tests work as intended Maarten Lankhorst
2018-01-04 13:15 ` [PATCH i-g-t 5/7] kms_vblank: Add tests implemented in kms_flip Maarten Lankhorst
2018-01-04 13:15 ` [PATCH i-g-t 6/7] kms_flip: Remove redundant vblank tests Maarten Lankhorst
2018-01-04 13:15 ` [PATCH i-g-t 7/7] kms_vblank: Remove teardown code from cleanup_crtc Maarten Lankhorst
2018-01-04 13:36 ` ✗ Fi.CI.BAT: failure for kms_vblank: Move tests over from kms_flip Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox