* [RFC PATCH 1/5] tests/sw_sync: use igt_fork_helper
@ 2018-01-18 13:59 ` Daniel Vetter
0 siblings, 0 replies; 18+ messages in thread
From: Daniel Vetter @ 2018-01-18 13:59 UTC (permalink / raw)
To: IGT development; +Cc: Daniel Vetter, Intel Graphics Development, Daniel Vetter
I'll need to wrap a bit of magic around all the fork() calls in our
tests. Simplest way to get there is to roll out the existing helpers,
which even saves a bit of boilerplate code.
Cc: Robert Foss <robert.foss@collabora.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
tests/sw_sync.c | 54 ++++++++++++++++++------------------------------------
1 file changed, 18 insertions(+), 36 deletions(-)
diff --git a/tests/sw_sync.c b/tests/sw_sync.c
index 20dfbbb98f58..24974a2f5e4e 100644
--- a/tests/sw_sync.c
+++ b/tests/sw_sync.c
@@ -175,6 +175,7 @@ static void test_sync_busy_fork_unixsocket(void)
int timeline;
int skip = 0;
int sv[2];
+ struct igt_helper_process proc;
timeline = sw_sync_timeline_create();
@@ -185,9 +186,7 @@ static void test_sync_busy_fork_unixsocket(void)
goto out;
}
- switch (fork()) {
- case 0:
- {
+ igt_fork_helper(&proc) {
/* Child process */
int socket = sv[1];
int socket_timeline;
@@ -213,17 +212,8 @@ static void test_sync_busy_fork_unixsocket(void)
/* Advance timeline from 0 -> 1 */
sw_sync_timeline_inc(socket_timeline, 1);
-
- _Exit(0);
- break;
- }
- case -1:
- {
- /* Failed fork */
- skip = 1;
- break;
}
- default:
+
{
/* Parent process */
int socket = sv[0];
@@ -252,15 +242,14 @@ static void test_sync_busy_fork_unixsocket(void)
if (sendmsg(socket, &msg, 0) < 0) {
skip = 1;
- goto out;
+ } else {
+ igt_assert_f(sync_fence_wait(fence, 2*1000) == 0,
+ "Fence not signaled (timeline value 1 fence seqno 1)\n");
}
-
- igt_assert_f(sync_fence_wait(fence, 2*1000) == 0,
- "Fence not signaled (timeline value 1 fence seqno 1)\n");
- break;
- }
}
+ igt_stop_helper(&proc);
+
out:
close(fence);
close(timeline);
@@ -272,32 +261,25 @@ static void test_sync_busy_fork(void)
int fence;
int timeline;
int skip = 0;
+ struct igt_helper_process proc;
timeline = sw_sync_timeline_create();
fence = sw_sync_timeline_create_fence(timeline, 1);
- switch (fork()) {
- case 0:
- /* Child process */
+ igt_fork_helper(&proc) {
usleep(1*1000*1000);
/* Advance timeline from 0 -> 1 */
sw_sync_timeline_inc(timeline, 1);
- _Exit(0);
- break;
- case -1:
- /* Failed fork */
- skip = 1;
- break;
- default:
- /* Parent process */
- igt_assert_f(sync_fence_wait(fence, 0) == -ETIME,
- "Fence signaled (it should not have been signalled yet)\n");
-
- igt_assert_f(sync_fence_wait(fence, 2*1000) == 0,
- "Fence not signaled (timeline value 1 fence seqno 1)\n");
- break;
}
+ igt_assert_f(sync_fence_wait(fence, 0) == -ETIME,
+ "Fence signaled (it should not have been signalled yet)\n");
+
+ igt_assert_f(sync_fence_wait(fence, 2*1000) == 0,
+ "Fence not signaled (timeline value 1 fence seqno 1)\n");
+
+ igt_stop_helper(&proc);
+
close(fence);
close(timeline);
igt_require(!skip);
--
2.14.3
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [igt-dev] [RFC PATCH 1/5] tests/sw_sync: use igt_fork_helper
@ 2018-01-18 13:59 ` Daniel Vetter
0 siblings, 0 replies; 18+ messages in thread
From: Daniel Vetter @ 2018-01-18 13:59 UTC (permalink / raw)
To: IGT development; +Cc: Robert Foss, Intel Graphics Development, Daniel Vetter
I'll need to wrap a bit of magic around all the fork() calls in our
tests. Simplest way to get there is to roll out the existing helpers,
which even saves a bit of boilerplate code.
Cc: Robert Foss <robert.foss@collabora.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
tests/sw_sync.c | 54 ++++++++++++++++++------------------------------------
1 file changed, 18 insertions(+), 36 deletions(-)
diff --git a/tests/sw_sync.c b/tests/sw_sync.c
index 20dfbbb98f58..24974a2f5e4e 100644
--- a/tests/sw_sync.c
+++ b/tests/sw_sync.c
@@ -175,6 +175,7 @@ static void test_sync_busy_fork_unixsocket(void)
int timeline;
int skip = 0;
int sv[2];
+ struct igt_helper_process proc;
timeline = sw_sync_timeline_create();
@@ -185,9 +186,7 @@ static void test_sync_busy_fork_unixsocket(void)
goto out;
}
- switch (fork()) {
- case 0:
- {
+ igt_fork_helper(&proc) {
/* Child process */
int socket = sv[1];
int socket_timeline;
@@ -213,17 +212,8 @@ static void test_sync_busy_fork_unixsocket(void)
/* Advance timeline from 0 -> 1 */
sw_sync_timeline_inc(socket_timeline, 1);
-
- _Exit(0);
- break;
- }
- case -1:
- {
- /* Failed fork */
- skip = 1;
- break;
}
- default:
+
{
/* Parent process */
int socket = sv[0];
@@ -252,15 +242,14 @@ static void test_sync_busy_fork_unixsocket(void)
if (sendmsg(socket, &msg, 0) < 0) {
skip = 1;
- goto out;
+ } else {
+ igt_assert_f(sync_fence_wait(fence, 2*1000) == 0,
+ "Fence not signaled (timeline value 1 fence seqno 1)\n");
}
-
- igt_assert_f(sync_fence_wait(fence, 2*1000) == 0,
- "Fence not signaled (timeline value 1 fence seqno 1)\n");
- break;
- }
}
+ igt_stop_helper(&proc);
+
out:
close(fence);
close(timeline);
@@ -272,32 +261,25 @@ static void test_sync_busy_fork(void)
int fence;
int timeline;
int skip = 0;
+ struct igt_helper_process proc;
timeline = sw_sync_timeline_create();
fence = sw_sync_timeline_create_fence(timeline, 1);
- switch (fork()) {
- case 0:
- /* Child process */
+ igt_fork_helper(&proc) {
usleep(1*1000*1000);
/* Advance timeline from 0 -> 1 */
sw_sync_timeline_inc(timeline, 1);
- _Exit(0);
- break;
- case -1:
- /* Failed fork */
- skip = 1;
- break;
- default:
- /* Parent process */
- igt_assert_f(sync_fence_wait(fence, 0) == -ETIME,
- "Fence signaled (it should not have been signalled yet)\n");
-
- igt_assert_f(sync_fence_wait(fence, 2*1000) == 0,
- "Fence not signaled (timeline value 1 fence seqno 1)\n");
- break;
}
+ igt_assert_f(sync_fence_wait(fence, 0) == -ETIME,
+ "Fence signaled (it should not have been signalled yet)\n");
+
+ igt_assert_f(sync_fence_wait(fence, 2*1000) == 0,
+ "Fence not signaled (timeline value 1 fence seqno 1)\n");
+
+ igt_stop_helper(&proc);
+
close(fence);
close(timeline);
igt_require(!skip);
--
2.14.3
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [RFC PATCH 2/5] lib/core: make logging pthread vs. fork safe
2018-01-18 13:59 ` [igt-dev] " Daniel Vetter
@ 2018-01-18 13:59 ` Daniel Vetter
-1 siblings, 0 replies; 18+ messages in thread
From: Daniel Vetter @ 2018-01-18 13:59 UTC (permalink / raw)
To: IGT development; +Cc: Daniel Vetter, Intel Graphics Development, Daniel Vetter
fork() is a pretty thing in a multithreaded program, it's essentially
as bad as handling signals: When we fork the memory snapshot we can
interrupts all other threads at any place, including while they're
holding mutexes and other fun stuff.
libc itself has some internal fork handlers to clear caches and make
sure locks stay in a safe place (we've had plenty of fun with e.g. the
pid/tid caches when a signal happens too fast).
I want to put dmesg capture into igt, into a separate thread (so that
dmesg capture nicely interleaves what the test is doing, +/- races),
and stuff all the dmesg output into the igt logger. Which means we
need to make sure that the log_buffer_mutex is in a predictable state.
Since we have 2 calls to fork() extract a little helper for this.
v2: Stop using fflush(NULL) - somehow this manages to hit a bug in
libc when using a FILE in a separate thread (for capturing dmesg).
Instead explicitly flush stderr and stdout only.
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
lib/igt_core.c | 25 +++++++++++++++++--------
1 file changed, 17 insertions(+), 8 deletions(-)
diff --git a/lib/igt_core.c b/lib/igt_core.c
index 558a538d35e8..8e7f0da8a44b 100644
--- a/lib/igt_core.c
+++ b/lib/igt_core.c
@@ -1518,6 +1518,21 @@ static void fork_helper_exit_handler(int sig)
assert(helper_process_count == 0);
}
+static pid_t __igt_fork_wrapper(void)
+{
+ pid_t ret;
+
+ /* ensure any buffers are flushed before fork */
+ fflush(stdout);
+ fflush(stderr);
+
+ pthread_mutex_lock(&log_buffer_mutex);
+ ret = fork();
+ pthread_mutex_unlock(&log_buffer_mutex);
+
+ return ret;
+}
+
bool __igt_fork_helper(struct igt_helper_process *proc)
{
pid_t pid;
@@ -1540,10 +1555,7 @@ bool __igt_fork_helper(struct igt_helper_process *proc)
tmp_count = exit_handler_count;
exit_handler_count = 0;
- /* ensure any buffers are flushed before fork */
- fflush(NULL);
-
- switch (pid = fork()) {
+ switch (pid = __igt_fork_wrapper()) {
case -1:
exit_handler_count = tmp_count;
igt_assert(0);
@@ -1642,10 +1654,7 @@ bool __igt_fork(void)
igt_assert(test_children);
}
- /* ensure any buffers are flushed before fork */
- fflush(NULL);
-
- switch (test_children[num_test_children++] = fork()) {
+ switch (test_children[num_test_children++] = __igt_fork_wrapper()) {
case -1:
igt_assert(0);
case 0:
--
2.14.3
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [igt-dev] [RFC PATCH 2/5] lib/core: make logging pthread vs. fork safe
@ 2018-01-18 13:59 ` Daniel Vetter
0 siblings, 0 replies; 18+ messages in thread
From: Daniel Vetter @ 2018-01-18 13:59 UTC (permalink / raw)
To: IGT development; +Cc: Intel Graphics Development, Daniel Vetter
fork() is a pretty thing in a multithreaded program, it's essentially
as bad as handling signals: When we fork the memory snapshot we can
interrupts all other threads at any place, including while they're
holding mutexes and other fun stuff.
libc itself has some internal fork handlers to clear caches and make
sure locks stay in a safe place (we've had plenty of fun with e.g. the
pid/tid caches when a signal happens too fast).
I want to put dmesg capture into igt, into a separate thread (so that
dmesg capture nicely interleaves what the test is doing, +/- races),
and stuff all the dmesg output into the igt logger. Which means we
need to make sure that the log_buffer_mutex is in a predictable state.
Since we have 2 calls to fork() extract a little helper for this.
v2: Stop using fflush(NULL) - somehow this manages to hit a bug in
libc when using a FILE in a separate thread (for capturing dmesg).
Instead explicitly flush stderr and stdout only.
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
lib/igt_core.c | 25 +++++++++++++++++--------
1 file changed, 17 insertions(+), 8 deletions(-)
diff --git a/lib/igt_core.c b/lib/igt_core.c
index 558a538d35e8..8e7f0da8a44b 100644
--- a/lib/igt_core.c
+++ b/lib/igt_core.c
@@ -1518,6 +1518,21 @@ static void fork_helper_exit_handler(int sig)
assert(helper_process_count == 0);
}
+static pid_t __igt_fork_wrapper(void)
+{
+ pid_t ret;
+
+ /* ensure any buffers are flushed before fork */
+ fflush(stdout);
+ fflush(stderr);
+
+ pthread_mutex_lock(&log_buffer_mutex);
+ ret = fork();
+ pthread_mutex_unlock(&log_buffer_mutex);
+
+ return ret;
+}
+
bool __igt_fork_helper(struct igt_helper_process *proc)
{
pid_t pid;
@@ -1540,10 +1555,7 @@ bool __igt_fork_helper(struct igt_helper_process *proc)
tmp_count = exit_handler_count;
exit_handler_count = 0;
- /* ensure any buffers are flushed before fork */
- fflush(NULL);
-
- switch (pid = fork()) {
+ switch (pid = __igt_fork_wrapper()) {
case -1:
exit_handler_count = tmp_count;
igt_assert(0);
@@ -1642,10 +1654,7 @@ bool __igt_fork(void)
igt_assert(test_children);
}
- /* ensure any buffers are flushed before fork */
- fflush(NULL);
-
- switch (test_children[num_test_children++] = fork()) {
+ switch (test_children[num_test_children++] = __igt_fork_wrapper()) {
case -1:
igt_assert(0);
case 0:
--
2.14.3
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [RFC PATCH 3/5] lib/core: Don't hide non-debug message when filtering for a debug log domain
2018-01-18 13:59 ` [igt-dev] " Daniel Vetter
@ 2018-01-18 13:59 ` Daniel Vetter
-1 siblings, 0 replies; 18+ messages in thread
From: Daniel Vetter @ 2018-01-18 13:59 UTC (permalink / raw)
To: IGT development; +Cc: Daniel Vetter, Intel Graphics Development
I think this is the more sensible semantics, since this allows you to
still follow what's going on with the test at a high level, while
filtering for a specific (or multiple specific) debug log domains.
For non-debug messages log-domains technically exist, but we're not
making much use of them really.
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
lib/igt_core.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/lib/igt_core.c b/lib/igt_core.c
index 8e7f0da8a44b..aaafc1df6b46 100644
--- a/lib/igt_core.c
+++ b/lib/igt_core.c
@@ -291,7 +291,7 @@ enum {
static int igt_exitcode = IGT_EXIT_SUCCESS;
static const char *command_str;
-static char* igt_log_domain_filter;
+static char* igt_debug_log_domain_filter;
static struct {
char *entries[256];
uint8_t start, end;
@@ -757,7 +757,7 @@ static int common_init(int *argc, char **argv,
case OPT_DEBUG:
igt_log_level = IGT_LOG_DEBUG;
if (optarg && strlen(optarg) > 0)
- igt_log_domain_filter = strdup(optarg);
+ igt_debug_log_domain_filter = strdup(optarg);
break;
case OPT_LIST_SUBTESTS:
if (!run_single_subtest)
@@ -2104,12 +2104,12 @@ void igt_vlog(const char *domain, enum igt_log_level level, const char *format,
goto out;
/* check domain filter */
- if (igt_log_domain_filter) {
+ if (level == IGT_LOG_DEBUG && igt_debug_log_domain_filter) {
/* if null domain and filter is not "application", return */
- if (!domain && strcmp(igt_log_domain_filter, "application"))
+ if (!domain && strcmp(igt_debug_log_domain_filter, "application"))
goto out;
/* else if domain and filter do not match, return */
- else if (domain && strcmp(igt_log_domain_filter, domain))
+ else if (domain && strcmp(igt_debug_log_domain_filter, domain))
goto out;
}
--
2.14.3
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [igt-dev] [RFC PATCH 3/5] lib/core: Don't hide non-debug message when filtering for a debug log domain
@ 2018-01-18 13:59 ` Daniel Vetter
0 siblings, 0 replies; 18+ messages in thread
From: Daniel Vetter @ 2018-01-18 13:59 UTC (permalink / raw)
To: IGT development; +Cc: Intel Graphics Development
I think this is the more sensible semantics, since this allows you to
still follow what's going on with the test at a high level, while
filtering for a specific (or multiple specific) debug log domains.
For non-debug messages log-domains technically exist, but we're not
making much use of them really.
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
lib/igt_core.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/lib/igt_core.c b/lib/igt_core.c
index 8e7f0da8a44b..aaafc1df6b46 100644
--- a/lib/igt_core.c
+++ b/lib/igt_core.c
@@ -291,7 +291,7 @@ enum {
static int igt_exitcode = IGT_EXIT_SUCCESS;
static const char *command_str;
-static char* igt_log_domain_filter;
+static char* igt_debug_log_domain_filter;
static struct {
char *entries[256];
uint8_t start, end;
@@ -757,7 +757,7 @@ static int common_init(int *argc, char **argv,
case OPT_DEBUG:
igt_log_level = IGT_LOG_DEBUG;
if (optarg && strlen(optarg) > 0)
- igt_log_domain_filter = strdup(optarg);
+ igt_debug_log_domain_filter = strdup(optarg);
break;
case OPT_LIST_SUBTESTS:
if (!run_single_subtest)
@@ -2104,12 +2104,12 @@ void igt_vlog(const char *domain, enum igt_log_level level, const char *format,
goto out;
/* check domain filter */
- if (igt_log_domain_filter) {
+ if (level == IGT_LOG_DEBUG && igt_debug_log_domain_filter) {
/* if null domain and filter is not "application", return */
- if (!domain && strcmp(igt_log_domain_filter, "application"))
+ if (!domain && strcmp(igt_debug_log_domain_filter, "application"))
goto out;
/* else if domain and filter do not match, return */
- else if (domain && strcmp(igt_log_domain_filter, domain))
+ else if (domain && strcmp(igt_debug_log_domain_filter, domain))
goto out;
}
--
2.14.3
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [RFC PATCH 4/5] igt/core: Initial simple interleaved kmsg filtering
2018-01-18 13:59 ` [igt-dev] " Daniel Vetter
@ 2018-01-18 13:59 ` Daniel Vetter
-1 siblings, 0 replies; 18+ messages in thread
From: Daniel Vetter @ 2018-01-18 13:59 UTC (permalink / raw)
To: IGT development; +Cc: Daniel Vetter, Intel Graphics Development
Needs to be beefed up so that dmesg warning (and worse) are re-emmitted
as IGT_LOG_WARN. But only if they match one of our filters (which we
should probably allow to be extended, e.g. depending upon which driver
has been openened). This also requires that we at least parse the
basic of kmsg lines (adjusting the timestamp to match our own would be
real cool).
v2:
- Seek to the end of the kmsg buffer before starting the capturing.
- Increase linebuffer to avoid dmesg drowning out all the tests
messages.
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
lib/igt_core.c | 41 ++++++++++++++++++++++++++++++++++++++++-
1 file changed, 40 insertions(+), 1 deletion(-)
diff --git a/lib/igt_core.c b/lib/igt_core.c
index aaafc1df6b46..65b394581e8f 100644
--- a/lib/igt_core.c
+++ b/lib/igt_core.c
@@ -293,7 +293,7 @@ static const char *command_str;
static char* igt_debug_log_domain_filter;
static struct {
- char *entries[256];
+ char *entries[2000];
uint8_t start, end;
} log_buffer;
static pthread_mutex_t log_buffer_mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -581,6 +581,43 @@ static void oom_adjust_for_doom(void)
}
+static void *kmsg_capture(void *arg)
+{
+ int kmsg_capture_fd = (uintptr_t) arg;
+ FILE *kmsg_file = fdopen(kmsg_capture_fd, "r");
+ char *line = NULL;
+ size_t line_len = 0;
+ ssize_t read;
+
+ while ((read = getline(&line, &line_len, kmsg_file))) {
+ /* FIXME: Set IGT_LOG_WARN for dmesg-warnings */
+ igt_log("dmesg", IGT_LOG_DEBUG, "%i, %s", line[0], line+1);
+ }
+
+ igt_warn("ran out of dmesg, this shouldn't happen\n");
+
+ return NULL;
+}
+
+static void start_kmsg_recording(void)
+{
+ static pthread_t kmsg_capture_thread;
+ int kmsg_capture_fd;
+
+ kmsg_capture_fd = open("/dev/kmsg",
+ O_RDONLY | O_CLOEXEC);
+
+ if (kmsg_capture_fd < 0) {
+ igt_info("no dmesg capturing\n");
+ return;
+ }
+
+ lseek(kmsg_capture_fd, 0, SEEK_END);
+
+ pthread_create(&kmsg_capture_thread, NULL,
+ kmsg_capture, (void *)(uintptr_t) kmsg_capture_fd);
+}
+
#ifdef HAVE_GLIB
static void common_init_config(void)
{
@@ -814,6 +851,8 @@ out:
kmsg(KERN_INFO "[IGT] %s: executing\n", command_str);
print_version();
+ start_kmsg_recording();
+
sync();
oom_adjust_for_doom();
ftrace_dump_on_oops(true);
--
2.14.3
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [igt-dev] [RFC PATCH 4/5] igt/core: Initial simple interleaved kmsg filtering
@ 2018-01-18 13:59 ` Daniel Vetter
0 siblings, 0 replies; 18+ messages in thread
From: Daniel Vetter @ 2018-01-18 13:59 UTC (permalink / raw)
To: IGT development; +Cc: Intel Graphics Development
Needs to be beefed up so that dmesg warning (and worse) are re-emmitted
as IGT_LOG_WARN. But only if they match one of our filters (which we
should probably allow to be extended, e.g. depending upon which driver
has been openened). This also requires that we at least parse the
basic of kmsg lines (adjusting the timestamp to match our own would be
real cool).
v2:
- Seek to the end of the kmsg buffer before starting the capturing.
- Increase linebuffer to avoid dmesg drowning out all the tests
messages.
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
lib/igt_core.c | 41 ++++++++++++++++++++++++++++++++++++++++-
1 file changed, 40 insertions(+), 1 deletion(-)
diff --git a/lib/igt_core.c b/lib/igt_core.c
index aaafc1df6b46..65b394581e8f 100644
--- a/lib/igt_core.c
+++ b/lib/igt_core.c
@@ -293,7 +293,7 @@ static const char *command_str;
static char* igt_debug_log_domain_filter;
static struct {
- char *entries[256];
+ char *entries[2000];
uint8_t start, end;
} log_buffer;
static pthread_mutex_t log_buffer_mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -581,6 +581,43 @@ static void oom_adjust_for_doom(void)
}
+static void *kmsg_capture(void *arg)
+{
+ int kmsg_capture_fd = (uintptr_t) arg;
+ FILE *kmsg_file = fdopen(kmsg_capture_fd, "r");
+ char *line = NULL;
+ size_t line_len = 0;
+ ssize_t read;
+
+ while ((read = getline(&line, &line_len, kmsg_file))) {
+ /* FIXME: Set IGT_LOG_WARN for dmesg-warnings */
+ igt_log("dmesg", IGT_LOG_DEBUG, "%i, %s", line[0], line+1);
+ }
+
+ igt_warn("ran out of dmesg, this shouldn't happen\n");
+
+ return NULL;
+}
+
+static void start_kmsg_recording(void)
+{
+ static pthread_t kmsg_capture_thread;
+ int kmsg_capture_fd;
+
+ kmsg_capture_fd = open("/dev/kmsg",
+ O_RDONLY | O_CLOEXEC);
+
+ if (kmsg_capture_fd < 0) {
+ igt_info("no dmesg capturing\n");
+ return;
+ }
+
+ lseek(kmsg_capture_fd, 0, SEEK_END);
+
+ pthread_create(&kmsg_capture_thread, NULL,
+ kmsg_capture, (void *)(uintptr_t) kmsg_capture_fd);
+}
+
#ifdef HAVE_GLIB
static void common_init_config(void)
{
@@ -814,6 +851,8 @@ out:
kmsg(KERN_INFO "[IGT] %s: executing\n", command_str);
print_version();
+ start_kmsg_recording();
+
sync();
oom_adjust_for_doom();
ftrace_dump_on_oops(true);
--
2.14.3
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [RFC PATCH 5/5] lib/core: report subtests that hit an igt_warning as WARNING
2018-01-18 13:59 ` [igt-dev] " Daniel Vetter
@ 2018-01-18 13:59 ` Daniel Vetter
-1 siblings, 0 replies; 18+ messages in thread
From: Daniel Vetter @ 2018-01-18 13:59 UTC (permalink / raw)
To: IGT development; +Cc: Daniel Vetter, Intel Graphics Development
This is another piece of prep work to push the detection of dmesg
warnings into igt itself, so that we can correctly report dmesg
issue on a per-subtest basis even when running the entire binary.
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
lib/igt_core.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/lib/igt_core.c b/lib/igt_core.c
index 65b394581e8f..d61d32295bb2 100644
--- a/lib/igt_core.c
+++ b/lib/igt_core.c
@@ -1021,6 +1021,7 @@ void __igt_subtest_group_restore(int save)
static bool skipped_one = false;
static bool succeeded_one = false;
static bool failed_one = false;
+static bool warned = false;
static void exit_subtest(const char *) __attribute__((noreturn));
static void exit_subtest(const char *result)
@@ -1037,6 +1038,7 @@ static void exit_subtest(const char *result)
igt_terminate_spin_batches();
in_subtest = NULL;
+ warned = false;
siglongjmp(igt_subtest_jmpbuf, 1);
}
@@ -1126,7 +1128,7 @@ void igt_success(void)
{
succeeded_one = true;
if (in_subtest)
- exit_subtest("SUCCESS");
+ exit_subtest(warned ? "WARNING" : "SUCCESS");
}
/**
@@ -2120,6 +2122,9 @@ void igt_vlog(const char *domain, enum igt_log_level level, const char *format,
if (list_subtests && level <= IGT_LOG_WARN)
return;
+ if (level >= IGT_LOG_WARN)
+ warned = true;
+
if (vasprintf(&line, format, args) == -1)
return;
--
2.14.3
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [igt-dev] [RFC PATCH 5/5] lib/core: report subtests that hit an igt_warning as WARNING
@ 2018-01-18 13:59 ` Daniel Vetter
0 siblings, 0 replies; 18+ messages in thread
From: Daniel Vetter @ 2018-01-18 13:59 UTC (permalink / raw)
To: IGT development; +Cc: Intel Graphics Development
This is another piece of prep work to push the detection of dmesg
warnings into igt itself, so that we can correctly report dmesg
issue on a per-subtest basis even when running the entire binary.
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
lib/igt_core.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/lib/igt_core.c b/lib/igt_core.c
index 65b394581e8f..d61d32295bb2 100644
--- a/lib/igt_core.c
+++ b/lib/igt_core.c
@@ -1021,6 +1021,7 @@ void __igt_subtest_group_restore(int save)
static bool skipped_one = false;
static bool succeeded_one = false;
static bool failed_one = false;
+static bool warned = false;
static void exit_subtest(const char *) __attribute__((noreturn));
static void exit_subtest(const char *result)
@@ -1037,6 +1038,7 @@ static void exit_subtest(const char *result)
igt_terminate_spin_batches();
in_subtest = NULL;
+ warned = false;
siglongjmp(igt_subtest_jmpbuf, 1);
}
@@ -1126,7 +1128,7 @@ void igt_success(void)
{
succeeded_one = true;
if (in_subtest)
- exit_subtest("SUCCESS");
+ exit_subtest(warned ? "WARNING" : "SUCCESS");
}
/**
@@ -2120,6 +2122,9 @@ void igt_vlog(const char *domain, enum igt_log_level level, const char *format,
if (list_subtests && level <= IGT_LOG_WARN)
return;
+ if (level >= IGT_LOG_WARN)
+ warned = true;
+
if (vasprintf(&line, format, args) == -1)
return;
--
2.14.3
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [igt-dev] ✓ Fi.CI.BAT: success for series starting with [RFC,1/5] tests/sw_sync: use igt_fork_helper
2018-01-18 13:59 ` [igt-dev] " Daniel Vetter
` (4 preceding siblings ...)
(?)
@ 2018-01-18 14:21 ` Patchwork
-1 siblings, 0 replies; 18+ messages in thread
From: Patchwork @ 2018-01-18 14:21 UTC (permalink / raw)
To: Daniel Vetter; +Cc: igt-dev
== Series Details ==
Series: series starting with [RFC,1/5] tests/sw_sync: use igt_fork_helper
URL : https://patchwork.freedesktop.org/series/36693/
State : success
== Summary ==
IGT patchset tested on top of latest successful build
aff8aa16762b190fef51738f5a36e94d3ebda091 igt/pm_rps: Increase load for waitboosting
with latest DRM-Tip kernel build CI_DRM_3644
68669ade8e50 drm-tip: 2018y-01m-18d-12h-01m-38s UTC integration manifest
No testlist changes.
Test debugfs_test:
Subgroup read_all_entries:
dmesg-fail -> DMESG-WARN (fi-elk-e7500) fdo#103989
incomplete -> PASS (fi-snb-2520m) fdo#103713 +1
fdo#103989 https://bugs.freedesktop.org/show_bug.cgi?id=103989
fdo#103713 https://bugs.freedesktop.org/show_bug.cgi?id=103713
fi-bdw-5557u total:288 pass:267 dwarn:0 dfail:0 fail:0 skip:21 time:423s
fi-bdw-gvtdvm total:288 pass:264 dwarn:0 dfail:0 fail:0 skip:24 time:427s
fi-blb-e6850 total:288 pass:223 dwarn:1 dfail:0 fail:0 skip:64 time:373s
fi-bsw-n3050 total:288 pass:242 dwarn:0 dfail:0 fail:0 skip:46 time:491s
fi-bwr-2160 total:288 pass:183 dwarn:0 dfail:0 fail:0 skip:105 time:283s
fi-bxt-dsi total:288 pass:258 dwarn:0 dfail:0 fail:0 skip:30 time:485s
fi-bxt-j4205 total:288 pass:259 dwarn:0 dfail:0 fail:0 skip:29 time:486s
fi-byt-j1900 total:288 pass:253 dwarn:0 dfail:0 fail:0 skip:35 time:471s
fi-byt-n2820 total:288 pass:249 dwarn:0 dfail:0 fail:0 skip:39 time:470s
fi-elk-e7500 total:224 pass:168 dwarn:10 dfail:0 fail:0 skip:45
fi-gdg-551 total:288 pass:179 dwarn:0 dfail:0 fail:1 skip:108 time:276s
fi-glk-1 total:288 pass:260 dwarn:0 dfail:0 fail:0 skip:28 time:514s
fi-hsw-4770 total:288 pass:261 dwarn:0 dfail:0 fail:0 skip:27 time:394s
fi-hsw-4770r total:288 pass:261 dwarn:0 dfail:0 fail:0 skip:27 time:402s
fi-ilk-650 total:288 pass:228 dwarn:0 dfail:0 fail:0 skip:60 time:412s
fi-ivb-3520m total:288 pass:259 dwarn:0 dfail:0 fail:0 skip:29 time:460s
fi-ivb-3770 total:288 pass:255 dwarn:0 dfail:0 fail:0 skip:33 time:420s
fi-kbl-7500u total:288 pass:263 dwarn:1 dfail:0 fail:0 skip:24 time:457s
fi-kbl-7560u total:288 pass:269 dwarn:0 dfail:0 fail:0 skip:19 time:501s
fi-kbl-7567u total:288 pass:268 dwarn:0 dfail:0 fail:0 skip:20 time:455s
fi-kbl-r total:288 pass:261 dwarn:0 dfail:0 fail:0 skip:27 time:505s
fi-pnv-d510 total:288 pass:222 dwarn:1 dfail:0 fail:0 skip:65 time:579s
fi-skl-6260u total:288 pass:268 dwarn:0 dfail:0 fail:0 skip:20 time:434s
fi-skl-6600u total:288 pass:261 dwarn:0 dfail:0 fail:0 skip:27 time:510s
fi-skl-6700hq total:288 pass:262 dwarn:0 dfail:0 fail:0 skip:26 time:530s
fi-skl-6700k2 total:288 pass:264 dwarn:0 dfail:0 fail:0 skip:24 time:498s
fi-skl-6770hq total:288 pass:268 dwarn:0 dfail:0 fail:0 skip:20 time:492s
fi-skl-gvtdvm total:288 pass:265 dwarn:0 dfail:0 fail:0 skip:23 time:434s
fi-snb-2520m total:245 pass:211 dwarn:0 dfail:0 fail:0 skip:33
fi-snb-2600 total:288 pass:248 dwarn:0 dfail:0 fail:0 skip:40 time:399s
Blacklisted hosts:
fi-cfl-s2 total:288 pass:262 dwarn:0 dfail:0 fail:0 skip:26 time:572s
fi-glk-dsi total:288 pass:258 dwarn:0 dfail:0 fail:0 skip:30 time:478s
fi-skl-guc total:288 pass:260 dwarn:0 dfail:0 fail:0 skip:28 time:417s
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_792/issues.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply [flat|nested] 18+ messages in thread
* [RFC PATCH] igt/core: Initial simple interleaved kmsg filtering
2018-01-18 13:59 ` [igt-dev] " Daniel Vetter
@ 2018-01-18 14:27 ` Daniel Vetter
-1 siblings, 0 replies; 18+ messages in thread
From: Daniel Vetter @ 2018-01-18 14:27 UTC (permalink / raw)
To: IGT development; +Cc: Daniel Vetter, Intel Graphics Development
Needs to be beefed up so that dmesg warning (and worse) are re-emmitted
as IGT_LOG_WARN. But only if they match one of our filters (which we
should probably allow to be extended, e.g. depending upon which driver
has been openened). This also requires that we at least parse the
basic of kmsg lines (adjusting the timestamp to match our own would be
real cool).
v2:
- Seek to the end of the kmsg buffer before starting the capturing.
- Increase linebuffer to avoid dmesg drowning out all the tests
messages.
v3: Unlazy slightly and implement semi-correct kmsg parsing.
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
lib/igt_core.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 55 insertions(+), 1 deletion(-)
diff --git a/lib/igt_core.c b/lib/igt_core.c
index aaafc1df6b46..bcdc8abb41a7 100644
--- a/lib/igt_core.c
+++ b/lib/igt_core.c
@@ -293,7 +293,7 @@ static const char *command_str;
static char* igt_debug_log_domain_filter;
static struct {
- char *entries[256];
+ char *entries[2000];
uint8_t start, end;
} log_buffer;
static pthread_mutex_t log_buffer_mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -581,6 +581,58 @@ static void oom_adjust_for_doom(void)
}
+static void *kmsg_capture(void *arg)
+{
+ int kmsg_capture_fd = (uintptr_t) arg;
+ FILE *kmsg_file = fdopen(kmsg_capture_fd, "r");
+ char *line = NULL;
+ size_t line_len = 0;
+ ssize_t read;
+
+ while ((read = getline(&line, &line_len, kmsg_file))) {
+ unsigned flags;
+ unsigned long long seq, ts_usec;
+ char continuation;
+ enum igt_log_level level;
+
+ sscanf(line, "%u,%llu,%llu,%c;", &flags,
+ &seq, &ts_usec, &continuation);
+
+ if ((flags & 0x7) <= 4)
+ level = IGT_LOG_WARN;
+ else
+ level = IGT_LOG_DEBUG;
+
+ igt_log("dmesg", level, "[%llu.%06llu], %s",
+ ts_usec / 1000000,
+ ts_usec % 1000000,
+ index(line, ';') + 1);
+ }
+
+ igt_warn("ran out of dmesg, this shouldn't happen\n");
+
+ return NULL;
+}
+
+static void start_kmsg_recording(void)
+{
+ static pthread_t kmsg_capture_thread;
+ int kmsg_capture_fd;
+
+ kmsg_capture_fd = open("/dev/kmsg",
+ O_RDONLY | O_CLOEXEC);
+
+ if (kmsg_capture_fd < 0) {
+ igt_info("no dmesg capturing\n");
+ return;
+ }
+
+ lseek(kmsg_capture_fd, 0, SEEK_END);
+
+ pthread_create(&kmsg_capture_thread, NULL,
+ kmsg_capture, (void *)(uintptr_t) kmsg_capture_fd);
+}
+
#ifdef HAVE_GLIB
static void common_init_config(void)
{
@@ -814,6 +866,8 @@ out:
kmsg(KERN_INFO "[IGT] %s: executing\n", command_str);
print_version();
+ start_kmsg_recording();
+
sync();
oom_adjust_for_doom();
ftrace_dump_on_oops(true);
--
2.14.3
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [igt-dev] [RFC PATCH] igt/core: Initial simple interleaved kmsg filtering
@ 2018-01-18 14:27 ` Daniel Vetter
0 siblings, 0 replies; 18+ messages in thread
From: Daniel Vetter @ 2018-01-18 14:27 UTC (permalink / raw)
To: IGT development; +Cc: Intel Graphics Development
Needs to be beefed up so that dmesg warning (and worse) are re-emmitted
as IGT_LOG_WARN. But only if they match one of our filters (which we
should probably allow to be extended, e.g. depending upon which driver
has been openened). This also requires that we at least parse the
basic of kmsg lines (adjusting the timestamp to match our own would be
real cool).
v2:
- Seek to the end of the kmsg buffer before starting the capturing.
- Increase linebuffer to avoid dmesg drowning out all the tests
messages.
v3: Unlazy slightly and implement semi-correct kmsg parsing.
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
lib/igt_core.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 55 insertions(+), 1 deletion(-)
diff --git a/lib/igt_core.c b/lib/igt_core.c
index aaafc1df6b46..bcdc8abb41a7 100644
--- a/lib/igt_core.c
+++ b/lib/igt_core.c
@@ -293,7 +293,7 @@ static const char *command_str;
static char* igt_debug_log_domain_filter;
static struct {
- char *entries[256];
+ char *entries[2000];
uint8_t start, end;
} log_buffer;
static pthread_mutex_t log_buffer_mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -581,6 +581,58 @@ static void oom_adjust_for_doom(void)
}
+static void *kmsg_capture(void *arg)
+{
+ int kmsg_capture_fd = (uintptr_t) arg;
+ FILE *kmsg_file = fdopen(kmsg_capture_fd, "r");
+ char *line = NULL;
+ size_t line_len = 0;
+ ssize_t read;
+
+ while ((read = getline(&line, &line_len, kmsg_file))) {
+ unsigned flags;
+ unsigned long long seq, ts_usec;
+ char continuation;
+ enum igt_log_level level;
+
+ sscanf(line, "%u,%llu,%llu,%c;", &flags,
+ &seq, &ts_usec, &continuation);
+
+ if ((flags & 0x7) <= 4)
+ level = IGT_LOG_WARN;
+ else
+ level = IGT_LOG_DEBUG;
+
+ igt_log("dmesg", level, "[%llu.%06llu], %s",
+ ts_usec / 1000000,
+ ts_usec % 1000000,
+ index(line, ';') + 1);
+ }
+
+ igt_warn("ran out of dmesg, this shouldn't happen\n");
+
+ return NULL;
+}
+
+static void start_kmsg_recording(void)
+{
+ static pthread_t kmsg_capture_thread;
+ int kmsg_capture_fd;
+
+ kmsg_capture_fd = open("/dev/kmsg",
+ O_RDONLY | O_CLOEXEC);
+
+ if (kmsg_capture_fd < 0) {
+ igt_info("no dmesg capturing\n");
+ return;
+ }
+
+ lseek(kmsg_capture_fd, 0, SEEK_END);
+
+ pthread_create(&kmsg_capture_thread, NULL,
+ kmsg_capture, (void *)(uintptr_t) kmsg_capture_fd);
+}
+
#ifdef HAVE_GLIB
static void common_init_config(void)
{
@@ -814,6 +866,8 @@ out:
kmsg(KERN_INFO "[IGT] %s: executing\n", command_str);
print_version();
+ start_kmsg_recording();
+
sync();
oom_adjust_for_doom();
ftrace_dump_on_oops(true);
--
2.14.3
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [igt-dev] ✗ Fi.CI.BAT: failure for series starting with [RFC,1/5] tests/sw_sync: use igt_fork_helper (rev2)
2018-01-18 13:59 ` [igt-dev] " Daniel Vetter
` (5 preceding siblings ...)
(?)
@ 2018-01-18 15:05 ` Patchwork
-1 siblings, 0 replies; 18+ messages in thread
From: Patchwork @ 2018-01-18 15:05 UTC (permalink / raw)
To: Daniel Vetter; +Cc: igt-dev
== Series Details ==
Series: series starting with [RFC,1/5] tests/sw_sync: use igt_fork_helper (rev2)
URL : https://patchwork.freedesktop.org/series/36693/
State : failure
== Summary ==
IGT patchset tested on top of latest successful build
aff8aa16762b190fef51738f5a36e94d3ebda091 igt/pm_rps: Increase load for waitboosting
with latest DRM-Tip kernel build CI_DRM_3645
88e8ed1dc691 drm-tip: 2018y-01m-18d-14h-19m-46s UTC integration manifest
No testlist changes.
Test debugfs_test:
Subgroup read_all_entries:
pass -> FAIL (fi-elk-e7500) fdo#103989 +12
pass -> FAIL (fi-skl-6700k2)
pass -> FAIL (fi-glk-1)
Test drv_hangman:
Subgroup error-state-basic:
pass -> FAIL (fi-gdg-551)
pass -> FAIL (fi-blb-e6850)
pass -> FAIL (fi-pnv-d510)
pass -> FAIL (fi-bwr-2160)
pass -> CRASH (fi-elk-e7500)
pass -> FAIL (fi-ilk-650)
pass -> FAIL (fi-snb-2520m)
pass -> FAIL (fi-snb-2600)
pass -> CRASH (fi-ivb-3520m)
pass -> FAIL (fi-ivb-3770)
pass -> CRASH (fi-byt-j1900)
pass -> CRASH (fi-byt-n2820)
pass -> CRASH (fi-hsw-4770)
pass -> CRASH (fi-hsw-4770r)
Test gem_busy:
Subgroup basic-busy-default:
pass -> WARN (fi-blb-e6850)
pass -> WARN (fi-pnv-d510)
pass -> WARN (fi-elk-e7500)
pass -> WARN (fi-ilk-650)
pass -> WARN (fi-snb-2520m)
pass -> WARN (fi-snb-2600)
pass -> WARN (fi-ivb-3520m)
pass -> WARN (fi-ivb-3770)
pass -> WARN (fi-byt-j1900)
pass -> WARN (fi-byt-n2820)
pass -> WARN (fi-hsw-4770)
pass -> WARN (fi-hsw-4770r)
pass -> WARN (fi-bdw-5557u)
pass -> WARN (fi-bdw-gvtdvm)
pass -> WARN (fi-bsw-n3050)
pass -> WARN (fi-skl-6260u)
pass -> WARN (fi-skl-6600u)
pass -> WARN (fi-skl-6700hq)
pass -> WARN (fi-skl-6700k2)
pass -> WARN (fi-skl-6770hq)
pass -> WARN (fi-skl-gvtdvm)
pass -> WARN (fi-bxt-dsi)
pass -> WARN (fi-bxt-j4205)
pass -> WARN (fi-kbl-7500u)
pass -> WARN (fi-kbl-7560u)
pass -> WARN (fi-kbl-7567u)
pass -> WARN (fi-kbl-r)
pass -> WARN (fi-glk-1)
Subgroup basic-hang-default:
pass -> FAIL (fi-blb-e6850)
pass -> FAIL (fi-pnv-d510)
pass -> FAIL (fi-elk-e7500)
pass -> FAIL (fi-ilk-650)
pass -> FAIL (fi-snb-2520m)
pass -> FAIL (fi-snb-2600)
pass -> FAIL (fi-ivb-3520m)
pass -> FAIL (fi-ivb-3770)
pass -> CRASH (fi-byt-j1900)
pass -> FAIL (fi-byt-n2820)
pass -> CRASH (fi-hsw-4770)
pass -> FAIL (fi-hsw-4770r)
pass -> CRASH (fi-bdw-5557u)
pass -> CRASH (fi-bdw-gvtdvm)
pass -> CRASH (fi-bsw-n3050)
pass -> CRASH (fi-skl-6260u) fdo#104108 +15
pass -> FAIL (fi-skl-6700hq)
pass -> FAIL (fi-bxt-dsi)
pass -> FAIL (fi-bxt-j4205)
pass -> FAIL (fi-kbl-7500u)
pass -> CRASH (fi-kbl-7560u)
pass -> FAIL (fi-kbl-7567u)
pass -> FAIL (fi-kbl-r)
pass -> FAIL (fi-glk-1)
Test gem_close_race:
Subgroup basic-process:
pass -> WARN (fi-gdg-551)
pass -> WARN (fi-blb-e6850)
pass -> WARN (fi-pnv-d510)
pass -> WARN (fi-bwr-2160)
pass -> WARN (fi-elk-e7500)
pass -> WARN (fi-ilk-650)
pass -> WARN (fi-snb-2520m)
pass -> WARN (fi-snb-2600)
pass -> WARN (fi-ivb-3520m)
pass -> WARN (fi-ivb-3770)
pass -> WARN (fi-byt-j1900)
pass -> WARN (fi-byt-n2820)
pass -> WARN (fi-hsw-4770)
pass -> WARN (fi-hsw-4770r)
pass -> WARN (fi-bdw-5557u)
pass -> WARN (fi-bdw-gvtdvm)
pass -> WARN (fi-bsw-n3050)
pass -> WARN (fi-skl-6260u)
pass -> WARN (fi-skl-6600u)
pass -> WARN (fi-skl-6700hq)
pass -> WARN (fi-skl-6700k2)
pass -> WARN (fi-skl-6770hq)
pass -> WARN (fi-skl-gvtdvm)
pass -> WARN (fi-bxt-dsi)
pass -> WARN (fi-bxt-j4205)
pass -> WARN (fi-kbl-7500u)
pass -> WARN (fi-kbl-7560u)
pass -> WARN (fi-kbl-7567u)
pass -> WARN (fi-kbl-r)
pass -> WARN (fi-glk-1)
Subgroup basic-threads:
pass -> WARN (fi-gdg-551)
pass -> WARN (fi-blb-e6850)
pass -> WARN (fi-pnv-d510)
pass -> WARN (fi-bwr-2160)
pass -> WARN (fi-elk-e7500)
pass -> WARN (fi-ilk-650)
pass -> WARN (fi-snb-2520m)
pass -> WARN (fi-snb-2600)
pass -> WARN (fi-ivb-3520m)
pass -> WARN (fi-ivb-3770)
pass -> WARN (fi-byt-j1900)
pass -> WARN (fi-byt-n2820)
pass -> WARN (fi-hsw-4770)
pass -> WARN (fi-hsw-4770r)
pass -> WARN (fi-bdw-5557u)
pass -> WARN (fi-bdw-gvtdvm)
pass -> WARN (fi-bsw-n3050)
pass -> WARN (fi-skl-6260u)
pass -> WARN (fi-skl-6600u)
pass -> WARN (fi-skl-6700hq)
pass -> WARN (fi-skl-6700k2)
pass -> WARN (fi-skl-6770hq)
pass -> WARN (fi-skl-gvtdvm)
pass -> WARN (fi-bxt-dsi)
pass -> WARN (fi-bxt-j4205)
pass -> WARN (fi-kbl-7500u)
pass -> WARN (fi-kbl-7560u)
pass -> WARN (fi-kbl-7567u)
pass -> WARN (fi-kbl-r)
pass -> WARN (fi-glk-1)
Test gem_ctx_create:
Subgroup basic:
pass -> WARN (fi-snb-2520m)
pass -> WARN (fi-snb-2600)
pass -> WARN (fi-ivb-3520m)
pass -> WARN (fi-ivb-3770)
pass -> WARN (fi-byt-j1900)
pass -> WARN (fi-byt-n2820)
pass -> WARN (fi-hsw-4770)
pass -> WARN (fi-hsw-4770r)
pass -> WARN (fi-bdw-5557u)
pass -> WARN (fi-bdw-gvtdvm)
pass -> WARN (fi-bsw-n3050)
pass -> WARN (fi-skl-6260u)
pass -> WARN (fi-skl-6600u)
pass -> WARN (fi-skl-6700hq)
pass -> WARN (fi-skl-6700k2)
pass -> WARN (fi-skl-6770hq)
pass -> WARN (fi-skl-gvtdvm)
pass -> WARN (fi-bxt-dsi)
pass -> WARN (fi-bxt-j4205)
pass -> WARN (fi-kbl-7500u)
pass -> WARN (fi-kbl-7560u)
pass -> WARN (fi-kbl-7567u)
pass -> WARN (fi-kbl-r)
pass -> WARN (fi-glk-1)
Subgroup basic-files:
pass -> WARN (fi-snb-2520m)
pass -> WARN (fi-snb-2600)
pass -> WARN (fi-ivb-3520m)
pass -> WARN (fi-ivb-3770)
pass -> WARN (fi-byt-j1900)
pass -> WARN (fi-byt-n2820)
pass -> WARN (fi-hsw-4770)
pass -> WARN (fi-hsw-4770r)
pass -> WARN (fi-bdw-5557u)
pass -> WARN (fi-bdw-gvtdvm)
pass -> WARN (fi-bsw-n3050)
pass -> WARN (fi-skl-6260u)
pass -> WARN (fi-skl-6600u)
pass -> WARN (fi-skl-6700hq)
pass -> WARN (fi-skl-6700k2)
pass -> WARN (fi-skl-6770hq)
pass -> WARN (fi-skl-gvtdvm)
pass -> WARN (fi-bxt-dsi)
pass -> WARN (fi-bxt-j4205)
pass -> WARN (fi-kbl-7500u)
pass -> WARN (fi-kbl-7560u)
pass -> WARN (fi-kbl-7567u)
pass -> WARN (fi-kbl-r)
pass -> WARN (fi-glk-1)
Test gem_ctx_switch:
Subgroup basic-default:
pass -> WARN (fi-snb-2520m)
pass -> WARN (fi-snb-2600)
pass -> WARN (fi-ivb-3520m)
pass -> WARN (fi-ivb-3770)
pass -> WARN (fi-byt-j1900)
pass -> WARN (fi-byt-n2820)
pass -> WARN (fi-hsw-4770)
pass -> WARN (fi-hsw-4770r)
pass -> WARN (fi-bdw-5557u)
pass -> WARN (fi-bdw-gvtdvm)
pass -> WARN (fi-bsw-n3050)
pass -> WARN (fi-skl-6260u)
pass -> WARN (fi-skl-6600u)
pass -> WARN (fi-skl-6700hq)
pass -> WARN (fi-skl-6700k2)
pass -> WARN (fi-skl-6770hq)
pass -> WARN (fi-skl-gvtdvm)
pass -> WARN (fi-bxt-dsi)
pass -> WARN (fi-bxt-j4205)
pass -> WARN (fi-kbl-7500u)
pass -> WARN (fi-kbl-7560u)
pass -> WARN (fi-kbl-7567u)
pass -> WARN (fi-kbl-r)
pass -> WARN (fi-glk-1)
Subgroup basic-default-heavy:
pass -> WARN (fi-snb-2520m)
pass -> WARN (fi-snb-2600)
pass -> WARN (fi-ivb-3520m)
pass -> WARN (fi-ivb-3770)
pass -> WARN (fi-byt-j1900)
pass -> WARN (fi-byt-n2820)
pass -> WARN (fi-hsw-4770)
pass -> WARN (fi-hsw-4770r)
pass -> WARN (fi-bdw-5557u)
pass -> WARN (fi-bdw-gvtdvm)
pass -> WARN (fi-bsw-n3050)
pass -> WARN (fi-skl-6260u)
pass -> WARN (fi-skl-6600u)
pass -> WARN (fi-skl-6700hq)
pass -> WARN (fi-skl-6700k2)
pass -> WARN (fi-skl-6770hq)
pass -> WARN (fi-skl-gvtdvm)
pass -> WARN (fi-bxt-dsi)
pass -> WARN (fi-bxt-j4205)
pass -> WARN (fi-kbl-7500u)
pass -> WARN (fi-kbl-7560u)
pass -> WARN (fi-kbl-7567u)
pass -> WARN (fi-kbl-r)
pass -> WARN (fi-glk-1)
Test gem_exec_basic:
Subgroup basic-blt:
pass -> WARN (fi-snb-2520m)
pass -> WARN (fi-snb-2600)
pass -> WARN (fi-ivb-3520m)
pass -> WARN (fi-ivb-3770)
pass -> WARN (fi-byt-j1900)
pass -> WARN (fi-byt-n2820)
pass -> WARN (fi-hsw-4770)
pass -> WARN (fi-hsw-4770r)
pass -> WARN (fi-bdw-5557u)
pass -> WARN (fi-bdw-gvtdvm)
pass -> WARN (fi-bsw-n3050)
pass -> WARN (fi-skl-6260u)
pass -> WARN (fi-skl-6600u)
pass -> WARN (fi-skl-6700hq)
pass -> WARN (fi-skl-6700k2)
pass -> WARN (fi-skl-6770hq)
pass -> WARN (fi-skl-gvtdvm)
pass -> WARN (fi-bxt-dsi)
pass -> WARN (fi-bxt-j4205)
pass -> WARN (fi-kbl-7500u)
pass -> WARN (fi-kbl-7560u)
pass -> WARN (fi-kbl-7567u)
pass -> WARN (fi-kbl-r)
pass -> WARN (fi-glk-1)
Subgroup basic-bsd:
pass -> WARN (fi-elk-e7500)
pass -> WARN (fi-ilk-650)
pass -> WARN (fi-snb-2520m)
pass -> WARN (fi-snb-2600)
pass -> WARN (fi-ivb-3520m)
pass -> WARN (fi-ivb-3770)
pass -> WARN (fi-byt-j1900)
pass -> WARN (fi-byt-n2820)
pass -> WARN (fi-hsw-4770)
pass -> WARN (fi-hsw-4770r)
pass -> WARN (fi-bdw-5557u)
pass -> WARN (fi-bdw-gvtdvm)
pass -> WARN (fi-bsw-n3050)
pass -> WARN (fi-skl-6260u)
pass -> WARN (fi-skl-6600u)
pass -> WARN (fi-skl-6700hq)
pass -> WARN (fi-skl-6700k2)
pass -> WARN (fi-skl-6770hq)
pass -> WARN (fi-skl-gvtdvm)
pass -> WARN (fi-bxt-dsi)
pass -> WARN (fi-bxt-j4205)
pass -> WARN (fi-kbl-7500u)
pass -> WARN (fi-kbl-7560u)
pass -> WARN (fi-kbl-7567u)
pass -> WARN (fi-kbl-r)
pass -> WARN (fi-glk-1)
Subgroup basic-bsd1:
pass -> WARN (fi-bdw-5557u)
pass -> WARN (fi-bdw-gvtdvm)
pass -> WARN (fi-skl-6260u)
pass -> WARN (fi-skl-6770hq)
pass -> WARN (fi-skl-gvtdvm)
pass -> WARN (fi-kbl-7560u)
pass -> WARN (fi-kbl-7567u)
Subgroup basic-bsd2:
pass -> WARN (fi-bdw-5557u)
pass -> WARN (fi-bdw-gvtdvm)
pass -> WARN (fi-skl-6260u)
pass -> WARN (fi-skl-6770hq)
pass -> WARN (fi-skl-gvtdvm)
pass -> WARN (fi-kbl-7560u)
pass -> WARN (fi-kbl-7567u)
Subgroup basic-default:
pass -> WARN (fi-gdg-551)
pass -> WARN (fi-blb-e6850)
pass -> WARN (fi-pnv-d510)
pass -> WARN (fi-bwr-2160)
pass -> WARN (fi-elk-e7500)
pass -> WARN (fi-ilk-650)
pass -> WARN (fi-snb-2520m)
pass -> WARN (fi-snb-2600)
pass -> WARN (fi-ivb-3520m)
pass -> WARN (fi-ivb-3770)
pass -> WARN (fi-byt-j1900)
pass -> WARN (fi-byt-n2820)
pass -> WARN (fi-hsw-4770)
pass -> WARN (fi-hsw-4770r)
pass -> WARN (fi-bdw-5557u)
pass -> WARN (fi-bdw-gvtdvm)
pass -> WARN (fi-bsw-n3050)
pass -> WARN (fi-skl-6260u)
pass -> WARN (fi-skl-6600u)
pass -> WARN (fi-skl-6700hq)
pass -> WARN (fi-skl-6700k2)
pass -> WARN (fi-skl-6770hq)
pass -> WARN (fi-skl-gvtdvm)
pass -> WARN (fi-bxt-dsi)
pass -> WARN (fi-bxt-j4205)
pass -> WARN (fi-kbl-7500u)
pass -> WARN (fi-kbl-7560u)
pass -> WARN (fi-kbl-7567u)
pass -> WARN (fi-kbl-r)
pass -> WARN (fi-glk-1)
Subgroup basic-render:
pass -> WARN (fi-gdg-551)
pass -> WARN (fi-blb-e6850)
pass -> WARN (fi-pnv-d510)
pass -> WARN (fi-bwr-2160)
pass -> WARN (fi-elk-e7500)
pass -> WARN (fi-ilk-650)
pass -> WARN (fi-snb-2520m)
pass -> WARN (fi-snb-2600)
pass -> WARN (fi-ivb-3520m)
pass -> WARN (fi-ivb-3770)
pass -> WARN (fi-byt-j1900)
pass -> WARN (fi-byt-n2820)
pass -> WARN (fi-hsw-4770)
pass -> WARN (fi-hsw-4770r)
pass -> WARN (fi-bdw-5557u)
pass -> WARN (fi-bdw-gvtdvm)
pass -> WARN (fi-bsw-n3050)
pass -> WARN (fi-skl-6260u)
pass -> WARN (fi-skl-6600u)
pass -> WARN (fi-skl-6700hq)
pass -> WARN (fi-skl-6700k2)
pass -> WARN (fi-skl-6770hq)
pass -> WARN (fi-skl-gvtdvm)
pas
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_793/issues.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply [flat|nested] 18+ messages in thread
* [igt-dev] [RFC PATCH v3 4/5] igt/core: Initial simple interleaved kmsg filtering
2018-01-18 14:27 ` [igt-dev] " Daniel Vetter
(?)
@ 2018-02-20 11:30 ` Petri Latvala
2018-02-20 11:50 ` Daniel Vetter
-1 siblings, 1 reply; 18+ messages in thread
From: Petri Latvala @ 2018-02-20 11:30 UTC (permalink / raw)
To: igt-dev
From: Daniel Vetter <daniel.vetter@ffwll.ch>
Needs to be beefed up so that dmesg warning (and worse) are re-emmitted
as IGT_LOG_WARN. But only if they match one of our filters (which we
should probably allow to be extended, e.g. depending upon which driver
has been openened). This also requires that we at least parse the
basic of kmsg lines (adjusting the timestamp to match our own would be
real cool).
v2:
- Seek to the end of the kmsg buffer before starting the capturing.
- Increase linebuffer to avoid dmesg drowning out all the tests
messages.
v3: Unlazy slightly and implement semi-correct kmsg parsing.
v4 (Petri): Handle continuation lines instead of crashing on them
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Petri Latvala <petri.latvala@intel.com>
---
lib/igt_core.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 64 insertions(+), 1 deletion(-)
diff --git a/lib/igt_core.c b/lib/igt_core.c
index aaafc1df..27686276 100644
--- a/lib/igt_core.c
+++ b/lib/igt_core.c
@@ -293,7 +293,7 @@ static const char *command_str;
static char* igt_debug_log_domain_filter;
static struct {
- char *entries[256];
+ char *entries[2000];
uint8_t start, end;
} log_buffer;
static pthread_mutex_t log_buffer_mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -581,6 +581,67 @@ static void oom_adjust_for_doom(void)
}
+static void *kmsg_capture(void *arg)
+{
+ int kmsg_capture_fd = (uintptr_t) arg;
+ FILE *kmsg_file = fdopen(kmsg_capture_fd, "r");
+ char *line = NULL;
+ size_t line_len = 0;
+ ssize_t read;
+
+ while ((read = getline(&line, &line_len, kmsg_file))) {
+ int s;
+ unsigned flags;
+ unsigned long long seq, ts_usec;
+ char continuation;
+ enum igt_log_level level;
+
+ s = sscanf(line, "%u,%llu,%llu,%c;", &flags,
+ &seq, &ts_usec, &continuation);
+
+ if (s == 4) {
+ if ((flags & 0x7) <= 4)
+ level = IGT_LOG_WARN;
+ else
+ level = IGT_LOG_DEBUG;
+
+ igt_log("dmesg", level, "[%llu.%06llu], %s",
+ ts_usec / 1000000,
+ ts_usec % 1000000,
+ index(line, ';') + 1);
+ } else if (line[0] == ' ') {
+ /* continuation line; ignore */
+ } else {
+ igt_warn("Cannot parse kmsg line: %s\n", line);
+ }
+ }
+
+ igt_warn("ran out of dmesg, this shouldn't happen\n");
+
+ free(line);
+ fclose(kmsg_file);
+ return NULL;
+}
+
+static void start_kmsg_recording(void)
+{
+ static pthread_t kmsg_capture_thread;
+ int kmsg_capture_fd;
+
+ kmsg_capture_fd = open("/dev/kmsg",
+ O_RDONLY | O_CLOEXEC);
+
+ if (kmsg_capture_fd < 0) {
+ igt_info("no dmesg capturing\n");
+ return;
+ }
+
+ lseek(kmsg_capture_fd, 0, SEEK_END);
+
+ pthread_create(&kmsg_capture_thread, NULL,
+ kmsg_capture, (void *)(uintptr_t) kmsg_capture_fd);
+}
+
#ifdef HAVE_GLIB
static void common_init_config(void)
{
@@ -814,6 +875,8 @@ out:
kmsg(KERN_INFO "[IGT] %s: executing\n", command_str);
print_version();
+ start_kmsg_recording();
+
sync();
oom_adjust_for_doom();
ftrace_dump_on_oops(true);
--
2.11.0
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [igt-dev] [RFC PATCH v3 4/5] igt/core: Initial simple interleaved kmsg filtering
2018-02-20 11:30 ` [igt-dev] [RFC PATCH v3 4/5] " Petri Latvala
@ 2018-02-20 11:50 ` Daniel Vetter
2018-02-20 12:09 ` Daniel Vetter
0 siblings, 1 reply; 18+ messages in thread
From: Daniel Vetter @ 2018-02-20 11:50 UTC (permalink / raw)
To: Petri Latvala; +Cc: igt-dev
On Tue, Feb 20, 2018 at 01:30:41PM +0200, Petri Latvala wrote:
> From: Daniel Vetter <daniel.vetter@ffwll.ch>
>
> Needs to be beefed up so that dmesg warning (and worse) are re-emmitted
> as IGT_LOG_WARN. But only if they match one of our filters (which we
> should probably allow to be extended, e.g. depending upon which driver
> has been openened). This also requires that we at least parse the
> basic of kmsg lines (adjusting the timestamp to match our own would be
> real cool).
>
> v2:
> - Seek to the end of the kmsg buffer before starting the capturing.
> - Increase linebuffer to avoid dmesg drowning out all the tests
> messages.
>
> v3: Unlazy slightly and implement semi-correct kmsg parsing.
>
> v4 (Petri): Handle continuation lines instead of crashing on them
>
> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> Signed-off-by: Petri Latvala <petri.latvala@intel.com>
> ---
> lib/igt_core.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 64 insertions(+), 1 deletion(-)
>
> diff --git a/lib/igt_core.c b/lib/igt_core.c
> index aaafc1df..27686276 100644
> --- a/lib/igt_core.c
> +++ b/lib/igt_core.c
> @@ -293,7 +293,7 @@ static const char *command_str;
>
> static char* igt_debug_log_domain_filter;
> static struct {
> - char *entries[256];
> + char *entries[2000];
> uint8_t start, end;
> } log_buffer;
> static pthread_mutex_t log_buffer_mutex = PTHREAD_MUTEX_INITIALIZER;
> @@ -581,6 +581,67 @@ static void oom_adjust_for_doom(void)
>
> }
>
> +static void *kmsg_capture(void *arg)
> +{
> + int kmsg_capture_fd = (uintptr_t) arg;
> + FILE *kmsg_file = fdopen(kmsg_capture_fd, "r");
> + char *line = NULL;
> + size_t line_len = 0;
> + ssize_t read;
Please add
/* See Documentation/ABI/testing/dev-kmsg in the kernel sources */
for dummies like me who tried to reverse-engineer the uapi from the
chardev sources :-)
> +
> + while ((read = getline(&line, &line_len, kmsg_file))) {
> + int s;
> + unsigned flags;
> + unsigned long long seq, ts_usec;
> + char continuation;
> + enum igt_log_level level;
Reading docs we also need to handle -EPIPE:
if (read == -1)
if (errno = EPIPE)
continue; /* we can get -EPIPE on buffer overflow */
else
break;
With those 2 changes Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
on your version.
Thanks for testing this.
-Daniel
> +
> + s = sscanf(line, "%u,%llu,%llu,%c;", &flags,
> + &seq, &ts_usec, &continuation);
> +
> + if (s == 4) {
> + if ((flags & 0x7) <= 4)
> + level = IGT_LOG_WARN;
> + else
> + level = IGT_LOG_DEBUG;
> +
> + igt_log("dmesg", level, "[%llu.%06llu], %s",
> + ts_usec / 1000000,
> + ts_usec % 1000000,
> + index(line, ';') + 1);
> + } else if (line[0] == ' ') {
> + /* continuation line; ignore */
> + } else {
> + igt_warn("Cannot parse kmsg line: %s\n", line);
> + }
> + }
> +
> + igt_warn("ran out of dmesg, this shouldn't happen\n");
> +
> + free(line);
> + fclose(kmsg_file);
> + return NULL;
> +}
> +
> +static void start_kmsg_recording(void)
> +{
> + static pthread_t kmsg_capture_thread;
> + int kmsg_capture_fd;
> +
> + kmsg_capture_fd = open("/dev/kmsg",
> + O_RDONLY | O_CLOEXEC);
> +
> + if (kmsg_capture_fd < 0) {
> + igt_info("no dmesg capturing\n");
> + return;
> + }
> +
> + lseek(kmsg_capture_fd, 0, SEEK_END);
> +
> + pthread_create(&kmsg_capture_thread, NULL,
> + kmsg_capture, (void *)(uintptr_t) kmsg_capture_fd);
> +}
> +
> #ifdef HAVE_GLIB
> static void common_init_config(void)
> {
> @@ -814,6 +875,8 @@ out:
> kmsg(KERN_INFO "[IGT] %s: executing\n", command_str);
> print_version();
>
> + start_kmsg_recording();
> +
> sync();
> oom_adjust_for_doom();
> ftrace_dump_on_oops(true);
> --
> 2.11.0
>
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [igt-dev] [RFC PATCH v3 4/5] igt/core: Initial simple interleaved kmsg filtering
2018-02-20 11:50 ` Daniel Vetter
@ 2018-02-20 12:09 ` Daniel Vetter
0 siblings, 0 replies; 18+ messages in thread
From: Daniel Vetter @ 2018-02-20 12:09 UTC (permalink / raw)
To: Petri Latvala; +Cc: igt-dev
On Tue, Feb 20, 2018 at 12:50:45PM +0100, Daniel Vetter wrote:
> On Tue, Feb 20, 2018 at 01:30:41PM +0200, Petri Latvala wrote:
> > From: Daniel Vetter <daniel.vetter@ffwll.ch>
> >
> > Needs to be beefed up so that dmesg warning (and worse) are re-emmitted
> > as IGT_LOG_WARN. But only if they match one of our filters (which we
> > should probably allow to be extended, e.g. depending upon which driver
> > has been openened). This also requires that we at least parse the
> > basic of kmsg lines (adjusting the timestamp to match our own would be
> > real cool).
> >
> > v2:
> > - Seek to the end of the kmsg buffer before starting the capturing.
> > - Increase linebuffer to avoid dmesg drowning out all the tests
> > messages.
> >
> > v3: Unlazy slightly and implement semi-correct kmsg parsing.
> >
> > v4 (Petri): Handle continuation lines instead of crashing on them
> >
> > Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> > Signed-off-by: Petri Latvala <petri.latvala@intel.com>
> > ---
> > lib/igt_core.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
> > 1 file changed, 64 insertions(+), 1 deletion(-)
> >
> > diff --git a/lib/igt_core.c b/lib/igt_core.c
> > index aaafc1df..27686276 100644
> > --- a/lib/igt_core.c
> > +++ b/lib/igt_core.c
> > @@ -293,7 +293,7 @@ static const char *command_str;
> >
> > static char* igt_debug_log_domain_filter;
> > static struct {
> > - char *entries[256];
> > + char *entries[2000];
> > uint8_t start, end;
> > } log_buffer;
> > static pthread_mutex_t log_buffer_mutex = PTHREAD_MUTEX_INITIALIZER;
> > @@ -581,6 +581,67 @@ static void oom_adjust_for_doom(void)
> >
> > }
> >
> > +static void *kmsg_capture(void *arg)
> > +{
> > + int kmsg_capture_fd = (uintptr_t) arg;
> > + FILE *kmsg_file = fdopen(kmsg_capture_fd, "r");
> > + char *line = NULL;
> > + size_t line_len = 0;
> > + ssize_t read;
>
> Please add
>
> /* See Documentation/ABI/testing/dev-kmsg in the kernel sources */
>
> for dummies like me who tried to reverse-engineer the uapi from the
> chardev sources :-)
>
> > +
> > + while ((read = getline(&line, &line_len, kmsg_file))) {
> > + int s;
> > + unsigned flags;
> > + unsigned long long seq, ts_usec;
> > + char continuation;
> > + enum igt_log_level level;
>
> Reading docs we also need to handle -EPIPE:
> if (read == -1)
> if (errno = EPIPE)
> continue; /* we can get -EPIPE on buffer overflow */
> else
> break;
>
> With those 2 changes Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> on your version.
>
> Thanks for testing this.
> -Daniel
>
> > +
> > + s = sscanf(line, "%u,%llu,%llu,%c;", &flags,
> > + &seq, &ts_usec, &continuation);
> > +
> > + if (s == 4) {
> > + if ((flags & 0x7) <= 4)
> > + level = IGT_LOG_WARN;
> > + else
> > + level = IGT_LOG_DEBUG;
As a precaution against KERN_CONT lines we might want to clamp the log
level here:
if (c == '+')
level = IGT_LOG_DEBUG;
Assuming I'm reading the docs correctly. This should avoid continuation
lines being logged at the wrong (default = WARN) level.
-Daniel
> > +
> > + igt_log("dmesg", level, "[%llu.%06llu], %s",
> > + ts_usec / 1000000,
> > + ts_usec % 1000000,
> > + index(line, ';') + 1);
> > + } else if (line[0] == ' ') {
> > + /* continuation line; ignore */
> > + } else {
> > + igt_warn("Cannot parse kmsg line: %s\n", line);
> > + }
> > + }
> > +
> > + igt_warn("ran out of dmesg, this shouldn't happen\n");
> > +
> > + free(line);
> > + fclose(kmsg_file);
> > + return NULL;
> > +}
> > +
> > +static void start_kmsg_recording(void)
> > +{
> > + static pthread_t kmsg_capture_thread;
> > + int kmsg_capture_fd;
> > +
> > + kmsg_capture_fd = open("/dev/kmsg",
> > + O_RDONLY | O_CLOEXEC);
> > +
> > + if (kmsg_capture_fd < 0) {
> > + igt_info("no dmesg capturing\n");
> > + return;
> > + }
> > +
> > + lseek(kmsg_capture_fd, 0, SEEK_END);
> > +
> > + pthread_create(&kmsg_capture_thread, NULL,
> > + kmsg_capture, (void *)(uintptr_t) kmsg_capture_fd);
> > +}
> > +
> > #ifdef HAVE_GLIB
> > static void common_init_config(void)
> > {
> > @@ -814,6 +875,8 @@ out:
> > kmsg(KERN_INFO "[IGT] %s: executing\n", command_str);
> > print_version();
> >
> > + start_kmsg_recording();
> > +
> > sync();
> > oom_adjust_for_doom();
> > ftrace_dump_on_oops(true);
> > --
> > 2.11.0
> >
>
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> http://blog.ffwll.ch
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply [flat|nested] 18+ messages in thread
* [igt-dev] ✗ Fi.CI.BAT: warning for series starting with [RFC,1/5] tests/sw_sync: use igt_fork_helper (rev3)
2018-01-18 13:59 ` [igt-dev] " Daniel Vetter
` (6 preceding siblings ...)
(?)
@ 2018-02-20 15:22 ` Patchwork
-1 siblings, 0 replies; 18+ messages in thread
From: Patchwork @ 2018-02-20 15:22 UTC (permalink / raw)
To: Petri Latvala; +Cc: igt-dev
== Series Details ==
Series: series starting with [RFC,1/5] tests/sw_sync: use igt_fork_helper (rev3)
URL : https://patchwork.freedesktop.org/series/36693/
State : warning
== Summary ==
IGT patchset tested on top of latest successful build
8a57f685e1640422ee202433e6378bf5f741163c tests/kms_chv_cursor_fail: Use igt_display_reset() and igt_pipe_crc_drain()
with latest DRM-Tip kernel build CI_DRM_3807
337c900251d6 drm-tip: 2018y-02m-20d-14h-06m-44s UTC integration manifest
No testlist changes.
Test debugfs_test:
Subgroup read_all_entries:
pass -> WARN (fi-skl-6700k2)
pass -> WARN (fi-skl-guc)
Test gem_busy:
Subgroup basic-busy-default:
pass -> WARN (fi-blb-e6850)
pass -> WARN (fi-pnv-d510)
pass -> WARN (fi-elk-e7500)
pass -> WARN (fi-ilk-650)
pass -> WARN (fi-snb-2520m)
pass -> WARN (fi-snb-2600)
pass -> WARN (fi-ivb-3520m)
pass -> WARN (fi-ivb-3770)
pass -> WARN (fi-byt-j1900)
pass -> WARN (fi-byt-n2820)
pass -> WARN (fi-hsw-4770)
pass -> WARN (fi-bdw-5557u)
pass -> WARN (fi-bdw-gvtdvm)
pass -> WARN (fi-bsw-n3050)
pass -> WARN (fi-skl-6260u)
pass -> WARN (fi-skl-6600u)
pass -> WARN (fi-skl-6700hq)
pass -> WARN (fi-skl-6700k2)
pass -> WARN (fi-skl-6770hq)
pass -> WARN (fi-skl-guc)
pass -> WARN (fi-skl-gvtdvm)
pass -> WARN (fi-bxt-dsi)
pass -> WARN (fi-bxt-j4205)
pass -> WARN (fi-kbl-7500u)
pass -> WARN (fi-kbl-7560u)
pass -> WARN (fi-kbl-7567u)
pass -> WARN (fi-kbl-r)
pass -> WARN (fi-glk-1)
pass -> WARN (fi-cfl-s2)
Subgroup basic-hang-default:
pass -> WARN (fi-blb-e6850)
pass -> WARN (fi-pnv-d510)
pass -> WARN (fi-elk-e7500)
pass -> WARN (fi-ilk-650)
pass -> WARN (fi-snb-2520m)
pass -> WARN (fi-snb-2600)
pass -> WARN (fi-ivb-3520m)
pass -> WARN (fi-ivb-3770)
pass -> WARN (fi-byt-j1900)
pass -> WARN (fi-byt-n2820)
pass -> WARN (fi-hsw-4770)
pass -> WARN (fi-bdw-5557u)
pass -> WARN (fi-bdw-gvtdvm)
pass -> WARN (fi-bsw-n3050)
pass -> WARN (fi-skl-6260u) fdo#104108 +20
pass -> WARN (fi-skl-6700hq)
pass -> WARN (fi-skl-guc)
pass -> WARN (fi-bxt-dsi)
pass -> WARN (fi-bxt-j4205)
pass -> WARN (fi-kbl-7500u)
pass -> WARN (fi-kbl-7560u)
pass -> WARN (fi-kbl-7567u)
pass -> WARN (fi-kbl-r)
pass -> WARN (fi-glk-1)
pass -> WARN (fi-cfl-s2)
Test gem_close_race:
Subgroup basic-process:
pass -> WARN (fi-gdg-551)
pass -> WARN (fi-blb-e6850)
pass -> WARN (fi-pnv-d510)
pass -> WARN (fi-bwr-2160)
pass -> WARN (fi-elk-e7500)
pass -> WARN (fi-ilk-650)
pass -> WARN (fi-snb-2520m)
pass -> WARN (fi-snb-2600)
pass -> WARN (fi-ivb-3520m)
pass -> WARN (fi-ivb-3770)
pass -> WARN (fi-byt-j1900)
pass -> WARN (fi-byt-n2820)
pass -> WARN (fi-hsw-4770)
pass -> WARN (fi-bdw-5557u)
pass -> WARN (fi-bdw-gvtdvm)
pass -> WARN (fi-bsw-n3050)
pass -> WARN (fi-skl-6260u)
pass -> WARN (fi-skl-6600u)
pass -> WARN (fi-skl-6700hq)
pass -> WARN (fi-skl-6700k2)
pass -> WARN (fi-skl-6770hq)
pass -> WARN (fi-skl-guc)
pass -> WARN (fi-skl-gvtdvm)
pass -> WARN (fi-bxt-dsi)
pass -> WARN (fi-bxt-j4205)
pass -> WARN (fi-kbl-7500u)
pass -> WARN (fi-kbl-7560u)
pass -> WARN (fi-kbl-7567u)
pass -> WARN (fi-kbl-r)
pass -> WARN (fi-glk-1)
pass -> WARN (fi-cfl-s2)
Subgroup basic-threads:
pass -> WARN (fi-gdg-551)
pass -> WARN (fi-blb-e6850)
pass -> WARN (fi-pnv-d510)
pass -> WARN (fi-bwr-2160)
pass -> WARN (fi-elk-e7500)
pass -> WARN (fi-ilk-650)
pass -> WARN (fi-snb-2520m)
pass -> WARN (fi-snb-2600)
pass -> WARN (fi-ivb-3520m)
pass -> WARN (fi-ivb-3770)
pass -> WARN (fi-byt-j1900)
pass -> WARN (fi-byt-n2820)
pass -> WARN (fi-hsw-4770)
pass -> WARN (fi-bdw-5557u)
pass -> WARN (fi-bdw-gvtdvm)
pass -> WARN (fi-bsw-n3050)
pass -> WARN (fi-skl-6260u)
pass -> WARN (fi-skl-6600u)
pass -> WARN (fi-skl-6700hq)
pass -> WARN (fi-skl-6700k2)
pass -> WARN (fi-skl-6770hq)
pass -> WARN (fi-skl-guc)
pass -> WARN (fi-skl-gvtdvm)
pass -> WARN (fi-bxt-dsi)
pass -> WARN (fi-bxt-j4205)
pass -> WARN (fi-kbl-7500u)
pass -> WARN (fi-kbl-7560u)
pass -> WARN (fi-kbl-7567u)
pass -> WARN (fi-kbl-r)
pass -> WARN (fi-glk-1)
pass -> WARN (fi-cfl-s2)
Test gem_ctx_create:
Subgroup basic:
pass -> WARN (fi-snb-2520m)
pass -> WARN (fi-snb-2600)
pass -> WARN (fi-ivb-3520m)
pass -> WARN (fi-ivb-3770)
pass -> WARN (fi-byt-j1900)
pass -> WARN (fi-byt-n2820)
pass -> WARN (fi-hsw-4770)
pass -> WARN (fi-bdw-5557u)
pass -> WARN (fi-bdw-gvtdvm)
pass -> WARN (fi-bsw-n3050)
pass -> WARN (fi-skl-6260u)
pass -> WARN (fi-skl-6600u)
pass -> WARN (fi-skl-6700hq)
pass -> WARN (fi-skl-6700k2)
pass -> WARN (fi-skl-6770hq)
pass -> WARN (fi-skl-guc)
pass -> WARN (fi-skl-gvtdvm)
pass -> WARN (fi-bxt-dsi)
pass -> WARN (fi-bxt-j4205)
pass -> WARN (fi-kbl-7500u)
pass -> WARN (fi-kbl-7560u)
pass -> WARN (fi-kbl-7567u)
pass -> WARN (fi-kbl-r)
pass -> WARN (fi-glk-1)
pass -> WARN (fi-cfl-s2)
Subgroup basic-files:
pass -> WARN (fi-snb-2520m)
pass -> WARN (fi-snb-2600)
pass -> WARN (fi-ivb-3520m)
pass -> WARN (fi-ivb-3770)
pass -> WARN (fi-byt-j1900)
pass -> WARN (fi-byt-n2820)
pass -> WARN (fi-hsw-4770)
pass -> WARN (fi-bdw-5557u)
pass -> WARN (fi-bdw-gvtdvm)
pass -> WARN (fi-bsw-n3050)
pass -> WARN (fi-skl-6260u)
pass -> WARN (fi-skl-6600u)
pass -> WARN (fi-skl-6700hq)
pass -> WARN (fi-skl-6700k2)
pass -> WARN (fi-skl-6770hq)
pass -> WARN (fi-skl-guc)
pass -> WARN (fi-skl-gvtdvm)
pass -> WARN (fi-bxt-dsi)
pass -> WARN (fi-bxt-j4205)
pass -> WARN (fi-kbl-7500u)
pass -> WARN (fi-kbl-7560u)
pass -> WARN (fi-kbl-7567u)
pass -> WARN (fi-kbl-r)
pass -> WARN (fi-glk-1)
pass -> WARN (fi-cfl-s2)
Test gem_ctx_switch:
Subgroup basic-default:
pass -> WARN (fi-snb-2520m)
pass -> WARN (fi-snb-2600)
pass -> WARN (fi-ivb-3520m)
pass -> WARN (fi-ivb-3770)
pass -> WARN (fi-byt-j1900)
pass -> WARN (fi-byt-n2820)
pass -> WARN (fi-hsw-4770)
pass -> WARN (fi-bdw-5557u)
pass -> WARN (fi-bdw-gvtdvm)
pass -> WARN (fi-bsw-n3050)
pass -> WARN (fi-skl-6260u)
pass -> WARN (fi-skl-6600u)
pass -> WARN (fi-skl-6700hq)
pass -> WARN (fi-skl-6700k2)
pass -> WARN (fi-skl-6770hq)
pass -> WARN (fi-skl-guc)
pass -> WARN (fi-skl-gvtdvm)
pass -> WARN (fi-bxt-dsi)
pass -> WARN (fi-bxt-j4205)
pass -> WARN (fi-kbl-7500u)
pass -> WARN (fi-kbl-7560u)
pass -> WARN (fi-kbl-7567u)
pass -> WARN (fi-kbl-r)
pass -> WARN (fi-glk-1)
pass -> WARN (fi-cfl-s2)
Subgroup basic-default-heavy:
pass -> WARN (fi-snb-2520m)
pass -> WARN (fi-snb-2600)
pass -> WARN (fi-ivb-3520m)
pass -> WARN (fi-ivb-3770)
pass -> WARN (fi-byt-j1900)
pass -> WARN (fi-byt-n2820)
pass -> WARN (fi-hsw-4770)
pass -> WARN (fi-bdw-5557u)
pass -> WARN (fi-bdw-gvtdvm)
pass -> WARN (fi-bsw-n3050)
pass -> WARN (fi-skl-6260u)
pass -> WARN (fi-skl-6600u)
pass -> WARN (fi-skl-6700hq)
pass -> WARN (fi-skl-6700k2)
pass -> WARN (fi-skl-6770hq)
pass -> WARN (fi-skl-guc)
pass -> WARN (fi-skl-gvtdvm)
pass -> WARN (fi-bxt-dsi)
pass -> WARN (fi-bxt-j4205)
pass -> WARN (fi-kbl-7500u)
pass -> WARN (fi-kbl-7560u)
pass -> WARN (fi-kbl-7567u)
pass -> WARN (fi-kbl-r)
pass -> WARN (fi-glk-1)
pass -> WARN (fi-cfl-s2)
Test gem_exec_basic:
Subgroup basic-blt:
pass -> WARN (fi-snb-2520m)
pass -> WARN (fi-snb-2600)
pass -> WARN (fi-ivb-3520m)
pass -> WARN (fi-ivb-3770)
pass -> WARN (fi-byt-j1900)
pass -> WARN (fi-byt-n2820)
pass -> WARN (fi-hsw-4770)
pass -> WARN (fi-bdw-5557u)
pass -> WARN (fi-bdw-gvtdvm)
pass -> WARN (fi-bsw-n3050)
pass -> WARN (fi-skl-6260u)
pass -> WARN (fi-skl-6600u)
pass -> WARN (fi-skl-6700hq)
pass -> WARN (fi-skl-6700k2)
pass -> WARN (fi-skl-6770hq)
pass -> WARN (fi-skl-guc)
pass -> WARN (fi-skl-gvtdvm)
pass -> WARN (fi-bxt-dsi)
pass -> WARN (fi-bxt-j4205)
pass -> WARN (fi-kbl-7500u)
pass -> WARN (fi-kbl-7560u)
pass -> WARN (fi-kbl-7567u)
pass -> WARN (fi-kbl-r)
pass -> WARN (fi-glk-1)
pass -> WARN (fi-cfl-s2)
Subgroup basic-bsd:
pass -> WARN (fi-elk-e7500)
pass -> WARN (fi-ilk-650)
pass -> WARN (fi-snb-2520m)
pass -> WARN (fi-snb-2600)
pass -> WARN (fi-ivb-3520m)
pass -> WARN (fi-ivb-3770)
pass -> WARN (fi-byt-j1900)
pass -> WARN (fi-byt-n2820)
pass -> WARN (fi-hsw-4770)
pass -> WARN (fi-bdw-5557u)
pass -> WARN (fi-bdw-gvtdvm)
pass -> WARN (fi-bsw-n3050)
pass -> WARN (fi-skl-6260u)
pass -> WARN (fi-skl-6600u)
pass -> WARN (fi-skl-6700hq)
pass -> WARN (fi-skl-6700k2)
pass -> WARN (fi-skl-6770hq)
pass -> WARN (fi-skl-guc)
pass -> WARN (fi-skl-gvtdvm)
pass -> WARN (fi-bxt-dsi)
pass -> WARN (fi-bxt-j4205)
pass -> WARN (fi-kbl-7500u)
pass -> WARN (fi-kbl-7560u)
pass -> WARN (fi-kbl-7567u)
pass -> WARN (fi-kbl-r)
pass -> WARN (fi-glk-1)
pass -> WARN (fi-cfl-s2)
Subgroup basic-bsd1:
pass -> WARN (fi-bdw-5557u)
pass -> WARN (fi-bdw-gvtdvm)
pass -> WARN (fi-skl-6260u)
pass -> WARN (fi-skl-6770hq)
pass -> WARN (fi-skl-gvtdvm)
pass -> WARN (fi-kbl-7560u)
pass -> WARN (fi-kbl-7567u)
Subgroup basic-bsd2:
pass -> WARN (fi-bdw-5557u)
pass -> WARN (fi-bdw-gvtdvm)
pass -> WARN (fi-skl-6260u)
pass -> WARN (fi-skl-6770hq)
pass -> WARN (fi-skl-gvtdvm)
pass -> WARN (fi-kbl-7560u)
pass -> WARN (fi-kbl-7567u)
Subgroup basic-default:
pass -> WARN (fi-gdg-551)
pass -> WARN (fi-blb-e6850)
pass -> WARN (fi-pnv-d510)
pass -> WARN (fi-bwr-2160)
pass -> WARN (fi-elk-e7500)
pass -> WARN (fi-ilk-650)
pass -> WARN (fi-snb-2520m)
pass -> WARN (fi-snb-2600)
pass -> WARN (fi-ivb-3520m)
pass -> WARN (fi-ivb-3770)
pass -> WARN (fi-byt-j1900)
pass -> WARN (fi-byt-n2820)
pass -> WARN (fi-hsw-4770)
pass -> WARN (fi-bdw-5557u)
pass -> WARN (fi-bdw-gvtdvm)
pass -> WARN (fi-bsw-n3050)
pass -> WARN (fi-skl-6260u)
pass -> WARN (fi-skl-6600u)
pass -> WARN (fi-skl-6700hq)
pass -> WARN (fi-skl-6700k2)
pass -> WARN (fi-skl-6770hq)
pass -> WARN (fi-skl-guc)
pass -> WARN (fi-skl-gvtdvm)
pass -> WARN (fi-bxt-dsi)
pass -> WARN (fi-bxt-j4205)
pass -> WARN (fi-kbl-7500u)
pass -> WARN (fi-kbl-7560u)
pass -> WARN (fi-kbl-7567u)
pass -> WARN (fi-kbl-r)
pass -> WARN (fi-glk-1)
pass -> WARN (fi-cfl-s2)
Subgroup basic-render:
pass -> WARN (fi-gdg-551)
pass -> WARN (fi-blb-e6850)
pass -> WARN (fi-pnv-d510)
pass -> WARN (fi-bwr-2160)
pass -> WARN (fi-elk-e7500)
pass -> WARN (fi-ilk-650)
pass -> WARN (fi-snb-2520m)
pass -> WARN (fi-snb-2600)
pass -> WARN (fi-ivb-3520m)
pass -> WARN (fi-ivb-3770)
pass -> WARN (fi-byt-j1900)
pass -> WARN (fi-byt-n2820)
pass -> WARN (fi-hsw-4770)
pass -> WARN (fi-bdw-5557u)
pass -> WARN (fi-bdw-gvtdvm)
pass -> WARN (fi-bsw-n3050)
pass -> WARN (fi-skl-6260u)
pass -> WARN (fi-skl-6600u)
pass -> WARN (fi-skl-6700hq)
pass -> WARN (fi-skl-6700k2)
pass -> WARN (fi-skl-6770hq)
pass -> WARN (fi-skl-guc)
pass -> WARN (fi-skl-gvtdvm)
pass -> WARN (fi-bxt-dsi)
pass -> WARN (fi-bxt-j4205)
pass -> WARN (fi-kbl-7500u)
pass -> WARN (fi-kbl-7560u)
pass -> WARN (fi-kbl-7567u)
pass -> WARN (fi-kb
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_961/issues.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2018-02-20 15:22 UTC | newest]
Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-01-18 13:59 [RFC PATCH 1/5] tests/sw_sync: use igt_fork_helper Daniel Vetter
2018-01-18 13:59 ` [igt-dev] " Daniel Vetter
2018-01-18 13:59 ` [RFC PATCH 2/5] lib/core: make logging pthread vs. fork safe Daniel Vetter
2018-01-18 13:59 ` [igt-dev] " Daniel Vetter
2018-01-18 13:59 ` [RFC PATCH 3/5] lib/core: Don't hide non-debug message when filtering for a debug log domain Daniel Vetter
2018-01-18 13:59 ` [igt-dev] " Daniel Vetter
2018-01-18 13:59 ` [RFC PATCH 4/5] igt/core: Initial simple interleaved kmsg filtering Daniel Vetter
2018-01-18 13:59 ` [igt-dev] " Daniel Vetter
2018-01-18 14:27 ` [RFC PATCH] " Daniel Vetter
2018-01-18 14:27 ` [igt-dev] " Daniel Vetter
2018-02-20 11:30 ` [igt-dev] [RFC PATCH v3 4/5] " Petri Latvala
2018-02-20 11:50 ` Daniel Vetter
2018-02-20 12:09 ` Daniel Vetter
2018-01-18 13:59 ` [RFC PATCH 5/5] lib/core: report subtests that hit an igt_warning as WARNING Daniel Vetter
2018-01-18 13:59 ` [igt-dev] " Daniel Vetter
2018-01-18 14:21 ` [igt-dev] ✓ Fi.CI.BAT: success for series starting with [RFC,1/5] tests/sw_sync: use igt_fork_helper Patchwork
2018-01-18 15:05 ` [igt-dev] ✗ Fi.CI.BAT: failure for series starting with [RFC,1/5] tests/sw_sync: use igt_fork_helper (rev2) Patchwork
2018-02-20 15:22 ` [igt-dev] ✗ Fi.CI.BAT: warning for series starting with [RFC,1/5] tests/sw_sync: use igt_fork_helper (rev3) Patchwork
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.