Vendor agnostic gputop
Subsystems (2)
cover Vendor agnostic gputop
From: Tvrtko Ursulin <[email protected]>
Just a re-send having rebased on top of latest tree.
Tvrtko Ursulin (8):
lib: Extract igt_drm_clients from intel_gpu_top
libdrmfdinfo: Allow specifying custom engine map
libdrmclients: Record client drm minor
libdrmclient: Support multiple DRM cards
libdrmfdinfo: Track largest engine index libdrmclient/intel_gpu_top: Decouple hardcoded engine assumptions
libdrmclient: Enforce client status sort order in the library
gputop: Basic vendor agnostic GPU top tool
lib/igt_drm_clients.c | 503 +++++++++++++++++++++++++++++ lib/igt_drm_clients.h | 87 ++++++ lib/igt_drm_fdinfo.c | 50 ++- lib/igt_drm_fdinfo.h | 16 +- lib/meson.build | 8 + tests/i915/drm_fdinfo.c | 19 +- tools/gputop.c | 260 +++++++++++++++ tools/intel_gpu_top.c | 677 +++++++++++----------------------------- tools/meson.build | 7 +- 9 files changed, 1113 insertions(+), 514 deletions(-) create mode 100644 lib/igt_drm_clients.c create mode 100644 lib/igt_drm_clients.h create mode 100644 tools/gputop.c
Signature · 1 line
2.34.1
PATCH 1/8 lib: Extract igt_drm_clients from intel_gpu_top
From: Tvrtko Ursulin <[email protected]>
Extract some code into a new library to prepare for further work towards making a vendor agnostic gputop tool.
--- lib/igt_drm_clients.c | 432 ++++++++++++++++++++++++++++++++++ lib/igt_drm_clients.h | 85 +++++++ lib/meson.build | 8 + tools/intel_gpu_top.c | 521 +++++++----------------------------------- tools/meson.build | 2 +- 5 files changed, 606 insertions(+), 442 deletions(-) create mode 100644 lib/igt_drm_clients.c create mode 100644 lib/igt_drm_clients.h
lib/igt_drm_clients.c new file +432 -0
@@ -0,0 +1,432 @@ +// SPDX-License-Identifier: MIT +/* +* Copyright © 2022 Intel Corporation +*/ + +#include <assert.h> +#include <ctype.h> +#include <dirent.h> +#include <fcntl.h> +#include <stdbool.h> +#include <stdio.h> +#include <string.h> +#include <strings.h> +#include <stdlib.h> +#include <sys/stat.h> +#include <sys/sysmacros.h> +#include <sys/types.h> +#include <unistd.h> + +#include "igt_drm_clients.h" +#include "igt_drm_fdinfo.h" + +#ifndef ARRAY_SIZE +#define ARRAY_SIZE (array) (sizeof(array) / sizeof(array[0])) +#endif + +/** +* igt_drm_clients_init: +* @private_data: private data to store in the struct +* +* Allocate and initialise the clients structure to be used with further API +* calls. +*/ +struct igt_drm_clients *igt_drm_clients_init (void *private_data) +{ +struct igt_drm_clients *clients; + + clients =malloc (sizeof (*clients)); +if (!clients) +return NULL ; + +memset (clients,0 ,sizeof (*clients)); + + clients->private_data = private_data; + +return clients; +} + +static struct igt_drm_client * +igt_drm_clients_find (struct igt_drm_clients *clients, +enum igt_drm_client_status status, +unsigned int id) +{ +unsigned int start, num; +struct igt_drm_client *c; + + start = status ==IGT_DRM_CLIENT_FREE ? clients->active_clients :0 ;/* Free block at the end. */ + num = clients->num_clients - start; + +for (c = &clients->client[start]; num; c++, num--) { +if (status != c->status) +continue ; + +if (status ==IGT_DRM_CLIENT_FREE || c->id == id) +return c; + } + +return NULL ; +} + +static void +igt_drm_client_update (struct igt_drm_client *c,unsigned int pid,char *name, +const struct drm_client_fdinfo *info) +{ +unsigned int i; + +/* Update client pid if it changed (fd sharing). */ +if (c->pid != pid) + c->pid = pid; + +/* Update client name if it changed (fd sharing). */ +if (strcmp (c->name, name)) { +char *p; + +strncpy (c->name, name,sizeof (c->name) -1 ); +strncpy (c->print_name, name,sizeof (c->print_name) -1 ); + + p = c->print_name; +while (*p) { +if (!isprint (*p)) + *p ='*' ; + p++; + } + } + + c->last_runtime =0 ; + c->total_runtime =0 ; + +for (i =0 ; i < c->clients->num_classes; i++) { +assert (i <ARRAY_SIZE (info->busy)); + +if (info->busy[i] < c->last[i]) +continue ;/* It will catch up soon. */ + + c->total_runtime += info->busy[i]; + c->val[i] = info->busy[i] - c->last[i]; + c->last_runtime += c->val[i]; + c->last[i] = info->busy[i]; + } + + c->samples++; + c->status =IGT_DRM_CLIENT_ALIVE ; +} + +static void +igt_drm_client_add (struct igt_drm_clients *clients, +const struct drm_client_fdinfo *info, +unsigned int pid,char *name) +{ +struct igt_drm_client *c; + +assert (!igt_drm_clients_find (clients,IGT_DRM_CLIENT_ALIVE , info->id)); + + c =igt_drm_clients_find (clients,IGT_DRM_CLIENT_FREE ,0 ); +if (!c) { +unsigned int idx = clients->num_clients; + +/* +* Grow the array a bit past the current requirement to avoid +* constant reallocation when clients are dynamically appearing +* and disappearing. +*/ + clients->num_clients += (clients->num_clients +2 ) /2 ; + clients->client =realloc (clients->client, + clients->num_clients *sizeof (*c)); +assert (clients->client); + + c = &clients->client[idx]; +memset (c,0 , (clients->num_clients - idx) *sizeof (*c)); + } + + c->id = info->id; + c->clients = clients; + c->val =calloc (clients->num_classes,sizeof (c->val)); + c->last =calloc (clients->num_classes,sizeof (c->last)); +assert (c->val && c->last); + +igt_drm_client_update (c, pid, name, info); +} + +static +void igt_drm_client_free (struct igt_drm_client *c,bool clear) +{ +free (c->val); +free (c->last); + +if (clear) +memset (c,0 ,sizeof (*c)); +} + +/** +* igt_drm_clients_sort: +* @clients: Previously initialised clients object +* @cmp: Client comparison callback +* +* Sort the clients array according to the passed in comparison callback which +* is compatible with the qsort(3) semantics. +* +* Caller has to ensure the callback is putting all active +* (IGT_DRM_CLIENT_ALIVE) clients in a single group at the head of the array +* before any other sorting criteria. +*/ +struct igt_drm_clients * +igt_drm_clients_sort (struct igt_drm_clients *clients, +int (*cmp)(const void *,const void *)) +{ +unsigned int active, free; +struct igt_drm_client *c; +int tmp; + +if (!clients) +return clients; + +qsort (clients->client, clients->num_clients,sizeof (*clients->client), + cmp); + +/* Trim excessive array space. */ + active =0 ; +igt_for_each_drm_client (clients, c, tmp) { +if (c->status !=IGT_DRM_CLIENT_ALIVE ) +break ;/* Active clients are first in the array. */ + active++; + } + + clients->active_clients = active; + +/* Trim excess free space when clients are exiting. */ + free = clients->num_clients - active; +if (free > clients->num_clients /2 ) { + active = clients->num_clients - free /2 ; +if (active != clients->num_clients) { + clients->num_clients = active; + clients->client =realloc (clients->client, + clients->num_clients * +sizeof (*c)); + } + } + +return clients; +} + +/** +* igt_drm_clients_free: +* @clients: Previously initialised clients object +* +* Free all clients and all memory associated with the clients structure. +*/ +void igt_drm_clients_free (struct igt_drm_clients *clients) +{ +struct igt_drm_client *c; +unsigned int tmp; + +igt_for_each_drm_client (clients, c, tmp) +igt_drm_client_free (c, false); + +free (clients->client); +free (clients); +} + +static DIR *opendirat (int at,const char *name) +{ +DIR *dir; +int fd; + + fd =openat (at, name,O_DIRECTORY ); +if (fd <0 ) +return NULL ; + + dir =fdopendir (fd); +if (!dir) +close (fd); + +return dir; +} + +static size_t readat2buf (int at,const char *name,char *buf,const size_t sz) +{ +ssize_t count; +int fd; + + fd =openat (at, name,O_RDONLY ); +if (fd <=0 ) +return 0 ; + + count =read (fd, buf, sz -1 ); +close (fd); + +if (count >0 ) { + buf[count] =0 ; + +return count; + }else { + buf[0 ] =0 ; + +return 0 ; + } +} + +static bool get_task_name (const char *buffer,char *out,unsigned long sz) +{ +char *s =index (buffer,'(' ); +char *e =rindex (buffer,')' ); +unsigned int len; + +if (!s || !e) +return false; +assert (e >= s); + + len = e - ++s; +if (!len || (len +1 ) >= sz) +return false; + +strncpy (out, s, len); + out[len] =0 ; + +return true; +} + +static bool is_drm_fd (int fd_dir,const char *name) +{ +struct stat stat; +int ret; + + ret =fstatat (fd_dir, name, &stat,0 ); + +return ret ==0 && + (stat.st_mode &S_IFMT ) ==S_IFCHR && +major (stat.st_rdev) ==226 ; +} + +/** +* igt_drm_clients_scan: +* @clients: Previously initialised clients object +* @filter_client: Callback for client filtering +* +* Scan all open file descriptors from all processes in order to find all DRM +* clients and manage our internal list. +*/ +struct igt_drm_clients * +igt_drm_clients_scan (struct igt_drm_clients *clients, +bool (*filter_client)(const struct igt_drm_clients *, +const struct drm_client_fdinfo *)) +{ +struct dirent *proc_dent; +struct igt_drm_client *c; +DIR *proc_dir; +int tmp; + +if (!clients) +return clients; + +/* +* First mark all alive clients as 'probe' so we can figure out which +* ones have existed since the previous scan. +*/ +igt_for_each_drm_client (clients, c, tmp) { +assert (c->status !=IGT_DRM_CLIENT_PROBE ); +if (c->status ==IGT_DRM_CLIENT_ALIVE ) + c->status =IGT_DRM_CLIENT_PROBE ; +else +break ;/* Free block at the end of array. */ + } + + proc_dir =opendir ("/proc" ); +if (!proc_dir) +return clients; + +while ((proc_dent =readdir (proc_dir)) !=NULL ) { +int pid_dir =-1 , fd_dir =-1 ; +struct dirent *fdinfo_dent; +char client_name[64 ] = { }; +unsigned int client_pid; +DIR *fdinfo_dir =NULL ; +char buf[4096 ]; +size_t count; + +if (proc_dent->d_type !=DT_DIR ) +continue ; +if (!isdigit (proc_dent->d_name[0 ])) +continue ; + + pid_dir =openat (dirfd (proc_dir), proc_dent->d_name, +O_DIRECTORY |O_RDONLY ); +if (pid_dir <0 ) +continue ; + + count =readat2buf (pid_dir,"stat" , buf,sizeof (buf)); +if (!count) + goto next; + + client_pid =atoi (buf); +if (!client_pid) + goto next; + +if (!get_task_name (buf, client_name,sizeof (client_name))) + goto next; + + fd_dir =openat (pid_dir,"fd" ,O_DIRECTORY |O_RDONLY ); +if (fd_dir <0 ) + goto next; + + fdinfo_dir =opendirat (pid_dir,"fdinfo" ); +if (!fdinfo_dir) + goto next; + +while ((fdinfo_dent =readdir (fdinfo_dir)) !=NULL ) { +struct drm_client_fdinfo info = { }; + +if (fdinfo_dent->d_type !=DT_REG ) +continue ; +if (!isdigit (fdinfo_dent->d_name[0 ])) +continue ; + +if (!is_drm_fd (fd_dir, fdinfo_dent->d_name)) +continue ; + +if (!__igt_parse_drm_fdinfo (dirfd (fdinfo_dir), + fdinfo_dent->d_name, + &info)) +continue ; + +if (filter_client && !filter_client (clients, &info)) +continue ; + +if (igt_drm_clients_find (clients,IGT_DRM_CLIENT_ALIVE , + info.id)) +continue ;/* Skip duplicate fds. */ + + c =igt_drm_clients_find (clients,IGT_DRM_CLIENT_PROBE , + info.id); +if (!c) +igt_drm_client_add (clients, &info, client_pid, + client_name); +else +igt_drm_client_update (c, client_pid, + client_name, &info); + } + +next: +if (fdinfo_dir) +closedir (fdinfo_dir); +if (fd_dir >=0 ) +close (fd_dir); +if (pid_dir >=0 ) +close (pid_dir); + } + +closedir (proc_dir); + +/* +* Clients still in 'probe' status after the scan have exited and need +* to be freed. +*/ +igt_for_each_drm_client (clients, c, tmp) { +if (c->status ==IGT_DRM_CLIENT_PROBE ) +igt_drm_client_free (c, true); +else if (c->status ==IGT_DRM_CLIENT_FREE ) +break ; + } + +return clients; +}
lib/igt_drm_clients.h new file +85 -0
85 lines not on this page · raw message
lib/meson.build +8 -0
@@ -20,6 +20,7 @@ lib_sources = [ 'igt_debugfs.c', 'igt_device.c', 'igt_device_scan.c', + 'igt_drm_clients.h', 'igt_drm_fdinfo.c', 'igt_aux.c', 'igt_gt.c',
@@ -232,6 +233,13 @@ lib_igt_device_scan_build = static_library('igt_device_scan', lib_igt_device_scan = declare_dependency(link_with : lib_igt_device_scan_build, include_directories : inc) +lib_igt_drm_clients_build = static_library('igt_drm_clients', + ['igt_drm_clients.c'], + include_directories : inc) + +lib_igt_drm_clients = declare_dependency(link_with : lib_igt_drm_clients_build, + include_directories : inc) + lib_igt_drm_fdinfo_build = static_library('igt_drm_fdinfo', ['igt_drm_fdinfo.c'], include_directories : inc)
tools/intel_gpu_top.c +80 -441
746 lines not on this page · raw message
tools/meson.build +1 -1
@@ -92,7 +92,7 @@ install_subdir('registers', install_dir : datadir) executable('intel_gpu_top', 'intel_gpu_top.c', install : true, install_rpath : bindir_rpathdir, - dependencies : [lib_igt_perf,lib_igt_device_scan,lib_igt_drm_fdinfo,math]) + dependencies : [lib_igt_perf,lib_igt_device_scan,lib_igt_drm_clients,lib_igt_drm_fdinfo,math]) executable('amd_hdmi_compliance', 'amd_hdmi_compliance.c', dependencies : [tool_deps],
Signature · 1 line
2.34.1
PATCH 2/8 libdrmfdinfo: Allow specifying custom engine map
In reply to Tvrtko UrsulinFrom: Tvrtko Ursulin <[email protected]>
Instead of hard coding the engine names, allow a map of names to indices to either be passed in or it gets auto-detected (less efficient) while parsing.
--- lib/igt_drm_clients.c | 18 +++++++++++++--- lib/igt_drm_clients.h | 3 ++- lib/igt_drm_fdinfo.c | 48 +++++++++++++++++++++++++++-------------- lib/igt_drm_fdinfo.h | 15 ++++++++++--- tests/i915/drm_fdinfo.c | 19 ++++++++++++---- tools/intel_gpu_top.c | 16 +++++++++++--- 6 files changed, 89 insertions(+), 30 deletions(-)
lib/igt_drm_clients.c +15 -3
@@ -302,14 +302,26 @@ static bool is_drm_fd(int fd_dir, const char *name)* igt_drm_clients_scan: * @clients: Previously initialised clients object * @filter_client: Callback for client filtering +* @name_map: Array of engine name strings +* @map_entries: Number of items in the @name_map array * * Scan all open file descriptors from all processes in order to find all DRM * clients and manage our internal list. +* +* If @name_map is provided each found engine in the fdinfo struct must +* correspond to one of the provided names. In this case the index of the engine +* stats tracked in struct igt_drm_client will be tracked under the same index +* as the engine name provided. +* +* If @name_map is not provided engine names will be auto-detected (this is +* less performant) and indices will correspond with auto-detected names as +* listed int clients->engine_class[]. */ struct igt_drm_clients *igt_drm_clients_scan (struct igt_drm_clients *clients,bool (*filter_client)(const struct igt_drm_clients *, -const struct drm_client_fdinfo *)) +const struct drm_client_fdinfo *), +const char **name_map,unsigned int map_entries) {struct dirent *proc_dent;struct igt_drm_client *c;
@@ -385,8 +397,8 @@ igt_drm_clients_scan(struct igt_drm_clients *clients,continue ;if (!__igt_parse_drm_fdinfo (dirfd (fdinfo_dir), - fdinfo_dent->d_name, - &info)) + fdinfo_dent->d_name, &info, + name_map, map_entries))continue ;if (filter_client && !filter_client (clients, &info))
lib/igt_drm_clients.h +2 -1
@@ -76,7 +76,8 @@ void igt_drm_clients_free(struct igt_drm_clients *clients);struct igt_drm_clients *igt_drm_clients_scan (struct igt_drm_clients *clients,bool (*filter_client)(const struct igt_drm_clients *, -const struct drm_client_fdinfo *)); +const struct drm_client_fdinfo *), +const char **name_map,unsigned int map_entries);struct igt_drm_clients * igt_drm_clients_sort(struct igt_drm_clients *clients,
lib/igt_drm_fdinfo.c +32 -16
97 lines not on this page · raw message
lib/igt_drm_fdinfo.h +12 -3
@@ -39,6 +39,7 @@ struct drm_client_fdinfo {unsigned int num_engines;unsigned int capacity[DRM_CLIENT_FDINFO_MAX_ENGINES ]; +char names[DRM_CLIENT_FDINFO_MAX_ENGINES ][256 ];uint64_t busy[DRM_CLIENT_FDINFO_MAX_ENGINES ]; };
@@ -47,11 +48,15 @@ struct drm_client_fdinfo {* * @drm_fd: DRM file descriptor * @info: Structure to populate with read data. Must be zeroed. +* @name_map: Optional array of strings representing engine names +* @map_entries: Number of strings in the names array * * Returns the number of valid drm fdinfo keys found or zero if not all * mandatory keys were present or no engines found. */ -unsigned int igt_parse_drm_fdinfo (int drm_fd,struct drm_client_fdinfo *info); +unsigned int +igt_parse_drm_fdinfo (int drm_fd,struct drm_client_fdinfo *info, +const char **name_map,unsigned int map_entries);/** * __igt_parse_drm_fdinfo: Parses the drm fdinfo file
@@ -59,11 +64,15 @@ unsigned int igt_parse_drm_fdinfo(int drm_fd, struct drm_client_fdinfo *info);* @dir: File descriptor pointing to /proc/pid/fdinfo directory * @fd: String representation of the file descriptor number to parse. * @info: Structure to populate with read data. Must be zeroed. +* @name_map: Optional array of strings representing engine names +* @map_entries: Number of strings in the names array * * Returns the number of valid drm fdinfo keys found or zero if not all * mandatory keys were present or no engines found. */ -unsigned int __igt_parse_drm_fdinfo (int dir,const char *fd, -struct drm_client_fdinfo *info); +unsigned int +__igt_parse_drm_fdinfo (int dir,const char *fd, +struct drm_client_fdinfo *info, +const char **name_map,unsigned int map_entries);#endif /* IGT_DRM_FDINFO_H */
tests/i915/drm_fdinfo.c +15 -4
@@ -35,6 +35,14 @@ IGT_TEST_DESCRIPTION("Test the i915 drm fdinfo data");const double tolerance =0.05f ;const unsigned long batch_duration_ns =500e6 ; +static const char *engine_map[] = { +"render" , +"copy" , +"video" , +"video-enhance" , +"compute" , +}; +#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), \
@@ -51,7 +59,8 @@ static void basics(int i915, unsigned int num_classes)struct drm_client_fdinfo info = { };unsigned int ret; - ret =igt_parse_drm_fdinfo (i915, &info); + ret =igt_parse_drm_fdinfo (i915, &info, engine_map, +ARRAY_SIZE (engine_map));igt_assert (ret);igt_assert (!strcmp (info.driver,"i915" ));
@@ -182,7 +191,8 @@ static uint64_t read_busy(int i915, unsigned int class) {struct drm_client_fdinfo info = { }; -igt_assert (igt_parse_drm_fdinfo (i915, &info)); +igt_assert (igt_parse_drm_fdinfo (i915, &info, engine_map, +ARRAY_SIZE (engine_map)));return info.busy[class]; }
@@ -268,7 +278,8 @@ static void read_busy_all(int i915, uint64_t *val) {struct drm_client_fdinfo info = { }; -igt_assert (igt_parse_drm_fdinfo (i915, &info)); +igt_assert (igt_parse_drm_fdinfo (i915, &info, engine_map, +ARRAY_SIZE (engine_map)));memcpy (val, info.busy,sizeof (info.busy)); }
@@ -719,7 +730,7 @@ igt_main i915 =__drm_open_driver (DRIVER_INTEL );igt_require_gem (i915); -igt_require (igt_parse_drm_fdinfo (i915, &info)); +igt_require (igt_parse_drm_fdinfo (i915, &info,NULL ,0 )); ctx =intel_ctx_create_all_physical (i915);
tools/intel_gpu_top.c +13 -3
@@ -2046,7 +2046,7 @@ static bool has_drm_fdinfo(const struct igt_device_card *card)if (fd <0 )return false; - cnt =igt_parse_drm_fdinfo (fd, &info); + cnt =igt_parse_drm_fdinfo (fd, &info,NULL ,0 );close (fd);
@@ -2082,6 +2082,13 @@ int main(int argc, char **argv) {unsigned int period_us =DEFAULT_PERIOD_MS *1000 ;struct igt_drm_clients *clients =NULL ; +static const char *engine_map[] = { +"render" , +"copy" , +"video" , +"video-enhance" , +"compute" , + };int con_w =-1 , con_h =-1 ;char *output_path =NULL ;struct engines *engines;
@@ -2231,7 +2238,8 @@ int main(int argc, char **argv) }pmu_sample (engines); -igt_drm_clients_scan (clients, client_match); +igt_drm_clients_scan (clients, client_match, engine_map, +ARRAY_SIZE (engine_map)); codename =igt_device_get_pretty_name (&card, false);while (!stop_top) {
@@ -2263,7 +2271,9 @@ int main(int argc, char **argv) disp_clients =display_clients (igt_drm_clients_scan (clients, - client_match)); + client_match, + engine_map, +ARRAY_SIZE (engine_map)));while (!consumed) { pops->open_struct (NULL );
Signature · 1 line
2.34.1
PATCH 3/8 libdrmclients: Record client drm minor
In reply to Tvrtko UrsulinFrom: Tvrtko Ursulin <[email protected]>
Prepare for supporting clients belonging to multiple DRM cards by storing the DRM minor in the client record.
--- lib/igt_drm_clients.c | 22 ++++++++++++++-------- lib/igt_drm_clients.h | 1 + 2 files changed, 15 insertions(+), 8 deletions(-)
lib/igt_drm_clients.c +14 -8
@@ -115,7 +115,7 @@ igt_drm_client_update(struct igt_drm_client *c, unsigned int pid, char *name,static void igt_drm_client_add (struct igt_drm_clients *clients,const struct drm_client_fdinfo *info, -unsigned int pid,char *name) +unsigned int pid,char *name,unsigned int drm_minor) {struct igt_drm_client *c;
@@ -140,6 +140,7 @@ igt_drm_client_add(struct igt_drm_clients *clients, } c->id = info->id; + c->drm_minor = drm_minor; c->clients = clients; c->val =calloc (clients->num_classes,sizeof (c->val)); c->last =calloc (clients->num_classes,sizeof (c->last));
@@ -286,16 +287,21 @@ static bool get_task_name(const char *buffer, char *out, unsigned long sz)return true; } -static bool is_drm_fd (int fd_dir,const char *name) +static bool is_drm_fd (int fd_dir,const char *name,unsigned int *minor) {struct stat stat;int ret; ret =fstatat (fd_dir, name, &stat,0 ); -return ret ==0 && - (stat.st_mode &S_IFMT ) ==S_IFCHR && -major (stat.st_rdev) ==226 ; +if (ret ==0 && + (stat.st_mode &S_IFMT ) ==S_IFCHR && +major (stat.st_rdev) ==226 ) { + *minor =minor (stat.st_rdev); +return true; + } + +return false; }/**
@@ -348,10 +354,10 @@ igt_drm_clients_scan(struct igt_drm_clients *clients,return clients;while ((proc_dent =readdir (proc_dir)) !=NULL ) { +unsigned int client_pid, minor =0 ;int pid_dir =-1 , fd_dir =-1 ;struct dirent *fdinfo_dent;char client_name[64 ] = { }; -unsigned int client_pid;DIR *fdinfo_dir =NULL ;char buf[4096 ];size_t count;
@@ -393,7 +399,7 @@ igt_drm_clients_scan(struct igt_drm_clients *clients,if (!isdigit (fdinfo_dent->d_name[0 ]))continue ; -if (!is_drm_fd (fd_dir, fdinfo_dent->d_name)) +if (!is_drm_fd (fd_dir, fdinfo_dent->d_name, &minor))continue ; if (!__igt_parse_drm_fdinfo(dirfd(fdinfo_dir),
@@ -412,7 +418,7 @@ igt_drm_clients_scan(struct igt_drm_clients *clients, info.id);if (!c)igt_drm_client_add (clients, &info, client_pid, - client_name); + client_name, minor);else igt_drm_client_update (c, client_pid, client_name, &info);
lib/igt_drm_clients.h +1 -0
@@ -44,6 +44,7 @@ struct igt_drm_client {enum igt_drm_client_status status;unsigned int id;/* DRM client id from fdinfo. */ +unsigned int drm_minor;/* DRM minor of this client. */ unsigned int pid;/* PID which has this DRM fd open. */ char name[24 ];/* Process name of the owning PID. */ char print_name[24 ];/* Name without any non-printable characters. */
Signature · 1 line
2.34.1
PATCH 4/8 libdrmclient: Support multiple DRM cards
In reply to Tvrtko UrsulinFrom: Tvrtko Ursulin <[email protected]>
Require DRM minor match during client lookup.
--- lib/igt_drm_clients.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-)
lib/igt_drm_clients.c +8 -6
@@ -49,7 +49,7 @@ struct igt_drm_clients *igt_drm_clients_init(void *private_data)static struct igt_drm_client *igt_drm_clients_find (struct igt_drm_clients *clients,enum igt_drm_client_status status, -unsigned int id) +unsigned int drm_minor,unsigned int id) {unsigned int start, num;struct igt_drm_client *c;
@@ -61,7 +61,8 @@ igt_drm_clients_find(struct igt_drm_clients *clients,if (status != c->status)continue ; -if (status ==IGT_DRM_CLIENT_FREE || c->id == id) +if (status ==IGT_DRM_CLIENT_FREE || + (drm_minor == c->drm_minor && c->id == id))return c; }
@@ -119,9 +120,10 @@ igt_drm_client_add(struct igt_drm_clients *clients, {struct igt_drm_client *c; -assert (!igt_drm_clients_find (clients,IGT_DRM_CLIENT_ALIVE , info->id)); +assert (!igt_drm_clients_find (clients,IGT_DRM_CLIENT_ALIVE , + drm_minor, info->id)); - c =igt_drm_clients_find (clients,IGT_DRM_CLIENT_FREE ,0 ); + c =igt_drm_clients_find (clients,IGT_DRM_CLIENT_FREE ,0 ,0 );if (!c) {unsigned int idx = clients->num_clients;
@@ -411,11 +413,11 @@ igt_drm_clients_scan(struct igt_drm_clients *clients,continue ;if (igt_drm_clients_find (clients,IGT_DRM_CLIENT_ALIVE , - info.id)) + minor, info.id))continue ;/* Skip duplicate fds. */ c =igt_drm_clients_find (clients,IGT_DRM_CLIENT_PROBE , - info.id); + minor, info.id);if (!c)igt_drm_client_add (clients, &info, client_pid, client_name, minor);
Signature · 1 line
2.34.1
PATCH 5/8 libdrmfdinfo: Track largest engine index
In reply to Tvrtko UrsulinFrom: Tvrtko Ursulin <[email protected]>
Prep code for incoming work.
--- lib/igt_drm_fdinfo.c | 2 ++ lib/igt_drm_fdinfo.h | 1 + 2 files changed, 3 insertions(+)
lib/igt_drm_fdinfo.c +2 -0
@@ -162,6 +162,8 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info, info->capacity[idx] =1 ; info->busy[idx] = val; info->num_engines++; +if (idx > info->last_engine_index) + info->last_engine_index = idx; } }else if (!strncmp (l,"drm-engine-capacity-" ,20 )) { idx = parse_engine(l, info,
lib/igt_drm_fdinfo.h +1 -0
@@ -38,6 +38,7 @@ struct drm_client_fdinfo {unsigned long id;unsigned int num_engines; +unsigned int last_engine_index;unsigned int capacity[DRM_CLIENT_FDINFO_MAX_ENGINES ];char names[DRM_CLIENT_FDINFO_MAX_ENGINES ][256 ];uint64_t busy[DRM_CLIENT_FDINFO_MAX_ENGINES ];
Signature · 1 line
2.34.1
PATCH 6/8 libdrmclient/intel_gpu_top: Decouple hardcoded engine assumptions
In reply to Tvrtko UrsulinFrom: Tvrtko Ursulin <[email protected]>
Intel_gpu_top gets it's main engine configuration data via PMU probe and uses that for per client view as well. Furthemore code so far assumed only clients belonging from a single DRM card would be tracked in a single clients list.
Break this inter-dependency by moving the engine data to be per client and also have libdrmclient probe the engine configuration independently using the previously added libdrmfdinfo facilities.
--- lib/igt_drm_clients.c | 38 +++++++++++-- lib/igt_drm_clients.h | 14 ++--- tools/intel_gpu_top.c | 127 +++++++++++++++++++++++++++++++----------- 3 files changed, 134 insertions(+), 45 deletions(-)
lib/igt_drm_clients.c +34 -4
@@ -97,7 +97,7 @@ igt_drm_client_update(struct igt_drm_client *c, unsigned int pid, char *name, c->last_runtime =0 ; c->total_runtime =0 ; -for (i =0 ; i < c->clients->num_classes; i++) { +for (i =0 ; i <= c->engines->max_engine_id; i++) {assert (i <ARRAY_SIZE (info->busy));if (info->busy[i] < c->last[i])
@@ -119,6 +119,7 @@ igt_drm_client_add(struct igt_drm_clients *clients, unsigned int pid, char *name, unsigned int drm_minor) { struct igt_drm_client *c; +unsigned int i;assert (!igt_drm_clients_find (clients,IGT_DRM_CLIENT_ALIVE , drm_minor, info->id));
@@ -144,8 +145,28 @@ igt_drm_client_add(struct igt_drm_clients *clients, c->id = info->id; c->drm_minor = drm_minor; c->clients = clients; - c->val =calloc (clients->num_classes,sizeof (c->val)); - c->last =calloc (clients->num_classes,sizeof (c->last)); + c->engines =malloc (sizeof (*c->engines)); +assert (c->engines); +memset (c->engines,0 ,sizeof (*c->engines)); + c->engines->capacity =calloc (info->last_engine_index +1 , +sizeof (*c->engines->capacity)); +assert (c->engines->capacity); + c->engines->names =calloc (info->last_engine_index +1 , +sizeof (*c->engines->names)); +assert (c->engines->names); + +for (i =0 ; i <= info->last_engine_index; i++) { +if (!info->capacity[i]) +continue ; + + c->engines->capacity[i] = info->capacity[i]; + c->engines->names[i] =strdup (info->names[i]); +assert (c->engines->names[i]); + c->engines->num_engines++; + c->engines->max_engine_id = i; + } + c->val =calloc (c->engines->max_engine_id +1 ,sizeof (c->val)); + c->last =calloc (c->engines->max_engine_id +1 ,sizeof (c->last));assert (c->val && c->last);igt_drm_client_update (c, pid, name, info);
@@ -154,6 +175,15 @@ igt_drm_client_add(struct igt_drm_clients *clients,static void igt_drm_client_free (struct igt_drm_client *c,bool clear) { +unsigned int i; + +if (c->engines) { +for (i =0 ; i <= c->engines->max_engine_id; i++) +free (c->engines->names[i]); +free (c->engines->capacity); +free (c->engines->names); + } +free (c->engines);free (c->val);free (c->last);
@@ -323,7 +353,7 @@ static bool is_drm_fd(int fd_dir, const char *name, unsigned int *minor)* * If @name_map is not provided engine names will be auto-detected (this is * less performant) and indices will correspond with auto-detected names as -* listed int clients->engine_class[]. +* listed int clients->engines->names[]. */ struct igt_drm_clients * igt_drm_clients_scan(struct igt_drm_clients *clients,
lib/igt_drm_clients.h +7 -7
@@ -31,10 +31,12 @@ enum igt_drm_client_status { IGT_DRM_CLIENT_PROBE }; -struct igt_drm_client_engine_class { -unsigned int engine_class; -const char *name; -unsigned int num_engines; +struct igt_drm_client_engines { +unsigned int num_engines;/* Number of discovered active engines. */ +unsigned int max_engine_id;/* Largest engine index discovered. +(Can differ from num_engines - 1 when using the engine map facility.) */ +unsigned int *capacity;/* Array of engine capacities as parsed from fdinfo. */ +char **names;/* Array of engine names, either auto-detected or from the passed in engine map. */ };struct igt_drm_clients ;
@@ -43,6 +45,7 @@ struct igt_drm_client {struct igt_drm_clients *clients;/* Owning list. */ enum igt_drm_client_status status; +struct igt_drm_client_engines *engines;/* Engines used by this client, to map with busynees data. */ unsigned int id;/* DRM client id from fdinfo. */ unsigned int drm_minor;/* DRM minor of this client. */ unsigned int pid;/* PID which has this DRM fd open. */
@@ -59,9 +62,6 @@ struct igt_drm_clients {unsigned int num_clients;unsigned int active_clients; -unsigned int num_classes; -struct igt_drm_client_engine_class *engine_class; -void *private_data;struct igt_drm_client *client;/* Must be last. */
tools/intel_gpu_top.c +93 -34
287 lines not on this page · raw message
Signature · 1 line
2.34.1
PATCH 7/8 libdrmclient: Enforce client status sort order in the library
In reply to Tvrtko UrsulinFrom: Tvrtko Ursulin <[email protected]>
Some libdrmclient operations require that inactive clients are last in the list. Rather than relying on callers of the library sort routine to implement their comparison callbacks correctly, enforce this order directly in the library and let callers comparison callbacks concern themselves only with ordering they are interested in.
--- lib/igt_drm_clients.c | 37 +++++++++++++++----- lib/igt_drm_clients.h | 2 +- tools/intel_gpu_top.c | 81 +++++++++++++++++++------------------------ 3 files changed, 65 insertions(+), 55 deletions(-)
lib/igt_drm_clients.c +29 -8
@@ -191,22 +191,38 @@ void igt_drm_client_free(struct igt_drm_client *c, bool clear)memset (c,0 ,sizeof (*c)); } +struct sort_context +{ +int (*user_cmp)(const void *,const void *,void *); +}; + +static int sort_cmp (const void *_a,const void *_b,void *_ctx) +{ +const struct sort_context *ctx = _ctx; +const struct igt_drm_client *a = _a; +const struct igt_drm_client *b = _b; +int cmp = b->status - a->status; + +if (cmp ==0 ) +return ctx->user_cmp (_a, _b, _ctx); +else +return cmp; +} +/** * igt_drm_clients_sort: * @clients: Previously initialised clients object * @cmp: Client comparison callback * * Sort the clients array according to the passed in comparison callback which -* is compatible with the qsort(3) semantics. -* -* Caller has to ensure the callback is putting all active -* (IGT_DRM_CLIENT_ALIVE) clients in a single group at the head of the array -* before any other sorting criteria. +* is compatible with the qsort(3) semantics, with the third void * argument +* being unused. */ struct igt_drm_clients *igt_drm_clients_sort (struct igt_drm_clients *clients, -int (*cmp)(const void *,const void *)) +int (*cmp)(const void *,const void *,void *)) { +struct sort_context ctx = { .user_cmp = cmp };unsigned int active, free;struct igt_drm_client *c;int tmp;
@@ -214,8 +230,13 @@ igt_drm_clients_sort(struct igt_drm_clients *clients,if (!clients)return clients; -qsort (clients->client, clients->num_clients,sizeof (*clients->client), - cmp); +/* +* Enforce client->status ordering (active followed by free) by running +* the user provided comparison callback wrapped in the one internal +* to the library. +*/ +qsort_r (clients->client, clients->num_clients,sizeof (*clients->client), + sort_cmp, &ctx);/* Trim excessive array space. */ active =0 ;
lib/igt_drm_clients.h +1 -1
@@ -82,6 +82,6 @@ igt_drm_clients_scan(struct igt_drm_clients *clients,struct igt_drm_clients *igt_drm_clients_sort (struct igt_drm_clients *clients, -int (*cmp)(const void *,const void *)); +int (*cmp)(const void *,const void *,void *));#endif /* IGT_DRM_CLIENTS_H */
tools/intel_gpu_top.c +35 -46
127 lines not on this page · raw message
Signature · 1 line
2.34.1
PATCH 8/8 gputop: Basic vendor agnostic GPU top tool
In reply to Tvrtko UrsulinFrom: Tvrtko Ursulin <[email protected]>
Rudimentary vendor agnostic example of how lib_igt_drm_clients can be used to display a sorted by card and usage list of processes using GPUs.
Borrows a bit of code from intel_gpu_top but for now omits the fancy features like interactive functionality, card selection, client aggregation, sort modes, JSON output and pretty engine names. Also no support for global GPU or system metrics.
On the other hand it shows clients from all DRM cards which intel_gpu_top does not do.
--- tools/gputop.c | 260 ++++++++++++++++++++++++++++++++++++++++++++++ tools/meson.build | 5 + 2 files changed, 265 insertions(+) create mode 100644 tools/gputop.c
tools/gputop.c new file +260 -0
@@ -0,0 +1,260 @@ +// SPDX-License-Identifier: MIT +/* +* Copyright © 2022 Intel Corporation +*/ + +#include <assert.h> +#include <ctype.h> +#include <dirent.h> +#include <errno.h> +#include <fcntl.h> +#include <inttypes.h> +#include <limits.h> +#include <locale.h> +#include <math.h> +#include <poll.h> +#include <signal.h> +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/ioctl.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <unistd.h> +#include <termios.h> +#include <sys/sysmacros.h> +#include <stdbool.h> + +#include "igt_drm_clients.h" +#include "igt_drm_fdinfo.h" + +static const char *bars[] = {" " ,"▏" ,"▎" ,"▍" ,"▌" ,"▋" ,"▊" ,"▉" ,"█" }; + +static void n_spaces (const unsigned int n) +{ +unsigned int i; + +for (i =0 ; i < n; i++) +putchar (' ' ); +} + +static void print_percentage_bar (double percent,int max_len) +{ +int bar_len, i, len = max_len -2 ; +const int w =8 ; + +assert (max_len >0 ); + + bar_len =ceil (w * percent * len /100.0 ); +if (bar_len > w * len) + bar_len = w * len; + +putchar ('|' ); + +for (i = bar_len; i >= w; i -= w) +printf ("%s" , bars[w]); +if (i) +printf ("%s" , bars[i]); + + len -= (bar_len + (w -1 )) / w; +n_spaces (len); + +putchar ('|' ); +} + +static int +print_client_header (struct igt_drm_client *c,int lines,int con_w,int con_h, +int *engine_w) +{ +const char *pidname =" PID NAME " ; +int ret, len =strlen (pidname); + +if (lines++ >= con_h || len >= con_w) +return lines; +printf ("\033[7m" ); + ret =printf ("DRM minor %u" , c->drm_minor); +n_spaces (con_w - ret); + +if (lines++ >= con_h) +return lines; +printf ("\n%s" , pidname); + +if (c->engines->num_engines) { +unsigned int i; +int width; + + *engine_w = width = (con_w - len) / c->engines->num_engines; + +for (i =0 ; i <= c->engines->max_engine_id; i++) { +const char *name = c->engines->names[i]; +int name_len =strlen (name); +int pad = (width - name_len) /2 ; +int spaces = width - pad - name_len; + +if (!name) +continue ; + +if (pad <0 || spaces <0 ) +continue ; + +n_spaces (pad); +printf ("%s" , name); +n_spaces (spaces); + len += pad + name_len + spaces; + } + } + +n_spaces (con_w - len); +printf ("\033[0m\n" ); + +return lines; +} + + +static bool +newheader (const struct igt_drm_client *c,const struct igt_drm_client *pc) +{ +return !pc || c->drm_minor != pc->drm_minor; +} + +static int +print_client (struct igt_drm_client *c,struct igt_drm_client **prevc, +double t,int lines,int con_w,int con_h, +unsigned int period_us,int *engine_w) +{ +unsigned int i; + +/* Filter out idle clients. */ +if (!c->total_runtime || c->samples <2 ) +return lines; + +/* Print header when moving to a different DRM card. */ +if (newheader (c, *prevc)) { + lines =print_client_header (c, lines, con_w, con_h, engine_w); +if (lines >= con_h) +return lines; + } + + *prevc = c; + +printf ("%8u %17s " , c->pid, c->print_name); + lines++; + +for (i =0 ; c->samples >1 && i <= c->engines->max_engine_id; i++) { +double pct; + +if (!c->engines->capacity[i]) +continue ; + + pct = (double )c->val[i] / period_us /1e3 *100 / + c->engines->capacity[i]; + +/* +* Guard against fluctuations between our scanning period and +* GPU times as exported by the kernel in fdinfo. +*/ +if (pct >100.0 ) + pct =100.0 ; + +print_percentage_bar (pct, *engine_w); + } + +putchar ('\n' ); + +return lines; +} + +static int +__client_id_cmp (const struct igt_drm_client *a, +const struct igt_drm_client *b) +{ +if (a->id > b->id) +return 1 ; +else if (a->id < b->id) +return -1 ; +else +return 0 ; +} + +static int client_cmp (const void *_a,const void *_b,void *unused) +{ +const struct igt_drm_client *a = _a; +const struct igt_drm_client *b = _b; +long val_a, val_b; + +/* DRM cards into consecutive buckets first. */ + val_a = a->drm_minor; + val_b = b->drm_minor; +if (val_a > val_b) +return 1 ; +else if (val_b > val_a) +return -1 ; + +/* +* Within buckets sort by last sampling period aggregated runtime, with +* client id as a tie-breaker. +*/ + val_a = a->last_runtime; + val_b = b->last_runtime; +if (val_a == val_b) +return __client_id_cmp (a, b); +else if (val_b > val_a) +return 1 ; +else +return -1 ; + +} + +int main (int argc,char **argv) +{ +unsigned int period_us =2e6 ; +struct igt_drm_clients *clients =NULL ; +int con_w =-1 , con_h =-1 ; + + clients =igt_drm_clients_init (NULL ); +if (!clients) +exit (1 ); + +igt_drm_clients_scan (clients,NULL ,NULL ,0 ); + +for (;;) { +struct igt_drm_client *c, *prevc =NULL ; +int i, engine_w =0 , lines =0 ; +struct winsize ws; + +if (ioctl (0 ,TIOCGWINSZ , &ws) !=-1 ) { + con_w = ws.ws_col; + con_h = ws.ws_row; +if (con_w ==0 && con_h ==0 ) { +/* Serial console. */ + con_w =80 ; + con_h =24 ; + } + } + +igt_drm_clients_scan (clients,NULL ,NULL ,0 ); +igt_drm_clients_sort (clients, client_cmp); + +printf ("\033[H\033[J" ); + +igt_for_each_drm_client (clients, c, i) { +assert (c->status !=IGT_DRM_CLIENT_PROBE ); +if (c->status !=IGT_DRM_CLIENT_ALIVE ) +break ;/* Active clients are first in the array. */ + + lines =print_client (c, &prevc, (double )period_us /1e6 , + lines, con_w, con_h, period_us, + &engine_w); +if (lines >= con_h) +break ; + } + +if (lines++ < con_h) +printf ("\n" ); + +usleep (period_us); + } + +return 0 ; +}
tools/meson.build +5 -0
@@ -70,6 +70,11 @@ if libudev.found() install : true) endif +executable('gputop', 'gputop.c', + install : true, + install_rpath : bindir_rpathdir, + dependencies : [lib_igt_drm_clients,lib_igt_drm_fdinfo,math]) + intel_l3_parity_src = [ 'intel_l3_parity.c', 'intel_l3_udev_listener.c' ] executable('intel_l3_parity', sources : intel_l3_parity_src, dependencies : tool_deps,
Signature · 1 line
2.34.1
Re: [igt-dev] [PATCH i-g-t 8/8] gputop: Basic vendor agnostic GPU top tool
Am 16.06.22 um 16:06 schrieb Tvrtko Ursulin:
Quoted 10 lines
From: Tvrtko Ursulin <[email protected]>
Rudimentary vendor agnostic example of how
lib_igt_drm_clientscan be used to display a sorted by card and usage list of processes using GPUs.Borrows a bit of code from
intel_gpu_topbut for now omits the fancy features like interactive functionality, card selection, client aggregation, sort modes, JSON output and pretty engine names. Also no support for global GPU or system metrics.
Quoted 6 lines
On the other hand it shows clients from all DRM cards which
intel_gpu_topdoes not do.Signed-off-by Tvrtko Ursulin <[email protected]>Cc Rob Clark <[email protected]>Cc Christian König <[email protected]>
LGTM, Acked-by: Christian König <[email protected]>
Quoted 288 lines
--- tools/gputop.c | 260 ++++++++++++++++++++++++++++++++++++++++++++++ tools/meson.build | 5 + 2 files changed, 265 insertions(+)create mode 100644
tools/gputop.ctools/gputop.c new file +260
-0@@ -0,0 +1,260 @@ +// SPDX-License-Identifier: MIT +/* +* Copyright © 2022 Intel Corporation +*/ + +#include <assert.h> +#include <ctype.h> +#include <dirent.h> +#include <errno.h> +#include <fcntl.h> +#include <inttypes.h> +#include <limits.h> +#include <locale.h> +#include <math.h> +#include <poll.h> +#include <signal.h> +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/ioctl.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <unistd.h> +#include <termios.h> +#include <sys/sysmacros.h> +#include <stdbool.h> + +#include "igt_drm_clients.h" +#include "igt_drm_fdinfo.h" + +static const char *bars[] = {" " ,"▏" ,"▎" ,"▍" ,"▌" ,"▋" ,"▊" ,"▉" ,"█" }; + +static void n_spaces (const unsigned int n) +{ +unsigned int i; + +for (i =0 ; i < n; i++) +putchar (' ' ); +} + +static void print_percentage_bar (double percent,int max_len) +{ +int bar_len, i, len = max_len -2 ; +const int w =8 ; + +assert (max_len >0 ); + + bar_len =ceil (w * percent * len /100.0 ); +if (bar_len > w * len) + bar_len = w * len; + +putchar ('|' ); + +for (i = bar_len; i >= w; i -= w) +printf ("%s" , bars[w]); +if (i) +printf ("%s" , bars[i]); + + len -= (bar_len + (w -1 )) / w; +n_spaces (len); + +putchar ('|' ); +} + +static int +print_client_header (struct igt_drm_client *c,int lines,int con_w,int con_h, +int *engine_w) +{ +const char *pidname =" PID NAME " ; +int ret, len =strlen (pidname); + +if (lines++ >= con_h || len >= con_w) +return lines; +printf ("\033[7m" ); + ret =printf ("DRM minor %u" , c->drm_minor); +n_spaces (con_w - ret); + +if (lines++ >= con_h) +return lines; +printf ("\n%s" , pidname); + +if (c->engines->num_engines) { +unsigned int i; +int width; + + *engine_w = width = (con_w - len) / c->engines->num_engines; + +for (i =0 ; i <= c->engines->max_engine_id; i++) { +const char *name = c->engines->names[i]; +int name_len =strlen (name); +int pad = (width - name_len) /2 ; +int spaces = width - pad - name_len; + +if (!name) +continue ; + +if (pad <0 || spaces <0 ) +continue ; + +n_spaces (pad); +printf ("%s" , name); +n_spaces (spaces); + len += pad + name_len + spaces; + } + } + +n_spaces (con_w - len); +printf ("\033[0m\n" ); + +return lines; +} + + +static bool +newheader (const struct igt_drm_client *c,const struct igt_drm_client *pc) +{ +return !pc || c->drm_minor != pc->drm_minor; +} + +static int +print_client (struct igt_drm_client *c,struct igt_drm_client **prevc, +double t,int lines,int con_w,int con_h, +unsigned int period_us,int *engine_w) +{ +unsigned int i; + +/* Filter out idle clients. */ +if (!c->total_runtime || c->samples <2 ) +return lines; + +/* Print header when moving to a different DRM card. */ +if (newheader (c, *prevc)) { + lines =print_client_header (c, lines, con_w, con_h, engine_w); +if (lines >= con_h) +return lines; + } + + *prevc = c; + +printf ("%8u %17s " , c->pid, c->print_name); + lines++; + +for (i =0 ; c->samples >1 && i <= c->engines->max_engine_id; i++) { +double pct; + +if (!c->engines->capacity[i]) +continue ; + + pct = (double )c->val[i] / period_us /1e3 *100 / + c->engines->capacity[i]; + +/* +* Guard against fluctuations between our scanning period and +* GPU times as exported by the kernel in fdinfo. +*/ +if (pct >100.0 ) + pct =100.0 ; + +print_percentage_bar (pct, *engine_w); + } + +putchar ('\n' ); + +return lines; +} + +static int +__client_id_cmp (const struct igt_drm_client *a, +const struct igt_drm_client *b) +{ +if (a->id > b->id) +return 1 ; +else if (a->id < b->id) +return -1 ; +else +return 0 ; +} + +static int client_cmp (const void *_a,const void *_b,void *unused) +{ +const struct igt_drm_client *a = _a; +const struct igt_drm_client *b = _b; +long val_a, val_b; + +/* DRM cards into consecutive buckets first. */ + val_a = a->drm_minor; + val_b = b->drm_minor; +if (val_a > val_b) +return 1 ; +else if (val_b > val_a) +return -1 ; + +/* +* Within buckets sort by last sampling period aggregated runtime, with +* client id as a tie-breaker. +*/ + val_a = a->last_runtime; + val_b = b->last_runtime; +if (val_a == val_b) +return __client_id_cmp (a, b); +else if (val_b > val_a) +return 1 ; +else +return -1 ; + +} + +int main (int argc,char **argv) +{ +unsigned int period_us =2e6 ; +struct igt_drm_clients *clients =NULL ; +int con_w =-1 , con_h =-1 ; + + clients =igt_drm_clients_init (NULL ); +if (!clients) +exit (1 ); + +igt_drm_clients_scan (clients,NULL ,NULL ,0 ); + +for (;;) { +struct igt_drm_client *c, *prevc =NULL ; +int i, engine_w =0 , lines =0 ; +struct winsize ws; + +if (ioctl (0 ,TIOCGWINSZ , &ws) !=-1 ) { + con_w = ws.ws_col; + con_h = ws.ws_row; +if (con_w ==0 && con_h ==0 ) { +/* Serial console. */ + con_w =80 ; + con_h =24 ; + } + } + +igt_drm_clients_scan (clients,NULL ,NULL ,0 ); +igt_drm_clients_sort (clients, client_cmp); + +printf ("\033[H\033[J" ); + +igt_for_each_drm_client (clients, c, i) { +assert (c->status !=IGT_DRM_CLIENT_PROBE ); +if (c->status !=IGT_DRM_CLIENT_ALIVE ) +break ;/* Active clients are first in the array. */ + + lines =print_client (c, &prevc, (double )period_us /1e6 , + lines, con_w, con_h, period_us, + &engine_w); +if (lines >= con_h) +break ; + } + +if (lines++ < con_h) +printf ("\n" ); + +usleep (period_us); + } + +return 0 ; +}tools/meson.build +5
-0@@ -70,6 +70,11 @@ if libudev.found() install : true) endif +executable('gputop', 'gputop.c', + install : true, + install_rpath : bindir_rpathdir, + dependencies : [lib_igt_drm_clients,lib_igt_drm_fdinfo,math]) + intel_l3_parity_src = [ 'intel_l3_parity.c', 'intel_l3_udev_listener.c' ] executable('intel_l3_parity', sources : intel_l3_parity_src, dependencies : tool_deps,
Re: [igt-dev] [PATCH i-g-t 8/8] gputop: Basic vendor agnostic GPU top tool
Quoted 11 lines · Christian König
Am 16.06.22 um 16:06 schrieb Tvrtko Ursulin:
Quoted 10 lines
From: Tvrtko Ursulin <[email protected]>
Rudimentary vendor agnostic example of how
lib_igt_drm_clientscan be used to display a sorted by card and usage list of processes using GPUs.Borrows a bit of code from
intel_gpu_topbut for now omits the fancy features like interactive functionality, card selection, client aggregation, sort modes, JSON output and pretty engine names. Also no support for global GPU or system metrics.
Quoted 8 lines
Quoted 6 lines
On the other hand it shows clients from all DRM cards which
intel_gpu_topdoes not do.Signed-off-by Tvrtko Ursulin <[email protected]>Cc Rob Clark <[email protected]>Cc Christian König <[email protected]>LGTM, Acked-by: Christian König <[email protected]>
Thanks Christian,
It is a very rudimentary tool, more a reference really. I keep hoping some UI/desktop folks actually pick up the idea and implement something nicer elsewhere. Or maybe it ends up me spending a little bit more time on it, to carry over some more functionality from intel_gpu_top.
I see amdgpu patches are in - presumably that means gputop parses it and understands fine?
Regards,
Tvrtko
Quoted 292 lines
Quoted 291 lines
---
tools/gputop.c | 260 ++++++++++++++++++++++++++++++++++++++++++++++tools/meson.build| 5 +2 files changed, 265 insertions(+)create mode 100644
tools/gputop.ctools/gputop.c new file +32
-0@@ -0,0 +1,260 @@ +// SPDX-License-Identifier: MIT +/* +* Copyright © 2022 Intel Corporation +*/ + +#include <assert.h> +#include <ctype.h> +#include <dirent.h> +#include <errno.h> +#include <fcntl.h> +#include <inttypes.h> +#include <limits.h> +#include <locale.h> +#include <math.h> +#include <poll.h> +#include <signal.h> +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/ioctl.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <unistd.h> +#include <termios.h> +#include <sys/sysmacros.h> +#include <stdbool.h> + +#include "igt_drm_clients.h" +#include "igt_drm_fdinfo.h" + +static const char *bars[] = {" " ,"▏" ,"▎" ,"▍" ,"▌" ,"▋" ,"▊" ,"▉" ,"█" };
tools/gputop.c new file +35
-0+ +static void n_spaces (const unsigned int n) +{ + unsigned int i; + + for (i = 0; i < n; i++) + putchar(' '); +} + +static void print_percentage_bar (double percent,int max_len) +{ + int bar_len, i, len = max_len - 2; + const int w = 8; + + assert(max_len > 0); + + bar_len = ceil(w * percent * len / 100.0); + if (bar_len > w * len) + bar_len = w * len; + + putchar('|'); + + for (i = bar_len; i >= w; i -= w) + printf("%s", bars[w]); + if (i) + printf("%s", bars[i]); + + len -= (bar_len + (w - 1)) / w; + n_spaces(len); + + putchar('|'); +} + +static int +print_client_header(struct igt_drm_client *c, int lines, int con_w,int
con_h,
+ int*engine_w)tools/gputop.c new file +48
-0+{ + const char *pidname = " PID NAME "; + int ret, len = strlen(pidname); + + if (lines++ >= con_h || len >= con_w) + return lines; + printf("\033[7m"); + ret = printf("DRM minor %u", c->drm_minor); + n_spaces(con_w - ret); + + if (lines++ >= con_h) + return lines; + printf("\n%s", pidname); + + if (c->engines->num_engines) { + unsigned int i; + int width; + + *engine_w = width = (con_w - len) / c->engines->num_engines; + + for (i = 0; i <= c->engines->max_engine_id; i++) { + const char *name = c->engines->names[i]; + int name_len = strlen(name); + int pad = (width - name_len) / 2; + int spaces = width - pad - name_len; + + if (!name) + continue; + + if (pad < 0 || spaces < 0) + continue; + + n_spaces(pad); + printf("%s", name); + n_spaces(spaces); + len += pad + name_len + spaces; + } + } + + n_spaces(con_w - len); + printf("\033[0m\n"); + + return lines; +} + + +static bool +newheader(const struct igt_drm_client *c, const struct igt_drm_client*pc)
tools/gputop.c new file +79
-0+{ + return !pc || c->drm_minor != pc->drm_minor; +} + +static int +print_client (struct igt_drm_client *c,struct igt_drm_client **prevc, + double t, int lines, int con_w, int con_h, + unsigned int period_us, int *engine_w) +{ + unsigned int i; + + /* Filter out idle clients. */ + if (!c->total_runtime || c->samples < 2) + return lines; + + /* Print header when moving to a different DRM card. */ + if (newheader(c, *prevc)) { + lines = print_client_header(c, lines, con_w, con_h, engine_w); + if (lines >= con_h) + return lines; + } + + *prevc = c; + + printf("%8u %17s ", c->pid, c->print_name); + lines++; + + for (i = 0; c->samples > 1 && i <= c->engines->max_engine_id; i++) { + double pct; + + if (!c->engines->capacity[i]) + continue; + + pct = (double)c->val[i] / period_us / 1e3 * 100 / + c->engines->capacity[i]; + + /* + * Guard against fluctuations between our scanning period and + * GPU times as exported by the kernel in fdinfo. + */ + if (pct > 100.0) + pct = 100.0; + + print_percentage_bar(pct, *engine_w); + } + + putchar('\n'); + + return lines; +} + +static int +__client_id_cmp (const struct igt_drm_client *a, + const struct igt_drm_client *b) +{ + if (a->id > b->id) + return 1; + else if (a->id < b->id) + return -1; + else + return 0; +} + +static int client_cmp (const void *_a,const void *_b,void *unused) +{ + const struct igt_drm_client *a = _a; + const struct igt_drm_client *b = _b; + long val_a, val_b; + + /* DRM cards into consecutive buckets first. */ + val_a = a->drm_minor; + val_b = b->drm_minor; + if (val_a > val_b) + return 1; + else if (val_b > val_a) + return -1; + + /* +* Within buckets sort by last sampling period aggregated runtime, with
+ * client id as a tie-breaker.
+ */
+val_a=a->last_runtime;
+val_b=b->last_runtime;
+ if (val_a==val_b)
+ return__client_id_cmp(a, b);
+ else if (val_b>val_a)
+ return 1;
+ else
+ return -1;tools/gputop.c new file +55
-0+ +} + +int main (int argc,char **argv) +{ + unsigned int period_us = 2e6; + struct igt_drm_clients *clients = NULL; + int con_w = -1, con_h = -1; + + clients = igt_drm_clients_init(NULL); + if (!clients) + exit(1); + + igt_drm_clients_scan(clients, NULL, NULL, 0); + + for (;;) { + struct igt_drm_client *c, *prevc = NULL; + int i, engine_w = 0, lines = 0; + struct winsize ws; + + if (ioctl(0, TIOCGWINSZ, &ws) != -1) { + con_w = ws.ws_col; + con_h = ws.ws_row; + if (con_w == 0 && con_h == 0) { + /* Serial console. */ + con_w = 80; + con_h = 24; + } + } + + igt_drm_clients_scan(clients, NULL, NULL, 0); + igt_drm_clients_sort(clients, client_cmp); + + printf("\033[H\033[J"); + + igt_for_each_drm_client(clients, c, i) { + assert(c->status != IGT_DRM_CLIENT_PROBE); + if (c->status != IGT_DRM_CLIENT_ALIVE) + break; /* Active clients are first in the array. */ + + lines = print_client(c, &prevc, (double)period_us / 1e6, + lines, con_w, con_h, period_us, + &engine_w); + if (lines >= con_h) + break; + } + + if (lines++ < con_h) + printf("\n"); + + usleep(period_us); + } + + return 0; +}tools/meson.build +0
-0@@ -70,6 +70,11 @@ if libudev.found() install : true)endif
tools/meson.build +5
-0+executable('gputop', 'gputop.c', + install : true, + install_rpath : bindir_rpathdir, + dependencies : [lib_igt_drm_clients,lib_igt_drm_fdinfo,math]) +
intel_l3_parity_src= [ 'intel_l3_parity.c', 'intel_l3_udev_listener.c' ] executable('intel_l3_parity', sources :intel_l3_parity_src, dependencies :tool_deps,
Re: [igt-dev] [PATCH i-g-t 8/8] gputop: Basic vendor agnostic GPU top tool
Am 17.06.22 um 12:09 schrieb Tvrtko Ursulin:
Quoted 20 lines · Christian König
Quoted 18 lines
Am 16.06.22 um 16:06 schrieb Tvrtko Ursulin:
Quoted 16 lines
From: Tvrtko Ursulin <[email protected]>
Rudimentary vendor agnostic example of how
lib_igt_drm_clientscan be used to display a sorted by card and usage list of processes using GPUs.Borrows a bit of code from
intel_gpu_topbut for now omits the fancy features like interactive functionality, card selection, client aggregation, sort modes, JSON output and pretty engine names. Also no support for global GPU or system metrics.On the other hand it shows clients from all DRM cards which
intel_gpu_topdoes not do.Signed-off-by Tvrtko Ursulin <[email protected]>Cc Rob Clark <[email protected]>Cc Christian König <[email protected]>
Quoted 7 lines
Quoted 1 line
LGTM, Acked-by: Christian König <[email protected]>
Thanks Christian,
It is a very rudimentary tool, more a reference really. I keep hoping some UI/desktop folks actually pick up the idea and implement something nicer elsewhere. Or maybe it ends up me spending a little bit more time on it, to carry over some more functionality from
intel_gpu_top.I see amdgpu patches are in - presumably that means gputop parses it and understands fine?
At least the last time I tested it the tool worked like a charm.
And yes, it's indeed rather useful.
Regards,
Christian.
Quoted 300 lines
Regards,
Tvrtko
Quoted 295 lines
Quoted 294 lines
---
tools/gputop.c | 260
++++++++++++++++++++++++++++++++++++++++++++++
tools/meson.build| 5 +2 files changed, 265 insertions(+)create mode 100644
tools/gputop.ctools/gputop.c new file +32
-0@@ -0,0 +1,260 @@ +// SPDX-License-Identifier: MIT +/* +* Copyright © 2022 Intel Corporation +*/ + +#include <assert.h> +#include <ctype.h> +#include <dirent.h> +#include <errno.h> +#include <fcntl.h> +#include <inttypes.h> +#include <limits.h> +#include <locale.h> +#include <math.h> +#include <poll.h> +#include <signal.h> +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/ioctl.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <unistd.h> +#include <termios.h> +#include <sys/sysmacros.h> +#include <stdbool.h> + +#include "igt_drm_clients.h" +#include "igt_drm_fdinfo.h" + +static const char *bars[] = {" " ,"▏" ,"▎" ,"▍" ,"▌" ,"▋" ,"▊" ,"▉", "█" };
tools/gputop.c new file +35
-0+ +static void n_spaces (const unsigned int n) +{ + unsigned int i; + + for (i = 0; i < n; i++) + putchar(' '); +} + +static void print_percentage_bar (double percent,int max_len) +{ + int bar_len, i, len = max_len - 2; + const int w = 8; + + assert(max_len > 0); + + bar_len = ceil(w * percent * len / 100.0); + if (bar_len > w * len) + bar_len = w * len; + + putchar('|'); + + for (i = bar_len; i >= w; i -= w) + printf("%s", bars[w]); + if (i) + printf("%s", bars[i]); + + len -= (bar_len + (w - 1)) / w; + n_spaces(len); + + putchar('|'); +} + +static int +print_client_header(struct igt_drm_client *c, int lines, int con_w,int
con_h,
+ int*engine_w)tools/gputop.c new file +48
-0+{ + const char *pidname = " PID NAME "; + int ret, len = strlen(pidname); + + if (lines++ >= con_h || len >= con_w) + return lines; + printf("\033[7m"); + ret = printf("DRM minor %u", c->drm_minor); + n_spaces(con_w - ret); + + if (lines++ >= con_h) + return lines; + printf("\n%s", pidname); + + if (c->engines->num_engines) { + unsigned int i; + int width; + + *engine_w = width = (con_w - len) / c->engines->num_engines; + + for (i = 0; i <= c->engines->max_engine_id; i++) { + const char *name = c->engines->names[i]; + int name_len = strlen(name); + int pad = (width - name_len) / 2; + int spaces = width - pad - name_len; + + if (!name) + continue; + + if (pad < 0 || spaces < 0) + continue; + + n_spaces(pad); + printf("%s", name); + n_spaces(spaces); + len += pad + name_len + spaces; + } + } + + n_spaces(con_w - len); + printf("\033[0m\n"); + + return lines; +} + + +static bool +newheader(const struct igt_drm_client *c, const struct
igt_drm_client*pc)tools/gputop.c new file +28
-0+{ + return !pc || c->drm_minor != pc->drm_minor; +} + +static int +print_client (struct igt_drm_client *c,struct igt_drm_client **prevc, + double t, int lines, int con_w, int con_h, + unsigned int period_us, int *engine_w) +{ + unsigned int i; + + /* Filter out idle clients. */ + if (!c->total_runtime || c->samples < 2) + return lines; + + /* Print header when moving to a different DRM card. */ + if (newheader(c, *prevc)) { + lines = print_client_header(c, lines, con_w, con_h, engine_w); + if (lines >= con_h) + return lines; + } + + *prevc = c; + + printf("%8u %17s ", c->pid, c->print_name); + lines++; + + for (i = 0; c->samples > 1 && i <= c->engines->max_engine_id;i++) {
+ double pct;tools/gputop.c new file +50
-0+ + if (!c->engines->capacity[i]) + continue; + + pct = (double)c->val[i] / period_us / 1e3 * 100 / + c->engines->capacity[i]; + + /* + * Guard against fluctuations between our scanning period and + * GPU times as exported by the kernel in fdinfo. + */ + if (pct > 100.0) + pct = 100.0; + + print_percentage_bar(pct, *engine_w); + } + + putchar('\n'); + + return lines; +} + +static int +__client_id_cmp (const struct igt_drm_client *a, + const struct igt_drm_client *b) +{ + if (a->id > b->id) + return 1; + else if (a->id < b->id) + return -1; + else + return 0; +} + +static int client_cmp (const void *_a,const void *_b,void *unused) +{ + const struct igt_drm_client *a = _a; + const struct igt_drm_client *b = _b; + long val_a, val_b; + + /* DRM cards into consecutive buckets first. */ + val_a = a->drm_minor; + val_b = b->drm_minor; + if (val_a > val_b) + return 1; + else if (val_b > val_a) + return -1; + + /* +* Within buckets sort by last sampling period aggregated runtime, with
+ * client id as a tie-breaker.
+ */
+val_a=a->last_runtime;
+val_b=b->last_runtime;
+ if (val_a==val_b)
+ return__client_id_cmp(a, b);
+ else if (val_b>val_a)
+ return 1;
+ else
+ return -1;tools/gputop.c new file +55
-0+ +} + +int main (int argc,char **argv) +{ + unsigned int period_us = 2e6; + struct igt_drm_clients *clients = NULL; + int con_w = -1, con_h = -1; + + clients = igt_drm_clients_init(NULL); + if (!clients) + exit(1); + + igt_drm_clients_scan(clients, NULL, NULL, 0); + + for (;;) { + struct igt_drm_client *c, *prevc = NULL; + int i, engine_w = 0, lines = 0; + struct winsize ws; + + if (ioctl(0, TIOCGWINSZ, &ws) != -1) { + con_w = ws.ws_col; + con_h = ws.ws_row; + if (con_w == 0 && con_h == 0) { + /* Serial console. */ + con_w = 80; + con_h = 24; + } + } + + igt_drm_clients_scan(clients, NULL, NULL, 0); + igt_drm_clients_sort(clients, client_cmp); + + printf("\033[H\033[J"); + + igt_for_each_drm_client(clients, c, i) { + assert(c->status != IGT_DRM_CLIENT_PROBE); + if (c->status != IGT_DRM_CLIENT_ALIVE) + break; /* Active clients are first in the array. */ + + lines = print_client(c, &prevc, (double)period_us / 1e6, + lines, con_w, con_h, period_us, + &engine_w); + if (lines >= con_h) + break; + } + + if (lines++ < con_h) + printf("\n"); + + usleep(period_us); + } + + return 0; +}tools/meson.build +0
-0@@ -70,6 +70,11 @@ if libudev.found() install : true)endif
+executable('gputop', 'gputop.c',
+ install : true,
+install_rpath:bindir_rpathdir,
+ dependencies :
[lib_igt_drm_clients,lib_igt_drm_fdinfo,math])
+
intel_l3_parity_src= [ 'intel_l3_parity.c', 'intel_l3_udev_listener.c' ] executable('intel_l3_parity', sources :intel_l3_parity_src, dependencies :tool_deps,
Patchwork
CI[igt-dev] ✓ Fi.CI.BAT: success for Vendor agnostic gputop (rev3)
In reply to Tvrtko Ursulin== Series Details ==
== Series Details ==
Series: Vendor agnostic gputop (rev3)
URL : https://patchwork.freedesktop.org/series/102175/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_11768 -> IGTPW_7327
====================================================
Summary
-------
**SUCCESS**
No regressions found.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/index.html
Participating hosts (43 -> 37)
------------------------------
Missing (6): bat-dg2-8 bat-dg2-9 bat-adlp-4 fi-bdw-samus bat-jsl-2 bat-jsl-1
Known issues
------------
Here are the changes found in IGTPW_7327 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@i915_selftest@live@requests:
- fi-blb-e6850: [PASS][1] -> [DMESG-FAIL][2] ([i915#4528])
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/fi-blb-e6850/igt@i915_selftest@[email protected]
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/fi-blb-e6850/igt@i915_selftest@[email protected]
* igt@kms_busy@basic@flip:
- fi-tgl-u2: [PASS][3] -> [DMESG-WARN][4] ([i915#402]) +1 similar issue
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/fi-tgl-u2/igt@kms_busy@[email protected]
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/fi-tgl-u2/igt@kms_busy@[email protected]
* igt@kms_chamelium@common-hpd-after-suspend:
- fi-hsw-g3258: NOTRUN -> [SKIP][5] ([fdo#109271] / [fdo#111827])
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/fi-hsw-g3258/igt@[email protected]
- fi-hsw-4770: NOTRUN -> [SKIP][6] ([fdo#109271] / [fdo#111827])
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/fi-hsw-4770/igt@[email protected]
#### Possible fixes ####
* igt@gem_exec_suspend@basic-s0@smem:
- {fi-ehl-2}: [DMESG-WARN][7] ([i915#5122]) -> [PASS][8]
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/fi-ehl-2/igt@gem_exec_suspend@[email protected]
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/fi-ehl-2/igt@gem_exec_suspend@[email protected]
* igt@i915_selftest@live@hangcheck:
- fi-hsw-4770: [INCOMPLETE][9] ([i915#3303] / [i915#4785]) -> [PASS][10]
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/fi-hsw-4770/igt@i915_selftest@[email protected]
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/fi-hsw-4770/igt@i915_selftest@[email protected]
- fi-hsw-g3258: [INCOMPLETE][11] ([i915#4785]) -> [PASS][12]
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/fi-hsw-g3258/igt@i915_selftest@[email protected]
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/fi-hsw-g3258/igt@i915_selftest@[email protected]
- bat-dg1-6: [DMESG-FAIL][13] ([i915#4494] / [i915#4957]) -> [PASS][14]
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/bat-dg1-6/igt@i915_selftest@[email protected]
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/bat-dg1-6/igt@i915_selftest@[email protected]
* igt@kms_flip@basic-flip-vs-modeset@a-edp1:
- {bat-adlp-6}: [DMESG-WARN][15] ([i915#3576]) -> [PASS][16]
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/bat-adlp-6/igt@kms_flip@[email protected]
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/bat-adlp-6/igt@kms_flip@[email protected]
{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
[fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
[i915#3303]: https://gitlab.freedesktop.org/drm/intel/issues/3303
[i915#3576]: https://gitlab.freedesktop.org/drm/intel/issues/3576
[i915#402]: https://gitlab.freedesktop.org/drm/intel/issues/402
[i915#4494]: https://gitlab.freedesktop.org/drm/intel/issues/4494
[i915#4528]: https://gitlab.freedesktop.org/drm/intel/issues/4528
[i915#4785]: https://gitlab.freedesktop.org/drm/intel/issues/4785
[i915#4957]: https://gitlab.freedesktop.org/drm/intel/issues/4957
[i915#5122]: https://gitlab.freedesktop.org/drm/intel/issues/5122
Build changes
-------------
* CI: CI-20190529 -> None
* IGT: IGT_6533 -> IGTPW_7327
CI-20190529: 20190529
CI_DRM_11768: 6da0a0872a9b44e2be9645c1d7045fe88e035c25 @ git://anongit.freedesktop.org/gfx-ci/linux
IGTPW_7327: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/index.html
IGT_6533: 6b5107d91827962808441db6b98e478aa9e67bdb @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/index.html
Patchwork
CI[igt-dev] ✗ Fi.CI.IGT: failure for Vendor agnostic gputop (rev3)
In reply to Tvrtko Ursulin== Series Details ==
== Series Details ==
Series: Vendor agnostic gputop (rev3)
URL : https://patchwork.freedesktop.org/series/102175/
State : failure
== Summary ==
CI Bug Log - changes from CI_DRM_11768_full -> IGTPW_7327_full
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with IGTPW_7327_full absolutely need to be verified manually.
If you think the reported changes have nothing to do with the changes introduced in IGTPW_7327_full, please notify your bug team to allow them to document this new failure mode, which will reduce false positives in CI.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/index.html
Participating hosts (12 -> 7)
------------------------------
Missing (5): pig-kbl-iris shard-tglu pig-glk-j5005 pig-skl-6260u shard-rkl
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in IGTPW_7327_full:
### IGT changes ###
#### Possible regressions ####
* igt@drm_fdinfo@basics:
- shard-kbl: [PASS][1] -> [FAIL][2]
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-kbl4/igt@[email protected]
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-kbl1/igt@[email protected]
- shard-tglb: [PASS][3] -> [FAIL][4]
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-tglb5/igt@[email protected]
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb3/igt@[email protected]
- shard-iclb: [PASS][5] -> [FAIL][6]
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-iclb7/igt@[email protected]
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb2/igt@[email protected]
Known issues
------------
Here are the changes found in IGTPW_7327_full that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@device_reset@unbind-reset-rebind:
- shard-snb: [PASS][7] -> [DMESG-WARN][8] ([i915#4528])
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-snb2/igt@[email protected]
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-snb4/igt@[email protected]
* igt@feature_discovery@chamelium:
- shard-tglb: NOTRUN -> [SKIP][9] ([fdo#111827])
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb7/igt@[email protected]
- shard-iclb: NOTRUN -> [SKIP][10] ([fdo#111827])
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb5/igt@[email protected]
* igt@feature_discovery@display-3x:
- shard-iclb: NOTRUN -> [SKIP][11] ([i915#1839])
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb7/igt@[email protected]
- shard-tglb: NOTRUN -> [SKIP][12] ([i915#1839])
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb8/igt@[email protected]
* igt@gem_ctx_param@set-priority-not-supported:
- shard-tglb: NOTRUN -> [SKIP][13] ([fdo#109314])
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb7/igt@[email protected]
- shard-iclb: NOTRUN -> [SKIP][14] ([fdo#109314])
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb8/igt@[email protected]
* igt@gem_ctx_persistence@engines-mixed-process:
- shard-snb: NOTRUN -> [SKIP][15] ([fdo#109271] / [i915#1099]) +1 similar issue
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-snb4/igt@[email protected]
* igt@gem_eio@in-flight-10ms:
- shard-tglb: [PASS][16] -> [TIMEOUT][17] ([i915#3063])
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-tglb3/igt@[email protected]
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb2/igt@[email protected]
* igt@gem_eio@unwedge-stress:
- shard-tglb: [PASS][18] -> [FAIL][19] ([i915#5784])
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-tglb7/igt@[email protected]
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb1/igt@[email protected]
* igt@gem_exec_balancer@parallel:
- shard-iclb: [PASS][20] -> [SKIP][21] ([i915#4525]) +1 similar issue
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-iclb1/igt@[email protected]
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb3/igt@[email protected]
* igt@gem_exec_balancer@parallel-balancer:
- shard-iclb: NOTRUN -> [SKIP][22] ([i915#4525])
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb7/igt@[email protected]
* igt@gem_exec_balancer@parallel-ordering:
- shard-kbl: NOTRUN -> [FAIL][23] ([i915#6117])
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-kbl1/igt@[email protected]
* igt@gem_exec_fair@basic-none-vip@rcs0:
- shard-kbl: [PASS][24] -> [FAIL][25] ([i915#2842])
[24]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-kbl1/igt@gem_exec_fair@[email protected]
[25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-kbl6/igt@gem_exec_fair@[email protected]
* igt@gem_exec_fair@basic-none@vcs1:
- shard-iclb: NOTRUN -> [FAIL][26] ([i915#2842])
[26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb2/igt@gem_exec_fair@[email protected]
* igt@gem_exec_fair@basic-pace-share@rcs0:
- shard-glk: [PASS][27] -> [FAIL][28] ([i915#2842])
[27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-glk8/igt@gem_exec_fair@[email protected]
[28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-glk7/igt@gem_exec_fair@[email protected]
* igt@gem_exec_fair@basic-pace-solo@rcs0:
- shard-apl: [PASS][29] -> [FAIL][30] ([i915#2842])
[29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-apl2/igt@gem_exec_fair@[email protected]
[30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-apl7/igt@gem_exec_fair@[email protected]
* igt@gem_exec_params@no-vebox:
- shard-iclb: NOTRUN -> [SKIP][31] ([fdo#109283])
[31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb8/igt@[email protected]
* igt@gem_exec_whisper@basic-fds-forked-all:
- shard-glk: NOTRUN -> [DMESG-WARN][32] ([i915#118])
[32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-glk8/igt@[email protected]
* igt@gem_exec_whisper@basic-normal-all:
- shard-glk: [PASS][33] -> [DMESG-WARN][34] ([i915#118])
[33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-glk7/igt@[email protected]
[34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-glk4/igt@[email protected]
* igt@gem_lmem_swapping@basic:
- shard-apl: NOTRUN -> [SKIP][35] ([fdo#109271] / [i915#4613]) +1 similar issue
[35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-apl7/igt@[email protected]
* igt@gem_lmem_swapping@parallel-random:
- shard-kbl: NOTRUN -> [SKIP][36] ([fdo#109271] / [i915#4613]) +3 similar issues
[36]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-kbl7/igt@[email protected]
* igt@gem_pread@exhaustion:
- shard-apl: NOTRUN -> [WARN][37] ([i915#2658])
[37]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-apl8/igt@[email protected]
- shard-snb: NOTRUN -> [WARN][38] ([i915#2658])
[38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-snb4/igt@[email protected]
- shard-tglb: NOTRUN -> [WARN][39] ([i915#2658])
[39]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb2/igt@[email protected]
- shard-glk: NOTRUN -> [WARN][40] ([i915#2658])
[40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-glk8/igt@[email protected]
- shard-iclb: NOTRUN -> [WARN][41] ([i915#2658])
[41]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb5/igt@[email protected]
- shard-kbl: NOTRUN -> [WARN][42] ([i915#2658])
[42]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-kbl4/igt@[email protected]
* igt@gem_pxp@reject-modify-context-protection-on:
- shard-tglb: NOTRUN -> [SKIP][43] ([i915#4270])
[43]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb1/igt@[email protected]
- shard-iclb: NOTRUN -> [SKIP][44] ([i915#4270])
[44]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb1/igt@[email protected]
* igt@gem_render_copy@y-tiled-to-vebox-yf-tiled:
- shard-iclb: NOTRUN -> [SKIP][45] ([i915#768]) +1 similar issue
[45]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb4/igt@[email protected]
* igt@gem_softpin@evict-single-offset:
- shard-apl: NOTRUN -> [FAIL][46] ([i915#4171])
[46]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-apl1/igt@[email protected]
- shard-glk: NOTRUN -> [FAIL][47] ([i915#4171])
[47]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-glk3/igt@[email protected]
- shard-kbl: NOTRUN -> [FAIL][48] ([i915#4171])
[48]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-kbl7/igt@[email protected]
* igt@gem_userptr_blits@coherency-sync:
- shard-iclb: NOTRUN -> [SKIP][49] ([fdo#109290])
[49]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb3/igt@[email protected]
- shard-tglb: NOTRUN -> [SKIP][50] ([fdo#110542])
[50]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb1/igt@[email protected]
* igt@gem_vm_create@invalid-create:
- shard-snb: NOTRUN -> [SKIP][51] ([fdo#109271]) +133 similar issues
[51]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-snb5/igt@[email protected]
* igt@gen3_mixed_blits:
- shard-iclb: NOTRUN -> [SKIP][52] ([fdo#109289]) +1 similar issue
[52]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb1/igt@gen3_mixed_blits.html
* igt@gen9_exec_parse@allowed-all:
- shard-glk: [PASS][53] -> [DMESG-WARN][54] ([i915#5566] / [i915#716])
[53]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-glk4/igt@[email protected]
[54]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-glk2/igt@[email protected]
* igt@gen9_exec_parse@unaligned-access:
- shard-tglb: NOTRUN -> [SKIP][55] ([i915#2527] / [i915#2856]) +1 similar issue
[55]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb1/igt@[email protected]
- shard-iclb: NOTRUN -> [SKIP][56] ([i915#2856]) +1 similar issue
[56]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb4/igt@[email protected]
* igt@i915_pm_dc@dc9-dpms:
- shard-apl: [PASS][57] -> [SKIP][58] ([fdo#109271])
[57]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-apl6/igt@[email protected]
[58]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-apl3/igt@[email protected]
* igt@i915_pm_rpm@modeset-non-lpsp-stress-no-wait:
- shard-iclb: NOTRUN -> [SKIP][59] ([fdo#110892])
[59]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb5/igt@[email protected]
- shard-tglb: NOTRUN -> [SKIP][60] ([fdo#111644] / [i915#1397] / [i915#2411])
[60]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb2/igt@[email protected]
* igt@i915_pm_sseu@full-enable:
- shard-tglb: NOTRUN -> [SKIP][61] ([i915#4387])
[61]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb5/igt@[email protected]
- shard-iclb: NOTRUN -> [SKIP][62] ([i915#4387])
[62]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb8/igt@[email protected]
* igt@i915_selftest@live@hangcheck:
- shard-snb: [PASS][63] -> [INCOMPLETE][64] ([i915#3921])
[63]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-snb5/igt@i915_selftest@[email protected]
[64]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-snb2/igt@i915_selftest@[email protected]
- shard-tglb: [PASS][65] -> [DMESG-WARN][66] ([i915#5591])
[65]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-tglb1/igt@i915_selftest@[email protected]
[66]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb3/igt@i915_selftest@[email protected]
* igt@kms_big_fb@4-tiled-32bpp-rotate-90:
- shard-tglb: NOTRUN -> [SKIP][67] ([i915#5286]) +2 similar issues
[67]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb2/igt@[email protected]
* igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip:
- shard-iclb: NOTRUN -> [SKIP][68] ([i915#5286]) +3 similar issues
[68]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb2/igt@[email protected]
* igt@kms_big_fb@y-tiled-8bpp-rotate-90:
- shard-iclb: NOTRUN -> [SKIP][69] ([fdo#110725] / [fdo#111614])
[69]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb6/igt@[email protected]
* igt@kms_big_fb@yf-tiled-16bpp-rotate-0:
- shard-tglb: NOTRUN -> [SKIP][70] ([fdo#111615]) +2 similar issues
[70]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb3/igt@[email protected]
* igt@kms_big_fb@yf-tiled-8bpp-rotate-180:
- shard-iclb: NOTRUN -> [SKIP][71] ([fdo#110723])
[71]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb8/igt@[email protected]
* igt@kms_ccs@pipe-a-ccs-on-another-bo-y_tiled_gen12_rc_ccs_cc:
- shard-kbl: NOTRUN -> [SKIP][72] ([fdo#109271] / [i915#3886]) +7 similar issues
[72]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-kbl4/igt@kms_ccs@pipe-a-ccs-on-another-bo-y_tiled_gen12_rc_ccs_cc.html
* igt@kms_ccs@pipe-a-crc-primary-basic-y_tiled_gen12_mc_ccs:
- shard-apl: NOTRUN -> [SKIP][73] ([fdo#109271] / [i915#3886]) +6 similar issues
[73]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-apl2/igt@kms_ccs@pipe-a-crc-primary-basic-y_tiled_gen12_mc_ccs.html
* igt@kms_ccs@pipe-a-crc-primary-rotation-180-yf_tiled_ccs:
- shard-tglb: NOTRUN -> [SKIP][74] ([fdo#111615] / [i915#3689]) +2 similar issues
[74]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb7/igt@kms_ccs@pipe-a-crc-primary-rotation-180-yf_tiled_ccs.html
* igt@kms_ccs@pipe-a-missing-ccs-buffer-y_tiled_gen12_mc_ccs:
- shard-glk: NOTRUN -> [SKIP][75] ([fdo#109271] / [i915#3886]) +2 similar issues
[75]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-glk1/igt@kms_ccs@pipe-a-missing-ccs-buffer-y_tiled_gen12_mc_ccs.html
* igt@kms_ccs@pipe-b-bad-rotation-90-y_tiled_gen12_mc_ccs:
- shard-iclb: NOTRUN -> [SKIP][76] ([fdo#109278] / [i915#3886]) +2 similar issues
[76]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb4/igt@kms_ccs@pipe-b-bad-rotation-90-y_tiled_gen12_mc_ccs.html
* igt@kms_ccs@pipe-b-crc-primary-basic-4_tiled_dg2_rc_ccs_cc:
- shard-tglb: NOTRUN -> [SKIP][77] ([i915#6095]) +1 similar issue
[77]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb3/igt@kms_ccs@pipe-b-crc-primary-basic-4_tiled_dg2_rc_ccs_cc.html
* igt@kms_ccs@pipe-b-missing-ccs-buffer-y_tiled_gen12_mc_ccs:
- shard-tglb: NOTRUN -> [SKIP][78] ([i915#3689] / [i915#3886]) +2 similar issues
[78]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb1/igt@kms_ccs@pipe-b-missing-ccs-buffer-y_tiled_gen12_mc_ccs.html
* igt@kms_ccs@pipe-c-crc-sprite-planes-basic-4_tiled_dg2_mc_ccs:
- shard-tglb: NOTRUN -> [SKIP][79] ([i915#3689] / [i915#6095])
[79]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb1/igt@kms_ccs@pipe-c-crc-sprite-planes-basic-4_tiled_dg2_mc_ccs.html
* igt@kms_ccs@pipe-d-bad-rotation-90-4_tiled_dg2_mc_ccs:
- shard-tglb: NOTRUN -> [SKIP][80] ([i915#3689]) +5 similar issues
[80]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb2/igt@kms_ccs@pipe-d-bad-rotation-90-4_tiled_dg2_mc_ccs.html
* igt@kms_ccs@pipe-d-missing-ccs-buffer-y_tiled_gen12_rc_ccs:
- shard-kbl: NOTRUN -> [SKIP][81] ([fdo#109271]) +145 similar issues
[81]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-kbl6/igt@kms_ccs@pipe-d-missing-ccs-buffer-y_tiled_gen12_rc_ccs.html
* igt@kms_chamelium@dp-hpd-enable-disable-mode:
- shard-glk: NOTRUN -> [SKIP][82] ([fdo#109271] / [fdo#111827]) +8 similar issues
[82]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-glk7/igt@[email protected]
- shard-iclb: NOTRUN -> [SKIP][83] ([fdo#109284] / [fdo#111827]) +7 similar issues
[83]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb5/igt@[email protected]
* igt@kms_chamelium@hdmi-audio-edid:
- shard-tglb: NOTRUN -> [SKIP][84] ([fdo#109284] / [fdo#111827]) +8 similar issues
[84]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb3/igt@[email protected]
* igt@kms_chamelium@vga-hpd:
- shard-apl: NOTRUN -> [SKIP][85] ([fdo#109271] / [fdo#111827]) +7 similar issues
[85]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-apl2/igt@[email protected]
- shard-snb: NOTRUN -> [SKIP][86] ([fdo#109271] / [fdo#111827]) +7 similar issues
[86]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-snb6/igt@[email protected]
* igt@kms_color@pipe-d-ctm-max:
- shard-iclb: NOTRUN -> [SKIP][87] ([fdo#109278] / [i915#1149]) +1 similar issue
[87]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb1/igt@[email protected]
* igt@kms_color_chamelium@pipe-a-ctm-max:
- shard-kbl: NOTRUN -> [SKIP][88] ([fdo#109271] / [fdo#111827]) +13 similar issues
[88]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-kbl7/igt@[email protected]
* igt@kms_color_chamelium@pipe-d-degamma:
- shard-iclb: NOTRUN -> [SKIP][89] ([fdo#109278] / [fdo#109284] / [fdo#111827])
[89]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb2/igt@[email protected]
* igt@kms_content_protection@lic:
- shard-kbl: NOTRUN -> [TIMEOUT][90] ([i915#1319])
[90]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-kbl4/igt@[email protected]
- shard-apl: NOTRUN -> [TIMEOUT][91] ([i915#1319])
[91]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-apl7/igt@[email protected]
* igt@kms_cursor_crc@pipe-a-cursor-512x512-random:
- shard-tglb: NOTRUN -> [SKIP][92] ([fdo#109279] / [i915#3359]) +3 similar issues
[92]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb8/igt@[email protected]
- shard-iclb: NOTRUN -> [SKIP][93] ([fdo#109278] / [fdo#109279]) +1 similar issue
[93]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb7/igt@[email protected]
* igt@kms_cursor_crc@pipe-a-cursor-suspend:
- shard-kbl: [PASS][94] -> [DMESG-WARN][95] ([i915#180])
[94]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-kbl6/igt@[email protected]
[95]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-kbl4/igt@[email protected]
* igt@kms_cursor_crc@pipe-c-cursor-32x10-sliding:
- shard-tglb: NOTRUN -> [SKIP][96] ([i915#3359]) +2 similar issues
[96]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb5/igt@[email protected]
* igt@kms_cursor_crc@pipe-c-cursor-32x32-sliding:
- shard-tglb: NOTRUN -> [SKIP][97] ([i915#3319]) +1 similar issue
[97]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb6/igt@[email protected]
* igt@kms_cursor_legacy@2x-long-cursor-vs-flip-legacy:
- shard-iclb: NOTRUN -> [SKIP][98] ([fdo#109274] / [fdo#109278])
[98]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb1/igt@[email protected]
* igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size:
- shard-tglb: NOTRUN -> [SKIP][99] ([i915#4103])
[99]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb3/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size.html
- shard-iclb: NOTRUN -> [SKIP][100] ([fdo#109278] / [i915#4103])
[100]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb2/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size.html
* igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size:
- shard-glk: [PASS][101] -> [FAIL][102] ([i915#2346] / [i915#533])
[101]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-glk8/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html
[102]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-glk8/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html
* igt@kms_cursor_legacy@flip-vs-cursor-toggle:
- shard-iclb: NOTRUN -> [FAIL][103] ([i915#2346])
[103]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb7/igt@[email protected]
* igt@kms_dp_tiled_display@basic-test-pattern-with-chamelium:
- shard-tglb: NOTRUN -> [SKIP][104] ([i915#3528])
[104]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb8/igt@[email protected]
- shard-iclb: NOTRUN -> [SKIP][105] ([i915#3528])
[105]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb7/igt@[email protected]
* igt@kms_draw_crc@draw-method-rgb565-pwrite-4tiled:
- shard-tglb: NOTRUN -> [SKIP][106] ([i915#5287])
[106]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb2/igt@[email protected]
- shard-iclb: NOTRUN -> [SKIP][107] ([i915#5287])
[107]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb5/igt@[email protected]
* igt@kms_flip@2x-dpms-vs-vblank-race-interruptible:
- shard-iclb: NOTRUN -> [SKIP][108] ([fdo#109274]) +3 similar issues
[108]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb6/igt@[email protected]
* igt@kms_flip@2x-flip-vs-absolute-wf_vblank:
- shard-tglb: NOTRUN -> [SKIP][109] ([fdo#109274] / [fdo#111825]) +3 similar issues
[109]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb5/igt@kms_flip@2x-flip-vs-absolute-wf_vblank.html
* igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1:
- shard-iclb: [PASS][110] -> [FAIL][111] ([i915#79])
[110]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-iclb5/igt@kms_flip@[email protected]
[111]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb5/igt@kms_flip@[email protected]
* igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-indfb-draw-mmap-cpu:
- shard-glk: NOTRUN -> [SKIP][112] ([fdo#109271]) +79 similar issues
[112]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-glk6/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-indfb-draw-mmap-cpu.html
* igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-draw-mmap-wc:
- shard-iclb: NOTRUN -> [SKIP][113] ([fdo#109280]) +14 similar issues
[113]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb6/igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@psr-2p-primscrn-indfb-plflip-blt:
- shard-apl: NOTRUN -> [SKIP][114] ([fdo#109271]) +97 similar issues
[114]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-apl4/igt@[email protected]
* igt@kms_frontbuffer_tracking@psr-2p-primscrn-spr-indfb-draw-mmap-gtt:
- shard-tglb: NOTRUN -> [SKIP][115] ([fdo#109280] / [fdo#111825]) +13 similar issues
[115]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb3/igt@kms_frontbuffer_tracking@psr-2p-primscrn-spr-indfb-draw-mmap-gtt.html
* igt@kms_hdr@bpc-switch-dpms@pipe-a-dp-1:
- shard-kbl: [PASS][116] -> [FAIL][117] ([i915#1188]) +1 similar issue
[116]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-kbl1/igt@kms_hdr@[email protected]
[117]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-kbl1/igt@kms_hdr@[email protected]
* igt@kms_pipe_crc_basic@nonblocking-crc-pipe-d-frame-sequence:
- shard-apl: NOTRUN -> [SKIP][118] ([fdo#109271] / [i915#533])
[118]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-apl7/igt@[email protected]
* igt@kms_pipe_crc_basic@read-crc-pipe-d:
- shard-kbl: NOTRUN -> [SKIP][119] ([fdo#109271] / [i915#533])
[119]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-kbl4/igt@[email protected]
* igt@kms_plane@plane-panning-bottom-right-suspend@pipe-b-planes:
- shard-apl: [PASS][120] -> [DMESG-WARN][121] ([i915#180]) +6 similar issues
[120]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-apl6/igt@kms_plane@[email protected]
[121]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-apl8/igt@kms_plane@[email protected]
* igt@kms_plane_alpha_blend@pipe-b-alpha-transparent-fb:
- shard-kbl: NOTRUN -> [FAIL][122] ([i915#265])
[122]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-kbl3/igt@[email protected]
* igt@kms_plane_alpha_blend@pipe-b-constant-alpha-max:
- shard-apl: NOTRUN -> [FAIL][123] ([fdo#108145] / [i915#265])
[123]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-apl2/igt@[email protected]
- shard-glk: NOTRUN -> [FAIL][124] ([fdo#108145] / [i915#265])
[124]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-glk7/igt@[email protected]
- shard-kbl: NOTRUN -> [FAIL][125] ([fdo#108145] / [i915#265])
[125]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-kbl7/igt@[email protected]
* igt@kms_plane_cursor@pipe-d-overlay-size-128:
- shard-iclb: NOTRUN -> [SKIP][126] ([fdo#109278]) +28 similar issues
[126]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb4/igt@[email protected]
* igt@kms_plane_scaling@plane-downscale-with-pixel-format-factor-0-5@pipe-b-edp-1:
- shard-iclb: [PASS][127] -> [SKIP][128] ([i915#5176]) +2 similar issues
[127]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-iclb6/igt@kms_plane_scaling@[email protected]
[128]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb2/igt@kms_plane_scaling@[email protected]
* igt@kms_plane_scaling@plane-downscale-with-rotation-factor-0-5@pipe-b-edp-1:
- shard-iclb: NOTRUN -> [SKIP][129] ([i915#5176]) +2 similar issues
[129]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb5/igt@kms_plane_scaling@[email protected]
* igt@kms_plane_scaling@plane-downscale-with-rotation-factor-0-5@pipe-d-edp-1:
- shard-tglb: NOTRUN -> [SKIP][130] ([i915#5176]) +3 similar issues
[130]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb7/igt@kms_plane_scaling@[email protected]
* igt@kms_psr2_sf@primary-plane-update-sf-dmg-area:
- shard-apl: NOTRUN -> [SKIP][131] ([fdo#109271] / [i915#658])
[131]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-apl4/igt@[email protected]
* igt@kms_psr2_su@page_flip-xrgb8888:
- shard-kbl: NOTRUN -> [SKIP][132] ([fdo#109271] / [i915#658]) +1 similar issue
[132]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-kbl1/igt@kms_psr2_su@page_flip-xrgb8888.html
* igt@kms_psr@psr2_primary_mmap_cpu:
- shard-iclb: NOTRUN -> [SKIP][133] ([fdo#109441])
[133]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb4/igt@kms_psr@psr2_primary_mmap_cpu.html
- shard-tglb: NOTRUN -> [FAIL][134] ([i915#132] / [i915#3467])
[134]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb1/igt@kms_psr@psr2_primary_mmap_cpu.html
* igt@kms_psr@psr2_sprite_blt:
- shard-iclb: [PASS][135] -> [SKIP][136] ([fdo#109441]) +1 similar issue
[135]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-iclb2/igt@kms_psr@psr2_sprite_blt.html
[136]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb5/igt@kms_psr@psr2_sprite_blt.html
* igt@kms_sysfs_edid_timing:
- shard-kbl: NOTRUN -> [FAIL][137] ([IGT#2])
[137]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-kbl4/igt@kms_sysfs_edid_timing.html
* igt@kms_vblank@pipe-a-ts-continuation-suspend:
- shard-apl: NOTRUN -> [DMESG-WARN][138] ([i915#180])
[138]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-apl6/igt@[email protected]
* igt@kms_vrr@flip-dpms:
- shard-iclb: NOTRUN -> [SKIP][139] ([i915#3555])
[139]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb2/igt@[email protected]
- shard-tglb: NOTRUN -> [SKIP][140] ([i915#3555])
[140]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb5/igt@[email protected]
* igt@nouveau_crc@pipe-c-source-outp-inactive:
- shard-iclb: NOTRUN -> [SKIP][141] ([i915#2530])
[141]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb4/igt@[email protected]
* igt@perf@mi-rpc:
- shard-tglb: NOTRUN -> [SKIP][142] ([fdo#109289]) +2 similar issues
[142]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb2/igt@[email protected]
* igt@prime_nv_pcopy@test3_1:
- shard-tglb: NOTRUN -> [SKIP][143] ([fdo#109291]) +1 similar issue
[143]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb1/igt@prime_nv_pcopy@test3_1.html
* igt@prime_nv_test@i915_import_cpu_mmap:
- shard-iclb: NOTRUN -> [SKIP][144] ([fdo#109291]) +1 similar issue
[144]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb7/igt@prime_nv_test@i915_import_cpu_mmap.html
* igt@sw_sync@sync_multi_timeline_wait:
- shard-apl: NOTRUN -> [FAIL][145] ([i915#6140])
[145]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-apl8/igt@sw_sync@sync_multi_timeline_wait.html
* igt@sysfs_clients@fair-3:
- shard-apl: NOTRUN -> [SKIP][146] ([fdo#109271] / [i915#2994]) +1 similar issue
[146]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-apl1/igt@[email protected]
- shard-tglb: NOTRUN -> [SKIP][147] ([i915#2994]) +1 similar issue
[147]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb8/igt@[email protected]
- shard-glk: NOTRUN -> [SKIP][148] ([fdo#109271] / [i915#2994]) +1 similar issue
[148]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-glk9/igt@[email protected]
* igt@sysfs_clients@recycle-many:
- shard-iclb: NOTRUN -> [SKIP][149] ([i915#2994]) +1 similar issue
[149]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb4/igt@[email protected]
- shard-kbl: NOTRUN -> [SKIP][150] ([fdo#109271] / [i915#2994]) +1 similar issue
[150]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-kbl7/igt@[email protected]
#### Possible fixes ####
* igt@gem_ctx_persistence@many-contexts:
- shard-tglb: [FAIL][151] ([i915#2410]) -> [PASS][152]
[151]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-tglb8/igt@[email protected]
[152]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb3/igt@[email protected]
- shard-kbl: [INCOMPLETE][153] ([i915#3593]) -> [PASS][154]
[153]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-kbl3/igt@[email protected]
[154]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-kbl4/igt@[email protected]
* igt@gem_eio@unwedge-stress:
- shard-iclb: [TIMEOUT][155] ([i915#3070]) -> [PASS][156]
[155]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-iclb8/igt@[email protected]
[156]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb3/igt@[email protected]
* igt@gem_exec_balancer@parallel-keep-in-fence:
- shard-iclb: [SKIP][157] ([i915#4525]) -> [PASS][158]
[157]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-iclb5/igt@[email protected]
[158]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb1/igt@[email protected]
* igt@gem_exec_fair@basic-none-share@rcs0:
- shard-glk: [FAIL][159] ([i915#2842]) -> [PASS][160]
[159]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-glk1/igt@gem_exec_fair@[email protected]
[160]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-glk6/igt@gem_exec_fair@[email protected]
* igt@gem_exec_fair@basic-none-solo@rcs0:
- shard-apl: [FAIL][161] ([i915#2842]) -> [PASS][162]
[161]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-apl3/igt@gem_exec_fair@[email protected]
[162]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-apl4/igt@gem_exec_fair@[email protected]
* igt@gem_exec_fair@basic-none@vecs0:
- shard-kbl: [FAIL][163] ([i915#2842]) -> [PASS][164]
[163]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-kbl1/igt@gem_exec_fair@[email protected]
[164]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-kbl1/igt@gem_exec_fair@[email protected]
* igt@gem_exec_fair@basic-pace@vcs0:
- shard-tglb: [FAIL][165] ([i915#2842]) -> [PASS][166]
[165]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-tglb1/igt@gem_exec_fair@[email protected]
[166]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb7/igt@gem_exec_fair@[email protected]
* igt@gem_exec_fair@basic-throttle@rcs0:
- shard-iclb: [FAIL][167] ([i915#2849]) -> [PASS][168]
[167]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-iclb8/igt@gem_exec_fair@[email protected]
[168]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb8/igt@gem_exec_fair@[email protected]
* igt@gem_exec_suspend@basic-s3@smem:
- shard-apl: [DMESG-WARN][169] ([i915#180]) -> [PASS][170] +1 similar issue
[169]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-apl7/igt@gem_exec_suspend@[email protected]
[170]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-apl2/igt@gem_exec_suspend@[email protected]
* igt@gem_exec_whisper@basic-queues-all:
- shard-glk: [DMESG-WARN][171] ([i915#118]) -> [PASS][172]
[171]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-glk2/igt@[email protected]
[172]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-glk6/igt@[email protected]
* igt@i915_pm_rc6_residency@rc6-fence:
- shard-tglb: [WARN][173] ([i915#2681]) -> [PASS][174]
[173]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-tglb8/igt@[email protected]
[174]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-tglb2/igt@[email protected]
* igt@i915_selftest@live@hangcheck:
- shard-iclb: [INCOMPLETE][175] -> [PASS][176]
[175]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-iclb1/igt@i915_selftest@[email protected]
[176]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb3/igt@i915_selftest@[email protected]
* igt@kms_cursor_legacy@cursor-vs-flip-legacy:
- shard-glk: [DMESG-WARN][177] ([i915#118] / [i915#1888]) -> [PASS][178]
[177]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-glk2/igt@[email protected]
[178]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-glk7/igt@[email protected]
* igt@kms_flip@2x-flip-vs-expired-vblank@bc-hdmi-a1-hdmi-a2:
- shard-glk: [FAIL][179] ([i915#79]) -> [PASS][180]
[179]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-glk2/igt@kms_flip@[email protected]
[180]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-glk7/igt@kms_flip@[email protected]
* igt@kms_flip@flip-vs-expired-vblank@a-hdmi-a1:
- shard-glk: [FAIL][181] ([i915#2122]) -> [PASS][182]
[181]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-glk7/igt@kms_flip@[email protected]
[182]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-glk2/igt@kms_flip@[email protected]
* igt@kms_flip@flip-vs-suspend@c-dp1:
- shard-kbl: [INCOMPLETE][183] ([i915#3614]) -> [PASS][184]
[183]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-kbl3/igt@kms_flip@[email protected]
[184]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-kbl1/igt@kms_flip@[email protected]
* igt@kms_pipe_crc_basic@hang-read-crc-pipe-c:
- shard-kbl: [SKIP][185] ([fdo#109271]) -> [PASS][186]
[185]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-kbl7/igt@[email protected]
[186]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-kbl4/igt@[email protected]
- shard-apl: [SKIP][187] ([fdo#109271]) -> [PASS][188] +1 similar issue
[187]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-apl6/igt@[email protected]
[188]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-apl3/igt@[email protected]
- shard-glk: [SKIP][189] ([fdo#109271]) -> [PASS][190]
[189]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-glk3/igt@[email protected]
[190]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-glk1/igt@[email protected]
* igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a:
- shard-kbl: [DMESG-WARN][191] ([i915#180]) -> [PASS][192]
[191]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-kbl4/igt@[email protected]
[192]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-kbl7/igt@[email protected]
* igt@kms_psr@psr2_cursor_blt:
- shard-iclb: [SKIP][193] ([fdo#109441]) -> [PASS][194] +2 similar issues
[193]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-iclb4/igt@kms_psr@psr2_cursor_blt.html
[194]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb2/igt@kms_psr@psr2_cursor_blt.html
#### Warnings ####
* igt@gem_exec_balancer@parallel-ordering:
- shard-iclb: [FAIL][195] ([i915#6117]) -> [SKIP][196] ([i915#4525])
[195]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-iclb2/igt@[email protected]
[196]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb6/igt@[email protected]
* igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-fully-sf:
- shard-iclb: [SKIP][197] ([i915#2920]) -> [SKIP][198] ([i915#658]) +1 similar issue
[197]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-iclb2/igt@[email protected]
[198]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb1/igt@[email protected]
* igt@kms_psr2_sf@overlay-plane-update-continuous-sf:
- shard-iclb: [SKIP][199] ([fdo#111068] / [i915#658]) -> [SKIP][200] ([i915#2920])
[199]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-iclb5/igt@[email protected]
[200]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb2/igt@[email protected]
* igt@kms_psr2_sf@primary-plane-update-sf-dmg-area-big-fb:
- shard-iclb: [SKIP][201] ([i915#658]) -> [SKIP][202] ([i915#2920])
[201]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-iclb8/igt@[email protected]
[202]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb2/igt@[email protected]
* igt@kms_psr2_su@page_flip-nv12:
- shard-iclb: [FAIL][203] ([i915#5939]) -> [SKIP][204] ([fdo#109642] / [fdo#111068] / [i915#658])
[203]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-iclb2/igt@kms_psr2_su@page_flip-nv12.html
[204]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-iclb7/igt@kms_psr2_su@page_flip-nv12.html
* igt@runner@aborted:
- shard-apl: ([FAIL][205], [FAIL][206], [FAIL][207], [FAIL][208], [FAIL][209]) ([i915#180] / [i915#3002] / [i915#4312] / [i915#5257]) -> ([FAIL][210], [FAIL][211], [FAIL][212], [FAIL][213], [FAIL][214], [FAIL][215], [FAIL][216], [FAIL][217], [FAIL][218], [FAIL][219]) ([fdo#109271] / [i915#180] / [i915#3002] / [i915#4312] / [i915#5257])
[205]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-apl2/igt@[email protected]
[206]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-apl1/igt@[email protected]
[207]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-apl7/igt@[email protected]
[208]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-apl6/igt@[email protected]
[209]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11768/shard-apl6/igt@[email protected]
[210]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-apl8/igt@[email protected]
[211]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-apl4/igt@[email protected]
[212]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-apl7/igt@[email protected]
[213]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-apl7/igt@[email protected]
[214]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-apl6/igt@[email protected]
[215]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-apl8/igt@[email protected]
[216]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-apl8/igt@[email protected]
[217]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-apl1/igt@[email protected]
[218]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-apl3/igt@[email protected]
[219]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/shard-apl1/igt@[email protected]
[IGT#2]: https://gitlab.freedesktop.org/drm/igt-gpu-tools/issues/2
[fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145
[fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
[fdo#109274]: https://bugs.freedesktop.org/show_bug.cgi?id=109274
[fdo#109278]: https://bugs.freedesktop.org/show_bug.cgi?id=109278
[fdo#109279]: https://bugs.freedesktop.org/show_bug.cgi?id=109279
[fdo#109280]: https://bugs.freedesktop.org/show_bug.cgi?id=109280
[fdo#109283]: https://bugs.freedesktop.org/show_bug.cgi?id=109283
[fdo#109284]: https://bugs.freedesktop.org/show_bug.cgi?id=109284
[fdo#109289]: https://bugs.freedesktop.org/show_bug.cgi?id=109289
[fdo#109290]: https://bugs.freedesktop.org/show_bug.cgi?id=109290
[fdo#109291]: https://bugs.freedesktop.org/show_bug.cgi?id=109291
[fdo#109314]: https://bugs.freedesktop.org/show_bug.cgi?id=109314
[fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441
[fdo#109642]: https://bugs.freedesktop.org/show_bug.cgi?id=109642
[fdo#110542]: https://bugs.freedesktop.org/show_bug.cgi?id=110542
[fdo#110723]: https://bugs.freedesktop.org/show_bug.cgi?id=110723
[fdo#110725]: https://bugs.freedesktop.org/show_bug.cgi?id=110725
[fdo#110892]: https://bugs.freedesktop.org/show_bug.cgi?id=110892
[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#111644]: https://bugs.freedesktop.org/show_bug.cgi?id=111644
[fdo#111825]: https://bugs.freedesktop.org/show_bug.cgi?id=111825
[fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
[i915#1099]: https://gitlab.freedesktop.org/drm/intel/issues/1099
[i915#1149]: https://gitlab.freedesktop.org/drm/intel/issues/1149
[i915#118]: https://gitlab.freedesktop.org/drm/intel/issues/118
[i915#1188]: https://gitlab.freedesktop.org/drm/intel/issues/1188
[i915#1319]: https://gitlab.freedesktop.org/drm/intel/issues/1319
[i915#132]: https://gitlab.freedesktop.org/drm/intel/issues/132
[i915#1397]: https://gitlab.freedesktop.org/drm/intel/issues/1397
[i915#180]: https://gitlab.freedesktop.org/drm/intel/issues/180
[i915#1839]: https://gitlab.freedesktop.org/drm/intel/issues/1839
[i915#1888]: https://gitlab.freedesktop.org/drm/intel/issues/1888
[i915#2122]: https://gitlab.freedesktop.org/drm/intel/issues/2122
[i915#2346]: https://gitlab.freedesktop.org/drm/intel/issues/2346
[i915#2410]: https://gitlab.freedesktop.org/drm/intel/issues/2410
[i915#2411]: https://gitlab.freedesktop.org/drm/intel/issues/2411
[i915#2527]: https://gitlab.freedesktop.org/drm/intel/issues/2527
[i915#2530]: https://gitlab.freedesktop.org/drm/intel/issues/2530
[i915#265]: https://gitlab.freedesktop.org/drm/intel/issues/265
[i915#2658]: https://gitlab.freedesktop.org/drm/intel/issues/2658
[i915#2681]: https://gitlab.freedesktop.org/drm/intel/issues/2681
[i915#2842]: https://gitlab.freedesktop.org/drm/intel/issues/2842
[i915#2849]: https://gitlab.freedesktop.org/drm/intel/issues/2849
[i915#2856]: https://gitlab.freedesktop.org/drm/intel/issues/2856
[i915#2920]: https://gitlab.freedesktop.org/drm/intel/issues/2920
[i915#2994]: https://gitlab.freedesktop.org/drm/intel/issues/2994
[i915#3002]: https://gitlab.freedesktop.org/drm/intel/issues/3002
[i915#3063]: https://gitlab.freedesktop.org/drm/intel/issues/3063
[i915#3070]: https://gitlab.freedesktop.org/drm/intel/issues/3070
[i915#3319]: https://gitlab.freedesktop.org/drm/intel/issues/3319
[i915#3359]: https://gitlab.freedesktop.org/drm/intel/issues/3359
[i915#3467]: https://gitlab.freedesktop.org/drm/intel/issues/3467
[i915#3528]: https://gitlab.freedesktop.org/drm/intel/issues/3528
[i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
[i915#3593]: https://gitlab.freedesktop.org/drm/intel/issues/3593
[i915#3614]: https://gitlab.freedesktop.org/drm/intel/issues/3614
[i915#3689]: https://gitlab.freedesktop.org/drm/intel/issues/3689
[i915#3886]: https://gitlab.freedesktop.org/drm/intel/issues/3886
[i915#3921]: https://gitlab.freedesktop.org/drm/intel/issues/3921
[i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103
[i915#4171]: https://gitlab.freedesktop.org/drm/intel/issues/4171
[i915#4270]: https://gitlab.freedesktop.org/drm/intel/issues/4270
[i915#4312]: https://gitlab.freedesktop.org/drm/intel/issues/4312
[i915#4387]: https://gitlab.freedesktop.org/drm/intel/issues/4387
[i915#4525]: https://gitlab.freedesktop.org/drm/intel/issues/4525
[i915#4528]: https://gitlab.freedesktop.org/drm/intel/issues/4528
[i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
[i915#5176]: https://gitlab.freedesktop.org/drm/intel/issues/5176
[i915#5257]: https://gitlab.freedesktop.org/drm/intel/issues/5257
[i915#5286]: https://gitlab.freedesktop.org/drm/intel/issues/5286
[i915#5287]: https://gitlab.freedesktop.org/drm/intel/issues/5287
[i915#533]: https://gitlab.freedesktop.org/drm/intel/issues/533
[i915#5566]: https://gitlab.freedesktop.org/drm/intel/issues/5566
[i915#5591]: https://gitlab.freedesktop.org/drm/intel/issues/5591
[i915#5784]: https://gitlab.freedesktop.org/drm/intel/issues/5784
[i915#5939]: https://gitlab.freedesktop.org/drm/intel/issues/5939
[i915#6095]: https://gitlab.freedesktop.org/drm/intel/issues/6095
[i915#6117]: https://gitlab.freedesktop.org/drm/intel/issues/6117
[i915#6140]: https://gitlab.freedesktop.org/drm/intel/issues/6140
[i915#658]: https://gitlab.freedesktop.org/drm/intel/issues/658
[i915#716]: https://gitlab.freedesktop.org/drm/intel/issues/716
[i915#768]: https://gitlab.freedesktop.org/drm/intel/issues/768
[i915#79]: https://gitlab.freedesktop.org/drm/intel/issues/79
Build changes
-------------
* CI: CI-20190529 -> None
* IGT: IGT_6533 -> IGTPW_7327
* Piglit: piglit_4509 -> None
CI-20190529: 20190529
CI_DRM_11768: 6da0a0872a9b44e2be9645c1d7045fe88e035c25 @ git://anongit.freedesktop.org/gfx-ci/linux
IGTPW_7327: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7327/index.html
IGT_6533: 6b5107d91827962808441db6b98e478aa9e67bdb @ 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_7327/index.html