* [igt-dev] [PATCH i-g-t] Remove sysfs_clients
@ 2023-01-19 16:40 Lucas De Marchi
2023-01-19 17:11 ` [igt-dev] [Intel-gfx] " Tvrtko Ursulin
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Lucas De Marchi @ 2023-01-19 16:40 UTC (permalink / raw)
To: intel-gfx, igt-dev; +Cc: Lucas De Marchi, tvrtko.ursulin
For some months there was this series merged in drm-tip:
https://patchwork.freedesktop.org/series/86222/ which allowed to track
the client usage stats through sysfs. That support has been removed and
the sysfs_clients test has since been skipping on all platforms as noticed
in https://intel-gfx-ci.01.org/tree/drm-tip/shards-all.html?testfilter=sysfs_clients:
Test requirement not met in function __igt_unique____real_main1023, file ../../../usr/src/igt-gpu-tools/tests/i915/sysfs_clients.c:1038:
Test requirement: clients != -1
Last errno: 2, No such file or directory
Subtest busy: SKIP (0.000s)
The functionality has been replaced by drm-usage-stats (https://docs.kernel.org/gpu/drm-usage-stats.html)
with the i915-specific bits documented at https://docs.kernel.org/gpu/i915.html#i915-usage-stats.
Remove sysfs_clients test as it's not going to be used anymore.
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
tests/i915/sysfs_clients.c | 1063 ------------------------------------
tests/meson.build | 1 -
2 files changed, 1064 deletions(-)
delete mode 100644 tests/i915/sysfs_clients.c
diff --git a/tests/i915/sysfs_clients.c b/tests/i915/sysfs_clients.c
deleted file mode 100644
index b49e6a55..00000000
--- a/tests/i915/sysfs_clients.c
+++ /dev/null
@@ -1,1063 +0,0 @@
-/* SPDX-License-Identifier: MIT */
-/*
- * Copyright © 2021 Intel Corporation
- */
-
-#include <ctype.h>
-#include <dirent.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <inttypes.h>
-#include <limits.h>
-#include <math.h>
-#include <sched.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-#include "drmtest.h"
-#include "i915/gem.h"
-#include "i915/gem_create.h"
-#include "i915/gem_engine_topology.h"
-#include "i915/gem_mman.h"
-#include "igt_aux.h"
-#include "igt_dummyload.h"
-#include "igt_sysfs.h"
-#include "intel_ctx.h"
-#include "ioctl_wrappers.h"
-
-#define __require_within_epsilon(x, ref, tol_up, tol_down) \
- igt_require_f((double)(x) <= (1.0 + (tol_up)) * (double)(ref) && \
- (double)(x) >= (1.0 - (tol_down)) * (double)(ref), \
- "'%s' != '%s' (%.3f not within +%.1f%%/-%.1f%% tolerance of %.3f)\n",\
-#x, #ref, (double)(x), \
- (tol_up) * 100.0, (tol_down) * 100.0, \
- (double)(ref))
-
-#define require_within_epsilon(x, ref, tolerance) \
- __require_within_epsilon(x, ref, tolerance / 100., tolerance / 100.)
-
-#define __assert_within_epsilon(x, ref, tol_up, tol_down) \
- igt_assert_f((double)(x) <= (1.0 + (tol_up)) * (double)(ref) && \
- (double)(x) >= (1.0 - (tol_down)) * (double)(ref), \
- "'%s' != '%s' (%.3f not within +%.1f%%/-%.1f%% tolerance of %.3f)\n",\
- #x, #ref, (double)(x), \
- (tol_up) * 100.0, (tol_down) * 100.0, \
- (double)(ref))
-
-#define assert_within_epsilon(x, ref, tolerance) \
- __assert_within_epsilon(x, ref, tolerance / 100., tolerance / 100.)
-
-#define BUFSZ 280
-
-#define MI_BATCH_BUFFER_START (0x31 << 23)
-#define MI_BATCH_BUFFER_END (0xa << 23)
-#define MI_ARB_CHECK (0x5 << 23)
-
-#define MI_SEMAPHORE_WAIT (0x1c << 23)
-#define MI_SEMAPHORE_POLL (1 << 15)
-#define MI_SEMAPHORE_SAD_GT_SDD (0 << 12)
-#define MI_SEMAPHORE_SAD_GTE_SDD (1 << 12)
-#define MI_SEMAPHORE_SAD_LT_SDD (2 << 12)
-#define MI_SEMAPHORE_SAD_LTE_SDD (3 << 12)
-#define MI_SEMAPHORE_SAD_EQ_SDD (4 << 12)
-#define MI_SEMAPHORE_SAD_NEQ_SDD (5 << 12)
-
-static void strterm(char *s, int len)
-{
- if (len < 0) {
- *s = '\0';
- } else {
- s[len] = '\0';
- if (s[len - 1] == '\n')
- s[len - 1] = '\0';
- }
-}
-
-static void pidname(int i915, int clients)
-{
- struct dirent *de;
- int sv[2], rv[2];
- char buf[BUFSZ];
- int me = -1;
- long count;
- pid_t pid;
- DIR *dir;
-
- dir = fdopendir(dup(clients));
- igt_assert(dir);
- rewinddir(dir);
-
- count = 0;
- while ((de = readdir(dir))) {
- if (!isdigit(de->d_name[0]))
- continue;
-
- snprintf(buf, sizeof(buf), "%s/name", de->d_name);
- strterm(buf, igt_sysfs_read(clients, buf, buf, sizeof(buf) - 1));
- igt_debug("%s: %s\n", de->d_name, buf);
-
- /* Ignore closed clients created by drm_driver_open() */
- if (*buf == '\0' || *buf == '<')
- continue;
-
- close(me);
- me = openat(clients, de->d_name, O_DIRECTORY | O_RDONLY);
- count++;
- }
- closedir(dir);
-
- /* We expect there to be only the single client (us) running */
- igt_assert_eq(count, 1);
- igt_assert(me >= 0);
-
- strterm(buf, igt_sysfs_read(me, "name", buf, sizeof(buf) - 1));
-
- igt_info("My name: %s\n", buf);
- igt_assert(strcmp(buf, igt_test_name()) == 0);
-
- if (!gem_has_contexts(i915))
- return;
-
- igt_assert(pipe(sv) == 0);
- igt_assert(pipe(rv) == 0);
-
- /* If give our fd to someone else, they take over ownership of client */
- igt_fork(child, 1) {
- read(sv[0], &pid, sizeof(pid));
-
- /*
- * This transfer is based upon the assumption that the
- * transfer is complete ala DRI3, where the parent will
- * close the fd after sending it to the client. That is
- * it is expected that the client be only active in a single
- * process at any time.
- */
- gem_context_destroy(i915, gem_context_create(i915));
-
- pid = getpid();
- write(rv[1], &pid, sizeof(pid));
- }
- close(sv[0]);
- close(rv[1]);
-
- /* Child exists, but not yet running, we still own the client */
- strterm(buf, igt_sysfs_read(me, "pid", buf, sizeof(buf) - 1));
-
- pid = getpid();
- igt_info("My pid: %s\n", buf);
- igt_assert_eq(atoi(buf), pid);
-
- /* Release and wait for the child */
- igt_assert_eq(write(sv[1], &pid, sizeof(pid)), sizeof(pid));
- igt_assert_eq(read(rv[0], &pid, sizeof(pid)), sizeof(pid));
-
- /* Now child owns the client and pid should be updated to match */
- strterm(buf, igt_sysfs_read(me, "pid", buf, sizeof(buf) - 1));
-
- igt_info("New pid: %s\n", buf);
- igt_assert_eq(atoi(buf), pid);
- igt_waitchildren();
-
- /* Child has definitely gone, but the client should remain */
- strterm(buf, igt_sysfs_read(me, "pid", buf, sizeof(buf) - 1));
-
- igt_info("Old pid: %s\n", buf);
- igt_assert_eq(atoi(buf), pid);
-
- /* And if we create a new context, ownership transfers back to us */
- gem_context_destroy(i915, gem_context_create(i915));
- strterm(buf, igt_sysfs_read(me, "pid", buf, sizeof(buf) - 1));
-
- igt_info("Our pid: %s\n", buf);
- igt_assert_eq(atoi(buf), getpid());
-
- /* Let battle commence. */
-
- close(sv[1]);
- close(rv[0]);
- close(me);
-}
-
-static long count_clients(int clients)
-{
- struct dirent *de;
- long count = 0;
- char buf[BUFSZ];
- DIR *dir;
-
- dir = fdopendir(dup(clients));
- igt_assert(dir);
- rewinddir(dir);
-
- while ((de = readdir(dir))) {
- int len;
-
- if (!isdigit(de->d_name[0]))
- continue;
-
- snprintf(buf, sizeof(buf), "%s/name", de->d_name);
- len = igt_sysfs_read(clients, buf, buf, sizeof(buf));
- if (len < 0)
- continue;
-
- count += *buf != '<';
- }
- closedir(dir);
-
- return count;
-}
-
-static void create(int i915, int clients)
-{
- int fd[16];
-
- /* Each new open("/dev/dri/cardN") is a new client */
- igt_assert_eq(count_clients(clients), 1);
- for (int i = 0; i < ARRAY_SIZE(fd); i++) {
- fd[i] = gem_reopen_driver(i915);
- igt_assert_eq(count_clients(clients), i + 2);
- }
-
- for (int i = 0; i < ARRAY_SIZE(fd); i++)
- close(fd[i]);
-
- /* Cleanup delayed behind rcu */
- igt_until_timeout(30) {
- sched_yield();
- if (count_clients(clients) == 1)
- break;
- usleep(10000);
- }
- igt_assert_eq(count_clients(clients), 1);
-}
-
-static const char *find_client(int clients, pid_t pid, char *buf)
-{
- DIR *dir = fdopendir(dup(clients));
-
- /* Reading a dir as it changes does not appear to be stable, SEP */
- for (int pass = 0; pass < 5; pass++) {
- struct dirent *de;
-
- rewinddir(dir);
- fsync(dirfd(dir));
- while ((de = readdir(dir))) {
- if (!isdigit(de->d_name[0]))
- continue;
-
- snprintf(buf, BUFSZ, "%s/pid", de->d_name);
- igt_sysfs_read(clients, buf, buf, sizeof(buf));
- if (atoi(buf) != pid)
- continue;
-
- strncpy(buf, de->d_name, BUFSZ);
- goto out;
- }
- usleep(100);
- }
- *buf = '\0';
-out:
- closedir(dir);
- return buf;
-}
-
-static int find_me(int clients, pid_t pid)
-{
- char buf[BUFSZ];
-
- return openat(clients,
- find_client(clients, pid, buf),
- O_DIRECTORY | O_RDONLY);
-}
-
-static int reopen_directory(int fd)
-{
- char buf[BUFSZ];
- int dir;
-
- snprintf(buf, sizeof(buf), "/proc/self/fd/%d", fd);
- dir = open(buf, O_DIRECTORY | O_RDONLY);
- igt_assert_fd(dir);
-
- return dir;
-}
-
-static unsigned long my_id(int clients, pid_t pid)
-{
- char buf[BUFSZ];
-
- return strtoul(find_client(clients, pid, buf), NULL, 0);
-}
-
-static unsigned long recycle_client(int i915, int clients)
-{
- unsigned long client;
- int device;
-
- device = gem_reopen_driver(i915);
- client = my_id(clients, getpid());
- close(device);
-
- igt_assert(client != 0);
- return client;
-}
-
-static void recycle(int i915, int clients, int nchildren)
-{
- /*
- * As we open and close clients, we do not expect to reuse old ids,
- * i.e. we use a cyclic ida. This reduces the likelihood of userspace
- * watchers becoming confused and mistaking the new client as a
- * continuation of the old.
- */
- igt_assert(my_id(clients, getpid()));
-
- igt_fork(child, nchildren) {
- unsigned long client, last;
-
- /* Reopen the directory fd for each client */
- clients = reopen_directory(clients);
-
- last = recycle_client(i915, clients);
- igt_info("Child[%d] first client:%lu\n", getpid(), last);
- igt_until_timeout(5) {
- client = recycle_client(i915, clients);
- igt_assert((long)(client - last) > 0);
- last = client;
- }
- igt_info("Child[%d] last client:%lu\n", getpid(), last);
- }
- igt_waitchildren();
-
- /* Cleanup delayed behind rcu */
- igt_until_timeout(30) {
- sched_yield();
- if (count_clients(clients) == 1)
- break;
- usleep(10000);
- }
- igt_assert_eq(count_clients(clients), 1);
-}
-
-static int64_t read_runtime(int client, int class)
-{
- char buf[80];
-
- snprintf(buf, sizeof(buf), "busy/%d", class);
- return igt_sysfs_get_u64(client, buf);
-}
-
-#define MAX_CLASS 64
-static int read_runtimes(int client, int64_t *runtime)
-{
- int fd = openat(client, "busy", O_DIRECTORY | O_RDONLY);
- DIR *dir = fdopendir(fd);
- struct dirent *de;
- int count = 0;
-
- memset(runtime, 0, sizeof(*runtime) * MAX_CLASS);
- if (!dir)
- return -1;
-
- while ((de = readdir(dir))) {
- int class;
-
- if (!isdigit(de->d_name[0]))
- continue;
-
- class = atoi(de->d_name);
- igt_assert(class < MAX_CLASS);
- runtime[class] = igt_sysfs_get_u64(fd, de->d_name);
-
- count += runtime[class] != 0;
- }
- closedir(dir);
-
- return count;
-}
-
-static uint64_t measured_usleep(unsigned int usec)
-{
- struct timespec tv;
- unsigned int slept;
-
- slept = igt_nsec_elapsed(memset(&tv, 0, sizeof(tv)));
- igt_assert(slept == 0);
- do {
- usleep(usec - slept);
- slept = igt_nsec_elapsed(&tv) / 1000;
- } while (slept < usec);
-
- return igt_nsec_elapsed(&tv);
-}
-
-static void
-busy_one(int i915, int clients, const intel_ctx_cfg_t *cfg,
- const struct intel_execution_engine2 *e)
-{
- int64_t active, idle, old, other[MAX_CLASS];
- struct timespec tv;
- const intel_ctx_t *ctx;
- igt_spin_t *spin;
- uint64_t delay;
- int me;
-
- /* Create a fresh client with 0 runtime */
- i915 = gem_reopen_driver(i915);
-
- me = find_me(clients, getpid());
- igt_assert(me != -1);
-
- ctx = intel_ctx_create(i915, cfg);
- spin = igt_spin_new(i915,
- .ctx = ctx,
- .engine = e->flags,
- .flags = IGT_SPIN_POLL_RUN);
- igt_spin_busywait_until_started(spin);
- usleep(10); /* kick the tasklets */
-
- /* Compensate for discrepancies in execution latencies */
- idle = old = read_runtime(me, e->class);
- igt_nsec_elapsed(memset(&tv, 0, sizeof(tv)));
- for (int pass = 0; pass <= 10; pass++) {
- usleep(1500 >> pass);
-
- /* Check that we accumulate the runtime, while active */
- delay = igt_nsec_elapsed(&tv);
- active = read_runtime(me, e->class);
- delay += igt_nsec_elapsed(&tv);
- delay /= 2; /* use the centre point of the read_runtime() */
- delay += idle; /* tare */
-
- igt_info("active1[%d]: %'"PRIu64"ns (%'"PRIu64"ns)\n",
- pass, active, delay);
- igt_assert(active > old); /* monotonic */
- assert_within_epsilon(active, delay, 20);
-
- old = active;
- }
-
- gem_quiescent_gpu(i915);
-
- /* And again now idle */
- idle = read_runtime(me, e->class);
- igt_info("idle: %'"PRIu64"ns\n", idle);
- igt_assert(idle >= active);
-
- /* Check monotocity of idling */
- for (int pass = 0; pass < 5; pass++) {
- old = idle;
-
- igt_spin_reset(spin);
- gem_execbuf(i915, &spin->execbuf);
- igt_spin_busywait_until_started(spin);
- usleep(1); /* let the system process the tasklets */
- active = read_runtime(me, e->class);
- igt_info("idle->active[%d]: %'"PRIu64"ns\n", pass, active);
- igt_assert(active >= old);
- gem_quiescent_gpu(i915);
-
- idle = read_runtime(me, e->class);
- igt_info("active->idle[%d]: %'"PRIu64"ns\n", pass, idle);
- igt_assert(idle >= active);
- }
-
- intel_ctx_destroy(i915, ctx);
-
- /* And finally after the executing context is no more */
- old = read_runtime(me, e->class);
- igt_info("old: %'"PRIu64"ns\n", old);
- igt_assert_eq_u64(old, idle);
-
- /* Once more on the default context for good luck */
- igt_spin_reset(spin);
- spin->execbuf.rsvd1 = 0;
- gem_execbuf(i915, &spin->execbuf);
- igt_spin_busywait_until_started(spin);
- usleep(10); /* kick the tasklets */
-
- idle = old = read_runtime(me, e->class);
- igt_nsec_elapsed(memset(&tv, 0, sizeof(tv)));
- for (int pass = 0; pass <= 10; pass++) {
- usleep(1000 >> pass);
-
- /* Check that we accumulate the runtime, while active */
- delay = igt_nsec_elapsed(&tv);
- active = read_runtime(me, e->class);
- delay += igt_nsec_elapsed(&tv);
- delay /= 2; /* use the centre point of the read_runtime() */
- delay += idle; /* tare */
-
- igt_info("active0[%d]: %'"PRIu64"ns (%'"PRIu64"ns)\n",
- pass, active, delay);
- igt_assert(active > old);
- assert_within_epsilon(active, delay, 20);
-
- old = active;
- }
-
- gem_quiescent_gpu(i915);
- igt_assert_eq(read_runtimes(me, other), 1);
-
- igt_spin_free(i915, spin);
- close(i915);
-}
-
-static void busy_all(int i915, int clients, const intel_ctx_cfg_t *cfg)
-{
- const struct intel_execution_engine2 *e;
- int64_t active[MAX_CLASS];
- int64_t idle[MAX_CLASS];
- int64_t old[MAX_CLASS];
- uint64_t classes = 0;
- const intel_ctx_t *ctx;
- igt_spin_t *spin;
- int expect = 0;
- int64_t delay;
- int me;
-
- /* Create a fresh client with 0 runtime */
- i915 = gem_reopen_driver(i915);
-
- me = find_me(clients, getpid());
- igt_assert(me != -1);
-
- ctx = intel_ctx_create(i915, cfg);
- spin = igt_spin_new(i915, .ctx = ctx,
- .flags = IGT_SPIN_POLL_RUN);
- for_each_ctx_engine(i915, ctx, e) {
- if (!gem_class_can_store_dword(i915, e->class))
- continue;
-
- spin->execbuf.flags &= ~63;
- spin->execbuf.flags |= e->flags;
- gem_execbuf(i915, &spin->execbuf);
-
- if (!(classes & (1ull << e->class)))
- expect++;
- classes |= 1ull << e->class;
- }
- igt_spin_busywait_until_started(spin);
-
- delay = -500000; /* 500us slack */
- memset(old, 0, sizeof(old));
- for (int pass = 0; pass < 5; pass++) {
- delay += measured_usleep(1000 >> pass);
- igt_debug("delay: %'"PRIu64"ns\n", delay);
-
- /* Check that we accumulate the runtime, while active */
- igt_assert_eq(read_runtimes(me, active), expect);
- for (int i = 0; i < ARRAY_SIZE(active); i++) {
- if (!active[i])
- continue;
-
- igt_info("active[%d]: %'"PRIu64"ns\n", i, active[i]);
- igt_assert(active[i] > old[i]); /* monotonic */
- igt_assert(active[i] > delay); /* within reason */
- }
-
- memcpy(old, active, sizeof(old));
- }
-
- gem_quiescent_gpu(i915);
-
- /* And again now idle */
- igt_assert_eq(read_runtimes(me, idle), expect);
- for (int i = 0; i < ARRAY_SIZE(idle); i++) {
- if (!idle[i])
- continue;
-
- igt_info("idle[%d]: %'"PRIu64"ns\n", i, idle[i]);
- igt_assert(idle[i] >= active[i]);
- }
-
- intel_ctx_destroy(i915, ctx);
- igt_spin_free(i915, spin);
-
- /* And finally after the executing context is no more */
- igt_assert_eq(read_runtimes(me, old), expect);
- for (int i = 0; i < ARRAY_SIZE(old); i++) {
- if (!old[i])
- continue;
-
- igt_info("old[%d]: %'"PRIu64"ns\n", i, old[i]);
- igt_assert_eq_u64(old[i], idle[i]);
- }
-
- close(i915);
-}
-
-static void
-split_child(int i915, int clients, const intel_ctx_cfg_t *cfg,
- const struct intel_execution_engine2 *e,
- int sv)
-{
- int64_t runtime[2] = {};
- const intel_ctx_t *ctx;
- igt_spin_t *spin;
- int go = 1;
-
- i915 = gem_reopen_driver(i915);
-
- ctx = intel_ctx_create(i915, cfg);
- spin = igt_spin_new(i915, .ctx = ctx, .engine = e->flags);
- igt_spin_end(spin);
- gem_sync(i915, spin->handle);
-
- write(sv, &go, sizeof(go));
- read(sv, &go, sizeof(go));
- while (go != -1) {
- struct timespec tv = {};
-
- igt_spin_reset(spin);
- gem_execbuf(i915, &spin->execbuf);
- igt_nsec_elapsed(&tv);
- read(sv, &go, sizeof(go));
- igt_spin_end(spin);
- runtime[1] += igt_nsec_elapsed(&tv);
- read(sv, &go, sizeof(go));
- }
- igt_spin_free(i915, spin);
-
- runtime[0] = read_runtime(find_me(clients, getpid()), e->class);
- intel_ctx_destroy(i915, ctx);
- write(sv, runtime, sizeof(runtime));
-}
-
-static void
-__split(int i915, int clients, const intel_ctx_cfg_t *cfg,
- const struct intel_execution_engine2 *e, int f,
- void (*fn)(int i915, int clients, const intel_ctx_cfg_t *cfg,
- const struct intel_execution_engine2 *e,
- int sv))
-{
- struct client {
- int64_t active[2];
- int sv[2];
- int f;
- } client[2];
- uint64_t total[2] = { 1, 1 }; /* 1ns offset to prevent div-by-zero */
- int go, stop;
- int i;
-
- for (i = 0; i < ARRAY_SIZE(client); i++) {
- struct client *c = memset(&client[i], 0, sizeof(*c));
-
- c->f = f;
- f = 100 - f;
-
- igt_assert(socketpair(AF_UNIX, SOCK_DGRAM, 0, c->sv) == 0);
- igt_fork(child, 1)
- fn(i915, clients, cfg, e, c->sv[1]);
-
- read(c->sv[0], &go, sizeof(go));
- }
-
- /* Alternate between the clients, telling each to be active in turn */
- i = 0;
- go = 1;
- stop = 0;
- write(client[i].sv[0], &go, sizeof(go));
- igt_until_timeout(2) {
- measured_usleep(100 * client[i].f);
- write(client[!i].sv[0], &go, sizeof(go));
- write(client[i].sv[0], &stop, sizeof(stop));
-
- i = !i;
- }
- write(client[i].sv[0], &stop, sizeof(stop));
-
- /* Gather up the client runtimes */
- go = -1;
- for (i = 0; i < ARRAY_SIZE(client); i++) {
- struct client *c = &client[i];
-
- write(c->sv[0], &go, sizeof(go));
- igt_assert_eq(read(c->sv[0], c->active, sizeof(c->active)),
- sizeof(c->active));
-
- total[0] += c->active[0];
- total[1] += c->active[1];
- }
- igt_waitchildren();
-
- /* Print the results, before making any checks */
- for (i = 0; i < ARRAY_SIZE(client); i++) {
- const struct client *c = &client[i];
-
- igt_info("active[%02d]: %'"PRIu64"ns (%'"PRIu64"ns), %.1f%%\n",
- c->f, c->active[0], c->active[1],
- c->active[0] * 100. / total[0]);
- }
-
- /* Check that each client received their target runtime */
- for (i = 0; i < ARRAY_SIZE(client); i++) {
- const struct client *c = &client[i];
- double t = (100 - c->f) / 5.; /* 20% tolerance for smallest */
-
- igt_debug("active[%02d]: target runtime %'"PRIu64"ns, %.1f%%\n",
- c->f, c->active[1],
- c->active[1] * 100. / total[1]);
-
- require_within_epsilon(c->active[1], c->f * total[1] / 100., t);
- }
-
- /* Validate each client reported their share of the total runtime */
- for (i = 0; i < ARRAY_SIZE(client); i++) {
- const struct client *c = &client[i];
- double t = 100 - c->f;
-
- igt_debug("active[%02d]: runtime %'"PRIu64"ns, %.1f%%\n",
- c->f, c->active[0],
- c->active[0] * 100. / total[0]);
-
- assert_within_epsilon(c->active[0], c->f * total[0] / 100., t);
- }
-}
-
-static void
-split(int i915, int clients, const intel_ctx_cfg_t *cfg,
- const struct intel_execution_engine2 *e, int f)
-{
- __split(i915, clients, cfg, e, f, split_child);
-}
-
-static void
-sema_child(int i915, int clients, const intel_ctx_cfg_t *cfg,
- const struct intel_execution_engine2 *e,
- int sv)
-{
- int64_t runtime[2] = {};
- struct drm_i915_gem_exec_object2 obj = {
- .flags = EXEC_OBJECT_SUPPORTS_48B_ADDRESS
- };
- struct drm_i915_gem_execbuffer2 execbuf = {
- .buffers_ptr = to_user_pointer(&obj),
- .buffer_count = 1,
- .flags = e->flags,
- };
- const intel_ctx_t *ctx;
- uint32_t *cs, *sema;
-
- i915 = gem_reopen_driver(i915);
- ctx = intel_ctx_create(i915, cfg);
- execbuf.rsvd1 = ctx->id;
-
- obj.handle = gem_create(i915, 4096);
- obj.offset = obj.handle << 12;
- sema = cs = gem_mmap__device_coherent(i915, obj.handle,
- 0, 4096, PROT_WRITE);
-
- *cs = MI_BATCH_BUFFER_END;
- gem_execbuf(i915, &execbuf);
- gem_sync(i915, obj.handle);
- obj.flags |= EXEC_OBJECT_PINNED;
-
- cs += 16;
-
- *cs++ = MI_ARB_CHECK;
- *cs++ = MI_SEMAPHORE_WAIT |
- MI_SEMAPHORE_POLL |
- MI_SEMAPHORE_SAD_NEQ_SDD |
- (4 - 2);
- *cs++ = 0;
- *cs++ = obj.offset;
- *cs++ = obj.offset >> 32;
-
- *cs++ = MI_BATCH_BUFFER_START | 1 << 8 | 1;
- *cs++ = obj.offset + 64;
- *cs++ = obj.offset >> 32;
-
- *sema = 0;
- gem_execbuf(i915, &execbuf);
- gem_close(i915, obj.handle);
- intel_ctx_destroy(i915, ctx);
-
- write(sv, sema, sizeof(*sema));
- read(sv, sema, sizeof(*sema));
- while (*sema != -1) {
- struct timespec tv = {};
-
- __sync_synchronize();
- igt_nsec_elapsed(&tv);
- read(sv, sema, sizeof(*sema));
-
- __sync_synchronize();
- runtime[1] += igt_nsec_elapsed(&tv);
- read(sv, sema, sizeof(*sema));
- }
-
- runtime[0] = read_runtime(find_me(clients, getpid()), e->class);
- write(sv, runtime, sizeof(runtime));
-
- sema[16] = MI_BATCH_BUFFER_END;
- __sync_synchronize();
-}
-
-static void
-sema(int i915, int clients, const intel_ctx_cfg_t *cfg,
- const struct intel_execution_engine2 *e, int f)
-{
- __split(i915, clients, cfg, e, f, sema_child);
-}
-
-static int read_all(int clients, pid_t pid, int class, uint64_t *runtime)
-{
- struct dirent *de;
- char buf[BUFSZ];
- int count = 0;
- DIR *dir;
-
- dir = fdopendir(dup(clients));
- igt_assert(dir);
- rewinddir(dir);
-
- while ((de = readdir(dir))) {
- int me;
-
- if (!isdigit(de->d_name[0]))
- continue;
-
- snprintf(buf, sizeof(buf), "%s/pid", de->d_name);
- igt_sysfs_read(clients, buf, buf, sizeof(buf));
- if (atoi(buf) != pid)
- continue;
-
- me = openat(clients, de->d_name, O_DIRECTORY | O_RDONLY);
- runtime[count++] = read_runtime(me, class);
- close(me);
- }
-
- closedir(dir);
- return count;
-}
-
-static int cmp_u64(const void *A, const void *B)
-{
- const uint64_t *a = A, *b = B;
-
- if (*a < *b)
- return -1;
- else if (*a > *b)
- return 1;
- else
- return 0;
-}
-
-static void __fair(int i915, int clients,
- int class, const char *name,
- int extra, int duration)
-{
- const double timeslice_duration_ns = 5e6;
- unsigned int count;
- uint64_t *runtime;
- double threshold;
- double expect;
- int i;
-
- i = 0;
- do {
- int client = gem_reopen_driver(i915);
- uint32_t ctx;
-
- ctx = gem_context_create_for_class(client, class, &count);
- __igt_spin_new(client, ctx);
- } while (++i < count + extra);
- extra = i;
-
- sleep(duration); /* over the course of many timeslices */
-
- runtime = calloc(extra, sizeof(*runtime));
- igt_assert_eq(read_all(clients, getpid(), class, runtime), extra);
-
- /*
- * If we imagine that the timeslices are randomly distributed to
- * the clients, we would expect the variance to be modelled
- * by a drunken walk; ergo sqrt(num_timeslices).
- */
- threshold = sqrt(1e9 * duration / timeslice_duration_ns);
- threshold *= timeslice_duration_ns;
- threshold *= extra > count; /* timeslicing active? */
- threshold *= 3; /* CI safety factor before crying wolf */
- threshold += 5e6; /* tolerance for 5ms measuring error */
-
- expect = 1e9 * count * duration / extra;
-
- qsort(runtime, extra, sizeof(*runtime), cmp_u64);
- igt_info("%s: [%.1f, %.1f, %.1f] ms, expect %1.f +- %.1fms\n",
- name,
- 1e-6 * runtime[0],
- 1e-6 * runtime[extra / 2],
- 1e-6 * runtime[extra - 1],
- 1e-6 * expect,
- 1e-6 * threshold);
-
- assert_within_epsilon(runtime[extra / 2], expect, 20);
- igt_assert_f(runtime[extra - 1] - runtime[0] <= 2 * threshold,
- "Range of timeslices greater than tolerable: %.2fms > %.2fms; unfair!\n",
- 1e-6 * (runtime[extra - 1] - runtime[0]),
- 1e-6 * threshold * 2);
-}
-
-static void fair(int i915, int clients, int extra, int duration)
-{
- static const char *names[] = {
- [I915_ENGINE_CLASS_RENDER] = "rcs",
- [I915_ENGINE_CLASS_COPY] = "bcs",
- [I915_ENGINE_CLASS_VIDEO] = "vcs",
- [I915_ENGINE_CLASS_VIDEO_ENHANCE] = "vecs",
- };
-
- gem_quiescent_gpu(i915);
-
- for (int class = 0; class < ARRAY_SIZE(names); class++) {
- unsigned int count;
- uint32_t ctx;
-
- ctx = gem_context_create_for_class(i915, class, &count);
- if (!ctx)
- continue;
- gem_context_destroy(i915, ctx);
-
- igt_dynamic_f("%s", names[class]) {
- igt_drop_caches_set(i915, DROP_RESET_ACTIVE);
- igt_fork(child, 1)
- __fair(i915, clients, class, names[class],
- extra, duration);
- igt_waitchildren();
- gem_quiescent_gpu(i915);
- }
- igt_drop_caches_set(i915, DROP_RESET_ACTIVE);
- }
-}
-
-static bool has_busy(int clients)
-{
- bool ok;
- int me;
-
- me = find_me(clients, getpid());
- ok = faccessat(me, "busy", 0, F_OK) == 0;
- close(me);
-
- return ok;
-}
-
-static void test_busy(int i915, int clients)
-{
- const struct intel_execution_engine2 *e;
- intel_ctx_cfg_t cfg;
- const int frac[] = { 10, 25, 50 };
-
- igt_fixture {
- igt_require(gem_has_contexts(i915));
- igt_require(has_busy(clients));
- cfg = intel_ctx_cfg_all_physical(i915);
- }
-
- igt_subtest_with_dynamic("busy") {
- for_each_ctx_cfg_engine(i915, &cfg, e) {
- if (!gem_class_can_store_dword(i915, e->class))
- continue;
- igt_dynamic_f("%s", e->name) {
- gem_quiescent_gpu(i915);
- igt_fork(child, 1)
- busy_one(i915, clients, &cfg, e);
- igt_waitchildren();
- gem_quiescent_gpu(i915);
- }
- }
-
- igt_dynamic("all-engines") {
- gem_quiescent_gpu(i915);
- igt_fork(child, 1)
- busy_all(i915, clients, &cfg);
- igt_waitchildren();
- gem_quiescent_gpu(i915);
- }
- }
-
- for (int i = 0; i < ARRAY_SIZE(frac); i++) {
- igt_subtest_with_dynamic_f("split-%d", frac[i]) {
- for_each_ctx_cfg_engine(i915, &cfg, e) {
- igt_dynamic_f("%s", e->name) {
- gem_quiescent_gpu(i915);
- split(i915, clients, &cfg, e, frac[i]);
- gem_quiescent_gpu(i915);
- }
- }
- }
- }
-
- igt_subtest_group {
- igt_fixture {
- //igt_require(gem_scheduler_has_timeslicing(i915));
- igt_require(gem_scheduler_has_preemption(i915));
- }
-
- for (int i = 0; i < ARRAY_SIZE(frac); i++) {
- igt_subtest_with_dynamic_f("sema-%d", frac[i]) {
- for_each_ctx_cfg_engine(i915, &cfg, e) {
- if (!gem_class_has_mutable_submission(i915, e->class))
- continue;
-
- igt_dynamic_f("%s", e->name) {
- igt_drop_caches_set(i915, DROP_RESET_ACTIVE);
- sema(i915, clients, &cfg, e, frac[i]);
- gem_quiescent_gpu(i915);
- }
- igt_drop_caches_set(i915, DROP_RESET_ACTIVE);
- }
- }
- }
-
- for (int i = 0; i < 4; i++) {
- igt_subtest_with_dynamic_f("fair-%d", (1 << i) - 1)
- fair(i915, clients, (1 << i) - 1, 5);
- }
- }
-}
-
-igt_main
-{
- int i915 = -1, clients = -1;
-
- igt_fixture {
- int sys;
-
- /* Don't allow [too many] extra clients to be opened */
- i915 = __drm_open_driver(DRIVER_INTEL);
- igt_require_gem(i915);
-
- sys = igt_sysfs_open(i915);
- igt_require(sys != -1);
-
- clients = openat(sys, "clients", O_RDONLY);
- igt_require(clients != -1);
-
- close(sys);
- usleep(10);
- }
-
- igt_subtest("pidname")
- pidname(i915, clients);
-
- igt_subtest("create")
- create(i915, clients);
-
- igt_subtest("recycle")
- recycle(i915, clients, 1);
-
- igt_subtest("recycle-many")
- recycle(i915, clients, 2 * sysconf(_SC_NPROCESSORS_ONLN));
-
- igt_subtest_group
- test_busy(i915, clients);
-
- igt_fixture {
- close(clients);
- close(i915);
- }
-}
diff --git a/tests/meson.build b/tests/meson.build
index e20a8640..25a4e8a3 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -235,7 +235,6 @@ i915_progs = [
'kms_psr2_sf',
'kms_psr_stress_test',
'kms_pwrite_crc',
- 'sysfs_clients',
'sysfs_defaults',
'sysfs_heartbeat_interval',
'sysfs_preempt_timeout',
--
2.39.0
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [igt-dev] [Intel-gfx] [PATCH i-g-t] Remove sysfs_clients 2023-01-19 16:40 [igt-dev] [PATCH i-g-t] Remove sysfs_clients Lucas De Marchi @ 2023-01-19 17:11 ` Tvrtko Ursulin 2023-01-19 17:33 ` [igt-dev] ✓ Fi.CI.BAT: success for " Patchwork 2023-01-20 21:34 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork 2 siblings, 0 replies; 4+ messages in thread From: Tvrtko Ursulin @ 2023-01-19 17:11 UTC (permalink / raw) To: Lucas De Marchi, intel-gfx, igt-dev On 19/01/2023 16:40, Lucas De Marchi wrote: > For some months there was this series merged in drm-tip: > https://patchwork.freedesktop.org/series/86222/ which allowed to track > the client usage stats through sysfs. That support has been removed and > the sysfs_clients test has since been skipping on all platforms as noticed > in https://intel-gfx-ci.01.org/tree/drm-tip/shards-all.html?testfilter=sysfs_clients: > > Test requirement not met in function __igt_unique____real_main1023, file ../../../usr/src/igt-gpu-tools/tests/i915/sysfs_clients.c:1038: > Test requirement: clients != -1 > Last errno: 2, No such file or directory > Subtest busy: SKIP (0.000s) > > The functionality has been replaced by drm-usage-stats (https://docs.kernel.org/gpu/drm-usage-stats.html) > with the i915-specific bits documented at https://docs.kernel.org/gpu/i915.html#i915-usage-stats. > > Remove sysfs_clients test as it's not going to be used anymore. > > Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com> I didn't even realize it has been sitting there all this time.. Acked-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Regards, Tvrtko > --- > tests/i915/sysfs_clients.c | 1063 ------------------------------------ > tests/meson.build | 1 - > 2 files changed, 1064 deletions(-) > delete mode 100644 tests/i915/sysfs_clients.c > > diff --git a/tests/i915/sysfs_clients.c b/tests/i915/sysfs_clients.c > deleted file mode 100644 > index b49e6a55..00000000 > --- a/tests/i915/sysfs_clients.c > +++ /dev/null > @@ -1,1063 +0,0 @@ > -/* SPDX-License-Identifier: MIT */ > -/* > - * Copyright © 2021 Intel Corporation > - */ > - > -#include <ctype.h> > -#include <dirent.h> > -#include <errno.h> > -#include <fcntl.h> > -#include <inttypes.h> > -#include <limits.h> > -#include <math.h> > -#include <sched.h> > -#include <sys/socket.h> > -#include <sys/stat.h> > -#include <sys/types.h> > -#include <unistd.h> > - > -#include "drmtest.h" > -#include "i915/gem.h" > -#include "i915/gem_create.h" > -#include "i915/gem_engine_topology.h" > -#include "i915/gem_mman.h" > -#include "igt_aux.h" > -#include "igt_dummyload.h" > -#include "igt_sysfs.h" > -#include "intel_ctx.h" > -#include "ioctl_wrappers.h" > - > -#define __require_within_epsilon(x, ref, tol_up, tol_down) \ > - igt_require_f((double)(x) <= (1.0 + (tol_up)) * (double)(ref) && \ > - (double)(x) >= (1.0 - (tol_down)) * (double)(ref), \ > - "'%s' != '%s' (%.3f not within +%.1f%%/-%.1f%% tolerance of %.3f)\n",\ > -#x, #ref, (double)(x), \ > - (tol_up) * 100.0, (tol_down) * 100.0, \ > - (double)(ref)) > - > -#define require_within_epsilon(x, ref, tolerance) \ > - __require_within_epsilon(x, ref, tolerance / 100., tolerance / 100.) > - > -#define __assert_within_epsilon(x, ref, tol_up, tol_down) \ > - igt_assert_f((double)(x) <= (1.0 + (tol_up)) * (double)(ref) && \ > - (double)(x) >= (1.0 - (tol_down)) * (double)(ref), \ > - "'%s' != '%s' (%.3f not within +%.1f%%/-%.1f%% tolerance of %.3f)\n",\ > - #x, #ref, (double)(x), \ > - (tol_up) * 100.0, (tol_down) * 100.0, \ > - (double)(ref)) > - > -#define assert_within_epsilon(x, ref, tolerance) \ > - __assert_within_epsilon(x, ref, tolerance / 100., tolerance / 100.) > - > -#define BUFSZ 280 > - > -#define MI_BATCH_BUFFER_START (0x31 << 23) > -#define MI_BATCH_BUFFER_END (0xa << 23) > -#define MI_ARB_CHECK (0x5 << 23) > - > -#define MI_SEMAPHORE_WAIT (0x1c << 23) > -#define MI_SEMAPHORE_POLL (1 << 15) > -#define MI_SEMAPHORE_SAD_GT_SDD (0 << 12) > -#define MI_SEMAPHORE_SAD_GTE_SDD (1 << 12) > -#define MI_SEMAPHORE_SAD_LT_SDD (2 << 12) > -#define MI_SEMAPHORE_SAD_LTE_SDD (3 << 12) > -#define MI_SEMAPHORE_SAD_EQ_SDD (4 << 12) > -#define MI_SEMAPHORE_SAD_NEQ_SDD (5 << 12) > - > -static void strterm(char *s, int len) > -{ > - if (len < 0) { > - *s = '\0'; > - } else { > - s[len] = '\0'; > - if (s[len - 1] == '\n') > - s[len - 1] = '\0'; > - } > -} > - > -static void pidname(int i915, int clients) > -{ > - struct dirent *de; > - int sv[2], rv[2]; > - char buf[BUFSZ]; > - int me = -1; > - long count; > - pid_t pid; > - DIR *dir; > - > - dir = fdopendir(dup(clients)); > - igt_assert(dir); > - rewinddir(dir); > - > - count = 0; > - while ((de = readdir(dir))) { > - if (!isdigit(de->d_name[0])) > - continue; > - > - snprintf(buf, sizeof(buf), "%s/name", de->d_name); > - strterm(buf, igt_sysfs_read(clients, buf, buf, sizeof(buf) - 1)); > - igt_debug("%s: %s\n", de->d_name, buf); > - > - /* Ignore closed clients created by drm_driver_open() */ > - if (*buf == '\0' || *buf == '<') > - continue; > - > - close(me); > - me = openat(clients, de->d_name, O_DIRECTORY | O_RDONLY); > - count++; > - } > - closedir(dir); > - > - /* We expect there to be only the single client (us) running */ > - igt_assert_eq(count, 1); > - igt_assert(me >= 0); > - > - strterm(buf, igt_sysfs_read(me, "name", buf, sizeof(buf) - 1)); > - > - igt_info("My name: %s\n", buf); > - igt_assert(strcmp(buf, igt_test_name()) == 0); > - > - if (!gem_has_contexts(i915)) > - return; > - > - igt_assert(pipe(sv) == 0); > - igt_assert(pipe(rv) == 0); > - > - /* If give our fd to someone else, they take over ownership of client */ > - igt_fork(child, 1) { > - read(sv[0], &pid, sizeof(pid)); > - > - /* > - * This transfer is based upon the assumption that the > - * transfer is complete ala DRI3, where the parent will > - * close the fd after sending it to the client. That is > - * it is expected that the client be only active in a single > - * process at any time. > - */ > - gem_context_destroy(i915, gem_context_create(i915)); > - > - pid = getpid(); > - write(rv[1], &pid, sizeof(pid)); > - } > - close(sv[0]); > - close(rv[1]); > - > - /* Child exists, but not yet running, we still own the client */ > - strterm(buf, igt_sysfs_read(me, "pid", buf, sizeof(buf) - 1)); > - > - pid = getpid(); > - igt_info("My pid: %s\n", buf); > - igt_assert_eq(atoi(buf), pid); > - > - /* Release and wait for the child */ > - igt_assert_eq(write(sv[1], &pid, sizeof(pid)), sizeof(pid)); > - igt_assert_eq(read(rv[0], &pid, sizeof(pid)), sizeof(pid)); > - > - /* Now child owns the client and pid should be updated to match */ > - strterm(buf, igt_sysfs_read(me, "pid", buf, sizeof(buf) - 1)); > - > - igt_info("New pid: %s\n", buf); > - igt_assert_eq(atoi(buf), pid); > - igt_waitchildren(); > - > - /* Child has definitely gone, but the client should remain */ > - strterm(buf, igt_sysfs_read(me, "pid", buf, sizeof(buf) - 1)); > - > - igt_info("Old pid: %s\n", buf); > - igt_assert_eq(atoi(buf), pid); > - > - /* And if we create a new context, ownership transfers back to us */ > - gem_context_destroy(i915, gem_context_create(i915)); > - strterm(buf, igt_sysfs_read(me, "pid", buf, sizeof(buf) - 1)); > - > - igt_info("Our pid: %s\n", buf); > - igt_assert_eq(atoi(buf), getpid()); > - > - /* Let battle commence. */ > - > - close(sv[1]); > - close(rv[0]); > - close(me); > -} > - > -static long count_clients(int clients) > -{ > - struct dirent *de; > - long count = 0; > - char buf[BUFSZ]; > - DIR *dir; > - > - dir = fdopendir(dup(clients)); > - igt_assert(dir); > - rewinddir(dir); > - > - while ((de = readdir(dir))) { > - int len; > - > - if (!isdigit(de->d_name[0])) > - continue; > - > - snprintf(buf, sizeof(buf), "%s/name", de->d_name); > - len = igt_sysfs_read(clients, buf, buf, sizeof(buf)); > - if (len < 0) > - continue; > - > - count += *buf != '<'; > - } > - closedir(dir); > - > - return count; > -} > - > -static void create(int i915, int clients) > -{ > - int fd[16]; > - > - /* Each new open("/dev/dri/cardN") is a new client */ > - igt_assert_eq(count_clients(clients), 1); > - for (int i = 0; i < ARRAY_SIZE(fd); i++) { > - fd[i] = gem_reopen_driver(i915); > - igt_assert_eq(count_clients(clients), i + 2); > - } > - > - for (int i = 0; i < ARRAY_SIZE(fd); i++) > - close(fd[i]); > - > - /* Cleanup delayed behind rcu */ > - igt_until_timeout(30) { > - sched_yield(); > - if (count_clients(clients) == 1) > - break; > - usleep(10000); > - } > - igt_assert_eq(count_clients(clients), 1); > -} > - > -static const char *find_client(int clients, pid_t pid, char *buf) > -{ > - DIR *dir = fdopendir(dup(clients)); > - > - /* Reading a dir as it changes does not appear to be stable, SEP */ > - for (int pass = 0; pass < 5; pass++) { > - struct dirent *de; > - > - rewinddir(dir); > - fsync(dirfd(dir)); > - while ((de = readdir(dir))) { > - if (!isdigit(de->d_name[0])) > - continue; > - > - snprintf(buf, BUFSZ, "%s/pid", de->d_name); > - igt_sysfs_read(clients, buf, buf, sizeof(buf)); > - if (atoi(buf) != pid) > - continue; > - > - strncpy(buf, de->d_name, BUFSZ); > - goto out; > - } > - usleep(100); > - } > - *buf = '\0'; > -out: > - closedir(dir); > - return buf; > -} > - > -static int find_me(int clients, pid_t pid) > -{ > - char buf[BUFSZ]; > - > - return openat(clients, > - find_client(clients, pid, buf), > - O_DIRECTORY | O_RDONLY); > -} > - > -static int reopen_directory(int fd) > -{ > - char buf[BUFSZ]; > - int dir; > - > - snprintf(buf, sizeof(buf), "/proc/self/fd/%d", fd); > - dir = open(buf, O_DIRECTORY | O_RDONLY); > - igt_assert_fd(dir); > - > - return dir; > -} > - > -static unsigned long my_id(int clients, pid_t pid) > -{ > - char buf[BUFSZ]; > - > - return strtoul(find_client(clients, pid, buf), NULL, 0); > -} > - > -static unsigned long recycle_client(int i915, int clients) > -{ > - unsigned long client; > - int device; > - > - device = gem_reopen_driver(i915); > - client = my_id(clients, getpid()); > - close(device); > - > - igt_assert(client != 0); > - return client; > -} > - > -static void recycle(int i915, int clients, int nchildren) > -{ > - /* > - * As we open and close clients, we do not expect to reuse old ids, > - * i.e. we use a cyclic ida. This reduces the likelihood of userspace > - * watchers becoming confused and mistaking the new client as a > - * continuation of the old. > - */ > - igt_assert(my_id(clients, getpid())); > - > - igt_fork(child, nchildren) { > - unsigned long client, last; > - > - /* Reopen the directory fd for each client */ > - clients = reopen_directory(clients); > - > - last = recycle_client(i915, clients); > - igt_info("Child[%d] first client:%lu\n", getpid(), last); > - igt_until_timeout(5) { > - client = recycle_client(i915, clients); > - igt_assert((long)(client - last) > 0); > - last = client; > - } > - igt_info("Child[%d] last client:%lu\n", getpid(), last); > - } > - igt_waitchildren(); > - > - /* Cleanup delayed behind rcu */ > - igt_until_timeout(30) { > - sched_yield(); > - if (count_clients(clients) == 1) > - break; > - usleep(10000); > - } > - igt_assert_eq(count_clients(clients), 1); > -} > - > -static int64_t read_runtime(int client, int class) > -{ > - char buf[80]; > - > - snprintf(buf, sizeof(buf), "busy/%d", class); > - return igt_sysfs_get_u64(client, buf); > -} > - > -#define MAX_CLASS 64 > -static int read_runtimes(int client, int64_t *runtime) > -{ > - int fd = openat(client, "busy", O_DIRECTORY | O_RDONLY); > - DIR *dir = fdopendir(fd); > - struct dirent *de; > - int count = 0; > - > - memset(runtime, 0, sizeof(*runtime) * MAX_CLASS); > - if (!dir) > - return -1; > - > - while ((de = readdir(dir))) { > - int class; > - > - if (!isdigit(de->d_name[0])) > - continue; > - > - class = atoi(de->d_name); > - igt_assert(class < MAX_CLASS); > - runtime[class] = igt_sysfs_get_u64(fd, de->d_name); > - > - count += runtime[class] != 0; > - } > - closedir(dir); > - > - return count; > -} > - > -static uint64_t measured_usleep(unsigned int usec) > -{ > - struct timespec tv; > - unsigned int slept; > - > - slept = igt_nsec_elapsed(memset(&tv, 0, sizeof(tv))); > - igt_assert(slept == 0); > - do { > - usleep(usec - slept); > - slept = igt_nsec_elapsed(&tv) / 1000; > - } while (slept < usec); > - > - return igt_nsec_elapsed(&tv); > -} > - > -static void > -busy_one(int i915, int clients, const intel_ctx_cfg_t *cfg, > - const struct intel_execution_engine2 *e) > -{ > - int64_t active, idle, old, other[MAX_CLASS]; > - struct timespec tv; > - const intel_ctx_t *ctx; > - igt_spin_t *spin; > - uint64_t delay; > - int me; > - > - /* Create a fresh client with 0 runtime */ > - i915 = gem_reopen_driver(i915); > - > - me = find_me(clients, getpid()); > - igt_assert(me != -1); > - > - ctx = intel_ctx_create(i915, cfg); > - spin = igt_spin_new(i915, > - .ctx = ctx, > - .engine = e->flags, > - .flags = IGT_SPIN_POLL_RUN); > - igt_spin_busywait_until_started(spin); > - usleep(10); /* kick the tasklets */ > - > - /* Compensate for discrepancies in execution latencies */ > - idle = old = read_runtime(me, e->class); > - igt_nsec_elapsed(memset(&tv, 0, sizeof(tv))); > - for (int pass = 0; pass <= 10; pass++) { > - usleep(1500 >> pass); > - > - /* Check that we accumulate the runtime, while active */ > - delay = igt_nsec_elapsed(&tv); > - active = read_runtime(me, e->class); > - delay += igt_nsec_elapsed(&tv); > - delay /= 2; /* use the centre point of the read_runtime() */ > - delay += idle; /* tare */ > - > - igt_info("active1[%d]: %'"PRIu64"ns (%'"PRIu64"ns)\n", > - pass, active, delay); > - igt_assert(active > old); /* monotonic */ > - assert_within_epsilon(active, delay, 20); > - > - old = active; > - } > - > - gem_quiescent_gpu(i915); > - > - /* And again now idle */ > - idle = read_runtime(me, e->class); > - igt_info("idle: %'"PRIu64"ns\n", idle); > - igt_assert(idle >= active); > - > - /* Check monotocity of idling */ > - for (int pass = 0; pass < 5; pass++) { > - old = idle; > - > - igt_spin_reset(spin); > - gem_execbuf(i915, &spin->execbuf); > - igt_spin_busywait_until_started(spin); > - usleep(1); /* let the system process the tasklets */ > - active = read_runtime(me, e->class); > - igt_info("idle->active[%d]: %'"PRIu64"ns\n", pass, active); > - igt_assert(active >= old); > - gem_quiescent_gpu(i915); > - > - idle = read_runtime(me, e->class); > - igt_info("active->idle[%d]: %'"PRIu64"ns\n", pass, idle); > - igt_assert(idle >= active); > - } > - > - intel_ctx_destroy(i915, ctx); > - > - /* And finally after the executing context is no more */ > - old = read_runtime(me, e->class); > - igt_info("old: %'"PRIu64"ns\n", old); > - igt_assert_eq_u64(old, idle); > - > - /* Once more on the default context for good luck */ > - igt_spin_reset(spin); > - spin->execbuf.rsvd1 = 0; > - gem_execbuf(i915, &spin->execbuf); > - igt_spin_busywait_until_started(spin); > - usleep(10); /* kick the tasklets */ > - > - idle = old = read_runtime(me, e->class); > - igt_nsec_elapsed(memset(&tv, 0, sizeof(tv))); > - for (int pass = 0; pass <= 10; pass++) { > - usleep(1000 >> pass); > - > - /* Check that we accumulate the runtime, while active */ > - delay = igt_nsec_elapsed(&tv); > - active = read_runtime(me, e->class); > - delay += igt_nsec_elapsed(&tv); > - delay /= 2; /* use the centre point of the read_runtime() */ > - delay += idle; /* tare */ > - > - igt_info("active0[%d]: %'"PRIu64"ns (%'"PRIu64"ns)\n", > - pass, active, delay); > - igt_assert(active > old); > - assert_within_epsilon(active, delay, 20); > - > - old = active; > - } > - > - gem_quiescent_gpu(i915); > - igt_assert_eq(read_runtimes(me, other), 1); > - > - igt_spin_free(i915, spin); > - close(i915); > -} > - > -static void busy_all(int i915, int clients, const intel_ctx_cfg_t *cfg) > -{ > - const struct intel_execution_engine2 *e; > - int64_t active[MAX_CLASS]; > - int64_t idle[MAX_CLASS]; > - int64_t old[MAX_CLASS]; > - uint64_t classes = 0; > - const intel_ctx_t *ctx; > - igt_spin_t *spin; > - int expect = 0; > - int64_t delay; > - int me; > - > - /* Create a fresh client with 0 runtime */ > - i915 = gem_reopen_driver(i915); > - > - me = find_me(clients, getpid()); > - igt_assert(me != -1); > - > - ctx = intel_ctx_create(i915, cfg); > - spin = igt_spin_new(i915, .ctx = ctx, > - .flags = IGT_SPIN_POLL_RUN); > - for_each_ctx_engine(i915, ctx, e) { > - if (!gem_class_can_store_dword(i915, e->class)) > - continue; > - > - spin->execbuf.flags &= ~63; > - spin->execbuf.flags |= e->flags; > - gem_execbuf(i915, &spin->execbuf); > - > - if (!(classes & (1ull << e->class))) > - expect++; > - classes |= 1ull << e->class; > - } > - igt_spin_busywait_until_started(spin); > - > - delay = -500000; /* 500us slack */ > - memset(old, 0, sizeof(old)); > - for (int pass = 0; pass < 5; pass++) { > - delay += measured_usleep(1000 >> pass); > - igt_debug("delay: %'"PRIu64"ns\n", delay); > - > - /* Check that we accumulate the runtime, while active */ > - igt_assert_eq(read_runtimes(me, active), expect); > - for (int i = 0; i < ARRAY_SIZE(active); i++) { > - if (!active[i]) > - continue; > - > - igt_info("active[%d]: %'"PRIu64"ns\n", i, active[i]); > - igt_assert(active[i] > old[i]); /* monotonic */ > - igt_assert(active[i] > delay); /* within reason */ > - } > - > - memcpy(old, active, sizeof(old)); > - } > - > - gem_quiescent_gpu(i915); > - > - /* And again now idle */ > - igt_assert_eq(read_runtimes(me, idle), expect); > - for (int i = 0; i < ARRAY_SIZE(idle); i++) { > - if (!idle[i]) > - continue; > - > - igt_info("idle[%d]: %'"PRIu64"ns\n", i, idle[i]); > - igt_assert(idle[i] >= active[i]); > - } > - > - intel_ctx_destroy(i915, ctx); > - igt_spin_free(i915, spin); > - > - /* And finally after the executing context is no more */ > - igt_assert_eq(read_runtimes(me, old), expect); > - for (int i = 0; i < ARRAY_SIZE(old); i++) { > - if (!old[i]) > - continue; > - > - igt_info("old[%d]: %'"PRIu64"ns\n", i, old[i]); > - igt_assert_eq_u64(old[i], idle[i]); > - } > - > - close(i915); > -} > - > -static void > -split_child(int i915, int clients, const intel_ctx_cfg_t *cfg, > - const struct intel_execution_engine2 *e, > - int sv) > -{ > - int64_t runtime[2] = {}; > - const intel_ctx_t *ctx; > - igt_spin_t *spin; > - int go = 1; > - > - i915 = gem_reopen_driver(i915); > - > - ctx = intel_ctx_create(i915, cfg); > - spin = igt_spin_new(i915, .ctx = ctx, .engine = e->flags); > - igt_spin_end(spin); > - gem_sync(i915, spin->handle); > - > - write(sv, &go, sizeof(go)); > - read(sv, &go, sizeof(go)); > - while (go != -1) { > - struct timespec tv = {}; > - > - igt_spin_reset(spin); > - gem_execbuf(i915, &spin->execbuf); > - igt_nsec_elapsed(&tv); > - read(sv, &go, sizeof(go)); > - igt_spin_end(spin); > - runtime[1] += igt_nsec_elapsed(&tv); > - read(sv, &go, sizeof(go)); > - } > - igt_spin_free(i915, spin); > - > - runtime[0] = read_runtime(find_me(clients, getpid()), e->class); > - intel_ctx_destroy(i915, ctx); > - write(sv, runtime, sizeof(runtime)); > -} > - > -static void > -__split(int i915, int clients, const intel_ctx_cfg_t *cfg, > - const struct intel_execution_engine2 *e, int f, > - void (*fn)(int i915, int clients, const intel_ctx_cfg_t *cfg, > - const struct intel_execution_engine2 *e, > - int sv)) > -{ > - struct client { > - int64_t active[2]; > - int sv[2]; > - int f; > - } client[2]; > - uint64_t total[2] = { 1, 1 }; /* 1ns offset to prevent div-by-zero */ > - int go, stop; > - int i; > - > - for (i = 0; i < ARRAY_SIZE(client); i++) { > - struct client *c = memset(&client[i], 0, sizeof(*c)); > - > - c->f = f; > - f = 100 - f; > - > - igt_assert(socketpair(AF_UNIX, SOCK_DGRAM, 0, c->sv) == 0); > - igt_fork(child, 1) > - fn(i915, clients, cfg, e, c->sv[1]); > - > - read(c->sv[0], &go, sizeof(go)); > - } > - > - /* Alternate between the clients, telling each to be active in turn */ > - i = 0; > - go = 1; > - stop = 0; > - write(client[i].sv[0], &go, sizeof(go)); > - igt_until_timeout(2) { > - measured_usleep(100 * client[i].f); > - write(client[!i].sv[0], &go, sizeof(go)); > - write(client[i].sv[0], &stop, sizeof(stop)); > - > - i = !i; > - } > - write(client[i].sv[0], &stop, sizeof(stop)); > - > - /* Gather up the client runtimes */ > - go = -1; > - for (i = 0; i < ARRAY_SIZE(client); i++) { > - struct client *c = &client[i]; > - > - write(c->sv[0], &go, sizeof(go)); > - igt_assert_eq(read(c->sv[0], c->active, sizeof(c->active)), > - sizeof(c->active)); > - > - total[0] += c->active[0]; > - total[1] += c->active[1]; > - } > - igt_waitchildren(); > - > - /* Print the results, before making any checks */ > - for (i = 0; i < ARRAY_SIZE(client); i++) { > - const struct client *c = &client[i]; > - > - igt_info("active[%02d]: %'"PRIu64"ns (%'"PRIu64"ns), %.1f%%\n", > - c->f, c->active[0], c->active[1], > - c->active[0] * 100. / total[0]); > - } > - > - /* Check that each client received their target runtime */ > - for (i = 0; i < ARRAY_SIZE(client); i++) { > - const struct client *c = &client[i]; > - double t = (100 - c->f) / 5.; /* 20% tolerance for smallest */ > - > - igt_debug("active[%02d]: target runtime %'"PRIu64"ns, %.1f%%\n", > - c->f, c->active[1], > - c->active[1] * 100. / total[1]); > - > - require_within_epsilon(c->active[1], c->f * total[1] / 100., t); > - } > - > - /* Validate each client reported their share of the total runtime */ > - for (i = 0; i < ARRAY_SIZE(client); i++) { > - const struct client *c = &client[i]; > - double t = 100 - c->f; > - > - igt_debug("active[%02d]: runtime %'"PRIu64"ns, %.1f%%\n", > - c->f, c->active[0], > - c->active[0] * 100. / total[0]); > - > - assert_within_epsilon(c->active[0], c->f * total[0] / 100., t); > - } > -} > - > -static void > -split(int i915, int clients, const intel_ctx_cfg_t *cfg, > - const struct intel_execution_engine2 *e, int f) > -{ > - __split(i915, clients, cfg, e, f, split_child); > -} > - > -static void > -sema_child(int i915, int clients, const intel_ctx_cfg_t *cfg, > - const struct intel_execution_engine2 *e, > - int sv) > -{ > - int64_t runtime[2] = {}; > - struct drm_i915_gem_exec_object2 obj = { > - .flags = EXEC_OBJECT_SUPPORTS_48B_ADDRESS > - }; > - struct drm_i915_gem_execbuffer2 execbuf = { > - .buffers_ptr = to_user_pointer(&obj), > - .buffer_count = 1, > - .flags = e->flags, > - }; > - const intel_ctx_t *ctx; > - uint32_t *cs, *sema; > - > - i915 = gem_reopen_driver(i915); > - ctx = intel_ctx_create(i915, cfg); > - execbuf.rsvd1 = ctx->id; > - > - obj.handle = gem_create(i915, 4096); > - obj.offset = obj.handle << 12; > - sema = cs = gem_mmap__device_coherent(i915, obj.handle, > - 0, 4096, PROT_WRITE); > - > - *cs = MI_BATCH_BUFFER_END; > - gem_execbuf(i915, &execbuf); > - gem_sync(i915, obj.handle); > - obj.flags |= EXEC_OBJECT_PINNED; > - > - cs += 16; > - > - *cs++ = MI_ARB_CHECK; > - *cs++ = MI_SEMAPHORE_WAIT | > - MI_SEMAPHORE_POLL | > - MI_SEMAPHORE_SAD_NEQ_SDD | > - (4 - 2); > - *cs++ = 0; > - *cs++ = obj.offset; > - *cs++ = obj.offset >> 32; > - > - *cs++ = MI_BATCH_BUFFER_START | 1 << 8 | 1; > - *cs++ = obj.offset + 64; > - *cs++ = obj.offset >> 32; > - > - *sema = 0; > - gem_execbuf(i915, &execbuf); > - gem_close(i915, obj.handle); > - intel_ctx_destroy(i915, ctx); > - > - write(sv, sema, sizeof(*sema)); > - read(sv, sema, sizeof(*sema)); > - while (*sema != -1) { > - struct timespec tv = {}; > - > - __sync_synchronize(); > - igt_nsec_elapsed(&tv); > - read(sv, sema, sizeof(*sema)); > - > - __sync_synchronize(); > - runtime[1] += igt_nsec_elapsed(&tv); > - read(sv, sema, sizeof(*sema)); > - } > - > - runtime[0] = read_runtime(find_me(clients, getpid()), e->class); > - write(sv, runtime, sizeof(runtime)); > - > - sema[16] = MI_BATCH_BUFFER_END; > - __sync_synchronize(); > -} > - > -static void > -sema(int i915, int clients, const intel_ctx_cfg_t *cfg, > - const struct intel_execution_engine2 *e, int f) > -{ > - __split(i915, clients, cfg, e, f, sema_child); > -} > - > -static int read_all(int clients, pid_t pid, int class, uint64_t *runtime) > -{ > - struct dirent *de; > - char buf[BUFSZ]; > - int count = 0; > - DIR *dir; > - > - dir = fdopendir(dup(clients)); > - igt_assert(dir); > - rewinddir(dir); > - > - while ((de = readdir(dir))) { > - int me; > - > - if (!isdigit(de->d_name[0])) > - continue; > - > - snprintf(buf, sizeof(buf), "%s/pid", de->d_name); > - igt_sysfs_read(clients, buf, buf, sizeof(buf)); > - if (atoi(buf) != pid) > - continue; > - > - me = openat(clients, de->d_name, O_DIRECTORY | O_RDONLY); > - runtime[count++] = read_runtime(me, class); > - close(me); > - } > - > - closedir(dir); > - return count; > -} > - > -static int cmp_u64(const void *A, const void *B) > -{ > - const uint64_t *a = A, *b = B; > - > - if (*a < *b) > - return -1; > - else if (*a > *b) > - return 1; > - else > - return 0; > -} > - > -static void __fair(int i915, int clients, > - int class, const char *name, > - int extra, int duration) > -{ > - const double timeslice_duration_ns = 5e6; > - unsigned int count; > - uint64_t *runtime; > - double threshold; > - double expect; > - int i; > - > - i = 0; > - do { > - int client = gem_reopen_driver(i915); > - uint32_t ctx; > - > - ctx = gem_context_create_for_class(client, class, &count); > - __igt_spin_new(client, ctx); > - } while (++i < count + extra); > - extra = i; > - > - sleep(duration); /* over the course of many timeslices */ > - > - runtime = calloc(extra, sizeof(*runtime)); > - igt_assert_eq(read_all(clients, getpid(), class, runtime), extra); > - > - /* > - * If we imagine that the timeslices are randomly distributed to > - * the clients, we would expect the variance to be modelled > - * by a drunken walk; ergo sqrt(num_timeslices). > - */ > - threshold = sqrt(1e9 * duration / timeslice_duration_ns); > - threshold *= timeslice_duration_ns; > - threshold *= extra > count; /* timeslicing active? */ > - threshold *= 3; /* CI safety factor before crying wolf */ > - threshold += 5e6; /* tolerance for 5ms measuring error */ > - > - expect = 1e9 * count * duration / extra; > - > - qsort(runtime, extra, sizeof(*runtime), cmp_u64); > - igt_info("%s: [%.1f, %.1f, %.1f] ms, expect %1.f +- %.1fms\n", > - name, > - 1e-6 * runtime[0], > - 1e-6 * runtime[extra / 2], > - 1e-6 * runtime[extra - 1], > - 1e-6 * expect, > - 1e-6 * threshold); > - > - assert_within_epsilon(runtime[extra / 2], expect, 20); > - igt_assert_f(runtime[extra - 1] - runtime[0] <= 2 * threshold, > - "Range of timeslices greater than tolerable: %.2fms > %.2fms; unfair!\n", > - 1e-6 * (runtime[extra - 1] - runtime[0]), > - 1e-6 * threshold * 2); > -} > - > -static void fair(int i915, int clients, int extra, int duration) > -{ > - static const char *names[] = { > - [I915_ENGINE_CLASS_RENDER] = "rcs", > - [I915_ENGINE_CLASS_COPY] = "bcs", > - [I915_ENGINE_CLASS_VIDEO] = "vcs", > - [I915_ENGINE_CLASS_VIDEO_ENHANCE] = "vecs", > - }; > - > - gem_quiescent_gpu(i915); > - > - for (int class = 0; class < ARRAY_SIZE(names); class++) { > - unsigned int count; > - uint32_t ctx; > - > - ctx = gem_context_create_for_class(i915, class, &count); > - if (!ctx) > - continue; > - gem_context_destroy(i915, ctx); > - > - igt_dynamic_f("%s", names[class]) { > - igt_drop_caches_set(i915, DROP_RESET_ACTIVE); > - igt_fork(child, 1) > - __fair(i915, clients, class, names[class], > - extra, duration); > - igt_waitchildren(); > - gem_quiescent_gpu(i915); > - } > - igt_drop_caches_set(i915, DROP_RESET_ACTIVE); > - } > -} > - > -static bool has_busy(int clients) > -{ > - bool ok; > - int me; > - > - me = find_me(clients, getpid()); > - ok = faccessat(me, "busy", 0, F_OK) == 0; > - close(me); > - > - return ok; > -} > - > -static void test_busy(int i915, int clients) > -{ > - const struct intel_execution_engine2 *e; > - intel_ctx_cfg_t cfg; > - const int frac[] = { 10, 25, 50 }; > - > - igt_fixture { > - igt_require(gem_has_contexts(i915)); > - igt_require(has_busy(clients)); > - cfg = intel_ctx_cfg_all_physical(i915); > - } > - > - igt_subtest_with_dynamic("busy") { > - for_each_ctx_cfg_engine(i915, &cfg, e) { > - if (!gem_class_can_store_dword(i915, e->class)) > - continue; > - igt_dynamic_f("%s", e->name) { > - gem_quiescent_gpu(i915); > - igt_fork(child, 1) > - busy_one(i915, clients, &cfg, e); > - igt_waitchildren(); > - gem_quiescent_gpu(i915); > - } > - } > - > - igt_dynamic("all-engines") { > - gem_quiescent_gpu(i915); > - igt_fork(child, 1) > - busy_all(i915, clients, &cfg); > - igt_waitchildren(); > - gem_quiescent_gpu(i915); > - } > - } > - > - for (int i = 0; i < ARRAY_SIZE(frac); i++) { > - igt_subtest_with_dynamic_f("split-%d", frac[i]) { > - for_each_ctx_cfg_engine(i915, &cfg, e) { > - igt_dynamic_f("%s", e->name) { > - gem_quiescent_gpu(i915); > - split(i915, clients, &cfg, e, frac[i]); > - gem_quiescent_gpu(i915); > - } > - } > - } > - } > - > - igt_subtest_group { > - igt_fixture { > - //igt_require(gem_scheduler_has_timeslicing(i915)); > - igt_require(gem_scheduler_has_preemption(i915)); > - } > - > - for (int i = 0; i < ARRAY_SIZE(frac); i++) { > - igt_subtest_with_dynamic_f("sema-%d", frac[i]) { > - for_each_ctx_cfg_engine(i915, &cfg, e) { > - if (!gem_class_has_mutable_submission(i915, e->class)) > - continue; > - > - igt_dynamic_f("%s", e->name) { > - igt_drop_caches_set(i915, DROP_RESET_ACTIVE); > - sema(i915, clients, &cfg, e, frac[i]); > - gem_quiescent_gpu(i915); > - } > - igt_drop_caches_set(i915, DROP_RESET_ACTIVE); > - } > - } > - } > - > - for (int i = 0; i < 4; i++) { > - igt_subtest_with_dynamic_f("fair-%d", (1 << i) - 1) > - fair(i915, clients, (1 << i) - 1, 5); > - } > - } > -} > - > -igt_main > -{ > - int i915 = -1, clients = -1; > - > - igt_fixture { > - int sys; > - > - /* Don't allow [too many] extra clients to be opened */ > - i915 = __drm_open_driver(DRIVER_INTEL); > - igt_require_gem(i915); > - > - sys = igt_sysfs_open(i915); > - igt_require(sys != -1); > - > - clients = openat(sys, "clients", O_RDONLY); > - igt_require(clients != -1); > - > - close(sys); > - usleep(10); > - } > - > - igt_subtest("pidname") > - pidname(i915, clients); > - > - igt_subtest("create") > - create(i915, clients); > - > - igt_subtest("recycle") > - recycle(i915, clients, 1); > - > - igt_subtest("recycle-many") > - recycle(i915, clients, 2 * sysconf(_SC_NPROCESSORS_ONLN)); > - > - igt_subtest_group > - test_busy(i915, clients); > - > - igt_fixture { > - close(clients); > - close(i915); > - } > -} > diff --git a/tests/meson.build b/tests/meson.build > index e20a8640..25a4e8a3 100644 > --- a/tests/meson.build > +++ b/tests/meson.build > @@ -235,7 +235,6 @@ i915_progs = [ > 'kms_psr2_sf', > 'kms_psr_stress_test', > 'kms_pwrite_crc', > - 'sysfs_clients', > 'sysfs_defaults', > 'sysfs_heartbeat_interval', > 'sysfs_preempt_timeout', ^ permalink raw reply [flat|nested] 4+ messages in thread
* [igt-dev] ✓ Fi.CI.BAT: success for Remove sysfs_clients 2023-01-19 16:40 [igt-dev] [PATCH i-g-t] Remove sysfs_clients Lucas De Marchi 2023-01-19 17:11 ` [igt-dev] [Intel-gfx] " Tvrtko Ursulin @ 2023-01-19 17:33 ` Patchwork 2023-01-20 21:34 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork 2 siblings, 0 replies; 4+ messages in thread From: Patchwork @ 2023-01-19 17:33 UTC (permalink / raw) To: Lucas De Marchi; +Cc: igt-dev [-- Attachment #1: Type: text/plain, Size: 4787 bytes --] == Series Details == Series: Remove sysfs_clients URL : https://patchwork.freedesktop.org/series/113102/ State : success == Summary == CI Bug Log - changes from CI_DRM_12613 -> IGTPW_8376 ==================================================== Summary ------- **SUCCESS** No regressions found. External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/index.html Participating hosts (38 -> 35) ------------------------------ Missing (3): fi-kbl-soraka fi-rkl-11600 fi-snb-2520m Known issues ------------ Here are the changes found in IGTPW_8376 that come from known issues: ### IGT changes ### #### Issues hit #### * igt@gem_lmem_swapping@basic: - fi-apl-guc: NOTRUN -> [SKIP][1] ([fdo#109271] / [i915#4613]) +3 similar issues [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/fi-apl-guc/igt@gem_lmem_swapping@basic.html * igt@i915_module_load@load: - fi-ctg-p8600: [PASS][2] -> [DMESG-WARN][3] ([i915#6020]) [2]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/fi-ctg-p8600/igt@i915_module_load@load.html [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/fi-ctg-p8600/igt@i915_module_load@load.html * igt@kms_chamelium_hpd@common-hpd-after-suspend: - fi-apl-guc: NOTRUN -> [SKIP][4] ([fdo#109271]) +1 similar issue [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/fi-apl-guc/igt@kms_chamelium_hpd@common-hpd-after-suspend.html #### Possible fixes #### * igt@fbdev@write: - fi-blb-e6850: [SKIP][5] ([fdo#109271]) -> [PASS][6] +4 similar issues [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/fi-blb-e6850/igt@fbdev@write.html [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/fi-blb-e6850/igt@fbdev@write.html * igt@kms_cursor_legacy@basic-busy-flip-before-cursor@atomic-transitions: - fi-bsw-n3050: [FAIL][7] ([i915#6298]) -> [PASS][8] [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/fi-bsw-n3050/igt@kms_cursor_legacy@basic-busy-flip-before-cursor@atomic-transitions.html [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/fi-bsw-n3050/igt@kms_cursor_legacy@basic-busy-flip-before-cursor@atomic-transitions.html * igt@kms_pipe_crc_basic@suspend-read-crc@pipe-c-dp-3: - {bat-dg2-9}: [FAIL][9] -> [PASS][10] [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/bat-dg2-9/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-c-dp-3.html [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/bat-dg2-9/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-c-dp-3.html * igt@prime_self_import@basic-with_one_bo_two_files: - fi-apl-guc: [DMESG-WARN][11] -> [PASS][12] [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/fi-apl-guc/igt@prime_self_import@basic-with_one_bo_two_files.html [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/fi-apl-guc/igt@prime_self_import@basic-with_one_bo_two_files.html {name}: This element is suppressed. This means it is ignored when computing the status of the difference (SUCCESS, WARNING, or FAILURE). [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271 [i915#3546]: https://gitlab.freedesktop.org/drm/intel/issues/3546 [i915#4312]: https://gitlab.freedesktop.org/drm/intel/issues/4312 [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613 [i915#4983]: https://gitlab.freedesktop.org/drm/intel/issues/4983 [i915#5354]: https://gitlab.freedesktop.org/drm/intel/issues/5354 [i915#6020]: https://gitlab.freedesktop.org/drm/intel/issues/6020 [i915#6257]: https://gitlab.freedesktop.org/drm/intel/issues/6257 [i915#6298]: https://gitlab.freedesktop.org/drm/intel/issues/6298 [i915#7077]: https://gitlab.freedesktop.org/drm/intel/issues/7077 [i915#7834]: https://gitlab.freedesktop.org/drm/intel/issues/7834 Build changes ------------- * CI: CI-20190529 -> None * IGT: IGT_7126 -> IGTPW_8376 CI-20190529: 20190529 CI_DRM_12613: c79a53a6143abdc789b46eb24cd7ce00924be491 @ git://anongit.freedesktop.org/gfx-ci/linux IGTPW_8376: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/index.html IGT_7126: 3aa9364a1e478010aba0d3dfe9183486560ecc60 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git Testlist changes ---------------- -igt@sysfs_clients@busy -igt@sysfs_clients@create -igt@sysfs_clients@fair-0 -igt@sysfs_clients@fair-1 -igt@sysfs_clients@fair-3 -igt@sysfs_clients@fair-7 -igt@sysfs_clients@pidname -igt@sysfs_clients@recycle -igt@sysfs_clients@recycle-many -igt@sysfs_clients@sema-10 -igt@sysfs_clients@sema-25 -igt@sysfs_clients@sema-50 -igt@sysfs_clients@split-10 -igt@sysfs_clients@split-25 -igt@sysfs_clients@split-50 == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/index.html [-- Attachment #2: Type: text/html, Size: 5304 bytes --] ^ permalink raw reply [flat|nested] 4+ messages in thread
* [igt-dev] ✓ Fi.CI.IGT: success for Remove sysfs_clients 2023-01-19 16:40 [igt-dev] [PATCH i-g-t] Remove sysfs_clients Lucas De Marchi 2023-01-19 17:11 ` [igt-dev] [Intel-gfx] " Tvrtko Ursulin 2023-01-19 17:33 ` [igt-dev] ✓ Fi.CI.BAT: success for " Patchwork @ 2023-01-20 21:34 ` Patchwork 2 siblings, 0 replies; 4+ messages in thread From: Patchwork @ 2023-01-20 21:34 UTC (permalink / raw) To: Lucas De Marchi; +Cc: igt-dev [-- Attachment #1: Type: text/plain, Size: 21865 bytes --] == Series Details == Series: Remove sysfs_clients URL : https://patchwork.freedesktop.org/series/113102/ State : success == Summary == CI Bug Log - changes from CI_DRM_12613_full -> IGTPW_8376_full ==================================================== Summary ------- **SUCCESS** No regressions found. External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/index.html Participating hosts (12 -> 7) ------------------------------ Missing (5): pig-kbl-iris shard-tglu shard-tglu-10 shard-tglu-9 pig-skl-6260u Possible new issues ------------------- Here are the unknown changes that may have been introduced in IGTPW_8376_full: ### IGT changes ### #### Suppressed #### The following results come from untrusted machines, tests, or statuses. They do not affect the overall result. * igt@i915_selftest@live@gem_contexts: - {shard-rkl}: [PASS][1] -> [INCOMPLETE][2] [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-rkl-4/igt@i915_selftest@live@gem_contexts.html [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-rkl-2/igt@i915_selftest@live@gem_contexts.html Known issues ------------ Here are the changes found in IGTPW_8376_full that come from known issues: ### IGT changes ### #### Issues hit #### * igt@gem_exec_fair@basic-none@rcs0: - shard-glk: [PASS][3] -> [FAIL][4] ([i915#2842]) +1 similar issue [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-glk5/igt@gem_exec_fair@basic-none@rcs0.html [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-glk6/igt@gem_exec_fair@basic-none@rcs0.html * igt@gem_exec_fair@basic-pace-solo@rcs0: - shard-apl: [PASS][5] -> [FAIL][6] ([i915#2842]) [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-apl6/igt@gem_exec_fair@basic-pace-solo@rcs0.html [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-apl7/igt@gem_exec_fair@basic-pace-solo@rcs0.html * igt@gem_exec_nop@basic-series: - shard-glk: [PASS][7] -> [DMESG-WARN][8] ([i915#118]) [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-glk9/igt@gem_exec_nop@basic-series.html [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-glk3/igt@gem_exec_nop@basic-series.html * igt@gen9_exec_parse@allowed-single: - shard-glk: [PASS][9] -> [DMESG-WARN][10] ([i915#5566] / [i915#716]) [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-glk9/igt@gen9_exec_parse@allowed-single.html [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-glk5/igt@gen9_exec_parse@allowed-single.html * igt@i915_pm_dc@dc9-dpms: - shard-apl: [PASS][11] -> [SKIP][12] ([fdo#109271]) [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-apl1/igt@i915_pm_dc@dc9-dpms.html [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-apl3/igt@i915_pm_dc@dc9-dpms.html * igt@kms_flip@flip-vs-suspend@c-dp1: - shard-apl: [PASS][13] -> [DMESG-WARN][14] ([i915#180]) [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-apl6/igt@kms_flip@flip-vs-suspend@c-dp1.html [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-apl3/igt@kms_flip@flip-vs-suspend@c-dp1.html * igt@runner@aborted: - shard-apl: NOTRUN -> [FAIL][15] ([i915#180] / [i915#4312]) [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-apl3/igt@runner@aborted.html - shard-glk: NOTRUN -> [FAIL][16] ([i915#4312]) [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-glk5/igt@runner@aborted.html #### Possible fixes #### * igt@drm_fdinfo@most-busy-check-all@rcs0: - {shard-rkl}: [FAIL][17] ([i915#7742]) -> [PASS][18] [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-rkl-3/igt@drm_fdinfo@most-busy-check-all@rcs0.html [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-rkl-5/igt@drm_fdinfo@most-busy-check-all@rcs0.html * igt@fbdev@nullptr: - {shard-rkl}: [SKIP][19] ([i915#2582]) -> [PASS][20] [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-rkl-1/igt@fbdev@nullptr.html [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-rkl-6/igt@fbdev@nullptr.html * igt@feature_discovery@psr1: - {shard-rkl}: [SKIP][21] ([i915#658]) -> [PASS][22] +1 similar issue [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-rkl-5/igt@feature_discovery@psr1.html [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-rkl-6/igt@feature_discovery@psr1.html * igt@gem_exec_fair@basic-none-solo@rcs0: - shard-apl: [FAIL][23] ([i915#2842]) -> [PASS][24] [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-apl1/igt@gem_exec_fair@basic-none-solo@rcs0.html [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-apl3/igt@gem_exec_fair@basic-none-solo@rcs0.html * igt@gem_exec_fair@basic-pace-share@rcs0: - shard-glk: [FAIL][25] ([i915#2842]) -> [PASS][26] [25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-glk1/igt@gem_exec_fair@basic-pace-share@rcs0.html [26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-glk2/igt@gem_exec_fair@basic-pace-share@rcs0.html * igt@gem_exec_flush@basic-batch-kernel-default-cmd: - {shard-rkl}: [SKIP][27] ([fdo#109313]) -> [PASS][28] [27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-rkl-4/igt@gem_exec_flush@basic-batch-kernel-default-cmd.html [28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-rkl-5/igt@gem_exec_flush@basic-batch-kernel-default-cmd.html * igt@gem_mmap_gtt@coherency: - {shard-rkl}: [SKIP][29] ([fdo#111656]) -> [PASS][30] [29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-rkl-6/igt@gem_mmap_gtt@coherency.html [30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-rkl-5/igt@gem_mmap_gtt@coherency.html * igt@gem_pread@bench: - {shard-rkl}: [SKIP][31] ([i915#3282]) -> [PASS][32] +7 similar issues [31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-rkl-3/igt@gem_pread@bench.html [32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-rkl-5/igt@gem_pread@bench.html * igt@gem_set_tiling_vs_blt@tiled-to-untiled: - {shard-rkl}: [SKIP][33] ([i915#3281]) -> [PASS][34] +5 similar issues [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-rkl-3/igt@gem_set_tiling_vs_blt@tiled-to-untiled.html [34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-rkl-5/igt@gem_set_tiling_vs_blt@tiled-to-untiled.html * igt@gen9_exec_parse@batch-without-end: - {shard-rkl}: [SKIP][35] ([i915#2527]) -> [PASS][36] [35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-rkl-3/igt@gen9_exec_parse@batch-without-end.html [36]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-rkl-5/igt@gen9_exec_parse@batch-without-end.html * igt@i915_pm_rc6_residency@rc6-idle@bcs0: - {shard-dg1}: [FAIL][37] ([i915#3591]) -> [PASS][38] [37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-dg1-17/igt@i915_pm_rc6_residency@rc6-idle@bcs0.html [38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-dg1-17/igt@i915_pm_rc6_residency@rc6-idle@bcs0.html * igt@i915_selftest@live@gt_heartbeat: - shard-glk: [DMESG-FAIL][39] ([i915#5334]) -> [PASS][40] [39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-glk2/igt@i915_selftest@live@gt_heartbeat.html [40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-glk4/igt@i915_selftest@live@gt_heartbeat.html * igt@i915_suspend@fence-restore-untiled: - {shard-rkl}: [FAIL][41] ([fdo#103375]) -> [PASS][42] +1 similar issue [41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-rkl-3/igt@i915_suspend@fence-restore-untiled.html [42]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-rkl-4/igt@i915_suspend@fence-restore-untiled.html * igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-180-async-flip: - {shard-rkl}: [SKIP][43] ([i915#1845] / [i915#4098]) -> [PASS][44] +15 similar issues [43]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-rkl-3/igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html [44]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-rkl-6/igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html * igt@kms_cursor_legacy@flip-vs-cursor@atomic-transitions-varying-size: - shard-glk: [FAIL][45] ([i915#2346]) -> [PASS][46] [45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-glk8/igt@kms_cursor_legacy@flip-vs-cursor@atomic-transitions-varying-size.html [46]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-glk1/igt@kms_cursor_legacy@flip-vs-cursor@atomic-transitions-varying-size.html * igt@kms_fbcon_fbt@psr: - {shard-rkl}: [SKIP][47] ([fdo#110189] / [i915#3955]) -> [PASS][48] [47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-rkl-5/igt@kms_fbcon_fbt@psr.html [48]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-rkl-6/igt@kms_fbcon_fbt@psr.html * igt@kms_frontbuffer_tracking@fbc-1p-pri-indfb-multidraw: - {shard-rkl}: [SKIP][49] ([i915#1849] / [i915#4098]) -> [PASS][50] +16 similar issues [49]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-rkl-5/igt@kms_frontbuffer_tracking@fbc-1p-pri-indfb-multidraw.html [50]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-rkl-6/igt@kms_frontbuffer_tracking@fbc-1p-pri-indfb-multidraw.html * igt@kms_psr@cursor_blt: - {shard-rkl}: [SKIP][51] ([i915#1072]) -> [PASS][52] +1 similar issue [51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-rkl-5/igt@kms_psr@cursor_blt.html [52]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-rkl-6/igt@kms_psr@cursor_blt.html * igt@kms_psr_stress_test@flip-primary-invalidate-overlay: - {shard-rkl}: [SKIP][53] ([i915#5461]) -> [PASS][54] [53]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-rkl-1/igt@kms_psr_stress_test@flip-primary-invalidate-overlay.html [54]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-rkl-6/igt@kms_psr_stress_test@flip-primary-invalidate-overlay.html * igt@kms_universal_plane@disable-primary-vs-flip-pipe-a: - {shard-rkl}: [SKIP][55] ([i915#1845] / [i915#4070] / [i915#4098]) -> [PASS][56] +1 similar issue [55]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-rkl-2/igt@kms_universal_plane@disable-primary-vs-flip-pipe-a.html [56]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-rkl-6/igt@kms_universal_plane@disable-primary-vs-flip-pipe-a.html * igt@kms_universal_plane@universal-plane-pageflip-windowed-pipe-b: - {shard-rkl}: [SKIP][57] ([i915#4098]) -> [PASS][58] +1 similar issue [57]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-rkl-3/igt@kms_universal_plane@universal-plane-pageflip-windowed-pipe-b.html [58]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-rkl-6/igt@kms_universal_plane@universal-plane-pageflip-windowed-pipe-b.html * igt@perf@gen12-oa-tlb-invalidate: - {shard-rkl}: [SKIP][59] ([fdo#109289]) -> [PASS][60] [59]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-rkl-5/igt@perf@gen12-oa-tlb-invalidate.html [60]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-rkl-6/igt@perf@gen12-oa-tlb-invalidate.html #### Warnings #### * igt@kms_fbcon_fbt@fbc-suspend: - shard-glk: [FAIL][61] ([i915#4767]) -> [FAIL][62] ([i915#64]) [61]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-glk2/igt@kms_fbcon_fbt@fbc-suspend.html [62]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/shard-glk3/igt@kms_fbcon_fbt@fbc-suspend.html {name}: This element is suppressed. This means it is ignored when computing the status of the difference (SUCCESS, WARNING, or FAILURE). [fdo#103375]: https://bugs.freedesktop.org/show_bug.cgi?id=103375 [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271 [fdo#109274]: https://bugs.freedesktop.org/show_bug.cgi?id=109274 [fdo#109279]: https://bugs.freedesktop.org/show_bug.cgi?id=109279 [fdo#109285]: https://bugs.freedesktop.org/show_bug.cgi?id=109285 [fdo#109289]: https://bugs.freedesktop.org/show_bug.cgi?id=109289 [fdo#109291]: https://bugs.freedesktop.org/show_bug.cgi?id=109291 [fdo#109295]: https://bugs.freedesktop.org/show_bug.cgi?id=109295 [fdo#109303]: https://bugs.freedesktop.org/show_bug.cgi?id=109303 [fdo#109307]: https://bugs.freedesktop.org/show_bug.cgi?id=109307 [fdo#109308]: https://bugs.freedesktop.org/show_bug.cgi?id=109308 [fdo#109313]: https://bugs.freedesktop.org/show_bug.cgi?id=109313 [fdo#109315]: https://bugs.freedesktop.org/show_bug.cgi?id=109315 [fdo#109506]: https://bugs.freedesktop.org/show_bug.cgi?id=109506 [fdo#110189]: https://bugs.freedesktop.org/show_bug.cgi?id=110189 [fdo#110723]: https://bugs.freedesktop.org/show_bug.cgi?id=110723 [fdo#111068]: https://bugs.freedesktop.org/show_bug.cgi?id=111068 [fdo#111614]: https://bugs.freedesktop.org/show_bug.cgi?id=111614 [fdo#111615]: https://bugs.freedesktop.org/show_bug.cgi?id=111615 [fdo#111656]: https://bugs.freedesktop.org/show_bug.cgi?id=111656 [fdo#111825]: https://bugs.freedesktop.org/show_bug.cgi?id=111825 [fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827 [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072 [i915#118]: https://gitlab.freedesktop.org/drm/intel/issues/118 [i915#1257]: https://gitlab.freedesktop.org/drm/intel/issues/1257 [i915#132]: https://gitlab.freedesktop.org/drm/intel/issues/132 [i915#1397]: https://gitlab.freedesktop.org/drm/intel/issues/1397 [i915#1722]: https://gitlab.freedesktop.org/drm/intel/issues/1722 [i915#1755]: https://gitlab.freedesktop.org/drm/intel/issues/1755 [i915#1769]: https://gitlab.freedesktop.org/drm/intel/issues/1769 [i915#180]: https://gitlab.freedesktop.org/drm/intel/issues/180 [i915#1825]: https://gitlab.freedesktop.org/drm/intel/issues/1825 [i915#1839]: https://gitlab.freedesktop.org/drm/intel/issues/1839 [i915#1845]: https://gitlab.freedesktop.org/drm/intel/issues/1845 [i915#1849]: https://gitlab.freedesktop.org/drm/intel/issues/1849 [i915#1850]: https://gitlab.freedesktop.org/drm/intel/issues/1850 [i915#2232]: https://gitlab.freedesktop.org/drm/intel/issues/2232 [i915#2346]: https://gitlab.freedesktop.org/drm/intel/issues/2346 [i915#2436]: https://gitlab.freedesktop.org/drm/intel/issues/2436 [i915#2437]: https://gitlab.freedesktop.org/drm/intel/issues/2437 [i915#2527]: https://gitlab.freedesktop.org/drm/intel/issues/2527 [i915#2575]: https://gitlab.freedesktop.org/drm/intel/issues/2575 [i915#2582]: https://gitlab.freedesktop.org/drm/intel/issues/2582 [i915#2587]: https://gitlab.freedesktop.org/drm/intel/issues/2587 [i915#2658]: https://gitlab.freedesktop.org/drm/intel/issues/2658 [i915#2672]: https://gitlab.freedesktop.org/drm/intel/issues/2672 [i915#280]: https://gitlab.freedesktop.org/drm/intel/issues/280 [i915#2842]: https://gitlab.freedesktop.org/drm/intel/issues/2842 [i915#2920]: https://gitlab.freedesktop.org/drm/intel/issues/2920 [i915#3116]: https://gitlab.freedesktop.org/drm/intel/issues/3116 [i915#3281]: https://gitlab.freedesktop.org/drm/intel/issues/3281 [i915#3282]: https://gitlab.freedesktop.org/drm/intel/issues/3282 [i915#3291]: https://gitlab.freedesktop.org/drm/intel/issues/3291 [i915#3297]: https://gitlab.freedesktop.org/drm/intel/issues/3297 [i915#3299]: https://gitlab.freedesktop.org/drm/intel/issues/3299 [i915#3318]: https://gitlab.freedesktop.org/drm/intel/issues/3318 [i915#3359]: https://gitlab.freedesktop.org/drm/intel/issues/3359 [i915#3361]: https://gitlab.freedesktop.org/drm/intel/issues/3361 [i915#3458]: https://gitlab.freedesktop.org/drm/intel/issues/3458 [i915#3469]: https://gitlab.freedesktop.org/drm/intel/issues/3469 [i915#3539]: https://gitlab.freedesktop.org/drm/intel/issues/3539 [i915#3546]: https://gitlab.freedesktop.org/drm/intel/issues/3546 [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555 [i915#3591]: https://gitlab.freedesktop.org/drm/intel/issues/3591 [i915#3637]: https://gitlab.freedesktop.org/drm/intel/issues/3637 [i915#3638]: https://gitlab.freedesktop.org/drm/intel/issues/3638 [i915#3689]: https://gitlab.freedesktop.org/drm/intel/issues/3689 [i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708 [i915#3734]: https://gitlab.freedesktop.org/drm/intel/issues/3734 [i915#3840]: https://gitlab.freedesktop.org/drm/intel/issues/3840 [i915#3886]: https://gitlab.freedesktop.org/drm/intel/issues/3886 [i915#3936]: https://gitlab.freedesktop.org/drm/intel/issues/3936 [i915#3955]: https://gitlab.freedesktop.org/drm/intel/issues/3955 [i915#404]: https://gitlab.freedesktop.org/drm/intel/issues/404 [i915#4070]: https://gitlab.freedesktop.org/drm/intel/issues/4070 [i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077 [i915#4078]: https://gitlab.freedesktop.org/drm/intel/issues/4078 [i915#4079]: https://gitlab.freedesktop.org/drm/intel/issues/4079 [i915#4083]: https://gitlab.freedesktop.org/drm/intel/issues/4083 [i915#4098]: https://gitlab.freedesktop.org/drm/intel/issues/4098 [i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103 [i915#4212]: https://gitlab.freedesktop.org/drm/intel/issues/4212 [i915#4213]: https://gitlab.freedesktop.org/drm/intel/issues/4213 [i915#4270]: https://gitlab.freedesktop.org/drm/intel/issues/4270 [i915#4312]: https://gitlab.freedesktop.org/drm/intel/issues/4312 [i915#4349]: https://gitlab.freedesktop.org/drm/intel/issues/4349 [i915#4391]: https://gitlab.freedesktop.org/drm/intel/issues/4391 [i915#4525]: https://gitlab.freedesktop.org/drm/intel/issues/4525 [i915#4538]: https://gitlab.freedesktop.org/drm/intel/issues/4538 [i915#4565]: https://gitlab.freedesktop.org/drm/intel/issues/4565 [i915#4767]: https://gitlab.freedesktop.org/drm/intel/issues/4767 [i915#4812]: https://gitlab.freedesktop.org/drm/intel/issues/4812 [i915#4818]: https://gitlab.freedesktop.org/drm/intel/issues/4818 [i915#4833]: https://gitlab.freedesktop.org/drm/intel/issues/4833 [i915#4852]: https://gitlab.freedesktop.org/drm/intel/issues/4852 [i915#4860]: https://gitlab.freedesktop.org/drm/intel/issues/4860 [i915#4880]: https://gitlab.freedesktop.org/drm/intel/issues/4880 [i915#4881]: https://gitlab.freedesktop.org/drm/intel/issues/4881 [i915#4884]: https://gitlab.freedesktop.org/drm/intel/issues/4884 [i915#5176]: https://gitlab.freedesktop.org/drm/intel/issues/5176 [i915#5235]: https://gitlab.freedesktop.org/drm/intel/issues/5235 [i915#5286]: https://gitlab.freedesktop.org/drm/intel/issues/5286 [i915#5289]: https://gitlab.freedesktop.org/drm/intel/issues/5289 [i915#5325]: https://gitlab.freedesktop.org/drm/intel/issues/5325 [i915#5327]: https://gitlab.freedesktop.org/drm/intel/issues/5327 [i915#533]: https://gitlab.freedesktop.org/drm/intel/issues/533 [i915#5334]: https://gitlab.freedesktop.org/drm/intel/issues/5334 [i915#5439]: https://gitlab.freedesktop.org/drm/intel/issues/5439 [i915#5461]: https://gitlab.freedesktop.org/drm/intel/issues/5461 [i915#5563]: https://gitlab.freedesktop.org/drm/intel/issues/5563 [i915#5566]: https://gitlab.freedesktop.org/drm/intel/issues/5566 [i915#6095]: https://gitlab.freedesktop.org/drm/intel/issues/6095 [i915#6230]: https://gitlab.freedesktop.org/drm/intel/issues/6230 [i915#6245]: https://gitlab.freedesktop.org/drm/intel/issues/6245 [i915#6248]: https://gitlab.freedesktop.org/drm/intel/issues/6248 [i915#6252]: https://gitlab.freedesktop.org/drm/intel/issues/6252 [i915#6258]: https://gitlab.freedesktop.org/drm/intel/issues/6258 [i915#6268]: https://gitlab.freedesktop.org/drm/intel/issues/6268 [i915#6301]: https://gitlab.freedesktop.org/drm/intel/issues/6301 [i915#64]: https://gitlab.freedesktop.org/drm/intel/issues/64 [i915#6433]: https://gitlab.freedesktop.org/drm/intel/issues/6433 [i915#6497]: https://gitlab.freedesktop.org/drm/intel/issues/6497 [i915#6524]: https://gitlab.freedesktop.org/drm/intel/issues/6524 [i915#658]: https://gitlab.freedesktop.org/drm/intel/issues/658 [i915#6621]: https://gitlab.freedesktop.org/drm/intel/issues/6621 [i915#6768]: https://gitlab.freedesktop.org/drm/intel/issues/6768 [i915#7037]: https://gitlab.freedesktop.org/drm/intel/issues/7037 [i915#7116]: https://gitlab.freedesktop.org/drm/intel/issues/7116 [i915#7118]: https://gitlab.freedesktop.org/drm/intel/issues/7118 [i915#716]: https://gitlab.freedesktop.org/drm/intel/issues/716 [i915#7178]: https://gitlab.freedesktop.org/drm/intel/issues/7178 [i915#7711]: https://gitlab.freedesktop.org/drm/intel/issues/7711 [i915#7742]: https://gitlab.freedesktop.org/drm/intel/issues/7742 [i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828 Build changes ------------- * CI: CI-20190529 -> None * IGT: IGT_7126 -> IGTPW_8376 * Piglit: piglit_4509 -> None CI-20190529: 20190529 CI_DRM_12613: c79a53a6143abdc789b46eb24cd7ce00924be491 @ git://anongit.freedesktop.org/gfx-ci/linux IGTPW_8376: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/index.html IGT_7126: 3aa9364a1e478010aba0d3dfe9183486560ecc60 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8376/index.html [-- Attachment #2: Type: text/html, Size: 16797 bytes --] ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-01-20 21:34 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-01-19 16:40 [igt-dev] [PATCH i-g-t] Remove sysfs_clients Lucas De Marchi 2023-01-19 17:11 ` [igt-dev] [Intel-gfx] " Tvrtko Ursulin 2023-01-19 17:33 ` [igt-dev] ✓ Fi.CI.BAT: success for " Patchwork 2023-01-20 21:34 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox