Igt-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [igt-dev] [PATCH i-g-t 00/18] Add igt_doc.py
@ 2023-03-10  8:23 Zbigniew Kempczyński
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 01/18] scripts/igt_doc.py: beautify its code Zbigniew Kempczyński
                   ` (19 more replies)
  0 siblings, 20 replies; 24+ messages in thread
From: Zbigniew Kempczyński @ 2023-03-10  8:23 UTC (permalink / raw)
  To: igt-dev

Introduce documentation and testlist generator.

Mauro Carvalho Chehab (18):
  scripts/igt_doc.py: beautify its code
  scripts/igt_doc.py: add JSON file output
  scripts/igt_doc.py: dynamically create fields array from a JSON file
  scripts/igt_doc.py: add support to specify numeric values
  scripts/igt_doc.py: improve --show-subtests logic
  scripts/igt_doc.py: add error handler for subprocess
  scripts/igt_doc.py: improve multi-line logic
  scripts/igt_doc.py: don't use ":=" operator
  scripts/igt_doc.py: make it compatible with Python 3.6
  scripts/igt_doc.py: sets the minimal version to run the script
  scripts/igt_doc.py: use a different logic to get IGT prefix
  testplan/meson.build: add targets to build Xe test documentation
  xe/xe_test_config.json: cleanup the field struct
  xe/xe_huc_copy: add GPU dependency to its documentation
  xe/xe_*: add TEST/SUBTEST documentation
  xe-fast-feedback.testlist: update debugfs tests
  xe_mmap: skip VRAM tests if no VRAM is found
  meson: replace "igt@xe/" by "igt@"

 docs/testplan/meson.build                |  59 ++
 meson.build                              |   7 -
 scripts/igt_doc.py                       | 681 ++++++++++++++++++++---
 tests/intel-ci/xe-fast-feedback.testlist | 279 +++++-----
 tests/meson.build                        |  32 ++
 tests/xe/meson.build                     |  32 --
 tests/xe/xe_debugfs.c                    |  53 +-
 tests/xe/xe_evict.c                      |  82 +++
 tests/xe/xe_exec_balancer.c              |   7 +-
 tests/xe/xe_exec_compute_mode.c          |   2 +
 tests/xe/xe_exec_reset.c                 | 134 +++++
 tests/xe/xe_exec_threads.c               | 242 ++++++++
 tests/xe/xe_guc_pc.c                     |  74 +++
 tests/xe/xe_huc_copy.c                   |   4 +
 tests/xe/xe_mmap.c                       |  13 +-
 tests/xe/xe_pm.c                         |  61 ++
 tests/xe/xe_prime_self_import.c          |  65 ++-
 tests/xe/xe_query.c                      |   2 +-
 tests/xe/xe_test_config.json             |  80 +--
 tests/xe/xe_vm.c                         | 199 +++++++
 20 files changed, 1741 insertions(+), 367 deletions(-)
 create mode 100644 docs/testplan/meson.build

-- 
2.34.1

^ permalink raw reply	[flat|nested] 24+ messages in thread

* [igt-dev] [PATCH i-g-t 01/18] scripts/igt_doc.py: beautify its code
  2023-03-10  8:23 [igt-dev] [PATCH i-g-t 00/18] Add igt_doc.py Zbigniew Kempczyński
@ 2023-03-10  8:23 ` Zbigniew Kempczyński
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 02/18] scripts/igt_doc.py: add JSON file output Zbigniew Kempczyński
                   ` (18 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Zbigniew Kempczyński @ 2023-03-10  8:23 UTC (permalink / raw)
  To: igt-dev

From: Mauro Carvalho Chehab <mchehab@kernel.org>

Change some comments and add blank lines before docstring, in
order to better document its code.

No functional changes.

Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Reviewed-by: Zbigniew Kempczyński <zbigniew.kempczynski@intel.com>
---
 scripts/igt_doc.py | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)
 mode change 100755 => 100644 scripts/igt_doc.py

diff --git a/scripts/igt_doc.py b/scripts/igt_doc.py
old mode 100755
new mode 100644
index b7e3129d3f..c8bd4054f6
--- a/scripts/igt_doc.py
+++ b/scripts/igt_doc.py
@@ -109,7 +109,6 @@ class TestList:
     SUBTEST as those variables are locally processed on each comment line.
     """
 
-
     def __init__(self):
         self.doc = {}
         self.test_number = 0
@@ -238,7 +237,7 @@ class TestList:
 
     def print_test(self):
 
-        """Print tests and subtests ordered by tests"""
+        """Print tests and subtests"""
 
         for test in sorted(self.doc.keys()):
             fname = self.doc[test]["File"]
@@ -368,7 +367,7 @@ class TestList:
     # File handling methods
     #
 
-    def add_file_documentation(self, fname, field_re):
+    def add_file_documentation(self, fname):
 
         """Adds the contents of test/subtest documentation form a file"""
 
-- 
2.34.1

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [igt-dev] [PATCH i-g-t 02/18] scripts/igt_doc.py: add JSON file output
  2023-03-10  8:23 [igt-dev] [PATCH i-g-t 00/18] Add igt_doc.py Zbigniew Kempczyński
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 01/18] scripts/igt_doc.py: beautify its code Zbigniew Kempczyński
@ 2023-03-10  8:23 ` Zbigniew Kempczyński
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 03/18] scripts/igt_doc.py: dynamically create fields array from a JSON file Zbigniew Kempczyński
                   ` (17 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Zbigniew Kempczyński @ 2023-03-10  8:23 UTC (permalink / raw)
  To: igt-dev

From: Mauro Carvalho Chehab <mchehab@kernel.org>

At least for debugging purposes, it is interesting to see how the
script is parsing the input files and expanding wildcards on a more
condensed way. So, add support to output the dictionary contents
into a json file.

Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Reviewed-by: Zbigniew Kempczyński <zbigniew.kempczynski@intel.com>
---
 scripts/igt_doc.py | 51 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 51 insertions(+)

diff --git a/scripts/igt_doc.py b/scripts/igt_doc.py
index c8bd4054f6..d21f87dc71 100644
--- a/scripts/igt_doc.py
+++ b/scripts/igt_doc.py
@@ -11,6 +11,7 @@
 """Maintain test plan and test implementation documentation on IGT."""
 
 import argparse
+import json
 import re
 import subprocess
 import sys
@@ -231,6 +232,42 @@ class TestList:
 
         return subtest_array
 
+    def expand_dictionary(self):
+
+        """ prepares a dictonary with subtest arguments expanded """
+
+        test_dict = {}
+
+        for test in self.doc:                   # pylint: disable=C0206
+            fname = self.doc[test]["File"]
+
+            name = re.sub(r'.*tests/', '', fname)
+            name = re.sub(r'\.[ch]', '', name)
+            name = "igt@" + name
+
+            test_dict[name] = {}
+
+            for field in self.doc[test]:
+                if field == "subtest":
+                    continue
+                if field == "arg":
+                    continue
+
+                test_dict[name][field] = self.doc[test][field]
+
+            subtest_array = self.expand_subtest(fname, name, test)
+            for subtest in subtest_array:
+                summary = subtest["Summary"]
+                test_dict[name][summary] = {}
+                for field in sorted(subtest.keys()):
+                    if field == 'Summary':
+                        continue
+                    if field == 'arg':
+                        continue
+                    test_dict[name][summary][field] = subtest[field]
+
+        return test_dict
+
     #
     # Output methods
     #
@@ -280,6 +317,14 @@ class TestList:
             print()
             print()
 
+    def print_json(self, out_fname):
+
+        """Adds the contents of test/subtest documentation form a file"""
+        test_dict = self.expand_dictionary()
+
+        with open(out_fname, "w", encoding='utf8') as write_file:
+            json.dump(test_dict, write_file, indent=4)
+
     #
     # Subtest list methods
     #
@@ -541,6 +586,8 @@ parser = argparse.ArgumentParser(description = "Print formatted kernel documenta
                                  epilog = 'If no action specified, assume --rest.')
 parser.add_argument("--rest", action="store_true",
                     help="Generate documentation from the source files, in ReST file format.")
+parser.add_argument("--to-json",
+                    help="Output test documentation in JSON format as TO_JSON file")
 parser.add_argument("--show-subtests", action="store_true",
                     help="Shows the name of the documented subtests in alphabetical order.")
 parser.add_argument("--check-testlist", action="store_true",
@@ -570,5 +617,9 @@ if parse_args.check_testlist:
     RUN = 1
     tests.check_tests()
 
+if parse_args.to_json:
+    RUN = 1
+    tests.print_json(parse_args.to_json)
+
 if not RUN or parse_args.rest:
     tests.print_test()
-- 
2.34.1

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [igt-dev] [PATCH i-g-t 03/18] scripts/igt_doc.py: dynamically create fields array from a JSON file
  2023-03-10  8:23 [igt-dev] [PATCH i-g-t 00/18] Add igt_doc.py Zbigniew Kempczyński
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 01/18] scripts/igt_doc.py: beautify its code Zbigniew Kempczyński
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 02/18] scripts/igt_doc.py: add JSON file output Zbigniew Kempczyński
@ 2023-03-10  8:23 ` Zbigniew Kempczyński
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 04/18] scripts/igt_doc.py: add support to specify numeric values Zbigniew Kempczyński
                   ` (16 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Zbigniew Kempczyński @ 2023-03-10  8:23 UTC (permalink / raw)
  To: igt-dev

From: Mauro Carvalho Chehab <mchehab@kernel.org>

Defining TEST/SUBTEST fields is not an easy task, and may change with
time. So, place them into a JSON file, together with the files that
are implements the test scope.

Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Reviewed-by: Zbigniew Kempczyński <zbigniew.kempczynski@intel.com>
---
 scripts/igt_doc.py | 494 +++++++++++++++++++++++++++++++++++++++------
 1 file changed, 429 insertions(+), 65 deletions(-)
 mode change 100644 => 100755 scripts/igt_doc.py

diff --git a/scripts/igt_doc.py b/scripts/igt_doc.py
old mode 100644
new mode 100755
index d21f87dc71..425240b2f7
--- a/scripts/igt_doc.py
+++ b/scripts/igt_doc.py
@@ -1,5 +1,5 @@
 #!/usr/bin/env python3
-# pylint: disable=C0301,R0914,R0912,R0915
+# pylint: disable=C0301,R0902,R0914,R0912,R0915
 # SPDX-License-Identifier: (GPL-2.0 OR MIT)
 
 ## Copyright (C) 2023    Intel Corporation                 ##
@@ -11,27 +11,87 @@
 """Maintain test plan and test implementation documentation on IGT."""
 
 import argparse
+import glob
 import json
+import os
 import re
 import subprocess
 import sys
 
-IGT_BUILD_PATH = 'build/'
+IGT_BUILD_PATH = 'build'
 IGT_RUNNER = 'runner/igt_runner'
 
-# Fields that mat be inside TEST and SUBTEST macros
-fields = [
-    'Category',       # Hardware building block / Software building block / ...
-    'Sub-category',   # waitfence / dmabuf/ sysfs / debugfs / ...
-    'Functionality',  # basic test / ...
-    'Test category',  # functionality test / pereformance / stress
-    'Run type',       # BAT / workarouds / stress / developer-specific / ...
-    'Issue',          # Bug tracker issue(s)
-    'GPU excluded platforms',     # none / DG1 / DG2 / TGL / MTL / PVC / ATS-M / ...
-    'GPU requirements',  # Any other specific platform requirements
-    'Depends on',     # some other IGT test, like igt@test@subtes
-    'Test requirements',  # other non-platform requirements
-    'Description']    # Description of the test
+#
+# ancillary functions to sort dictionary hierarchy
+#
+def _sort_per_level(item):
+    if "level" not in item[1]["_properties_"]:
+        return item[0]
+
+    return "%05d_%05d_%s" % (item[1]["_properties_"]["level"], item[1]["_properties_"]["sublevel"], item[0])   # pylint: disable=C0209
+
+def _sort_using_array(item, array):
+    ret_str = ''
+    for field in array:
+        if field in item[1]:
+            ret_str += '_' + field + '_' + item[1][field]
+
+    if ret_str == '':
+        ret_str="________"
+
+    return ret_str
+
+#
+# Ancillary logic to allow plurals on fields
+#
+# As suggested at https://stackoverflow.com/questions/18902608/generating-the-plural-form-of-a-noun/19018986
+#
+
+def plural(field):
+
+    """
+    Poor man's conversion to plural.
+
+    It should cover usual English plural rules, although it is not meant
+    to cover exceptions (except for a few ones that could be useful on actual
+    fields).
+
+    """
+
+    if (match := re.match(r"(.*)\b(\S+)", field)):
+        ret_str = match.group(1)
+        word = match.group(2)
+
+        if word.isupper():
+            ret_str += word
+        elif word in ["of", "off", "on", "description", "todo"]:
+            ret_str += word
+        elif word.endswith('ed'):
+            ret_str += word
+        elif word[-1:] in ['s', 'x', 'z']:
+            ret_str += word + 'es'
+        elif word[-2:] in ['sh', 'ch']:
+            ret_str += word + 'es'
+        elif word.endswith('fe'):
+            ret_str += word[:-2] + 'ves'
+        elif word.endswith('f'):
+            ret_str += word[:-1] + 'ves'
+        elif word.endswith('y'):
+            ret_str += word[:-1] + 'ies'
+        elif word.endswith('o'):
+            ret_str += word + 'es'
+        elif word.endswith('us'):
+            ret_str += word[:-2] + 'i'
+        elif word.endswith('on'):
+            ret_str += word[:-2] + 'a'
+        elif word.endswith('an'):
+            ret_str += word[:-2] + 'en'
+        else:
+            ret_str += word + 's'
+
+        return ret_str
+
+    return field
 
 #
 # TestList class definition
@@ -48,13 +108,7 @@ class TestList:
          * Category: Software build block
          * Sub-category: documentation
          * Functionality: test documentation
-         * Test category: ReST generation
-         * Run type: IGT kunit test
          * Issue: none
-         * GPU excluded platforms: none
-         * GPU requirements: none
-         * Depends on: @igt@deadbeef@basic
-         * Test requirements: Need python3 to run it
          * Description: Complete description of this test
          *
          * SUBTEST: foo
@@ -108,18 +162,186 @@ class TestList:
     The wildcard arguments there need to be expanded. This is done by
     defining arg[1] to arg[n] at the same code comment that contains the
     SUBTEST as those variables are locally processed on each comment line.
+
+    This script needs a configuration file, in JSON format, describing the
+    fields which will be parsed for TEST and/or SUBTEST tags.
+
+    An example of such file is:
+
+    {
+        "files": [ "tests/driver/*.c" ],
+        "fields": {
+            "Category": {
+                "Sub-category": {
+                    "Functionality": {
+                    }
+                }
+            },
+            "Issue": {
+                "_properties_": {
+                    "description": "If the test is used to solve an issue, point to the URL containing the issue."
+                }
+            },
+            "Description" : {
+                "_properties_": {
+                    "description": "Provides a description for the test/subtest."
+                }
+            }
+        }
+    }
+
+    So, the above JSON config file expects tags like those:
+
+    TEST: foo
+    Description: foo
+
+    SUBTEST: bar
+    Category: Hardware
+    Sub-category: EU
+    Description: test bar on EU
+
+    SUBTEST: foobar
+    Category: Software
+    Type: ioctl
+    Description: test ioctls
     """
 
-    def __init__(self):
+    def __init__(self, config_fname, include_plan, file_list):
         self.doc = {}
         self.test_number = 0
         self.min_test_prefix = ''
+        self.config = None
+        self.filenames = file_list
+        self.plan_filenames = []
+        self.props = {}
+        self.config_fname = config_fname
+        self.level_count = 0
+        self.field_list = {}
+        self.title = None
+
+        driver_name = re.sub(r'(.*/)?([^\/]+)/.*', r'\2', config_fname).capitalize()
+
+        implemented_class = None
+
+        with open(config_fname, 'r', encoding='utf8') as handle:
+            self.config = json.load(handle)
+
+            self.__add_field(None, 0, 0, self.config["fields"])
+
+            sublevel_count = [ 0 ] * self.level_count
+
+            for field, item in self.props.items():
+                if "sublevel" in item["_properties_"]:
+                    level = item["_properties_"]["level"]
+                    sublevel = item["_properties_"]["sublevel"]
+                    if sublevel > sublevel_count[level - 1]:
+                        sublevel_count[level - 1] = sublevel
+
+                field_lc = field.lower()
+                self.field_list[field_lc] = field
+                field_plural = plural(field_lc)
+                if field_lc != field_plural:
+                    self.field_list[field_plural] = field
+
+            if include_plan:
+                self.props["Class"] = {}
+                self.props["Class"]["_properties_"] = {}
+                self.props["Class"]["_properties_"]["level"] = 1
+                self.props["Class"]["_properties_"]["sublevel"] = sublevel_count[0] + 1
+
+            # Remove non-multilevel items, as we're only interested on
+            # hierarchical item levels here
+            for field, item in self.props.items():
+                if "sublevel" in item["_properties_"]:
+                    level = item["_properties_"]["level"]
+                    if sublevel_count[level - 1] == 1:
+                        del item["_properties_"]["level"]
+                        del item["_properties_"]["sublevel"]
+            del self.props["_properties_"]
+
+            has_implemented = False
+            if not self.filenames:
+                self.filenames = []
+                files = self.config["files"]
+                for cfg_file in files:
+                    cfg_file = os.path.realpath(os.path.dirname(config_fname)) + "/" + cfg_file
+                    for fname in glob.glob(cfg_file):
+                        self.filenames.append(fname)
+                        has_implemented = True
+
+            has_planned = False
+            if include_plan and "planning_files" in self.config:
+                implemented_class = "Implemented"
+                files = self.config["planning_files"]
+                for cfg_file in files:
+                    cfg_file = os.path.realpath(os.path.dirname(config_fname)) + "/" + cfg_file
+                    for fname in glob.glob(cfg_file):
+                        self.plan_filenames.append(fname)
+                        has_planned = True
+
+        planned_class = None
+        if has_implemented:
+            if has_planned:
+                planned_class = "Planned"
+                self.title = "Planned and implemented tests for "
+            else:
+                self.title = "Implemented tests for "
+        else:
+            if has_planned:
+                self.title = "Planned tests for "
+            else:
+                sys.exit("Need file names to be processed")
+
+        self.title += driver_name + " driver"
+
+        # Parse files, expanding wildcards
+        field_re = re.compile(r"(" + '|'.join(self.field_list.keys()) + r'):\s*(.*)', re.I)
+
+        for fname in self.filenames:
+            if fname == '':
+                continue
+
+            self.__add_file_documentation(fname, implemented_class, field_re)
+
+        if include_plan:
+            for fname in self.plan_filenames:
+                self.__add_file_documentation(fname, planned_class, field_re)
 
     #
     # ancillary methods
     #
 
-    def expand_subtest(self, fname, test_name, test):
+    def __add_field(self, name, sublevel, hierarchy_level, field):
+
+        """ Flatten config fields into a non-hierarchical dictionary """
+
+        for key in field:
+            if key not in self.props:
+                self.props[key] = {}
+                self.props[key]["_properties_"] = {}
+
+            if name:
+                if key == "_properties_":
+                    if key not in self.props:
+                        self.props[key] = {}
+                    self.props[name][key].update(field[key])
+
+                    sublevel += 1
+                    hierarchy_level += 1
+                    if "sublevel" in self.props[name][key]:
+                        if self.props[name][key]["sublevel"] != sublevel:
+                            sys.exit(f"Error: config defined {name} as sublevel {self.props[key]['sublevel']}, but wants to redefine as sublevel {sublevel}")
+
+                    self.props[name][key]["level"] = self.level_count
+                    self.props[name][key]["sublevel"] = sublevel
+
+                    continue
+            else:
+                self.level_count += 1
+
+            self.__add_field(key, sublevel, hierarchy_level, field[key])
+
+    def expand_subtest(self, fname, test_name, test, allow_inherit):
 
         """Expand subtest wildcards providing an array with subtests"""
 
@@ -145,11 +367,13 @@ class TestList:
                     if k == 'arg':
                         continue
 
-                    if self.doc[test]["subtest"][subtest][k] == self.doc[test][k]:
-                        continue
+                    if not allow_inherit:
+                        if k in self.doc[test] and self.doc[test]["subtest"][subtest][k] == self.doc[test][k]:
+                            continue
 
                     subtest_dict[k] = self.doc[test]["subtest"][subtest][k]
-                    subtest_array.append(subtest_dict)
+
+                subtest_array.append(subtest_dict)
 
                 continue
 
@@ -210,8 +434,11 @@ class TestList:
 
                     sub_field = self.doc[test]["subtest"][subtest][field]
                     sub_field = re.sub(r"%?\barg\[(\d+)\]", lambda m: arg_map[int(m.group(1)) - 1], sub_field) # pylint: disable=W0640
-                    if sub_field == self.doc[test][field]:
-                        continue
+
+                    if not allow_inherit:
+                        if field in self.doc[test]:
+                            if sub_field in self.doc[test][field] and sub_field == self.doc[test][field]:
+                                continue
 
                     subtest_dict[field] = sub_field
 
@@ -232,9 +459,9 @@ class TestList:
 
         return subtest_array
 
-    def expand_dictionary(self):
+    def expand_dictionary(self, subtest_only):
 
-        """ prepares a dictonary with subtest arguments expanded """
+        """ prepares a dictionary with subtest arguments expanded """
 
         test_dict = {}
 
@@ -242,29 +469,34 @@ class TestList:
             fname = self.doc[test]["File"]
 
             name = re.sub(r'.*tests/', '', fname)
-            name = re.sub(r'\.[ch]', '', name)
+            name = re.sub(r'\.[\w+]$', '', name)
             name = "igt@" + name
 
-            test_dict[name] = {}
+            if not subtest_only:
+                test_dict[name] = {}
 
-            for field in self.doc[test]:
-                if field == "subtest":
-                    continue
-                if field == "arg":
-                    continue
+                for field in self.doc[test]:
+                    if field == "subtest":
+                        continue
+                    if field == "arg":
+                        continue
 
-                test_dict[name][field] = self.doc[test][field]
+                    test_dict[name][field] = self.doc[test][field]
+                dic = test_dict[name]
+            else:
+                dic = test_dict
 
-            subtest_array = self.expand_subtest(fname, name, test)
+            subtest_array = self.expand_subtest(fname, name, test, subtest_only)
             for subtest in subtest_array:
                 summary = subtest["Summary"]
-                test_dict[name][summary] = {}
+
+                dic[summary] = {}
                 for field in sorted(subtest.keys()):
                     if field == 'Summary':
                         continue
                     if field == 'arg':
                         continue
-                    test_dict[name][summary][field] = subtest[field]
+                    dic[summary][field] = subtest[field]
 
         return test_dict
 
@@ -272,9 +504,20 @@ class TestList:
     # Output methods
     #
 
-    def print_test(self):
+    def print_rest_flat(self, filename):
+
+        """Print tests and subtests ordered by tests"""
 
-        """Print tests and subtests"""
+        handler = None
+        if filename:
+            original_stdout = sys.stdout
+            handler = open(filename, "w", encoding='utf8') # pylint: disable=R1732
+            sys.stdout = handler
+
+        print("=" * len(self.title))
+        print(self.title)
+        print("=" * len(self.title))
+        print()
 
         for test in sorted(self.doc.keys()):
             fname = self.doc[test]["File"]
@@ -296,7 +539,7 @@ class TestList:
 
                 print(f":{field}: {self.doc[test][field]}")
 
-            subtest_array = self.expand_subtest(fname, name, test)
+            subtest_array = self.expand_subtest(fname, name, test, False)
 
             for subtest in subtest_array:
                 print()
@@ -317,13 +560,109 @@ class TestList:
             print()
             print()
 
+        if handler:
+            handler.close()
+            sys.stdout = original_stdout
+
+    def print_nested_rest(self, filename):
+
+        """Print tests and subtests ordered by tests"""
+
+        handler = None
+        if filename:
+            original_stdout = sys.stdout
+            handler = open(filename, "w", encoding='utf8') # pylint: disable=R1732
+            sys.stdout = handler
+
+        print("=" * len(self.title))
+        print(self.title)
+        print("=" * len(self.title))
+        print()
+
+        # Identify the sort order for the fields
+        fields_order = []
+        fields = sorted(self.props.items(), key = _sort_per_level)
+        for item in fields:
+            fields_order.append(item[0])
+
+        # Receives a flat subtest dictionary, with wildcards expanded
+        subtest_dict = self.expand_dictionary(True)
+
+        subtests = sorted(subtest_dict.items(),
+                          key = lambda x: _sort_using_array(x, fields_order))
+
+        # Use the level markers below
+        level_markers='=-^_~:.`"*+#'
+
+        # Print the data
+        old_fields = [ '' ] * len(fields_order)
+
+        for subtest, fields in subtests:
+            # Check what level has different message
+            marker = 0
+            for cur_level in range(0, len(fields_order)):  # pylint: disable=C0200
+                field = fields_order[cur_level]
+                if not "level" in self.props[field]["_properties_"]:
+                    continue
+                if field in fields:
+                    if old_fields[cur_level] != fields[field]:
+                        break
+                    marker += 1
+
+            # print hierarchy
+            for i in range(cur_level, len(fields_order)):
+                if not "level" in self.props[fields_order[i]]["_properties_"]:
+                    continue
+                if not fields_order[i] in fields:
+                    continue
+
+                if marker >= len(level_markers):
+                    sys.exit(f"Too many levels: {marker}, maximum limit is {len(level_markers):}")
+
+                title_str = fields_order[i] + ": " + fields[fields_order[i]]
+
+                print(title_str)
+                print(level_markers[marker] * len(title_str))
+                print()
+                marker += 1
+
+            print()
+            print("``" + subtest + "``")
+            print()
+
+            # print non-hierarchy fields
+            for field in fields_order:
+                if "level" in self.props[field]["_properties_"]:
+                    continue
+
+                if field in fields:
+                    print(f":{field}: {fields[field]}")
+
+            # Store current values
+            for i in range(cur_level, len(fields_order)):
+                field = fields_order[i]
+                if not "level" in self.props[field]["_properties_"]:
+                    continue
+                if field in fields:
+                    old_fields[i] = fields[field]
+                else:
+                    old_fields[i] = ''
+
+            print()
+
+        if handler:
+            handler.close()
+            sys.stdout = original_stdout
+
     def print_json(self, out_fname):
 
         """Adds the contents of test/subtest documentation form a file"""
-        test_dict = self.expand_dictionary()
+
+        # Receives a dictionary with tests->subtests with expanded subtests
+        test_dict = self.expand_dictionary(False)
 
         with open(out_fname, "w", encoding='utf8') as write_file:
-            json.dump(test_dict, write_file, indent=4)
+            json.dump(test_dict, write_file, indent = 4)
 
     #
     # Subtest list methods
@@ -412,7 +751,7 @@ class TestList:
     # File handling methods
     #
 
-    def add_file_documentation(self, fname):
+    def __add_file_documentation(self, fname, implemented_class, field_re):
 
         """Adds the contents of test/subtest documentation form a file"""
 
@@ -475,6 +814,9 @@ class TestList:
                         self.doc[current_test]["Summary"] = match.group(1)
                         self.doc[current_test]["File"] = fname
                         self.doc[current_test]["subtest"] = {}
+
+                        if implemented_class:
+                            self.doc[current_test]["Class"] = implemented_class
                         current_subtest = None
 
                         continue
@@ -487,7 +829,22 @@ class TestList:
                     current_field = ''
                     handle_section = 'subtest'
 
+                    # subtests inherit properties from the tests
                     self.doc[current_test]["subtest"][current_subtest] = {}
+                    for field in self.doc[current_test].keys():
+                        if field == "arg":
+                            continue
+                        if field == "summary":
+                            continue
+                        if field == "File":
+                            continue
+                        if field == "subtest":
+                            continue
+                        if field == "_properties_":
+                            continue
+                        if field == "Description":
+                            continue
+                        self.doc[current_test]["subtest"][current_subtest][field] = self.doc[current_test][field]
 
                     self.doc[current_test]["subtest"][current_subtest]["Summary"] = match.group(1)
                     self.doc[current_test]["subtest"][current_subtest]["Description"] = ''
@@ -503,7 +860,7 @@ class TestList:
 
                 # It is a known section. Parse its contents
                 if (match := re.match(field_re, file_line)):
-                    current_field = match.group(1).lower().capitalize()
+                    current_field = self.field_list[match.group(1).lower()]
                     match_val = match.group(2)
 
                     if handle_section == 'test':
@@ -550,17 +907,19 @@ class TestList:
 
                 if (match := re.match(r'^(.*):', file_line)):
                     sys.exit(f"{fname}:{file_ln + 1}: Error: unrecognized field '%s'. Need to add at %s" %
-                            (match.group(1), fname))
+                            (match.group(1), self.config_fname))
 
                 # Handle multi-line field contents
                 if current_field:
                     if (match := re.match(r'\s*(.*)', file_line)):
                         if handle_section == 'test':
-                            self.doc[current_test][current_field] += " " + \
-                                match.group(1)
+                            dic = self.doc[current_test]
                         else:
-                            self.doc[current_test]["subtest"][current_subtest][current_field] += " " + \
-                                match.group(1)
+                            dic = self.doc[current_test]["subtest"][current_subtest]
+
+                        if dic[current_field] != '':
+                            dic[current_field] += " "
+                        dic[current_field] += match.group(1)
 
                     continue
 
@@ -573,8 +932,9 @@ class TestList:
                         if match:
                             self.doc[current_test]["arg"][arg_ref][cur_arg][cur_arg_element] = match.group(1) + ' ' + match_val + ">"
                         else:
-                            self.doc[current_test]["arg"][arg_ref][cur_arg][cur_arg_element] += ' ' + match_val
-
+                            if self.doc[current_test]["arg"][arg_ref][cur_arg][cur_arg_element] != '':
+                                self.doc[current_test]["arg"][arg_ref][cur_arg][cur_arg_element] += ' '
+                            self.doc[current_test]["arg"][arg_ref][cur_arg][cur_arg_element] += match_val
                     continue
 
 #
@@ -584,28 +944,29 @@ class TestList:
 parser = argparse.ArgumentParser(description = "Print formatted kernel documentation to stdout.",
                                  formatter_class = argparse.ArgumentDefaultsHelpFormatter,
                                  epilog = 'If no action specified, assume --rest.')
-parser.add_argument("--rest", action="store_true",
-                    help="Generate documentation from the source files, in ReST file format.")
+parser.add_argument("--config", required = True,
+                    help="JSON file describing the test plan template")
+parser.add_argument("--rest",
+                    help="Output documentation from the source files in REST file.")
+parser.add_argument("--per-test", action="store_true",
+                    help="Modifies ReST output to print subtests per test.")
 parser.add_argument("--to-json",
                     help="Output test documentation in JSON format as TO_JSON file")
 parser.add_argument("--show-subtests", action="store_true",
                     help="Shows the name of the documented subtests in alphabetical order.")
 parser.add_argument("--check-testlist", action="store_true",
                     help="Compare documentation against IGT runner testlist.")
+parser.add_argument("--include-plan", action="store_true",
+                    help="Include test plans, if any.")
 parser.add_argument("--igt-build-path",
                     help="Path where the IGT runner is sitting. Used by --check-testlist.",
                     default=IGT_BUILD_PATH)
-parser.add_argument('--files', nargs='+', required=True,
+parser.add_argument('--files', nargs='+',
                     help="File name(s) to be processed")
 
 parse_args = parser.parse_args()
 
-field_regex = re.compile(r"(" + '|'.join(fields) + r'):\s*(.*)', re.I)
-
-tests = TestList()
-
-for filename in parse_args.files:
-    tests.add_file_documentation(filename, field_regex)
+tests = TestList(parse_args.config, parse_args.include_plan, parse_args.files)
 
 RUN = 0
 if parse_args.show_subtests:
@@ -622,4 +983,7 @@ if parse_args.to_json:
     tests.print_json(parse_args.to_json)
 
 if not RUN or parse_args.rest:
-    tests.print_test()
+    if parse_args.per_test:
+        tests.print_rest_flat(parse_args.rest)
+    else:
+        tests.print_nested_rest(parse_args.rest)
-- 
2.34.1

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [igt-dev] [PATCH i-g-t 04/18] scripts/igt_doc.py: add support to specify numeric values
  2023-03-10  8:23 [igt-dev] [PATCH i-g-t 00/18] Add igt_doc.py Zbigniew Kempczyński
                   ` (2 preceding siblings ...)
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 03/18] scripts/igt_doc.py: dynamically create fields array from a JSON file Zbigniew Kempczyński
@ 2023-03-10  8:23 ` Zbigniew Kempczyński
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 05/18] scripts/igt_doc.py: improve --show-subtests logic Zbigniew Kempczyński
                   ` (15 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Zbigniew Kempczyński @ 2023-03-10  8:23 UTC (permalink / raw)
  To: igt-dev

From: Mauro Carvalho Chehab <mchehab@kernel.org>

Add a way to specify a set of default values to be used when numeric
wildcards like "%d" are present at the igt subtest.

Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
---
 scripts/igt_doc.py | 36 ++++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/scripts/igt_doc.py b/scripts/igt_doc.py
index 425240b2f7..643c7e7a7b 100755
--- a/scripts/igt_doc.py
+++ b/scripts/igt_doc.py
@@ -147,6 +147,27 @@ class TestList:
          * @userptr-misaligned-binds:	userptr misaligned
          */
 
+    It is also possible to define a list of values that will actually be
+    used by the test and no string replacement is needed.
+    This is done by using one or multiple arg[n].values lines:
+
+        /**
+         * SUBTEST: unbind-all-%d-vmas
+         * Description: unbind all with %arg[1] VMAs
+         *
+         * arg[1].values: 2, 8
+         * arg[1].values: 16, 32
+         */
+
+        /**
+         * SUBTEST: unbind-all-%d-vmas
+         * Description: unbind all with %arg[1] VMAs
+         *
+         * arg[1].values: 64, 128
+         */
+
+    Such feature is specially useful for numeric parameters
+
     The valid `field` values are defined on a JSON configuration file.
 
     The TEST documents the common fields present on all tests. Typically,
@@ -905,6 +926,21 @@ class TestList:
 
                     continue
 
+                # We don't need a multi-lined version here
+                if (match := re.match(r'arg\[(\d+)\]\.values:\s*(.*)', file_line)):
+                    cur_arg = int(match.group(1)) - 1
+
+                    if cur_arg not in self.doc[current_test]["arg"][arg_ref]:
+                        self.doc[current_test]["arg"][arg_ref][cur_arg] = {}
+
+                    values = match.group(2).split(",")
+                    for split_val in values:
+                        if split_val == "":
+                            continue
+                        self.doc[current_test]["arg"][arg_ref][cur_arg][split_val.strip()] = split_val.strip()
+
+                    continue
+
                 if (match := re.match(r'^(.*):', file_line)):
                     sys.exit(f"{fname}:{file_ln + 1}: Error: unrecognized field '%s'. Need to add at %s" %
                             (match.group(1), self.config_fname))
-- 
2.34.1

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [igt-dev] [PATCH i-g-t 05/18] scripts/igt_doc.py: improve --show-subtests logic
  2023-03-10  8:23 [igt-dev] [PATCH i-g-t 00/18] Add igt_doc.py Zbigniew Kempczyński
                   ` (3 preceding siblings ...)
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 04/18] scripts/igt_doc.py: add support to specify numeric values Zbigniew Kempczyński
@ 2023-03-10  8:23 ` Zbigniew Kempczyński
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 06/18] scripts/igt_doc.py: add error handler for subprocess Zbigniew Kempczyński
                   ` (14 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Zbigniew Kempczyński @ 2023-03-10  8:23 UTC (permalink / raw)
  To: igt-dev

From: Mauro Carvalho Chehab <mchehab@kernel.org>

Add command line parameters to improve --show-subtests:
1) to sort results of --show-subtest based on the contents of a field.
   This is useful, for instance, to check if all subtests have
   proper values for a given field.
2) to filter for an specific field value. This is interesting to be
   able to compare testlists with the expected documented test list.

Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
---
 scripts/igt_doc.py | 64 ++++++++++++++++++++++++++++++++++++++++------
 1 file changed, 56 insertions(+), 8 deletions(-)

diff --git a/scripts/igt_doc.py b/scripts/igt_doc.py
index 643c7e7a7b..712e22c9d3 100755
--- a/scripts/igt_doc.py
+++ b/scripts/igt_doc.py
@@ -1,5 +1,5 @@
 #!/usr/bin/env python3
-# pylint: disable=C0301,R0902,R0914,R0912,R0915
+# pylint: disable=C0301,R0902,R0914,R0912,R0915,R1702,C0302
 # SPDX-License-Identifier: (GPL-2.0 OR MIT)
 
 ## Copyright (C) 2023    Intel Corporation                 ##
@@ -689,11 +689,27 @@ class TestList:
     # Subtest list methods
     #
 
-    def get_subtests(self):
+    def get_subtests(self, sort_field = None, filter_field_expr = None):
 
         """Return an array with all subtests"""
 
-        subtests = []
+        subtests = {}
+        subtests[""] = []
+
+        if sort_field:
+            if sort_field.lower() not in self.field_list:
+                sys.exit(f"Field '{sort_field}' is not defined")
+            sort_field = self.field_list[sort_field.lower()]
+
+        if filter_field_expr:
+            if not (match := re.match(r"(.*)=~\s*(.*)", filter_field_expr)):
+                sys.exit(f"Filter field {filter_field_expr} is not at <field> =~ <regex> syntax")
+
+            field = match.group(1).strip().lower()
+            if field not in self.field_list:
+                sys.exit(f"Field '{field}' is not defined")
+            filter_field = self.field_list[field]
+            regex = re.compile("{0}".format(match.group(2).strip()), re.I) # pylint: disable=C0209
 
         for test in sorted(self.doc.keys()):
             fname = self.doc[test]["File"]
@@ -702,10 +718,26 @@ class TestList:
             test_name = re.sub(r'\.[ch]', '', test_name)
             test_name = "igt@" + test_name
 
-            subtest_array = self.expand_subtest(fname, test_name, test)
+            subtest_array = self.expand_subtest(fname, test_name, test, True)
 
             for subtest in subtest_array:
-                subtests.append(subtest["Summary"])
+                if filter_field_expr:
+                    if filter_field not in subtest:
+                        continue
+                    if not re.match(regex, subtest[filter_field]):
+                        continue
+
+                if sort_field:
+                    if sort_field in subtest:
+                        if subtest[sort_field] not in subtests:
+                            subtests[subtest[sort_field]] = []
+
+                        subtests[subtest[sort_field]].append(subtest["Summary"])
+                    else:
+                        subtests[""].append(subtest["Summary"])
+
+                else:
+                    subtests[""].append(subtest["Summary"])
 
         return subtests
 
@@ -716,7 +748,7 @@ class TestList:
 
         """Compare documented subtests with the IGT test list"""
 
-        doc_subtests = sorted(self.get_subtests())
+        doc_subtests = sorted(self.get_subtests()[""])
 
         for i in range(0, len(doc_subtests)): # pylint: disable=C0200
             doc_subtests[i] = re.sub(r'\<[^\>]+\>', r'\\d+', doc_subtests[i])
@@ -990,6 +1022,10 @@ parser.add_argument("--to-json",
                     help="Output test documentation in JSON format as TO_JSON file")
 parser.add_argument("--show-subtests", action="store_true",
                     help="Shows the name of the documented subtests in alphabetical order.")
+parser.add_argument("--sort-field",
+                    help="modify --show-subtests to sort output based on SORT_FIELD value")
+parser.add_argument("--filter-field",
+                    help="modify --show-subtests to filter output based a regex given by FILTER_FIELD=~'regex'")
 parser.add_argument("--check-testlist", action="store_true",
                     help="Compare documentation against IGT runner testlist.")
 parser.add_argument("--include-plan", action="store_true",
@@ -1007,8 +1043,20 @@ tests = TestList(parse_args.config, parse_args.include_plan, parse_args.files)
 RUN = 0
 if parse_args.show_subtests:
     RUN = 1
-    for sub in tests.get_subtests():
-        print (sub)
+    if parse_args.sort_field:
+        test_subtests = tests.get_subtests(parse_args.sort_field, parse_args.filter_field)
+        for val_key in sorted(test_subtests.keys()):
+            if not test_subtests[val_key]:
+                continue
+            if val_key == "":
+                print("not defined:")
+            else:
+                print(f"{val_key}:")
+            for sub in test_subtests[val_key]:
+                print (f"  {sub}")
+    else:
+        for sub in tests.get_subtests(parse_args.sort_field, parse_args.filter_field)[""]:
+            print (sub)
 
 if parse_args.check_testlist:
     RUN = 1
-- 
2.34.1

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [igt-dev] [PATCH i-g-t 06/18] scripts/igt_doc.py: add error handler for subprocess
  2023-03-10  8:23 [igt-dev] [PATCH i-g-t 00/18] Add igt_doc.py Zbigniew Kempczyński
                   ` (4 preceding siblings ...)
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 05/18] scripts/igt_doc.py: improve --show-subtests logic Zbigniew Kempczyński
@ 2023-03-10  8:23 ` Zbigniew Kempczyński
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 07/18] scripts/igt_doc.py: improve multi-line logic Zbigniew Kempczyński
                   ` (13 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Zbigniew Kempczyński @ 2023-03-10  8:23 UTC (permalink / raw)
  To: igt-dev

From: Mauro Carvalho Chehab <mchehab@kernel.org>

Handle exceptions when trying to excecute IGT runner.

Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
---
 scripts/igt_doc.py | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/scripts/igt_doc.py b/scripts/igt_doc.py
index 712e22c9d3..c06c6e4eae 100755
--- a/scripts/igt_doc.py
+++ b/scripts/igt_doc.py
@@ -754,14 +754,15 @@ class TestList:
             doc_subtests[i] = re.sub(r'\<[^\>]+\>', r'\\d+', doc_subtests[i])
 
         # Get a list of tests from
-        result = subprocess.run([ f"{IGT_BUILD_PATH}/{IGT_RUNNER}",  # pylint: disable=W1510
-                                "-L", "-t",  self.min_test_prefix,
-                                f"{IGT_BUILD_PATH}/tests"],
-                                capture_output = True, text = True)
-        if result.returncode:
-            print( result.stdout)
-            print("Error:", result.stderr)
-            sys.exit(result.returncode)
+        try:
+            result = subprocess.run([ f"{IGT_BUILD_PATH}/{IGT_RUNNER}",
+                                    "-L", "-t",  self.min_test_prefix,
+                                    f"{IGT_BUILD_PATH}/tests"], check = True,
+                                    capture_output = True, text = True)
+        except subprocess.CalledProcessError as sub_err:
+            print(sub_err.stderr)
+            print("Error:", sub_err)
+            sys.exit(1)
 
         run_subtests = sorted(result.stdout.splitlines())
 
-- 
2.34.1

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [igt-dev] [PATCH i-g-t 07/18] scripts/igt_doc.py: improve multi-line logic
  2023-03-10  8:23 [igt-dev] [PATCH i-g-t 00/18] Add igt_doc.py Zbigniew Kempczyński
                   ` (5 preceding siblings ...)
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 06/18] scripts/igt_doc.py: add error handler for subprocess Zbigniew Kempczyński
@ 2023-03-10  8:23 ` Zbigniew Kempczyński
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 08/18] scripts/igt_doc.py: don't use ":=" operator Zbigniew Kempczyński
                   ` (12 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Zbigniew Kempczyński @ 2023-03-10  8:23 UTC (permalink / raw)
  To: igt-dev

From: Mauro Carvalho Chehab <mchehab@kernel.org>

Currently, there's no way to use something like:
	/**
	 ...
	 * Issue:
	 *	https://foo.bar

as https would be mis-interpreted as a field.

Fix it by always requiring one or more spaces/tabs on continuation
lines.

Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Acked-by: Zbigniew Kempczyński <zbigniew.kempczynski@intel.com>
---
 scripts/igt_doc.py | 23 ++++++++++++-----------
 1 file changed, 12 insertions(+), 11 deletions(-)

diff --git a/scripts/igt_doc.py b/scripts/igt_doc.py
index c06c6e4eae..cd8dccecb4 100755
--- a/scripts/igt_doc.py
+++ b/scripts/igt_doc.py
@@ -832,6 +832,8 @@ class TestList:
             subtest_number = 0
 
             for file_ln,file_line in enumerate(handle):
+                file_line = file_line.rstrip()
+
                 if re.match(r'^\s*\*$', file_line):
                     continue
 
@@ -850,7 +852,7 @@ class TestList:
                 if not handle_section:
                     continue
 
-                file_line = re.sub(r'^\s*\*\s*', '', file_line)
+                file_line = re.sub(r'^\s*\* ?', '', file_line)
 
                 # Handle only known sections
                 if handle_section == '1':
@@ -966,21 +968,17 @@ class TestList:
                     if cur_arg not in self.doc[current_test]["arg"][arg_ref]:
                         self.doc[current_test]["arg"][arg_ref][cur_arg] = {}
 
-                    values = match.group(2).split(",")
+                    values = match.group(2).replace(" ", "").split(",")
                     for split_val in values:
                         if split_val == "":
                             continue
-                        self.doc[current_test]["arg"][arg_ref][cur_arg][split_val.strip()] = split_val.strip()
+                        self.doc[current_test]["arg"][arg_ref][cur_arg][split_val] = split_val
 
                     continue
 
-                if (match := re.match(r'^(.*):', file_line)):
-                    sys.exit(f"{fname}:{file_ln + 1}: Error: unrecognized field '%s'. Need to add at %s" %
-                            (match.group(1), self.config_fname))
-
                 # Handle multi-line field contents
                 if current_field:
-                    if (match := re.match(r'\s*(.*)', file_line)):
+                    if (match := re.match(r'\s+(.*)', file_line)):
                         if handle_section == 'test':
                             dic = self.doc[current_test]
                         else:
@@ -989,12 +987,11 @@ class TestList:
                         if dic[current_field] != '':
                             dic[current_field] += " "
                         dic[current_field] += match.group(1)
-
-                    continue
+                        continue
 
                 # Handle multi-line argument contents
                 if cur_arg >= 0 and arg_ref is not None:
-                    if (match := re.match(r'\s*\*?\s*(.*)', file_line)):
+                    if (match := re.match(r'\s+\*?\s*(.*)', file_line)):
                         match_val = match.group(1)
 
                         match = re.match(r'^(\<.*)\>$',self.doc[current_test]["arg"][arg_ref][cur_arg][cur_arg_element])
@@ -1006,6 +1003,10 @@ class TestList:
                             self.doc[current_test]["arg"][arg_ref][cur_arg][cur_arg_element] += match_val
                     continue
 
+                re.sub(r"\n$","", file_line)
+                sys.exit(f"{fname}:{file_ln + 1}: Error: unrecognized line. Need to add field at %s?\n\t==> %s" %
+                         (self.config_fname, file_line))
+
 #
 # Main
 #
-- 
2.34.1

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [igt-dev] [PATCH i-g-t 08/18] scripts/igt_doc.py: don't use ":=" operator
  2023-03-10  8:23 [igt-dev] [PATCH i-g-t 00/18] Add igt_doc.py Zbigniew Kempczyński
                   ` (6 preceding siblings ...)
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 07/18] scripts/igt_doc.py: improve multi-line logic Zbigniew Kempczyński
@ 2023-03-10  8:23 ` Zbigniew Kempczyński
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 09/18] scripts/igt_doc.py: make it compatible with Python 3.6 Zbigniew Kempczyński
                   ` (11 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Zbigniew Kempczyński @ 2023-03-10  8:23 UTC (permalink / raw)
  To: igt-dev

From: Mauro Carvalho Chehab <mchehab@kernel.org>

As this was introduced on python 3.8, remove its usage, in order
to make the script compatible with version 3.7.

Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Acked-by: Zbigniew Kempczyński <zbigniew.kempczynski@intel.com>
---
 scripts/igt_doc.py | 30 ++++++++++++++++++++----------
 1 file changed, 20 insertions(+), 10 deletions(-)

diff --git a/scripts/igt_doc.py b/scripts/igt_doc.py
index cd8dccecb4..1d1d7856f2 100755
--- a/scripts/igt_doc.py
+++ b/scripts/igt_doc.py
@@ -58,7 +58,8 @@ def plural(field):
 
     """
 
-    if (match := re.match(r"(.*)\b(\S+)", field)):
+    match = re.match(r"(.*)\b(\S+)", field)
+    if match:
         ret_str = match.group(1)
         word = match.group(2)
 
@@ -702,7 +703,8 @@ class TestList:
             sort_field = self.field_list[sort_field.lower()]
 
         if filter_field_expr:
-            if not (match := re.match(r"(.*)=~\s*(.*)", filter_field_expr)):
+            match = re.match(r"(.*)=~\s*(.*)", filter_field_expr)
+            if not match:
                 sys.exit(f"Filter field {filter_field_expr} is not at <field> =~ <regex> syntax")
 
             field = match.group(1).strip().lower()
@@ -859,7 +861,8 @@ class TestList:
                     current_field = ''
 
                     # Check if it is a new TEST section
-                    if (match := re.match(r'^TEST:\s*(.*)', file_line)):
+                    match = re.match(r'^TEST:\s*(.*)', file_line)
+                    if match:
                         current_test = self.test_number
                         self.test_number += 1
 
@@ -878,7 +881,8 @@ class TestList:
                         continue
 
                 # Check if it is a new SUBTEST section
-                if (match := re.match(r'^SUBTESTS?:\s*(.*)', file_line)):
+                match = re.match(r'^SUBTESTS?:\s*(.*)', file_line)
+                if match:
                     current_subtest = subtest_number
                     subtest_number += 1
 
@@ -915,7 +919,8 @@ class TestList:
                     continue
 
                 # It is a known section. Parse its contents
-                if (match := re.match(field_re, file_line)):
+                match = re.match(field_re, file_line)
+                if match:
                     current_field = self.field_list[match.group(1).lower()]
                     match_val = match.group(2)
 
@@ -929,7 +934,8 @@ class TestList:
                     continue
 
                 # Use hashes for arguments to avoid duplication
-                if (match := re.match(r'arg\[(\d+)\]:\s*(.*)', file_line)):
+                match = re.match(r'arg\[(\d+)\]:\s*(.*)', file_line)
+                if match:
                     current_field = ''
                     if arg_ref is None:
                         sys.exit(f"{fname}:{file_ln + 1}: arguments should be defined after one or more subtests, at the same comment")
@@ -946,7 +952,8 @@ class TestList:
 
                     continue
 
-                if (match := re.match(r'\@(\S+):\s*(.*)', file_line)):
+                match = re.match(r'\@(\S+):\s*(.*)', file_line)
+                if match:
                     if cur_arg >= 0:
                         current_field = ''
                         if arg_ref is None:
@@ -962,7 +969,8 @@ class TestList:
                     continue
 
                 # We don't need a multi-lined version here
-                if (match := re.match(r'arg\[(\d+)\]\.values:\s*(.*)', file_line)):
+                match = re.match(r'arg\[(\d+)\]\.values:\s*(.*)', file_line)
+                if match:
                     cur_arg = int(match.group(1)) - 1
 
                     if cur_arg not in self.doc[current_test]["arg"][arg_ref]:
@@ -978,7 +986,8 @@ class TestList:
 
                 # Handle multi-line field contents
                 if current_field:
-                    if (match := re.match(r'\s+(.*)', file_line)):
+                    match = re.match(r'\s+(.*)', file_line)
+                    if match:
                         if handle_section == 'test':
                             dic = self.doc[current_test]
                         else:
@@ -991,7 +1000,8 @@ class TestList:
 
                 # Handle multi-line argument contents
                 if cur_arg >= 0 and arg_ref is not None:
-                    if (match := re.match(r'\s+\*?\s*(.*)', file_line)):
+                    match = re.match(r'\s+\*?\s*(.*)', file_line)
+                    if match:
                         match_val = match.group(1)
 
                         match = re.match(r'^(\<.*)\>$',self.doc[current_test]["arg"][arg_ref][cur_arg][cur_arg_element])
-- 
2.34.1

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [igt-dev] [PATCH i-g-t 09/18] scripts/igt_doc.py: make it compatible with Python 3.6
  2023-03-10  8:23 [igt-dev] [PATCH i-g-t 00/18] Add igt_doc.py Zbigniew Kempczyński
                   ` (7 preceding siblings ...)
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 08/18] scripts/igt_doc.py: don't use ":=" operator Zbigniew Kempczyński
@ 2023-03-10  8:23 ` Zbigniew Kempczyński
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 10/18] scripts/igt_doc.py: sets the minimal version to run the script Zbigniew Kempczyński
                   ` (10 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Zbigniew Kempczyński @ 2023-03-10  8:23 UTC (permalink / raw)
  To: igt-dev

From: Mauro Carvalho Chehab <mchehab@kernel.org>

Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Acked-by: Zbigniew Kempczyński <zbigniew.kempczynski@intel.com>
---
 scripts/igt_doc.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scripts/igt_doc.py b/scripts/igt_doc.py
index 1d1d7856f2..0795272275 100755
--- a/scripts/igt_doc.py
+++ b/scripts/igt_doc.py
@@ -760,7 +760,7 @@ class TestList:
             result = subprocess.run([ f"{IGT_BUILD_PATH}/{IGT_RUNNER}",
                                     "-L", "-t",  self.min_test_prefix,
                                     f"{IGT_BUILD_PATH}/tests"], check = True,
-                                    capture_output = True, text = True)
+                                    stdout=subprocess.PIPE, universal_newlines=True)
         except subprocess.CalledProcessError as sub_err:
             print(sub_err.stderr)
             print("Error:", sub_err)
-- 
2.34.1

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [igt-dev] [PATCH i-g-t 10/18] scripts/igt_doc.py: sets the minimal version to run the script
  2023-03-10  8:23 [igt-dev] [PATCH i-g-t 00/18] Add igt_doc.py Zbigniew Kempczyński
                   ` (8 preceding siblings ...)
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 09/18] scripts/igt_doc.py: make it compatible with Python 3.6 Zbigniew Kempczyński
@ 2023-03-10  8:23 ` Zbigniew Kempczyński
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 11/18] scripts/igt_doc.py: use a different logic to get IGT prefix Zbigniew Kempczyński
                   ` (9 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Zbigniew Kempczyński @ 2023-03-10  8:23 UTC (permalink / raw)
  To: igt-dev

From: Mauro Carvalho Chehab <mchehab@kernel.org>

according with vermin, the minimal version for this script is 3.6 due
to:

	  'argparse' module requires 2.7, 3.2
	  'enumerate' member requires 2.3, 3.0
	  'json' module requires 2.6, 3.0
	  'open(encoding)' requires !2, 3.0
	  'os.path.realpath' member requires 2.2, 3.0
	  'sorted' member requires 2.4, 3.0
	  'sorted(key)' requires 2.4, 3.0
	  'str.format' member requires 2.6, 3.0
	  'subprocess' module requires 2.4, 3.0
	  'subprocess.run' member requires !2, 3.5
	  'sys.version_info' member requires 2.0, 3.0
	  `with` requires 2.5, 3.0
	  f-strings require !2, 3.6
	  print(expr) requires 2.0, 3.0

So, print an error if one tries to run with an older version.

Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Acked-by: Zbigniew Kempczyński <zbigniew.kempczynski@intel.com>
---
 scripts/igt_doc.py | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/scripts/igt_doc.py b/scripts/igt_doc.py
index 0795272275..5b08ac1442 100755
--- a/scripts/igt_doc.py
+++ b/scripts/igt_doc.py
@@ -18,6 +18,10 @@ import re
 import subprocess
 import sys
 
+MIN_PYTHON = (3, 6)
+if sys.version_info < MIN_PYTHON:
+    sys.exit("Python %s.%s or later is required.\n" % MIN_PYTHON) # pylint: disable=C0209
+
 IGT_BUILD_PATH = 'build'
 IGT_RUNNER = 'runner/igt_runner'
 
-- 
2.34.1

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [igt-dev] [PATCH i-g-t 11/18] scripts/igt_doc.py: use a different logic to get IGT prefix
  2023-03-10  8:23 [igt-dev] [PATCH i-g-t 00/18] Add igt_doc.py Zbigniew Kempczyński
                   ` (9 preceding siblings ...)
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 10/18] scripts/igt_doc.py: sets the minimal version to run the script Zbigniew Kempczyński
@ 2023-03-10  8:23 ` Zbigniew Kempczyński
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 12/18] testplan/meson.build: add targets to build Xe test documentation Zbigniew Kempczyński
                   ` (8 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Zbigniew Kempczyński @ 2023-03-10  8:23 UTC (permalink / raw)
  To: igt-dev

From: Mauro Carvalho Chehab <mchehab@kernel.org>

The past logic was dependent on how the initial Xe IGT support
was conceived. Change it to be more generic and use
os.path.commonprefix.

Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
---
 scripts/igt_doc.py | 19 ++++++-------------
 1 file changed, 6 insertions(+), 13 deletions(-)

diff --git a/scripts/igt_doc.py b/scripts/igt_doc.py
index 5b08ac1442..f1b6d64615 100755
--- a/scripts/igt_doc.py
+++ b/scripts/igt_doc.py
@@ -235,7 +235,6 @@ class TestList:
     def __init__(self, config_fname, include_plan, file_list):
         self.doc = {}
         self.test_number = 0
-        self.min_test_prefix = ''
         self.config = None
         self.filenames = file_list
         self.plan_filenames = []
@@ -494,7 +493,7 @@ class TestList:
         for test in self.doc:                   # pylint: disable=C0206
             fname = self.doc[test]["File"]
 
-            name = re.sub(r'.*tests/', '', fname)
+            name = re.sub(r'.*/', '', fname)
             name = re.sub(r'\.[\w+]$', '', name)
             name = "igt@" + name
 
@@ -548,7 +547,7 @@ class TestList:
         for test in sorted(self.doc.keys()):
             fname = self.doc[test]["File"]
 
-            name = re.sub(r'.*tests/', '', fname)
+            name = re.sub(r'.*/', '', fname)
             name = re.sub(r'\.[ch]', '', name)
             name = "igt@" + name
 
@@ -720,7 +719,7 @@ class TestList:
         for test in sorted(self.doc.keys()):
             fname = self.doc[test]["File"]
 
-            test_name = re.sub(r'.*tests/', '', fname)
+            test_name = re.sub(r'.*/', '', fname)
             test_name = re.sub(r'\.[ch]', '', test_name)
             test_name = "igt@" + test_name
 
@@ -759,10 +758,12 @@ class TestList:
         for i in range(0, len(doc_subtests)): # pylint: disable=C0200
             doc_subtests[i] = re.sub(r'\<[^\>]+\>', r'\\d+', doc_subtests[i])
 
+        test_prefix = os.path.commonprefix(doc_subtests)
+
         # Get a list of tests from
         try:
             result = subprocess.run([ f"{IGT_BUILD_PATH}/{IGT_RUNNER}",
-                                    "-L", "-t",  self.min_test_prefix,
+                                    "-L", "-t",  test_prefix,
                                     f"{IGT_BUILD_PATH}/tests"], check = True,
                                     stdout=subprocess.PIPE, universal_newlines=True)
         except subprocess.CalledProcessError as sub_err:
@@ -824,14 +825,6 @@ class TestList:
         cur_arg = -1
         cur_arg_element = 0
 
-        prefix = re.sub(r'.*tests/', '', fname)
-        prefix = r'igt\@' + re.sub(r'(.*/).*', r'\1', prefix)
-
-        if self.min_test_prefix == '':
-            self.min_test_prefix = prefix
-        elif len(prefix) < len(self.min_test_prefix):
-            self.min_test_prefix = prefix
-
         with open(fname, 'r', encoding='utf8') as handle:
             arg_ref = None
             current_test = ''
-- 
2.34.1

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [igt-dev] [PATCH i-g-t 12/18] testplan/meson.build: add targets to build Xe test documentation
  2023-03-10  8:23 [igt-dev] [PATCH i-g-t 00/18] Add igt_doc.py Zbigniew Kempczyński
                   ` (10 preceding siblings ...)
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 11/18] scripts/igt_doc.py: use a different logic to get IGT prefix Zbigniew Kempczyński
@ 2023-03-10  8:23 ` Zbigniew Kempczyński
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 13/18] xe/xe_test_config.json: cleanup the field struct Zbigniew Kempczyński
                   ` (7 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Zbigniew Kempczyński @ 2023-03-10  8:23 UTC (permalink / raw)
  To: igt-dev

From: Mauro Carvalho Chehab <mchehab@kernel.org>

Produce documentation from igt_doc.py markups inside the Xe driver
at build time.

Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Acked-by: Zbigniew Kempczyński <zbigniew.kempczynski@intel.com>
---
 docs/testplan/meson.build | 59 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 59 insertions(+)
 create mode 100644 docs/testplan/meson.build

diff --git a/docs/testplan/meson.build b/docs/testplan/meson.build
new file mode 100644
index 0000000000..11c0857330
--- /dev/null
+++ b/docs/testplan/meson.build
@@ -0,0 +1,59 @@
+testplan_title = 'IGT test plans'
+
+build_testplan = get_option('testplan')
+build_sphinx = get_option('sphinx')
+
+rst2html = find_program('rst2html-3', 'rst2html', required : build_testplan)
+sphinx = find_program('sphinx-build', required: build_sphinx)
+
+stylesheet = meson.current_source_dir() + '/testplan.css'
+
+test_dict = { 'xe_tests': {
+                 'input': xe_test_config, 'extra_args': []
+              }
+            }
+
+if igt_doc_script.found()
+    foreach testplan, fields: test_dict
+        rst = custom_target(testplan + '.rst',
+                            build_by_default : true,
+                            command : [ igt_doc_script, '--config', '@INPUT@', '--rest', '@OUTPUT@' ] + fields['extra_args'],
+                            depends : test_executables,
+                            input : fields['input'],
+                            output : testplan + '.rst'
+                            )
+
+        if rst2html.found()
+            custom_target(testplan + '.html',
+                          build_by_default : true,
+                          command : [ rst2html, '--stylesheet=' + stylesheet, '--field-name-limit=0', '@INPUT@', '@OUTPUT@' ],
+                          input : rst,
+                          output : testplan + '.html'
+                          )
+        endif
+    endforeach
+endif
+
+if sphinx.found()
+    if gen_rst_index.found()
+        sphinx_out_dir = meson.current_build_dir()+ '/indexed_html'
+
+        index_rst = custom_target('index.rst',
+                                build_by_default : true,
+                                command : [ gen_rst_index, testplan_title, test_dict.keys(), meson.current_build_dir()],
+                                input : rst,
+                                output : 'index.rst'
+                                )
+
+        custom_target('index.html',
+                    build_by_default : true,
+                    command : [ 'sphinx-build', '-c', meson.current_source_dir(), meson.current_build_dir(), sphinx_out_dir],
+                    input : index_rst,
+                    output : 'index.html'
+                    )
+    endif
+endif
+
+build_info += 'Build ReST test documentation: @0@'.format(igt_doc_script.found())
+build_info += 'Build simple html testplan documentation: @0@'.format(rst2html.found())
+build_info += 'Build indexed html testplan documentation: @0@'.format(sphinx.found())
-- 
2.34.1

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [igt-dev] [PATCH i-g-t 13/18] xe/xe_test_config.json: cleanup the field struct
  2023-03-10  8:23 [igt-dev] [PATCH i-g-t 00/18] Add igt_doc.py Zbigniew Kempczyński
                   ` (11 preceding siblings ...)
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 12/18] testplan/meson.build: add targets to build Xe test documentation Zbigniew Kempczyński
@ 2023-03-10  8:23 ` Zbigniew Kempczyński
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 14/18] xe/xe_huc_copy: add GPU dependency to its documentation Zbigniew Kempczyński
                   ` (6 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Zbigniew Kempczyński @ 2023-03-10  8:23 UTC (permalink / raw)
  To: igt-dev

From: Mauro Carvalho Chehab <mchehab@kernel.org>

Originally, the JSON file was conceived to also validate fields
and only allow certain values when others are present.

It turns that it doesn't make much sense to do such validations,
as it makes harder to change the hierarchy. So, remove the
parts of the fields struct that doesn't contain "is_field".

Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Acked-by: Zbigniew Kempczyński <zbigniew.kempczynski@intel.com>
---
 tests/xe/xe_test_config.json | 80 ++++--------------------------------
 1 file changed, 9 insertions(+), 71 deletions(-)

diff --git a/tests/xe/xe_test_config.json b/tests/xe/xe_test_config.json
index 05ba71c6b8..6c474d6053 100644
--- a/tests/xe/xe_test_config.json
+++ b/tests/xe/xe_test_config.json
@@ -4,128 +4,66 @@
     "fields": {
         "Category": {
             "_properties_": {
-                "is_field": true,
                 "description": "Contains the major group for the tested functionality"
             },
-            "Hardware": {
+            "Sub-category": {
                 "_properties_": {
-                    "description": "Harware-supported build blocks"
+                    "description": "Contains the minor group of the functionality"
                 },
-                "Sub-category": {
+                "Functionality": {
                     "_properties_": {
-                        "is_field": true,
-                        "description": "Contains the minor group of the functionality"
-                    },
-                    "Page table": {
-                        "Functionality": {
-                            "_properties_": {
-                                "is_field": true,
-                                "description": "Groups page table tests per functionality"
-                            }
-                        }
-                    },
-                    "Unified Shared Memory building block": {
-                        "Functionality": {
-                            "_properties_": {
-                                "is_field": true,
-                                "description": "Groups page table tests per functionality"
-                            }
-                        }
-                    },
-                    "Compression": {
-                        "Functionality": {
-                            "_properties_": {
-                                "is_field": true
-                            }
-                        }
+                        "description": "Groups page table tests per functionality"
                     }
-                }
-            },
-            "Software building block": {
-                "_properties_": {
-                    "description": "Software-based building blocks"
                 },
-                "Sub-category": {
-                    "_properties_": {
-                        "is_field": true,
-                        "description": "Contains the minor group of the functionality"
-                    }
-                }
-            },
-            "Software feature": {
-                "Sub-category": {
+                "Run type": {
                     "_properties_": {
-                        "is_field": true,
-                        "description": "Contains the minor group of the functionality"
+                        "description": "Defines what category of testlist it belongs"
                     }
                 }
             },
-            "End to end use case": {
-                "Sub-category": {
-                    "_properties_": {
-                        "is_field": true,
-                        "description": "Contains the minor group of the functionality"
-                    }
-                },
-                "Mega feature": {
-                    "_properties_": {
-                        "is_field": true,
-                        "description": "Contains the mega feature for E2E use case"
-                    }
+            "Mega feature": {
+                "_properties_": {
+                    "description": "Contains the mega feature for E2E use case"
                 }
             }
         },
         "Test category": {
             "_properties_": {
-                "is_field": true,
                 "description": "Defines the test category. Usually used at subtest level."
             }
         },
         "Test requirement": {
             "_properties_": {
-                "is_field": true,
                 "description": "Defines Kernel parameters required for the test to run"
             }
         },
-        "Run type": {
-            "_properties_": {
-                "is_field": true,
-                "description": "Defines the test primary usage. Usually used at subtest level."
-            }
-        },
         "Issue": {
             "_properties_": {
-                "is_field": true,
                 "description": "If the test is used to solve an issue, point to the URL containing the issue."
             }
         },
         "GPU excluded platform": {
             "_properties_": {
-                "is_field": true,
                 "description": "Provides a list of GPUs not capable of running the subtest (or the test as a hole)."
             }
         },
         "GPU requirement": {
             "_properties_": {
-                "is_field": true,
                 "description": "Describes any GPU-specific requrirement, like requiring multi-tiles."
             }
         },
         "Depends on" : {
             "_properties_": {
-                "is_field": true,
                 "description": "List other subtests that are required to not be skipped before calling this one."
             }
         },
         "TODO": {
             "_properties_": {
-                "is_field": true,
                 "description": "Point to known missing features at the test or subtest."
             }
         },
         "Description" : {
             "_properties_": {
-                "is_field": true,
                 "description": "Provides a description for the test/subtest."
             }
         }
-- 
2.34.1

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [igt-dev] [PATCH i-g-t 14/18] xe/xe_huc_copy: add GPU dependency to its documentation
  2023-03-10  8:23 [igt-dev] [PATCH i-g-t 00/18] Add igt_doc.py Zbigniew Kempczyński
                   ` (12 preceding siblings ...)
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 13/18] xe/xe_test_config.json: cleanup the field struct Zbigniew Kempczyński
@ 2023-03-10  8:23 ` Zbigniew Kempczyński
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 15/18] xe/xe_*: add TEST/SUBTEST documentation Zbigniew Kempczyński
                   ` (5 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Zbigniew Kempczyński @ 2023-03-10  8:23 UTC (permalink / raw)
  To: igt-dev

From: Mauro Carvalho Chehab <mchehab@kernel.org>

Currently, the test is limited to TGL and works only if the
GPU matches a hardcoded list of PCI IDs.

Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Acked-by: Zbigniew Kempczyński <zbigniew.kempczynski@intel.com>
---
 tests/xe/xe_huc_copy.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/tests/xe/xe_huc_copy.c b/tests/xe/xe_huc_copy.c
index 7c1906a317..ee3896cef8 100644
--- a/tests/xe/xe_huc_copy.c
+++ b/tests/xe/xe_huc_copy.c
@@ -9,6 +9,10 @@
  * Sub-category: HuC
  * Functionality: HuC copy
  * Test category: functionality test
+ * TODO: make the test more generic, getting rid of the PCI ID list
+ * GPU requirements: This test currently requires TGL, and runs only if the
+ *	PCI ID is 0x9A60, 0x9A68, 0x9A70, 0x9A40, 0x9A49, 0x9A59, 0x9A78,
+ *	0x9AC0, 0x9AC9, 0x9AD9 or 0x9AF8
  */
 
 #include <string.h>
-- 
2.34.1

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [igt-dev] [PATCH i-g-t 15/18] xe/xe_*: add TEST/SUBTEST documentation
  2023-03-10  8:23 [igt-dev] [PATCH i-g-t 00/18] Add igt_doc.py Zbigniew Kempczyński
                   ` (13 preceding siblings ...)
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 14/18] xe/xe_huc_copy: add GPU dependency to its documentation Zbigniew Kempczyński
@ 2023-03-10  8:23 ` Zbigniew Kempczyński
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 16/18] xe-fast-feedback.testlist: update debugfs tests Zbigniew Kempczyński
                   ` (4 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Zbigniew Kempczyński @ 2023-03-10  8:23 UTC (permalink / raw)
  To: igt-dev

From: Mauro Carvalho Chehab <mchehab@kernel.org>

Document this IGT test, by looking on IGT BAT testlist and on
on its internal logic. Only some tests here are part of the
Basic Acceptance Test (BAT) group.

Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Acked-by: Zbigniew Kempczyński <zbigniew.kempczynski@intel.com>
---
 tests/xe/xe_debugfs.c           |  53 ++++---
 tests/xe/xe_evict.c             |  82 +++++++++++
 tests/xe/xe_exec_balancer.c     |   7 +-
 tests/xe/xe_exec_compute_mode.c |   2 +
 tests/xe/xe_exec_reset.c        | 134 ++++++++++++++++++
 tests/xe/xe_exec_threads.c      | 242 ++++++++++++++++++++++++++++++++
 tests/xe/xe_guc_pc.c            |  74 ++++++++++
 tests/xe/xe_mmap.c              |  10 +-
 tests/xe/xe_pm.c                |  61 ++++++++
 tests/xe/xe_prime_self_import.c |  65 ++++++++-
 tests/xe/xe_query.c             |   2 +-
 tests/xe/xe_vm.c                | 199 ++++++++++++++++++++++++++
 12 files changed, 903 insertions(+), 28 deletions(-)

diff --git a/tests/xe/xe_debugfs.c b/tests/xe/xe_debugfs.c
index 60a02cc170..38c8beccc5 100644
--- a/tests/xe/xe_debugfs.c
+++ b/tests/xe/xe_debugfs.c
@@ -23,6 +23,10 @@
 #include <sys/types.h>
 #include <dirent.h>
 
+struct {
+	bool warn_on_not_hit;
+} opt = { 0 };
+
 static int validate_entries(int fd, const char *add_path, const char * const str_val[], int str_cnt)
 {
 	int i;
@@ -53,7 +57,7 @@ static int validate_entries(int fd, const char *add_path, const char * const str
 		}
 		if (hit) {
 			found++;
-		} else {
+		} else if (opt.warn_on_not_hit) {
 			not_found++;
 			igt_warn("no test for: %s/%s\n", path, de->d_name);
 		}
@@ -146,14 +150,9 @@ test_base(int fd)
 }
 
 /**
- * SUBTEST: %s
- * Description: Check %arg[1] debugfs devnodes
+ * SUBTEST: gt
+ * Description: Check all gt debugfs devnodes
  * TODO: add support for ``force_reset`` entries
- *
- * arg[1]:
- *
- * @gt0: gt0
- * @gt1: gt1
  */
 static void
 test_gt(int fd, int gt_id)
@@ -222,9 +221,32 @@ test_forcewake(int fd)
 	close(handle);
 }
 
-igt_main
+const char *help_str =
+	"  -w\t--warn-not-hit Produce warnings if it founds a devfs node without tests";
+
+struct option long_options[] = {
+	{ "--warn-not-hit", no_argument, NULL, 'w'},
+	{ 0, 0, 0, 0 }
+};
+
+static int opt_handler(int option, int option_index, void *input)
 {
+	switch (option) {
+	case 'w':
+		opt.warn_on_not_hit = true;
+		break;
+	default:
+		return IGT_OPT_HANDLER_ERROR;
+	}
+
+	return IGT_OPT_HANDLER_SUCCESS;
+}
+
+igt_main_args("", long_options, help_str, opt_handler, NULL)
+{
+	char devnode[PATH_MAX];
 	int fd;
+	int gt;
 
 	igt_fixture {
 		fd = drm_open_driver(DRIVER_XE);
@@ -236,14 +258,13 @@ igt_main
 		test_base(fd);
 	}
 
-	igt_subtest("gt0") {
-		igt_require(igt_debugfs_exists(fd, "gt0", O_RDONLY));
-		test_gt(fd, 0);
-	}
 
-	igt_subtest("gt1") {
-		igt_require(igt_debugfs_exists(fd, "gt1", O_RDONLY));
-		test_gt(fd, 1);
+	igt_subtest("gt") {
+		for_each_gt(fd, gt) {
+			snprintf(devnode, sizeof(devnode), "gt%d", gt);
+			igt_require(igt_debugfs_exists(fd, devnode, O_RDONLY));
+			test_gt(fd, gt);
+		}
 	}
 
 	igt_subtest("forcewake") {
diff --git a/tests/xe/xe_evict.c b/tests/xe/xe_evict.c
index 6741b07365..edd4b6d2e6 100644
--- a/tests/xe/xe_evict.c
+++ b/tests/xe/xe_evict.c
@@ -3,6 +3,14 @@
  * Copyright © 2021 Intel Corporation
  */
 
+/**
+ * TEST: Check VMA eviction
+ * Category: Software building block
+ * Sub-category: VMA
+ * Functionality: evict
+ * GPU requirements: GPU needs to have dedicated VRAM
+ */
+
 #include "igt.h"
 #include "lib/igt_syncobj.h"
 #include "lib/intel_reg.h"
@@ -450,6 +458,80 @@ static uint64_t calc_bo_size(uint64_t vram_size, int mul, int div)
 	return (ALIGN(vram_size, 0x40000000)  * mul) / div;
 }
 
+/**
+ * SUBTEST: evict-%s
+ * Description:  %arg[1] evict test.
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ *
+ * arg[1]:
+ *
+ * @small:			small
+ * @small-external:		small external
+ * @small-multi-vm:		small multi VM
+ * @large:			large
+ * @large-external:		large external
+ * @large-multi-vm:		large multi VM
+ * @beng-small:			small bind engine
+ * @beng-small-external:	small external bind engine
+ * @beng-small-multi-vm:	small multi VM bind ending
+ * @beng-large:			large bind engine
+ * @beng-large-external:	large external bind engine
+ * @beng-large-multi-vm:	large multi VM bind engine
+ *
+ * @small-cm:			small compute machine
+ * @small-external-cm:		small external compute machine
+ * @small-multi-vm-cm:		small multi VM compute machine
+ * @large-cm:			large compute machine
+ * @large-external-cm:		large external compute machine
+ * @large-multi-vm-cm:		large multi VM compute machine
+ * @beng-small-cm:		small bind engine compute machine
+ * @beng-small-external-cm:	small external bind engine compute machine
+ * @beng-small-multi-vm-cm:	small multi VM bind ending compute machine
+ * @beng-large-cm:		large bind engine compute machine
+ * @beng-large-external-cm:	large external bind engine compute machine
+ * @beng-large-multi-vm-cm:	large multi VM bind engine compute machine
+ *
+ * @threads-small:		threads small
+ * @cm-threads-small:		compute mode threads small
+ * @mixed-threads-small:	mixed threads small
+ * @mixed-many-threads-small:	mixed many threads small
+ * @threads-large:		threads large
+ * @cm-threads-large:		compute mode threads large
+ * @mixed-threads-large:	mixed threads large
+ * @mixed-many-threads-large:	mixed many threads large
+ * @threads-small-multi-vm:	threads small multi vm
+ * @cm-threads-small-multi-vm:	compute mode threads small multi vm
+ * @mixed-threads-small-multi-vm:
+ * 				mixed threads small multi vm
+ * @threads-large-multi-vm:	threads large multi vm
+ * @cm-threads-large-multi-vm:	compute mode threads large multi vm
+ * @mixed-threads-large-multi-vm:
+ *				mixed threads large multi vm
+ * @beng-threads-small:		bind engine threads small
+ * @beng-cm-threads-small:	bind engine compute mode threads small
+ * @beng-mixed-threads-small:	bind engine mixed threads small
+ * @beng-mixed-many-threads-small:
+ *				bind engine mixed many threads small
+ * @beng-threads-large:		bind engine threads large
+ * @beng-cm-threads-large:	bind engine compute mode threads large
+ * @beng-mixed-threads-large:	bind engine mixed threads large
+ * @beng-mixed-many-threads-large:
+ *				bind engine mixed many threads large
+ * @beng-threads-small-multi-vm:
+ *				bind engine threads small multi vm
+ * @beng-cm-threads-small-multi-vm:
+ *				bind engine compute mode threads small multi vm
+ * @beng-mixed-threads-small-multi-vm:
+ *				bind engine mixed threads small multi vm
+ * @beng-threads-large-multi-vm:
+ *				bind engine threads large multi vm
+ * @beng-cm-threads-large-multi-vm:
+ *				bind engine compute mode threads large multi vm
+ * @beng-mixed-threads-large-multi-vm:
+ *				bind engine mixed threads large multi vm
+ */
+
 /*
  * Table driven test that attempts to cover all possible scenarios of eviction
  * (small / large objects, compute mode vs non-compute VMs, external BO or BOs
diff --git a/tests/xe/xe_exec_balancer.c b/tests/xe/xe_exec_balancer.c
index 809dcebb1d..a247b1d268 100644
--- a/tests/xe/xe_exec_balancer.c
+++ b/tests/xe/xe_exec_balancer.c
@@ -366,8 +366,7 @@ test_exec(int fd, int gt, int class, int n_engines, int n_execs,
  *
  * SUBTEST: twice-cm-%s
  * Description: Run compute mode virtual engine arg[1] test twice
- * Run type: FULL
- * TODO: change ``'Run type' == FULL`` to a better category
+ * Run type: BAT
  *
  * SUBTEST: many-cm-%s
  * Description: Run compute mode virtual engine arg[1] test many times
@@ -379,10 +378,10 @@ test_exec(int fd, int gt, int class, int n_engines, int n_execs,
  * Run type: FULL
  * TODO: change ``'Run type' == FULL`` to a better category
  *
+ *
  * SUBTEST: no-exec-cm-%s
  * Description: Run compute mode virtual engine arg[1] no-exec test
- * Run type: FULL
- * TODO: change ``'Run type' == FULL`` to a better category
+ * Run type: BAT
  *
  * arg[1]:
  *
diff --git a/tests/xe/xe_exec_compute_mode.c b/tests/xe/xe_exec_compute_mode.c
index d0cd0e57f8..e65767ae4f 100644
--- a/tests/xe/xe_exec_compute_mode.c
+++ b/tests/xe/xe_exec_compute_mode.c
@@ -67,6 +67,8 @@
  *
  * SUBTEST: many-engines-%s
  * Description: Run %arg[1] compute machine test on many engines
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category*
  *
  * arg[1]:
  *
diff --git a/tests/xe/xe_exec_reset.c b/tests/xe/xe_exec_reset.c
index a5bde252e8..106fe941c1 100644
--- a/tests/xe/xe_exec_reset.c
+++ b/tests/xe/xe_exec_reset.c
@@ -3,6 +3,14 @@
  * Copyright © 2021 Intel Corporation
  */
 
+/**
+ * TEST: Basic tests for execbuf functionality for virtual and parallel engines
+ * Category: Hardware building block
+ * Sub-category: execbuf
+ * Functionality: reset
+ * Test category: functionality test
+ */
+
 #include "igt.h"
 #include "lib/igt_syncobj.h"
 #include "lib/intel_reg.h"
@@ -13,6 +21,12 @@
 #include "xe/xe_spin.h"
 #include <string.h>
 
+/**
+ * SUBTEST: spin
+ * Description: test spin
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ */
 static void test_spin(int fd, struct drm_xe_engine_class_instance *eci)
 {
 	uint32_t vm;
@@ -88,6 +102,52 @@ static void test_spin(int fd, struct drm_xe_engine_class_instance *eci)
 #define PARALLEL	(0x1 << 6)
 #define CAT_ERROR	(0x1 << 7)
 
+/**
+ * SUBTEST: %s-cancel
+ * Description: Test %arg[1] cancel
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ *
+ * SUBTEST: %s-engine-reset
+ * Description: Test %arg[1] engine reset
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ *
+ * SUBTEST: %s-cat-error
+ * Description: Test %arg[1] cat error
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ *
+ * SUBTEST: %s-gt-reset
+ * Description: Test %arg[1] GT reset
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ *
+ * SUBTEST: virtual-close-fd-no-exec
+ * Description: Test virtual close fd no-exec
+ * Run type: BAT
+ *
+ * SUBTEST: parallel-close-fd-no-exec
+ * Description: Test parallel close fd no-exec
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ *
+ * SUBTEST: %s-close-fd
+ * Description: Test %arg[1] close fd
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ *
+ * SUBTEST: %s-close-engines-close-fd
+ * Description: Test %arg[1] close engines close fd
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ *
+ * arg[1]:
+ *
+ * @virtual:	virtual
+ * @parallel:	parallel
+ */
+
 static void
 test_balancer(int fd, int gt, int class, int n_engines, int n_execs,
 	      unsigned int flags)
@@ -263,6 +323,42 @@ test_balancer(int fd, int gt, int class, int n_engines, int n_execs,
 	xe_vm_destroy(fd, vm);
 }
 
+/**
+ * SUBTEST: cancel
+ * Description: Test cancel
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ *
+ * SUBTEST: engine-reset
+ * Description: Test engine reset
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ *
+ * SUBTEST: cat-error
+ * Description: Test cat error
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ *
+ * SUBTEST: gt-reset
+ * Description: Test GT reset
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ *
+ * SUBTEST: close-fd-no-exec
+ * Description: Test close fd no-exec
+ * Run type: BAT
+ *
+ * SUBTEST: close-fd
+ * Description: Test close fd
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ *
+ * SUBTEST: close-engines-close-fd
+ * Description: Test close engines close fd
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ */
+
 static void
 test_legacy_mode(int fd, struct drm_xe_engine_class_instance *eci,
 		 int n_engines, int n_execs, unsigned int flags)
@@ -408,6 +504,37 @@ test_legacy_mode(int fd, struct drm_xe_engine_class_instance *eci,
 	xe_vm_destroy(fd, vm);
 }
 
+/**
+ * SUBTEST: cm-engine-reset
+ * Description: Test compute mode engine reset
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ *
+ * SUBTEST: cm-cat-error
+ * Description: Test compute mode cat-error
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ *
+ * SUBTEST: cm-gt-reset
+ * Description: Test compute mode GT reset
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ *
+ * SUBTEST: cm-close-fd-no-exec
+ * Description: Test compute mode close fd no-exec
+ * Run type: BAT
+ *
+ * SUBTEST: cm-close-fd
+ * Description: Test compute mode close fd
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ *
+ * SUBTEST: cm-close-engines-close-fd
+ * Description: Test compute mode close engines close fd
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ */
+
 static void
 test_compute_mode(int fd, struct drm_xe_engine_class_instance *eci,
 		  int n_engines, int n_execs, unsigned int flags)
@@ -638,6 +765,13 @@ static void *gt_reset_thread(void *data)
 	return NULL;
 }
 
+/**
+ * SUBTEST: gt-reset-stress
+ * Description: Stress GT reset
+ * Test category: stress test
+ * Run type: stress
+ *
+ */
 static void
 gt_reset(int fd, int n_threads, int n_sec)
 {
diff --git a/tests/xe/xe_exec_threads.c b/tests/xe/xe_exec_threads.c
index 9601e1a2dc..69055a829b 100644
--- a/tests/xe/xe_exec_threads.c
+++ b/tests/xe/xe_exec_threads.c
@@ -3,6 +3,14 @@
  * Copyright © 2021 Intel Corporation
  */
 
+/**
+ * TEST: Basic tests for execbuf functionality
+ * Category: Hardware building block
+ * Sub-category: execbuf
+ * Functionality: multi-threads
+ * Test category: functionality test
+ */
+
 #include <fcntl.h>
 
 #include "igt.h"
@@ -779,6 +787,240 @@ static void *vm_async_ops_err_thread(void *data)
 	return NULL;
 }
 
+/**
+ * SUBTEST: threads-%s
+ * Description: Run threads %arg[1] test with multi threads
+ * Run type: BAT
+ *
+ * arg[1]:
+ *
+ * @shared-vm-basic:		shared vm basic
+ * @fd-basic:			fd basic
+ * @bal-basic:			bal basic
+ * @cm-basic:			cm basic
+ * @cm-fd-basic:		cm fd basic
+ * @mixed-basic:		mixed basic
+ * @mixed-shared-vm-basic:	mixed shared vm basic
+ * @mixed-fd-basic:		mixed fd basic
+ * @bal-mixed-basic:		bal mixed basic
+ * @bal-mixed-shared-vm-basic:	bal mixed shared vm basic
+ * @bal-mixed-fd-basic:		bal mixed fd basic
+ */
+
+/**
+ * SUBTEST: threads-%s
+ * Description: Run threads %arg[1] test with multi threads
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ * arg[1]:
+ * @basic:
+ *	basic
+ * @userptr:
+ *	userptr
+ * @rebind:
+ *	rebind
+ * @rebind-bindengine:
+ *	rebind bindengine
+ * @userptr-rebind:
+ *	userptr rebind
+ * @userptr-invalidate:
+ *	userptr invalidate
+ * @userptr-invalidate-race:
+ *	userptr invalidate race
+ * @shared-vm-userptr:
+ *	shared vm userptr
+ * @shared-vm-rebind:
+ *	shared vm rebind
+ * @shared-vm-rebind-bindengine:
+ *	shared vm rebind bindengine
+ * @shared-vm-userptr-rebind:
+ *	shared vm userptr rebind
+ * @shared-vm-rebind-err:
+ *	shared vm rebind err
+ * @shared-vm-userptr-rebind-err:
+ *	shared vm userptr rebind err
+ * @shared-vm-userptr-invalidate:
+ *	shared vm userptr invalidate
+ * @shared-vm-userptr-invalidate-race:
+ *	shared vm userptr invalidate race
+ * @fd-userptr:
+ *	fd userptr
+ * @fd-rebind:
+ *	fd rebind
+ * @fd-userptr-rebind:
+ *	fd userptr rebind
+ * @fd-userptr-invalidate:
+ *	fd userptr invalidate
+ * @fd-userptr-invalidate-race:
+ *	fd userptr invalidate race
+ * @hang-basic:
+ *	hang basic
+  * @hang-userptr:
+ *	hang userptr
+ * @hang-rebind:
+ *	hang rebind
+ * @hang-userptr-rebind:
+ *	hang userptr rebind
+ * @hang-userptr-invalidate:
+ *	hang userptr invalidate
+ * @hang-userptr-invalidate-race:
+ *	hang userptr invalidate race
+ * @hang-shared-vm-basic:
+ *	hang shared vm basic
+ * @hang-shared-vm-userptr:
+ *	hang shared vm userptr
+ * @hang-shared-vm-rebind:
+ *	hang shared vm rebind
+ * @hang-shared-vm-userptr-rebind:
+ *	hang shared vm userptr rebind
+ * @hang-shared-vm-rebind-err:
+ *	hang shared vm rebind err
+ * @hang-shared-vm-userptr-rebind-err:
+ *	hang shared vm userptr rebind err
+ * @hang-shared-vm-userptr-invalidate:
+ *	hang shared vm userptr invalidate
+ * @hang-shared-vm-userptr-invalidate-race:
+ *	hang shared vm userptr invalidate race
+ * @hang-fd-basic:
+ *	hang fd basic
+ * @hang-fd-userptr:
+ *	hang fd userptr
+ * @hang-fd-rebind:
+ *	hang fd rebind
+ * @hang-fd-userptr-rebind:
+ *	hang fd userptr rebind
+ * @hang-fd-userptr-invalidate:
+ *	hang fd userptr invalidate
+ * @hang-fd-userptr-invalidate-race:
+ *	hang fd userptr invalidate race
+ * @bal-userptr:
+ *	balancer userptr
+ * @bal-rebind:
+ *	balancer rebind
+ * @bal-userptr-rebind:
+ *	balancer userptr rebind
+ * @bal-userptr-invalidate:
+ *	balancer userptr invalidate
+ * @bal-userptr-invalidate-race:
+ *	balancer userptr invalidate race
+ * @bal-shared-vm-basic:
+ *	balancer shared vm basic
+ * @bal-shared-vm-userptr:
+ *	balancer shared vm userptr
+ * @bal-shared-vm-rebind:
+ *	balancer shared vm rebind
+ * @bal-shared-vm-userptr-rebind:
+ *	balancer shared vm userptr rebind
+ * @bal-shared-vm-userptr-invalidate:
+ *	balancer shared vm userptr invalidate
+ * @bal-shared-vm-userptr-invalidate-race:
+ *	balancer shared vm userptr invalidate race
+ * @bal-fd-basic:
+ *	balancer fd basic
+ * @bal-fd-userptr:
+ *	balancer fd userptr
+ * @bal-fd-rebind:
+ *	balancer fd rebind
+ * @bal-fd-userptr-rebind:
+ *	balancer fd userptr rebind
+ * @bal-fd-userptr-invalidate:
+ *	balancer fd userptr invalidate
+ * @bal-fd-userptr-invalidate-race:
+ *	balancer fd userptr invalidate race
+ * @cm-userptr:
+ *	compute mode userptr
+ * @cm-rebind:
+ *	compute mode rebind
+ * @cm-userptr-rebind:
+ *	compute mode userptr rebind
+ * @cm-userptr-invalidate:
+ *	compute mode userptr invalidate
+ * @cm-userptr-invalidate-race:
+ *	compute mode userptr invalidate race
+ * @cm-shared-vm-basic:
+ *	compute mode shared vm basic
+ * @cm-shared-vm-userptr:
+ *	compute mode shared vm userptr
+ * @cm-shared-vm-rebind:
+ *	compute mode shared vm rebind
+ * @cm-shared-vm-userptr-rebind:
+ *	compute mode shared vm userptr rebind
+ * @cm-shared-vm-userptr-invalidate:
+ *	compute mode shared vm userptr invalidate
+ * @cm-shared-vm-userptr-invalidate-race:
+ *	compute mode shared vm userptr invalidate race
+ * @cm-fd-userptr:
+ *	compute mode fd userptr
+ * @cm-fd-rebind:
+ *	compute mode fd rebind
+ * @cm-fd-userptr-rebind:
+ *	compute mode fd userptr rebind
+ * @cm-fd-userptr-invalidate:
+ *	compute mode fd userptr invalidate
+ * @cm-fd-userptr-invalidate-race:
+ *	compute mode fd userptr invalidate race
+ * @mixed-userptr:
+ *	mixed userptr
+ * @mixed-rebind:
+ *	mixed rebind
+ * @mixed-userptr-rebind:
+ *	mixed userptr rebind
+ * @mixed-userptr-invalidate:
+ *	mixed userptr invalidate
+ * @mixed-userptr-invalidate-race:
+ *	mixed userptr invalidate race
+ * @mixed-shared-vm-userptr:
+ *	mixed shared vm userptr
+ * @mixed-shared-vm-rebind:
+ *	mixed shared vm rebind
+ * @mixed-shared-vm-userptr-rebind:
+ *	mixed shared vm userptr rebind
+ * @mixed-shared-vm-userptr-invalidate:
+ *	mixed shared vm userptr invalidate
+ * @mixed-shared-vm-userptr-invalidate-race:
+ *	mixed shared vm userptr invalidate race
+ * @mixed-fd-userptr:
+ *	mixed fd userptr
+ * @mixed-fd-rebind:
+ *	mixed fd rebind
+ * @mixed-fd-userptr-rebind:
+ *	mixed fd userptr rebind
+ * @mixed-fd-userptr-invalidate:
+ *	mixed fd userptr invalidate
+ * @mixed-fd-userptr-invalidate-race:
+ *	mixed fd userptr invalidate race
+ * @bal-mixed-userptr:
+ *	balancer mixed userptr
+ * @bal-mixed-rebind:
+ *	balancer mixed rebind
+ * @bal-mixed-userptr-rebind:
+ *	balancer mixed userptr rebind
+ * @bal-mixed-userptr-invalidate:
+ *	balancer mixed userptr invalidate
+ * @bal-mixed-userptr-invalidate-race:
+ *	balancer mixed userptr invalidate race
+ * @bal-mixed-shared-vm-userptr:
+ *	balancer mixed shared vm userptr
+ * @bal-mixed-shared-vm-rebind:
+ *	balancer mixed shared vm rebind
+ * @bal-mixed-shared-vm-userptr-rebind:
+ *	balancer mixed shared vm userptr rebind
+ * @bal-mixed-shared-vm-userptr-invalidate:
+ *	balancer mixed shared vm userptr invalidate
+ * @bal-mixed-shared-vm-userptr-invalidate-race:
+ *	balancer mixed shared vm userptr invalidate race
+ * @bal-mixed-fd-userptr:
+ *	balancer mixed fd userptr
+ * @bal-mixed-fd-rebind:
+ *	balancer mixed fd rebind
+ * @bal-mixed-fd-userptr-rebind:
+ *	balancer mixed fd userptr rebind
+ * @bal-mixed-fd-userptr-invalidate:
+ *	balancer mixed fd userptr invalidate
+ * @bal-mixed-fd-userptr-invalidate-race:
+ *	balancer mixed fd userptr invalidate race
+ */
+
 static void threads(int fd, int flags)
 {
 	struct thread_data *threads_data;
diff --git a/tests/xe/xe_guc_pc.c b/tests/xe/xe_guc_pc.c
index 3ed6d36ff0..3f520d7bf4 100644
--- a/tests/xe/xe_guc_pc.c
+++ b/tests/xe/xe_guc_pc.c
@@ -3,6 +3,14 @@
  * Copyright © 2022 Intel Corporation
  */
 
+/**
+ * TEST: Test GuC frequency request functionality
+ * Category: Firmware building block
+ * Sub-category: GuC
+ * Functionality: frequency request
+ * Test category: functionality test
+ */
+
 #include "igt.h"
 #include "lib/igt_syncobj.h"
 #include "igt_sysfs.h"
@@ -147,6 +155,13 @@ static uint32_t get_freq(int sysfs, int gt_id, const char *freq_name)
 	return freq;
 }
 
+
+/**
+ * SUBTEST: freq_basic_api
+ * Description: Test basic get and set frequency API
+ * Run type: BAT
+ */
+
 static void test_freq_basic_api(int sysfs, int gt_id)
 {
 	uint32_t rpn = get_freq(sysfs, gt_id, "rpn");
@@ -180,6 +195,17 @@ static void test_freq_basic_api(int sysfs, int gt_id)
 	igt_assert(get_freq(sysfs, gt_id, "max") == rp0);
 }
 
+/**
+ * SUBTEST: freq_fixed_idle
+ * Description: Test fixed frequency request with engine in idle state
+ * Run type: BAT
+ *
+ * SUBTEST: freq_fixed_exec
+ * Description: Test fixed frequency request when engine is doing some work
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ */
+
 static void test_freq_fixed(int sysfs, int gt_id)
 {
 	uint32_t rpn = get_freq(sysfs, gt_id, "rpn");
@@ -218,6 +244,17 @@ static void test_freq_fixed(int sysfs, int gt_id)
 	igt_debug("Finished testing fixed request\n");
 }
 
+/**
+ * SUBTEST: freq_range_idle
+ * Description: Test range frequency request with engine in idle state
+ * Run type: BAT
+ *
+ * SUBTEST: freq_range_exec
+ * Description: Test range frequency request when engine is doing some work
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ */
+
 static void test_freq_range(int sysfs, int gt_id)
 {
 	uint32_t rpn = get_freq(sysfs, gt_id, "rpn");
@@ -237,6 +274,13 @@ static void test_freq_range(int sysfs, int gt_id)
 	igt_debug("Finished testing range request\n");
 }
 
+/**
+ * SUBTEST: freq_low_max
+ * Description: Test frequency request to minimal and maximum values
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ */
+
 static void test_freq_low_max(int sysfs, int gt_id)
 {
 	uint32_t rpn = get_freq(sysfs, gt_id, "rpn");
@@ -253,6 +297,13 @@ static void test_freq_low_max(int sysfs, int gt_id)
 	igt_assert(get_freq(sysfs, gt_id, "act") == rpe);
 }
 
+/**
+ * SUBTEST: freq_suspend
+ * Description: Check frequency after returning from suspend
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ */
+
 static void test_suspend(int sysfs, int gt_id)
 {
 	uint32_t rpn = get_freq(sysfs, gt_id, "rpn");
@@ -269,6 +320,18 @@ static void test_suspend(int sysfs, int gt_id)
 	igt_assert(get_freq(sysfs, gt_id, "max") == rpn);
 }
 
+/**
+ * SUBTEST: freq_reset
+ * Description: test frequency reset only once
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ *
+ * SUBTEST: freq_reset_multiple
+ * Description: test frequency reset multiple times
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ */
+
 static void test_reset(int fd, int sysfs, int gt_id, int cycles)
 {
 	uint32_t rpn = get_freq(sysfs, gt_id, "rpn");
@@ -291,6 +354,17 @@ static void test_reset(int fd, int sysfs, int gt_id, int cycles)
 	}
 }
 
+
+/**
+ * SUBTEST: rc6_on_idle
+ * Description: check if GPU is in RC6 on idle
+ * Run type: BAT
+ *
+ * SUBTEST: rc0_on_exec
+ * Description: check if GPU is in RC0 on when doing some work
+ * Run type: BAT
+ */
+
 static bool in_rc6(int sysfs, int gt_id)
 {
 	char path[32];
diff --git a/tests/xe/xe_mmap.c b/tests/xe/xe_mmap.c
index f2d73fd1ac..9dce6adbe2 100644
--- a/tests/xe/xe_mmap.c
+++ b/tests/xe/xe_mmap.c
@@ -20,17 +20,21 @@
 #include <string.h>
 
 
+/**
+ * SUBTEST: system
+ * Description: Test mmap on system memory
+ */
+
 /**
  * SUBTEST: %s
- * Description: Test mmap on %s memory
+ * Description: Test mmap on %arg[1] memory
+ * GPU requirements: GPU needs to have dedicated VRAM
  *
  * arg[1]:
  *
- * @system:		system
  * @vram:		vram
  * @vram-system:	system vram
  */
-
 static void
 test_mmap(int fd, uint32_t flags)
 {
diff --git a/tests/xe/xe_pm.c b/tests/xe/xe_pm.c
index cf4fb8fad2..eb752b0208 100644
--- a/tests/xe/xe_pm.c
+++ b/tests/xe/xe_pm.c
@@ -3,6 +3,15 @@
  * Copyright © 2022 Intel Corporation
  */
 
+/**
+ * TEST: Check Power Management functionality
+ * Category: Software building block
+ * Sub-category: power management
+ * Test category: functionality test
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ */
+
 #include <limits.h>
 #include <fcntl.h>
 #include <string.h>
@@ -141,6 +150,58 @@ static bool out_of_d3(device_t device, enum igt_acpi_d_state state)
 	return true;
 }
 
+/**
+ * SUBTEST: %s-basic
+ * Description: set GPU state to %arg[1] and test suspend/autoresume
+ * GPU requirements: D3 feature should be supported
+ *
+ * SUBTEST: %s-basic-exec
+ * Description: test exec on %arg[1] state once without RPM
+ * GPU requirements: D3 feature should be supported
+ *
+ * SUBTEST: %s-multiple-execs
+ * Description: test exec on %arg[1] state multiple times without RPM
+ * GPU requirements: D3 feature should be supported
+ *
+ * arg[1]:
+ *
+ * @s2idle:	s2idle
+ * @s3:		s3
+ * @s4:		s4
+ * @d3hot:	d3hot
+ * @d3cold:	d3cold
+ */
+
+/**
+ * SUBTEST: %s-exec-after
+ * Description: suspend/autoresume on %arg[1] state and exec after RPM
+ *
+ * arg[1]:
+ *
+ * @s2idle:	s2idle
+ * @s3:		s3
+ * @s4:		s4
+ */
+
+/**
+ * SUBTEST: %s-%s-basic-exec
+ * Description:
+ *	Setup GPU on %arg[2] state then test exec on %arg[1] state
+ * 	without RPM
+ * GPU requirements: D3 feature should be supported
+ *
+ * arg[1]:
+ *
+ * @s2idle:	s2idle
+ * @s3:		s3
+ * @s4:		s4
+ *
+ * arg[2]:
+ *
+ * @d3hot:	d3hot
+ * @d3cold:	d3cold
+ */
+
 static void
 test_exec(device_t device, struct drm_xe_engine_class_instance *eci,
 	  int n_engines, int n_execs, enum igt_suspend_state s_state,
diff --git a/tests/xe/xe_prime_self_import.c b/tests/xe/xe_prime_self_import.c
index 2a8bb91205..5710cff92c 100644
--- a/tests/xe/xe_prime_self_import.c
+++ b/tests/xe/xe_prime_self_import.c
@@ -25,10 +25,15 @@
  *    Matthew Brost <matthew.brost@intel.com>
  */
 
-/*
- * Testcase: Check whether prime import/export works on the same device
+/**
+ * TEST: Check whether prime import/export works on the same device
+ * Category: Software building block
+ * Sub-category: drm prime
+ * Test category: functionality test
  *
- * ... but with different fds, i.e. the wayland usecase.
+ * Description:
+ *	Check whether prime import/export works on the same device
+ *	but with different fds, i.e. the wayland usecase.
  */
 
 #include "igt.h"
@@ -83,6 +88,12 @@ check_bo(int fd1, uint32_t handle1, int fd2, uint32_t handle2)
 	munmap(ptr2, BO_SIZE);
 }
 
+/**
+ * SUBTEST: basic-with_fd_dup
+ * Description: basic prime import/export with fd_dup
+ * Run type: BAT
+ */
+
 static void test_with_fd_dup(void)
 {
 	int fd1, fd2;
@@ -115,6 +126,13 @@ static void test_with_fd_dup(void)
 	close(fd2);
 }
 
+/**
+ * SUBTEST: basic-with_two_bos
+ * Description: basic prime import/export with two BOs
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ */
+
 static void test_with_two_bos(void)
 {
 	int fd1, fd2;
@@ -152,6 +170,13 @@ static void test_with_two_bos(void)
 	close(fd2);
 }
 
+/**
+ * SUBTEST: basic-with_one_bo_two_files
+ * Description: basic prime import/export with one BO and two files
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ */
+
 static void test_with_one_bo_two_files(void)
 {
 	int fd1, fd2;
@@ -183,6 +208,12 @@ static void test_with_one_bo_two_files(void)
 	close(dma_buf_fd2);
 }
 
+/**
+ * SUBTEST: basic-with_one_bo
+ * Description: basic prime import/export with one BO
+ * Run type: BAT
+ */
+
 static void test_with_one_bo(void)
 {
 	int fd1, fd2;
@@ -251,7 +282,13 @@ static void *thread_fn_reimport_vs_close(void *p)
 	return (void *)0;
 }
 
-static void test_reimport_close_race(void)
+/**
+ * SUBTEST: reimport-vs-gem_close-race
+ * Description: Reimport versus gem_close race
+ * Run type: BAT
+ */
+
+ static void test_reimport_close_race(void)
 {
 	pthread_t *threads;
 	int r, i, num_threads;
@@ -342,6 +379,12 @@ static void *thread_fn_export_vs_close(void *p)
 	return (void *)0;
 }
 
+/**
+ * SUBTEST: export-vs-gem_close-race
+ * Description: Export versus gem_close race test
+ * Run type: BAT
+ */
+
 static void test_export_close_race(void)
 {
 	pthread_t *threads;
@@ -396,6 +439,13 @@ static void test_export_close_race(void)
 	igt_assert_eq(obj_count, 0);
 }
 
+/**
+ * SUBTEST: basic-llseek-size
+ * Description: basic BO llseek size test
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ */
+
 static void test_llseek_size(void)
 {
 	int fd, i;
@@ -424,6 +474,13 @@ static void test_llseek_size(void)
 	close(fd);
 }
 
+/**
+ * SUBTEST: basic-llseek-bad
+ * Description: basid bad BO llseek size test
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ */
+
 static void test_llseek_bad(void)
 {
 	int fd;
diff --git a/tests/xe/xe_query.c b/tests/xe/xe_query.c
index c107f9936a..b5b78517ce 100644
--- a/tests/xe/xe_query.c
+++ b/tests/xe/xe_query.c
@@ -193,7 +193,7 @@ test_query_engines(int fd)
 /**
  * SUBTEST: query-mem-usage
  * Description: Display memory information like memory class, size
- * and alignment.
+ *	and alignment.
  */
 static void
 test_query_mem_usage(int fd)
diff --git a/tests/xe/xe_vm.c b/tests/xe/xe_vm.c
index f3dd926b24..c8c3a804e9 100644
--- a/tests/xe/xe_vm.c
+++ b/tests/xe/xe_vm.c
@@ -3,6 +3,13 @@
  * Copyright © 2021 Intel Corporation
  */
 
+/**
+ * TEST: Check if VMA functionality is working
+ * Category: Software building block
+ * Sub-category: VMA
+ * Test category: functionality test
+ */
+
 #include "igt.h"
 #include "lib/igt_syncobj.h"
 #include "lib/intel_reg.h"
@@ -72,6 +79,12 @@ write_dwords(int fd, uint32_t vm, int n_dwords, uint64_t *addrs)
 	xe_engine_destroy(fd, engine);
 }
 
+/**
+ * SUBTEST: scratch
+ * Description: Test scratch page creation and write
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ */
 
 static void
 test_scratch(int fd)
@@ -188,6 +201,13 @@ uint64_t addrs_57b[] = {
 	0x1fffffffffffff4ull,
 };
 
+/**
+ * SUBTEST: bind-once
+ * Description: bind once on one BO
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ */
+
 static void
 test_bind_once(int fd)
 {
@@ -198,6 +218,13 @@ test_bind_once(int fd)
 			   1, &addr);
 }
 
+/**
+ * SUBTEST: bind-one-bo-many-times
+ * Description: bind many times on one BO
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ */
+
 static void
 test_bind_one_bo_many_times(int fd)
 {
@@ -211,6 +238,13 @@ test_bind_one_bo_many_times(int fd)
 			   addrs_size, addrs);
 }
 
+/**
+ * SUBTEST: bind-one-bo-many-times-many-vm
+ * Description: Test bind many times and many VM on one BO
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ */
+
 static void
 test_bind_one_bo_many_times_many_vm(int fd)
 {
@@ -222,6 +256,15 @@ test_bind_one_bo_many_times_many_vm(int fd)
 	__test_bind_one_bo(fd, 0, addrs_size, addrs);
 }
 
+/**
+ * SUBTEST: unbind-all-%d-vmas
+ * Description: Test unbind all with %arg[1] VMAs
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ *
+ * arg[1].values: 2, 8
+ */
+
 static void unbind_all(int fd, int n_vmas)
 {
 	uint32_t bo, bo_size = xe_get_default_alignment(fd);
@@ -259,6 +302,18 @@ struct vm_thread_data {
 	bool destroy;
 };
 
+/**
+ * SUBTEST: vm-async-ops-err
+ * Description: Test VM async ops error
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ *
+ * SUBTEST: vm-async-ops-err-destroy
+ * Description: Test VM async ops error destroy
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ */
+
 static void *vm_async_ops_err_thread(void *data)
 {
 	struct vm_thread_data *args = data;
@@ -413,6 +468,15 @@ static void vm_async_ops_err(int fd, bool destroy)
 	pthread_join(thread.thread, NULL);
 }
 
+/**
+ * SUBTEST: shared-%s-page
+ * Description: Test shared arg[1] page
+ * Run type: BAT
+ *
+ * arg[1].values: pte, pde, pde2, pde3
+ */
+
+
 struct shared_pte_page_data {
 	uint32_t batch[16];
 	uint64_t pad;
@@ -588,6 +652,13 @@ shared_pte_page(int fd, struct drm_xe_engine_class_instance *eci, int n_bo,
 	xe_vm_destroy(fd, vm);
 }
 
+
+/**
+ * SUBTEST: bind-engines-independent
+ * Description: Test independent bind engines
+ * Run type: BAT
+ */
+
 static void
 test_bind_engines_independent(int fd, struct drm_xe_engine_class_instance *eci)
 {
@@ -722,6 +793,28 @@ test_bind_engines_independent(int fd, struct drm_xe_engine_class_instance *eci)
 
 #define BIND_ARRAY_BIND_ENGINE_FLAG	(0x1 << 0)
 
+
+/**
+ * SUBTEST: bind-array-twice
+ * Description: Test bind array twice
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ *
+ * SUBTEST: bind-array-many
+ * Description: Test bind array many times
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ *
+ * SUBTEST: bind-array-engine-twice
+ * Description: Test bind array engine twice
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ *
+ * SUBTEST: bind-array-engine-many
+ * Description: Test bind array engine many times
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ */
 static void
 test_bind_array(int fd, struct drm_xe_engine_class_instance *eci, int n_execs,
 		unsigned int flags)
@@ -841,6 +934,59 @@ test_bind_array(int fd, struct drm_xe_engine_class_instance *eci, int n_execs,
 #define LARGE_BIND_FLAG_SPLIT		(0x1 << 1)
 #define LARGE_BIND_FLAG_USERPTR		(0x1 << 2)
 
+/**
+ * SUBTEST: %s-%ld
+ * Description: Test %arg[1] with %arg[2] bind size
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ *
+ * arg[1]:
+ *
+ * @large-binds: large-binds
+ * @large-split-binds: large-split-binds
+ * @large-misaligned-binds: large-misaligned-binds
+ * @large-split-misaligned-binds: large-split-misaligned-binds
+ * @large-userptr-binds: large-userptr-binds
+ * @large-userptr-split-binds: large-userptr-split-binds
+ * @large-userptr-misaligned-binds: large-userptr-misaligned-binds
+ * @large-userptr-split-misaligned-binds: large-userptr-split-misaligned-binds
+ *
+ * arg[2].values: 2097152, 4194304, 8388608, 16777216, 33554432
+ * arg[2].values: 67108864, 134217728, 268435456, 536870912, 1073741824
+ * arg[2].values: 2147483648
+ */
+
+/**
+ *
+ * SUBTEST: %s-%ld
+ * Description: Test %arg[1] with %arg[2] bind size
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ *
+ * arg[1]:
+ *
+ * @mixed-binds: mixed-binds
+ * @mixed-misaligned-binds: mixed-misaligned-binds
+ *
+ * arg[2].values: 3145728, 1611661312
+ */
+
+/**
+ *
+ * SUBTEST: %s-%ld
+ * Description: Test %arg[1] with %arg[2] bind size
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ *
+ * arg[1]:
+ *
+ * @mixed-userptr-binds: mixed-userptr-binds
+ * @mixed-userptr-misaligned-binds: mixed-userptr-misaligned-binds
+ * @mixed-userptr-binds: mixed-userptr-binds
+ *
+ * arg[2].values: 3145728, 1611661312
+ */
+
 static void
 test_large_binds(int fd, struct drm_xe_engine_class_instance *eci,
 		 int n_engines, int n_execs, size_t bo_size,
@@ -1061,6 +1207,59 @@ static void *hammer_thread(void *tdata)
 #define MUNMAP_FLAG_INVALIDATE		(0x1 << 1)
 #define MUNMAP_FLAG_HAMMER_FIRST_PAGE	(0x1 << 2)
 
+
+/**
+ * SUBTEST: munmap-style-unbind-%s
+ * Description: Test munmap style unbind with %arg[1]
+ *
+ * arg[1]:
+ *
+ * @one-partial:			one partial
+ * @end:				end
+ * @front:				front
+ * @userptr-one-partial:		userptr one partial
+ * @userptr-end:			userptr end
+ * @userptr-front:			userptr front
+ * @userptr-inval-end:			userptr inval end
+ * @userptr-inval-front:		userptr inval front
+ * Run type: BAT
+ */
+
+/**
+ * SUBTEST: munmap-style-unbind-%s
+ * Description: Test munmap style unbind with %arg[1]
+ * Run type: FULL
+ * TODO: change ``'Run type' == FULL`` to a better category
+ *
+ * arg[1]:
+ *
+ * @all:				all
+ * @either-side-partial:		either side partial
+ * @either-side-partial-hammer:		either side partial hammer
+ * @either-side-full:			either side full
+ * @many-all:				many all
+ * @many-either-side-partial:		many either side partial
+ * @many-either-side-partial-hammer:	many either side partial hammer
+ * @many-either-side-full:		many either side full
+ * @many-end:				many end
+ * @many-front:				many front
+ * @userptr-all:			userptr all
+ * @userptr-either-side-partial:	userptr either side partial
+ * @userptr-either-side-full:		userptr either side full
+ * @userptr-many-all:			userptr many all
+ * @userptr-many-either-side-full:	userptr many either side full
+ * @userptr-many-end:			userptr many end
+ * @userptr-many-front:			userptr many front
+ * @userptr-inval-either-side-full:	userptr inval either side full
+ * @userptr-inval-many-all:		userptr inval many all
+ * @userptr-inval-many-either-side-partial:
+ *					userptr inval many either side partial
+ * @userptr-inval-many-either-side-full:
+ *					userptr inval many either side full
+ * @userptr-inval-many-end:		userptr inval many end
+ * @userptr-inval-many-front:		userptr inval many front
+ */
+
 static void
 test_munmap_style_unbind(int fd, struct drm_xe_engine_class_instance *eci,
 			 int bo_n_pages, int n_binds,
-- 
2.34.1

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [igt-dev] [PATCH i-g-t 16/18] xe-fast-feedback.testlist: update debugfs tests
  2023-03-10  8:23 [igt-dev] [PATCH i-g-t 00/18] Add igt_doc.py Zbigniew Kempczyński
                   ` (14 preceding siblings ...)
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 15/18] xe/xe_*: add TEST/SUBTEST documentation Zbigniew Kempczyński
@ 2023-03-10  8:23 ` Zbigniew Kempczyński
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 17/18] xe_mmap: skip VRAM tests if no VRAM is found Zbigniew Kempczyński
                   ` (3 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Zbigniew Kempczyński @ 2023-03-10  8:23 UTC (permalink / raw)
  To: igt-dev

From: Mauro Carvalho Chehab <mchehab@kernel.org>

There's just one GT debugfs test now. Update its name.

Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Acked-by: Zbigniew Kempczyński <zbigniew.kempczynski@intel.com>
---
 tests/intel-ci/xe-fast-feedback.testlist | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/tests/intel-ci/xe-fast-feedback.testlist b/tests/intel-ci/xe-fast-feedback.testlist
index ac42d52aa9..25237784e2 100644
--- a/tests/intel-ci/xe-fast-feedback.testlist
+++ b/tests/intel-ci/xe-fast-feedback.testlist
@@ -1,7 +1,6 @@
 igt@xe/xe_compute@compute-square
 igt@xe/xe_debugfs@base
-igt@xe/xe_debugfs@gt0
-igt@xe/xe_debugfs@gt1
+igt@xe/xe_debugfs@gt
 igt@xe/xe_debugfs@forcewake
 igt@xe/xe_dma_buf_sync@export-dma-buf-once
 igt@xe/xe_dma_buf_sync@export-dma-buf-once-read-sync
-- 
2.34.1

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [igt-dev] [PATCH i-g-t 17/18] xe_mmap: skip VRAM tests if no VRAM is found
  2023-03-10  8:23 [igt-dev] [PATCH i-g-t 00/18] Add igt_doc.py Zbigniew Kempczyński
                   ` (15 preceding siblings ...)
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 16/18] xe-fast-feedback.testlist: update debugfs tests Zbigniew Kempczyński
@ 2023-03-10  8:23 ` Zbigniew Kempczyński
  2023-03-10 10:52   ` Das, Nirmoy
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 18/18] meson: replace "igt@xe/" by "igt@" Zbigniew Kempczyński
                   ` (2 subsequent siblings)
  19 siblings, 1 reply; 24+ messages in thread
From: Zbigniew Kempczyński @ 2023-03-10  8:23 UTC (permalink / raw)
  To: igt-dev

From: Mauro Carvalho Chehab <mchehab@kernel.org>

Instead of producing an error, if there's no VRAM, the test
should be skipped. There's a logic there that would be doing
that, except that it doesn't really work :-)

Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Acked-by: Zbigniew Kempczyński <zbigniew.kempczynski@intel.com>
---
 tests/xe/xe_mmap.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/tests/xe/xe_mmap.c b/tests/xe/xe_mmap.c
index 9dce6adbe2..6b313a1895 100644
--- a/tests/xe/xe_mmap.c
+++ b/tests/xe/xe_mmap.c
@@ -42,8 +42,7 @@ test_mmap(int fd, uint32_t flags)
 	uint64_t mmo;
 	void *map;
 
-	if (flags & vram_memory(fd, 0))
-		igt_require(xe_has_vram(fd));
+	igt_require_f(flags, "Device doesn't support such memory region\n");
 
 	bo = xe_bo_create_flags(fd, 0, 4096, flags);
 	mmo = xe_bo_mmap_offset(fd, bo);
-- 
2.34.1

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [igt-dev] [PATCH i-g-t 18/18] meson: replace "igt@xe/" by "igt@"
  2023-03-10  8:23 [igt-dev] [PATCH i-g-t 00/18] Add igt_doc.py Zbigniew Kempczyński
                   ` (16 preceding siblings ...)
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 17/18] xe_mmap: skip VRAM tests if no VRAM is found Zbigniew Kempczyński
@ 2023-03-10  8:23 ` Zbigniew Kempczyński
  2023-03-10 10:23 ` [igt-dev] ✓ Fi.CI.BAT: success for Add igt_doc.py Patchwork
  2023-03-13  1:18 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
  19 siblings, 0 replies; 24+ messages in thread
From: Zbigniew Kempczyński @ 2023-03-10  8:23 UTC (permalink / raw)
  To: igt-dev

From: Mauro Carvalho Chehab <mchehab@kernel.org>

Change the building system to avoid the "/" path at the IGT Xe
tests, as those are causing problems for CI.

Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Acked-by: Zbigniew Kempczyński <zbigniew.kempczynski@intel.com>
---
 meson.build                              |   7 -
 tests/intel-ci/xe-fast-feedback.testlist | 278 +++++++++++------------
 tests/meson.build                        |  32 +++
 tests/xe/meson.build                     |  32 ---
 4 files changed, 171 insertions(+), 178 deletions(-)

diff --git a/meson.build b/meson.build
index 56875a2190..cbb7ead7d9 100644
--- a/meson.build
+++ b/meson.build
@@ -261,7 +261,6 @@ libexecdir = join_paths(get_option('libexecdir'), 'igt-gpu-tools')
 amdgpudir = join_paths(libexecdir, 'amdgpu')
 v3ddir = join_paths(libexecdir, 'v3d')
 vc4dir = join_paths(libexecdir, 'vc4')
-xedir = join_paths(libexecdir, 'xe')
 mandir = get_option('mandir')
 pkgconfigdir = join_paths(libdir, 'pkgconfig')
 python3 = find_program('python3', required : true)
@@ -310,18 +309,12 @@ if get_option('use_rpath')
 	endforeach
 	vc4_rpathdir = join_paths(vc4_rpathdir, libdir)
 
-	xedir_rpathdir = '$ORIGIN'
-	foreach p : xedir.split('/')
-		xedir_rpathdir = join_paths(xedir_rpathdir, '..')
-	endforeach
-	xedir_rpathdir = join_paths(xedir_rpathdir, libdir)
 else
 	bindir_rpathdir = ''
 	libexecdir_rpathdir = ''
 	amdgpudir_rpathdir = ''
 	v3d_rpathdir = ''
 	vc4_rpathdir = ''
-	xedir_rpathdir = ''
 endif
 
 subdir('lib')
diff --git a/tests/intel-ci/xe-fast-feedback.testlist b/tests/intel-ci/xe-fast-feedback.testlist
index 25237784e2..6525b1676b 100644
--- a/tests/intel-ci/xe-fast-feedback.testlist
+++ b/tests/intel-ci/xe-fast-feedback.testlist
@@ -1,139 +1,139 @@
-igt@xe/xe_compute@compute-square
-igt@xe/xe_debugfs@base
-igt@xe/xe_debugfs@gt
-igt@xe/xe_debugfs@forcewake
-igt@xe/xe_dma_buf_sync@export-dma-buf-once
-igt@xe/xe_dma_buf_sync@export-dma-buf-once-read-sync
-igt@xe/xe_exec_balancer@twice-virtual-basic
-igt@xe/xe_exec_balancer@no-exec-virtual-basic
-igt@xe/xe_exec_balancer@twice-cm-virtual-basic
-igt@xe/xe_exec_balancer@no-exec-cm-virtual-basic
-igt@xe/xe_exec_balancer@twice-virtual-userptr
-igt@xe/xe_exec_balancer@no-exec-virtual-userptr
-igt@xe/xe_exec_balancer@twice-cm-virtual-userptr
-igt@xe/xe_exec_balancer@no-exec-cm-virtual-userptr
-igt@xe/xe_exec_balancer@twice-virtual-rebind
-igt@xe/xe_exec_balancer@no-exec-virtual-rebind
-igt@xe/xe_exec_balancer@twice-cm-virtual-rebind
-igt@xe/xe_exec_balancer@no-exec-cm-virtual-rebind
-igt@xe/xe_exec_balancer@twice-virtual-userptr-rebind
-igt@xe/xe_exec_balancer@no-exec-virtual-userptr-rebind
-igt@xe/xe_exec_balancer@twice-cm-virtual-userptr-rebind
-igt@xe/xe_exec_balancer@no-exec-cm-virtual-userptr-rebind
-igt@xe/xe_exec_balancer@twice-virtual-userptr-invalidate
-igt@xe/xe_exec_balancer@no-exec-virtual-userptr-invalidate
-igt@xe/xe_exec_balancer@twice-cm-virtual-userptr-invalidate
-igt@xe/xe_exec_balancer@no-exec-cm-virtual-userptr-invalidate
-igt@xe/xe_exec_balancer@twice-virtual-userptr-invalidate-race
-igt@xe/xe_exec_balancer@no-exec-virtual-userptr-invalidate-race
-igt@xe/xe_exec_balancer@twice-cm-virtual-userptr-invalidate-race
-igt@xe/xe_exec_balancer@no-exec-cm-virtual-userptr-invalidate-race
-igt@xe/xe_exec_balancer@twice-parallel-basic
-igt@xe/xe_exec_balancer@no-exec-parallel-basic
-igt@xe/xe_exec_balancer@twice-parallel-userptr
-igt@xe/xe_exec_balancer@no-exec-parallel-userptr
-igt@xe/xe_exec_balancer@twice-parallel-rebind
-igt@xe/xe_exec_balancer@no-exec-parallel-rebind
-igt@xe/xe_exec_balancer@twice-parallel-userptr-rebind
-igt@xe/xe_exec_balancer@no-exec-parallel-userptr-rebind
-igt@xe/xe_exec_balancer@twice-parallel-userptr-invalidate
-igt@xe/xe_exec_balancer@no-exec-parallel-userptr-invalidate
-igt@xe/xe_exec_balancer@twice-parallel-userptr-invalidate-race
-igt@xe/xe_exec_balancer@no-exec-parallel-userptr-invalidate-race
-igt@xe/xe_exec_basic@twice-basic
-igt@xe/xe_exec_basic@no-exec-basic
-igt@xe/xe_exec_basic@twice-basic-defer-mmap
-igt@xe/xe_exec_basic@no-exec-basic-defer-mmap
-igt@xe/xe_exec_basic@twice-basic-defer-bind
-igt@xe/xe_exec_basic@no-exec-basic-defer-bind
-igt@xe/xe_exec_basic@twice-userptr
-igt@xe/xe_exec_basic@no-exec-userptr
-igt@xe/xe_exec_basic@twice-rebind
-igt@xe/xe_exec_basic@no-exec-rebind
-igt@xe/xe_exec_basic@twice-userptr-rebind
-igt@xe/xe_exec_basic@no-exec-userptr-rebind
-igt@xe/xe_exec_basic@twice-userptr-invalidate
-igt@xe/xe_exec_basic@no-exec-userptr-invalidate
-igt@xe/xe_exec_basic@twice-userptr-invalidate-race
-igt@xe/xe_exec_basic@no-exec-userptr-invalidate-race
-igt@xe/xe_exec_basic@twice-bindengine
-igt@xe/xe_exec_basic@no-exec-bindengine
-igt@xe/xe_exec_basic@twice-bindengine-userptr
-igt@xe/xe_exec_basic@no-exec-bindengine-userptr
-igt@xe/xe_exec_basic@twice-bindengine-rebind
-igt@xe/xe_exec_basic@no-exec-bindengine-rebind
-igt@xe/xe_exec_basic@twice-bindengine-userptr-rebind
-igt@xe/xe_exec_basic@no-exec-bindengine-userptr-rebind
-igt@xe/xe_exec_basic@twice-bindengine-userptr-invalidate
-igt@xe/xe_exec_basic@no-exec-bindengine-userptr-invalidate
-igt@xe/xe_exec_basic@twice-bindengine-userptr-invalidate-race
-igt@xe/xe_exec_basic@no-exec-bindengine-userptr-invalidate-race
-igt@xe/xe_exec_compute_mode@twice-basic
-igt@xe/xe_exec_compute_mode@twice-preempt-fence-early
-igt@xe/xe_exec_compute_mode@twice-userptr
-igt@xe/xe_exec_compute_mode@twice-rebind
-igt@xe/xe_exec_compute_mode@twice-userptr-rebind
-igt@xe/xe_exec_compute_mode@twice-userptr-invalidate
-igt@xe/xe_exec_compute_mode@twice-userptr-invalidate-race
-igt@xe/xe_exec_compute_mode@twice-bindengine
-igt@xe/xe_exec_compute_mode@twice-bindengine-userptr
-igt@xe/xe_exec_compute_mode@twice-bindengine-rebind
-igt@xe/xe_exec_compute_mode@twice-bindengine-userptr-rebind
-igt@xe/xe_exec_compute_mode@twice-bindengine-userptr-invalidate
-igt@xe/xe_exec_compute_mode@twice-bindengine-userptr-invalidate-race
-igt@xe/xe_exec_reset@close-fd-no-exec
-igt@xe/xe_exec_reset@cm-close-fd-no-exec
-igt@xe/xe_exec_reset@virtual-close-fd-no-exec
-#igt@xe/xe_exec_threads@threads-basic
-igt@xe/xe_exec_threads@threads-shared-vm-basic
-igt@xe/xe_exec_threads@threads-fd-basic
-#igt@xe/xe_exec_threads@threads-hang-basic
-igt@xe/xe_exec_threads@threads-bal-basic
-igt@xe/xe_exec_threads@threads-cm-basic
-igt@xe/xe_exec_threads@threads-cm-fd-basic
-igt@xe/xe_exec_threads@threads-mixed-basic
-igt@xe/xe_exec_threads@threads-mixed-shared-vm-basic
-igt@xe/xe_exec_threads@threads-mixed-fd-basic
-igt@xe/xe_exec_threads@threads-bal-mixed-basic
-igt@xe/xe_exec_threads@threads-bal-mixed-shared-vm-basic
-igt@xe/xe_exec_threads@threads-bal-mixed-fd-basic
-igt@xe/xe_guc_pc@freq_basic_api
-igt@xe/xe_guc_pc@freq_fixed_idle
-igt@xe/xe_guc_pc@freq_range_idle
-igt@xe/xe_guc_pc@rc6_on_idle
-igt@xe/xe_guc_pc@rc0_on_exec
-igt@xe/xe_huc_copy@huc_copy
-igt@xe/xe_mmap@system
-igt@xe/xe_mmap@vram
-igt@xe/xe_mmap@vram-system
-igt@xe/xe_mmio@mmio-timestamp
-igt@xe/xe_mmio@mmio-invalid
-igt@xe/xe_prime_self_import@basic-with_one_bo
-igt@xe/xe_prime_self_import@basic-with_fd_dup
-igt@xe/xe_prime_self_import@export-vs-gem_close-race
-igt@xe/xe_prime_self_import@reimport-vs-gem_close-race
-#igt@xe/xe_prime_self_import@basic-llseek-size
-igt@xe/xe_query@query-engines
-igt@xe/xe_query@query-mem-usage
-igt@xe/xe_query@query-gts
-igt@xe/xe_query@query-config
-igt@xe/xe_query@query-hwconfig
-igt@xe/xe_query@query-topology
-igt@xe/xe_query@query-invalid-query
-igt@xe/xe_query@query-invalid-size
-#igt@xe/xe_vm@bind-once
-#igt@xe/xe_vm@scratch
-igt@xe/xe_vm@shared-pte-page
-igt@xe/xe_vm@shared-pde-page
-igt@xe/xe_vm@shared-pde2-page
-igt@xe/xe_vm@shared-pde3-page
-igt@xe/xe_vm@bind-engines-independent
-igt@xe/xe_vm@munmap-style-unbind-one-partial
-igt@xe/xe_vm@munmap-style-unbind-end
-igt@xe/xe_vm@munmap-style-unbind-front
-igt@xe/xe_vm@munmap-style-unbind-userptr-one-partial
-igt@xe/xe_vm@munmap-style-unbind-userptr-end
-igt@xe/xe_vm@munmap-style-unbind-userptr-front
-igt@xe/xe_vm@munmap-style-unbind-userptr-inval-end
-igt@xe/xe_vm@munmap-style-unbind-userptr-inval-front
-igt@xe/xe_waitfence@test
+igt@xe_compute@compute-square
+igt@xe_debugfs@base
+igt@xe_debugfs@gt
+igt@xe_debugfs@forcewake
+igt@xe_dma_buf_sync@export-dma-buf-once
+igt@xe_dma_buf_sync@export-dma-buf-once-read-sync
+igt@xe_exec_balancer@twice-virtual-basic
+igt@xe_exec_balancer@no-exec-virtual-basic
+igt@xe_exec_balancer@twice-cm-virtual-basic
+igt@xe_exec_balancer@no-exec-cm-virtual-basic
+igt@xe_exec_balancer@twice-virtual-userptr
+igt@xe_exec_balancer@no-exec-virtual-userptr
+igt@xe_exec_balancer@twice-cm-virtual-userptr
+igt@xe_exec_balancer@no-exec-cm-virtual-userptr
+igt@xe_exec_balancer@twice-virtual-rebind
+igt@xe_exec_balancer@no-exec-virtual-rebind
+igt@xe_exec_balancer@twice-cm-virtual-rebind
+igt@xe_exec_balancer@no-exec-cm-virtual-rebind
+igt@xe_exec_balancer@twice-virtual-userptr-rebind
+igt@xe_exec_balancer@no-exec-virtual-userptr-rebind
+igt@xe_exec_balancer@twice-cm-virtual-userptr-rebind
+igt@xe_exec_balancer@no-exec-cm-virtual-userptr-rebind
+igt@xe_exec_balancer@twice-virtual-userptr-invalidate
+igt@xe_exec_balancer@no-exec-virtual-userptr-invalidate
+igt@xe_exec_balancer@twice-cm-virtual-userptr-invalidate
+igt@xe_exec_balancer@no-exec-cm-virtual-userptr-invalidate
+igt@xe_exec_balancer@twice-virtual-userptr-invalidate-race
+igt@xe_exec_balancer@no-exec-virtual-userptr-invalidate-race
+igt@xe_exec_balancer@twice-cm-virtual-userptr-invalidate-race
+igt@xe_exec_balancer@no-exec-cm-virtual-userptr-invalidate-race
+igt@xe_exec_balancer@twice-parallel-basic
+igt@xe_exec_balancer@no-exec-parallel-basic
+igt@xe_exec_balancer@twice-parallel-userptr
+igt@xe_exec_balancer@no-exec-parallel-userptr
+igt@xe_exec_balancer@twice-parallel-rebind
+igt@xe_exec_balancer@no-exec-parallel-rebind
+igt@xe_exec_balancer@twice-parallel-userptr-rebind
+igt@xe_exec_balancer@no-exec-parallel-userptr-rebind
+igt@xe_exec_balancer@twice-parallel-userptr-invalidate
+igt@xe_exec_balancer@no-exec-parallel-userptr-invalidate
+igt@xe_exec_balancer@twice-parallel-userptr-invalidate-race
+igt@xe_exec_balancer@no-exec-parallel-userptr-invalidate-race
+igt@xe_exec_basic@twice-basic
+igt@xe_exec_basic@no-exec-basic
+igt@xe_exec_basic@twice-basic-defer-mmap
+igt@xe_exec_basic@no-exec-basic-defer-mmap
+igt@xe_exec_basic@twice-basic-defer-bind
+igt@xe_exec_basic@no-exec-basic-defer-bind
+igt@xe_exec_basic@twice-userptr
+igt@xe_exec_basic@no-exec-userptr
+igt@xe_exec_basic@twice-rebind
+igt@xe_exec_basic@no-exec-rebind
+igt@xe_exec_basic@twice-userptr-rebind
+igt@xe_exec_basic@no-exec-userptr-rebind
+igt@xe_exec_basic@twice-userptr-invalidate
+igt@xe_exec_basic@no-exec-userptr-invalidate
+igt@xe_exec_basic@twice-userptr-invalidate-race
+igt@xe_exec_basic@no-exec-userptr-invalidate-race
+igt@xe_exec_basic@twice-bindengine
+igt@xe_exec_basic@no-exec-bindengine
+igt@xe_exec_basic@twice-bindengine-userptr
+igt@xe_exec_basic@no-exec-bindengine-userptr
+igt@xe_exec_basic@twice-bindengine-rebind
+igt@xe_exec_basic@no-exec-bindengine-rebind
+igt@xe_exec_basic@twice-bindengine-userptr-rebind
+igt@xe_exec_basic@no-exec-bindengine-userptr-rebind
+igt@xe_exec_basic@twice-bindengine-userptr-invalidate
+igt@xe_exec_basic@no-exec-bindengine-userptr-invalidate
+igt@xe_exec_basic@twice-bindengine-userptr-invalidate-race
+igt@xe_exec_basic@no-exec-bindengine-userptr-invalidate-race
+igt@xe_exec_compute_mode@twice-basic
+igt@xe_exec_compute_mode@twice-preempt-fence-early
+igt@xe_exec_compute_mode@twice-userptr
+igt@xe_exec_compute_mode@twice-rebind
+igt@xe_exec_compute_mode@twice-userptr-rebind
+igt@xe_exec_compute_mode@twice-userptr-invalidate
+igt@xe_exec_compute_mode@twice-userptr-invalidate-race
+igt@xe_exec_compute_mode@twice-bindengine
+igt@xe_exec_compute_mode@twice-bindengine-userptr
+igt@xe_exec_compute_mode@twice-bindengine-rebind
+igt@xe_exec_compute_mode@twice-bindengine-userptr-rebind
+igt@xe_exec_compute_mode@twice-bindengine-userptr-invalidate
+igt@xe_exec_compute_mode@twice-bindengine-userptr-invalidate-race
+igt@xe_exec_reset@close-fd-no-exec
+igt@xe_exec_reset@cm-close-fd-no-exec
+igt@xe_exec_reset@virtual-close-fd-no-exec
+#igt@xe_exec_threads@threads-basic
+igt@xe_exec_threads@threads-shared-vm-basic
+igt@xe_exec_threads@threads-fd-basic
+#igt@xe_exec_threads@threads-hang-basic
+igt@xe_exec_threads@threads-bal-basic
+igt@xe_exec_threads@threads-cm-basic
+igt@xe_exec_threads@threads-cm-fd-basic
+igt@xe_exec_threads@threads-mixed-basic
+igt@xe_exec_threads@threads-mixed-shared-vm-basic
+igt@xe_exec_threads@threads-mixed-fd-basic
+igt@xe_exec_threads@threads-bal-mixed-basic
+igt@xe_exec_threads@threads-bal-mixed-shared-vm-basic
+igt@xe_exec_threads@threads-bal-mixed-fd-basic
+igt@xe_guc_pc@freq_basic_api
+igt@xe_guc_pc@freq_fixed_idle
+igt@xe_guc_pc@freq_range_idle
+igt@xe_guc_pc@rc6_on_idle
+igt@xe_guc_pc@rc0_on_exec
+igt@xe_huc_copy@huc_copy
+igt@xe_mmap@system
+igt@xe_mmap@vram
+igt@xe_mmap@vram-system
+igt@xe_mmio@mmio-timestamp
+igt@xe_mmio@mmio-invalid
+igt@xe_prime_self_import@basic-with_one_bo
+igt@xe_prime_self_import@basic-with_fd_dup
+igt@xe_prime_self_import@export-vs-gem_close-race
+igt@xe_prime_self_import@reimport-vs-gem_close-race
+#igt@xe_prime_self_import@basic-llseek-size
+igt@xe_query@query-engines
+igt@xe_query@query-mem-usage
+igt@xe_query@query-gts
+igt@xe_query@query-config
+igt@xe_query@query-hwconfig
+igt@xe_query@query-topology
+igt@xe_query@query-invalid-query
+igt@xe_query@query-invalid-size
+#igt@xe_vm@bind-once
+#igt@xe_vm@scratch
+igt@xe_vm@shared-pte-page
+igt@xe_vm@shared-pde-page
+igt@xe_vm@shared-pde2-page
+igt@xe_vm@shared-pde3-page
+igt@xe_vm@bind-engines-independent
+igt@xe_vm@munmap-style-unbind-one-partial
+igt@xe_vm@munmap-style-unbind-end
+igt@xe_vm@munmap-style-unbind-front
+igt@xe_vm@munmap-style-unbind-userptr-one-partial
+igt@xe_vm@munmap-style-unbind-userptr-end
+igt@xe_vm@munmap-style-unbind-userptr-front
+igt@xe_vm@munmap-style-unbind-userptr-inval-end
+igt@xe_vm@munmap-style-unbind-userptr-inval-front
+igt@xe_waitfence@test
diff --git a/tests/meson.build b/tests/meson.build
index 4a1722b3d4..632e36e059 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -241,6 +241,28 @@ i915_progs = [
 	'sysfs_timeslice_duration',
 ]
 
+xe_progs = [
+	'xe_compute',
+	'xe_dma_buf_sync',
+	'xe_debugfs',
+	'xe_evict',
+	'xe_exec_balancer',
+	'xe_exec_basic',
+	'xe_exec_compute_mode',
+	'xe_exec_fault_mode',
+	'xe_exec_reset',
+	'xe_exec_threads',
+	'xe_guc_pc',
+	'xe_huc_copy',
+	'xe_mmap',
+	'xe_mmio',
+	'xe_pm',
+	'xe_prime_self_import',
+	'xe_query',
+	'xe_vm',
+	'xe_waitfence',
+]
+
 msm_progs = [
 	'msm_mapping',
 	'msm_recovery',
@@ -289,6 +311,16 @@ foreach prog : i915_progs
 	test_list += prog
 endforeach
 
+foreach prog : xe_progs
+	test_executables += executable(prog,
+		   join_paths('xe', prog + '.c'),
+		   dependencies : test_deps,
+		   install_dir : libexecdir,
+		   install_rpath : libexecdir_rpathdir,
+		   install : true)
+	test_list += prog
+endforeach
+
 foreach prog : msm_progs
 	test_executables += executable(prog, join_paths('msm', prog + '.c'),
 				       dependencies : test_deps,
diff --git a/tests/xe/meson.build b/tests/xe/meson.build
index bcc2f58ba8..bb344f95d5 100644
--- a/tests/xe/meson.build
+++ b/tests/xe/meson.build
@@ -1,33 +1 @@
-xe_progs = [
-	'xe_compute',
-	'xe_dma_buf_sync',
-	'xe_debugfs',
-	'xe_evict',
-	'xe_exec_balancer',
-	'xe_exec_basic',
-	'xe_exec_compute_mode',
-	'xe_exec_fault_mode',
-	'xe_exec_reset',
-	'xe_exec_threads',
-	'xe_guc_pc',
-	'xe_huc_copy',
-	'xe_mmap',
-	'xe_mmio',
-	'xe_pm',
-	'xe_prime_self_import',
-	'xe_query',
-	'xe_vm',
-	'xe_waitfence',
-]
-xe_deps = test_deps
-
 xe_test_config = meson.current_source_dir() + '/xe_test_config.json'
-
-foreach prog : xe_progs
-	test_executables += executable(prog, prog + '.c',
-				       dependencies : xe_deps,
-				       install_dir : xedir,
-				       install_rpath : xedir_rpathdir,
-				       install : true)
-	test_list += join_paths('xe', prog)
-endforeach
-- 
2.34.1

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [igt-dev] ✓ Fi.CI.BAT: success for Add igt_doc.py
  2023-03-10  8:23 [igt-dev] [PATCH i-g-t 00/18] Add igt_doc.py Zbigniew Kempczyński
                   ` (17 preceding siblings ...)
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 18/18] meson: replace "igt@xe/" by "igt@" Zbigniew Kempczyński
@ 2023-03-10 10:23 ` Patchwork
  2023-03-13  1:18 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
  19 siblings, 0 replies; 24+ messages in thread
From: Patchwork @ 2023-03-10 10:23 UTC (permalink / raw)
  To: Zbigniew Kempczyński; +Cc: igt-dev

[-- Attachment #1: Type: text/plain, Size: 6731 bytes --]

== Series Details ==

Series: Add igt_doc.py
URL   : https://patchwork.freedesktop.org/series/114959/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_12836 -> IGTPW_8587
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/index.html

Participating hosts (36 -> 36)
------------------------------

  Additional (1): bat-atsm-1 
  Missing    (1): fi-snb-2520m 

Known issues
------------

  Here are the changes found in IGTPW_8587 that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@fbdev@eof:
    - bat-atsm-1:         NOTRUN -> [SKIP][1] ([i915#2582]) +4 similar issues
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/bat-atsm-1/igt@fbdev@eof.html

  * igt@gem_exec_suspend@basic-s0@smem:
    - bat-rplp-1:         [PASS][2] -> [DMESG-WARN][3] ([i915#2867]) +2 similar issues
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/bat-rplp-1/igt@gem_exec_suspend@basic-s0@smem.html
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/bat-rplp-1/igt@gem_exec_suspend@basic-s0@smem.html

  * igt@gem_mmap@basic:
    - bat-atsm-1:         NOTRUN -> [SKIP][4] ([i915#4083])
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/bat-atsm-1/igt@gem_mmap@basic.html

  * igt@gem_sync@basic-each:
    - bat-atsm-1:         NOTRUN -> [FAIL][5] ([i915#8062]) +1 similar issue
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/bat-atsm-1/igt@gem_sync@basic-each.html

  * igt@gem_tiled_fence_blits@basic:
    - bat-atsm-1:         NOTRUN -> [SKIP][6] ([i915#4077]) +2 similar issues
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/bat-atsm-1/igt@gem_tiled_fence_blits@basic.html

  * igt@gem_tiled_pread_basic:
    - bat-atsm-1:         NOTRUN -> [SKIP][7] ([i915#4079]) +1 similar issue
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/bat-atsm-1/igt@gem_tiled_pread_basic.html

  * igt@i915_hangman@error-state-basic:
    - bat-atsm-1:         NOTRUN -> [ABORT][8] ([i915#8060])
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/bat-atsm-1/igt@i915_hangman@error-state-basic.html

  * igt@i915_selftest@live@migrate:
    - bat-dg2-11:         [PASS][9] -> [DMESG-WARN][10] ([i915#7699])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/bat-dg2-11/igt@i915_selftest@live@migrate.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/bat-dg2-11/igt@i915_selftest@live@migrate.html

  * igt@i915_selftest@live@reset:
    - bat-rpls-1:         NOTRUN -> [ABORT][11] ([i915#4983])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/bat-rpls-1/igt@i915_selftest@live@reset.html

  * igt@i915_selftest@live@slpc:
    - bat-rpls-2:         NOTRUN -> [DMESG-FAIL][12] ([i915#6367] / [i915#7913])
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/bat-rpls-2/igt@i915_selftest@live@slpc.html

  * igt@kms_chamelium_hpd@common-hpd-after-suspend:
    - bat-rpls-2:         NOTRUN -> [SKIP][13] ([i915#7828])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/bat-rpls-2/igt@kms_chamelium_hpd@common-hpd-after-suspend.html
    - fi-bsw-nick:        NOTRUN -> [SKIP][14] ([fdo#109271]) +1 similar issue
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/fi-bsw-nick/igt@kms_chamelium_hpd@common-hpd-after-suspend.html

  * igt@kms_pipe_crc_basic@suspend-read-crc:
    - bat-rpls-2:         NOTRUN -> [SKIP][15] ([i915#1845])
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/bat-rpls-2/igt@kms_pipe_crc_basic@suspend-read-crc.html

  
#### Possible fixes ####

  * igt@i915_selftest@live@execlists:
    - fi-bsw-nick:        [ABORT][16] ([i915#7911] / [i915#7913]) -> [PASS][17]
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/fi-bsw-nick/igt@i915_selftest@live@execlists.html
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/fi-bsw-nick/igt@i915_selftest@live@execlists.html

  * igt@i915_selftest@live@hangcheck:
    - fi-skl-guc:         [DMESG-WARN][18] ([i915#8073]) -> [PASS][19]
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/fi-skl-guc/igt@i915_selftest@live@hangcheck.html
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/fi-skl-guc/igt@i915_selftest@live@hangcheck.html

  * igt@i915_selftest@live@requests:
    - bat-rpls-1:         [ABORT][20] ([i915#7694] / [i915#7911]) -> [PASS][21]
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/bat-rpls-1/igt@i915_selftest@live@requests.html
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/bat-rpls-1/igt@i915_selftest@live@requests.html

  * igt@i915_selftest@live@reset:
    - bat-rpls-2:         [ABORT][22] ([i915#4983] / [i915#7913]) -> [PASS][23]
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/bat-rpls-2/igt@i915_selftest@live@reset.html
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/bat-rpls-2/igt@i915_selftest@live@reset.html

  
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [i915#1845]: https://gitlab.freedesktop.org/drm/intel/issues/1845
  [i915#2582]: https://gitlab.freedesktop.org/drm/intel/issues/2582
  [i915#2867]: https://gitlab.freedesktop.org/drm/intel/issues/2867
  [i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077
  [i915#4079]: https://gitlab.freedesktop.org/drm/intel/issues/4079
  [i915#4083]: https://gitlab.freedesktop.org/drm/intel/issues/4083
  [i915#4983]: https://gitlab.freedesktop.org/drm/intel/issues/4983
  [i915#6367]: https://gitlab.freedesktop.org/drm/intel/issues/6367
  [i915#7694]: https://gitlab.freedesktop.org/drm/intel/issues/7694
  [i915#7699]: https://gitlab.freedesktop.org/drm/intel/issues/7699
  [i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828
  [i915#7911]: https://gitlab.freedesktop.org/drm/intel/issues/7911
  [i915#7913]: https://gitlab.freedesktop.org/drm/intel/issues/7913
  [i915#8060]: https://gitlab.freedesktop.org/drm/intel/issues/8060
  [i915#8062]: https://gitlab.freedesktop.org/drm/intel/issues/8062
  [i915#8073]: https://gitlab.freedesktop.org/drm/intel/issues/8073


Build changes
-------------

  * CI: CI-20190529 -> None
  * IGT: IGT_7189 -> IGTPW_8587

  CI-20190529: 20190529
  CI_DRM_12836: b36bbf575b73703bed04f509381b0cc2e752845d @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_8587: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/index.html
  IGT_7189: 9c6205e35c4e6d364a179f290412cfb94cd80c93 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git


Testlist changes
----------------

+++ 786 lines
--- 787 lines

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/index.html

[-- Attachment #2: Type: text/html, Size: 8018 bytes --]

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [igt-dev] [PATCH i-g-t 17/18] xe_mmap: skip VRAM tests if no VRAM is found
  2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 17/18] xe_mmap: skip VRAM tests if no VRAM is found Zbigniew Kempczyński
@ 2023-03-10 10:52   ` Das, Nirmoy
  2023-03-13  6:48     ` Zbigniew Kempczyński
  0 siblings, 1 reply; 24+ messages in thread
From: Das, Nirmoy @ 2023-03-10 10:52 UTC (permalink / raw)
  To: Zbigniew Kempczyński, igt-dev


On 3/10/2023 9:23 AM, Zbigniew Kempczyński wrote:
> From: Mauro Carvalho Chehab <mchehab@kernel.org>
>
> Instead of producing an error, if there's no VRAM, the test
> should be skipped. There's a logic there that would be doing
> that, except that it doesn't really work :-)
>
> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
> Acked-by: Zbigniew Kempczyński <zbigniew.kempczynski@intel.com>
> ---
>   tests/xe/xe_mmap.c | 3 +--
>   1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/tests/xe/xe_mmap.c b/tests/xe/xe_mmap.c
> index 9dce6adbe2..6b313a1895 100644
> --- a/tests/xe/xe_mmap.c
> +++ b/tests/xe/xe_mmap.c
> @@ -42,8 +42,7 @@ test_mmap(int fd, uint32_t flags)
>   	uint64_t mmo;
>   	void *map;
>   
> -	if (flags & vram_memory(fd, 0))
> -		igt_require(xe_has_vram(fd));

This check should go to the igt_main instead.


Nirmoy

> +	igt_require_f(flags, "Device doesn't support such memory region\n");
>   
>   	bo = xe_bo_create_flags(fd, 0, 4096, flags);
>   	mmo = xe_bo_mmap_offset(fd, bo);

^ permalink raw reply	[flat|nested] 24+ messages in thread

* [igt-dev] ✓ Fi.CI.IGT: success for Add igt_doc.py
  2023-03-10  8:23 [igt-dev] [PATCH i-g-t 00/18] Add igt_doc.py Zbigniew Kempczyński
                   ` (18 preceding siblings ...)
  2023-03-10 10:23 ` [igt-dev] ✓ Fi.CI.BAT: success for Add igt_doc.py Patchwork
@ 2023-03-13  1:18 ` Patchwork
  19 siblings, 0 replies; 24+ messages in thread
From: Patchwork @ 2023-03-13  1:18 UTC (permalink / raw)
  To: Zbigniew Kempczyński; +Cc: igt-dev

[-- Attachment #1: Type: text/plain, Size: 100233 bytes --]

== Series Details ==

Series: Add igt_doc.py
URL   : https://patchwork.freedesktop.org/series/114959/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_12836_full -> IGTPW_8587_full
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/index.html

Participating hosts (9 -> 9)
------------------------------

  No changes in participating hosts

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in IGTPW_8587_full:

### IGT changes ###

#### Possible regressions ####

  * {igt@xe_exec_reset@cm-close-engines-close-fd} (NEW):
    - {shard-dg1}:        NOTRUN -> [SKIP][1] +444 similar issues
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-dg1-15/igt@xe_exec_reset@cm-close-engines-close-fd.html

  
#### Suppressed ####

  The following results come from untrusted machines, tests, or statuses.
  They do not affect the overall result.

  * igt@kms_force_connector_basic@force-edid:
    - {shard-dg1}:        NOTRUN -> [ABORT][2]
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-dg1-13/igt@kms_force_connector_basic@force-edid.html

  
New tests
---------

  New tests have been introduced between CI_DRM_12836_full and IGTPW_8587_full:

### New IGT tests (786) ###

  * igt@xe_compute@compute-square:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_debugfs@base:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_debugfs@forcewake:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_debugfs@gt:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_dma_buf_sync@export-dma-buf-many:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_dma_buf_sync@export-dma-buf-many-read-sync:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_dma_buf_sync@export-dma-buf-once:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_dma_buf_sync@export-dma-buf-once-read-sync:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-beng-cm-threads-large:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-beng-cm-threads-large-multi-vm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-beng-cm-threads-small:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-beng-cm-threads-small-multi-vm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-beng-large:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-beng-large-cm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-beng-large-external:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-beng-large-external-cm:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-beng-large-multi-vm:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-beng-large-multi-vm-cm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-beng-mixed-many-threads-large:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-beng-mixed-many-threads-small:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-beng-mixed-threads-large:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-beng-mixed-threads-large-multi-vm:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-beng-mixed-threads-small:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-beng-mixed-threads-small-multi-vm:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-beng-small:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-beng-small-cm:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-beng-small-external:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-beng-small-external-cm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-beng-small-multi-vm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-beng-small-multi-vm-cm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-beng-threads-large:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-beng-threads-large-multi-vm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-beng-threads-small:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-beng-threads-small-multi-vm:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-cm-threads-large:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-cm-threads-large-multi-vm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-cm-threads-small:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-cm-threads-small-multi-vm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-large:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-large-cm:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-large-external:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-large-external-cm:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-large-multi-vm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-large-multi-vm-cm:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-mixed-many-threads-large:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-mixed-many-threads-small:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-mixed-threads-large:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-mixed-threads-large-multi-vm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-mixed-threads-small:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-mixed-threads-small-multi-vm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-small:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-small-cm:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-small-external:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-small-external-cm:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-small-multi-vm:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-small-multi-vm-cm:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-threads-large:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-threads-large-multi-vm:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-threads-small:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_evict@evict-threads-small-multi-vm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-cm-virtual-basic:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-cm-virtual-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-cm-virtual-userptr:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-cm-virtual-userptr-invalidate:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-cm-virtual-userptr-invalidate-race:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-cm-virtual-userptr-rebind:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-engines-cm-virtual-basic:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-engines-cm-virtual-rebind:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-engines-cm-virtual-userptr:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-engines-cm-virtual-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-engines-cm-virtual-userptr-invalidate-race:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-engines-cm-virtual-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-engines-parallel-basic:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-engines-parallel-rebind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-engines-parallel-userptr:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-engines-parallel-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-engines-parallel-userptr-invalidate-race:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-engines-parallel-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-engines-virtual-basic:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-engines-virtual-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-engines-virtual-userptr:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-engines-virtual-userptr-invalidate:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-engines-virtual-userptr-invalidate-race:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-engines-virtual-userptr-rebind:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-parallel-basic:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-parallel-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-parallel-userptr:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-parallel-userptr-invalidate:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-parallel-userptr-invalidate-race:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-parallel-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-virtual-basic:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-virtual-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-virtual-userptr:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-virtual-userptr-invalidate:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-virtual-userptr-invalidate-race:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@many-virtual-userptr-rebind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@no-exec-cm-virtual-basic:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@no-exec-cm-virtual-rebind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@no-exec-cm-virtual-userptr:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@no-exec-cm-virtual-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@no-exec-cm-virtual-userptr-invalidate-race:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@no-exec-cm-virtual-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@no-exec-parallel-basic:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@no-exec-parallel-rebind:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@no-exec-parallel-userptr:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@no-exec-parallel-userptr-invalidate:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@no-exec-parallel-userptr-invalidate-race:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@no-exec-parallel-userptr-rebind:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@no-exec-virtual-basic:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@no-exec-virtual-rebind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@no-exec-virtual-userptr:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@no-exec-virtual-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@no-exec-virtual-userptr-invalidate-race:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@no-exec-virtual-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@once-cm-virtual-basic:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@once-cm-virtual-rebind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@once-cm-virtual-userptr:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@once-cm-virtual-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@once-cm-virtual-userptr-invalidate-race:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@once-cm-virtual-userptr-rebind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@once-parallel-basic:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@once-parallel-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@once-parallel-userptr:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@once-parallel-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@once-parallel-userptr-invalidate-race:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@once-parallel-userptr-rebind:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@once-virtual-basic:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@once-virtual-rebind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@once-virtual-userptr:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@once-virtual-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@once-virtual-userptr-invalidate-race:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@once-virtual-userptr-rebind:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@twice-cm-virtual-basic:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@twice-cm-virtual-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@twice-cm-virtual-userptr:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@twice-cm-virtual-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@twice-cm-virtual-userptr-invalidate-race:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@twice-cm-virtual-userptr-rebind:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@twice-parallel-basic:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@twice-parallel-rebind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@twice-parallel-userptr:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@twice-parallel-userptr-invalidate:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@twice-parallel-userptr-invalidate-race:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@twice-parallel-userptr-rebind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@twice-virtual-basic:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@twice-virtual-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@twice-virtual-userptr:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@twice-virtual-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@twice-virtual-userptr-invalidate-race:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@twice-virtual-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_balancer@virtual-all-active:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-basic:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-basic-defer-bind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-basic-defer-mmap:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-bindengine:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-bindengine-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-bindengine-userptr:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-bindengine-userptr-invalidate:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-bindengine-userptr-invalidate-race:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-bindengine-userptr-rebind:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-engines-basic:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-engines-basic-defer-bind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-engines-basic-defer-mmap:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-engines-bindengine:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-engines-bindengine-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-engines-bindengine-userptr:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-engines-bindengine-userptr-invalidate:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-engines-bindengine-userptr-invalidate-race:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-engines-bindengine-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-engines-many-vm-basic:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-engines-many-vm-basic-defer-bind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-engines-many-vm-basic-defer-mmap:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-engines-many-vm-bindengine:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-engines-many-vm-bindengine-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-engines-many-vm-bindengine-userptr:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-engines-many-vm-bindengine-userptr-invalidate:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-engines-many-vm-bindengine-userptr-invalidate-race:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-engines-many-vm-bindengine-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-engines-many-vm-rebind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-engines-many-vm-userptr:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-engines-many-vm-userptr-invalidate:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-engines-many-vm-userptr-invalidate-race:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-engines-many-vm-userptr-rebind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-engines-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-engines-userptr:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-engines-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-engines-userptr-invalidate-race:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-engines-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-userptr:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-userptr-invalidate-race:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@many-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@no-exec-basic:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@no-exec-basic-defer-bind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@no-exec-basic-defer-mmap:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@no-exec-bindengine:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@no-exec-bindengine-rebind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@no-exec-bindengine-userptr:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@no-exec-bindengine-userptr-invalidate:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@no-exec-bindengine-userptr-invalidate-race:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@no-exec-bindengine-userptr-rebind:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@no-exec-rebind:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@no-exec-userptr:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@no-exec-userptr-invalidate:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@no-exec-userptr-invalidate-race:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@no-exec-userptr-rebind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@once-basic:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@once-basic-defer-bind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@once-basic-defer-mmap:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@once-bindengine:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@once-bindengine-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@once-bindengine-userptr:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@once-bindengine-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@once-bindengine-userptr-invalidate-race:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@once-bindengine-userptr-rebind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@once-rebind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@once-userptr:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@once-userptr-invalidate:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@once-userptr-invalidate-race:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@once-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@twice-basic:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@twice-basic-defer-bind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@twice-basic-defer-mmap:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@twice-bindengine:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@twice-bindengine-rebind:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@twice-bindengine-userptr:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@twice-bindengine-userptr-invalidate:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@twice-bindengine-userptr-invalidate-race:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@twice-bindengine-userptr-rebind:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@twice-rebind:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@twice-userptr:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@twice-userptr-invalidate:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@twice-userptr-invalidate-race:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_basic@twice-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@many-basic:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@many-bindengine:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@many-bindengine-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@many-bindengine-userptr:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@many-bindengine-userptr-invalidate:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@many-bindengine-userptr-invalidate-race:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@many-bindengine-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@many-engines-basic:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@many-engines-bindengine:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@many-engines-bindengine-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@many-engines-bindengine-userptr:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@many-engines-bindengine-userptr-invalidate:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@many-engines-bindengine-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@many-engines-preempt-fence-early:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@many-engines-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@many-engines-userptr:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@many-engines-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@many-engines-userptr-rebind:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@many-preempt-fence-early:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@many-rebind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@many-userptr:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@many-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@many-userptr-invalidate-race:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@many-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@once-basic:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@once-bindengine:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@once-bindengine-rebind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@once-bindengine-userptr:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@once-bindengine-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@once-bindengine-userptr-invalidate-race:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@once-bindengine-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@once-preempt-fence-early:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@once-rebind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@once-userptr:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@once-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@once-userptr-invalidate-race:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@once-userptr-rebind:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@twice-basic:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@twice-bindengine:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@twice-bindengine-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@twice-bindengine-userptr:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@twice-bindengine-userptr-invalidate:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@twice-bindengine-userptr-invalidate-race:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@twice-bindengine-userptr-rebind:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@twice-preempt-fence-early:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@twice-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@twice-userptr:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@twice-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@twice-userptr-invalidate-race:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_compute_mode@twice-userptr-rebind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@atomic-many:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@atomic-many-wait:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@atomic-once:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@atomic-once-wait:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-basic:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-basic-imm:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-basic-prefetch:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-bindengine:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-bindengine-imm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-bindengine-prefetch:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-bindengine-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-bindengine-rebind-imm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-bindengine-rebind-prefetch:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-bindengine-userptr:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-bindengine-userptr-imm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-bindengine-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-bindengine-userptr-invalidate-imm:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-bindengine-userptr-invalidate-prefetch:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-bindengine-userptr-invalidate-race:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-bindengine-userptr-invalidate-race-imm:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-bindengine-userptr-invalidate-race-prefetch:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-bindengine-userptr-prefetch:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-bindengine-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-bindengine-userptr-rebind-imm:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-bindengine-userptr-rebind-prefetch:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-basic:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-basic-imm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-basic-prefetch:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-bindengine:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-bindengine-imm:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-bindengine-prefetch:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-bindengine-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-bindengine-rebind-imm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-bindengine-rebind-prefetch:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-bindengine-userptr:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-bindengine-userptr-imm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-bindengine-userptr-invalidate:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-bindengine-userptr-invalidate-imm:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-bindengine-userptr-invalidate-prefetch:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-bindengine-userptr-invalidate-race:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-bindengine-userptr-invalidate-race-imm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-bindengine-userptr-invalidate-race-prefetch:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-bindengine-userptr-prefetch:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-bindengine-userptr-rebind:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-bindengine-userptr-rebind-imm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-bindengine-userptr-rebind-prefetch:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-invalid-fault:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-invalid-userptr-fault:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-rebind:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-rebind-imm:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-rebind-prefetch:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-userptr:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-userptr-imm:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-userptr-invalidate:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-userptr-invalidate-imm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-userptr-invalidate-prefetch:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-userptr-invalidate-race:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-userptr-invalidate-race-imm:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-userptr-invalidate-race-prefetch:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-userptr-prefetch:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-userptr-rebind-imm:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-engines-userptr-rebind-prefetch:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-invalid-fault:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-invalid-userptr-fault:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-rebind-imm:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-rebind-prefetch:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-userptr:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-userptr-imm:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-userptr-invalidate-imm:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-userptr-invalidate-prefetch:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-userptr-invalidate-race:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-userptr-invalidate-race-imm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-userptr-invalidate-race-prefetch:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-userptr-prefetch:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-userptr-rebind-imm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@many-userptr-rebind-prefetch:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-basic:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-basic-imm:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-basic-prefetch:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-bindengine:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-bindengine-imm:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-bindengine-prefetch:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-bindengine-rebind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-bindengine-rebind-imm:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-bindengine-rebind-prefetch:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-bindengine-userptr:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-bindengine-userptr-imm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-bindengine-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-bindengine-userptr-invalidate-imm:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-bindengine-userptr-invalidate-prefetch:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-bindengine-userptr-invalidate-race:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-bindengine-userptr-invalidate-race-imm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-bindengine-userptr-invalidate-race-prefetch:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-bindengine-userptr-prefetch:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-bindengine-userptr-rebind:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-bindengine-userptr-rebind-imm:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-bindengine-userptr-rebind-prefetch:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-invalid-fault:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-invalid-userptr-fault:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-rebind-imm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-rebind-prefetch:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-userptr:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-userptr-imm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-userptr-invalidate:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-userptr-invalidate-imm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-userptr-invalidate-prefetch:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-userptr-invalidate-race:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-userptr-invalidate-race-imm:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-userptr-invalidate-race-prefetch:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-userptr-prefetch:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-userptr-rebind-imm:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@once-userptr-rebind-prefetch:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-basic:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-basic-imm:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-basic-prefetch:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-bindengine:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-bindengine-imm:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-bindengine-prefetch:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-bindengine-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-bindengine-rebind-imm:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-bindengine-rebind-prefetch:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-bindengine-userptr:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-bindengine-userptr-imm:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-bindengine-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-bindengine-userptr-invalidate-imm:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-bindengine-userptr-invalidate-prefetch:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-bindengine-userptr-invalidate-race:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-bindengine-userptr-invalidate-race-imm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-bindengine-userptr-invalidate-race-prefetch:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-bindengine-userptr-prefetch:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-bindengine-userptr-rebind:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-bindengine-userptr-rebind-imm:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-bindengine-userptr-rebind-prefetch:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-invalid-fault:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-invalid-userptr-fault:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-rebind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-rebind-imm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-rebind-prefetch:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-userptr:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-userptr-imm:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-userptr-invalidate-imm:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-userptr-invalidate-prefetch:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-userptr-invalidate-race:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-userptr-invalidate-race-imm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-userptr-invalidate-race-prefetch:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-userptr-prefetch:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-userptr-rebind-imm:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_fault_mode@twice-userptr-rebind-prefetch:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_reset@cancel:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_reset@cat-error:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_reset@close-engines-close-fd:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_reset@close-fd:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_reset@close-fd-no-exec:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_reset@cm-cat-error:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_reset@cm-close-engines-close-fd:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_reset@cm-close-fd:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_reset@cm-close-fd-no-exec:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_reset@cm-engine-reset:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_reset@cm-gt-reset:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_reset@engine-reset:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_reset@gt-reset:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_reset@gt-reset-stress:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_reset@parallel-cancel:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_reset@parallel-cat-error:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_reset@parallel-close-engines-close-fd:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_reset@parallel-close-fd:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_reset@parallel-close-fd-no-exec:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_reset@parallel-engine-reset:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_reset@parallel-gt-reset:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_reset@spin:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_reset@virtual-cancel:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_reset@virtual-cat-error:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_reset@virtual-close-engines-close-fd:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_reset@virtual-close-fd:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_reset@virtual-close-fd-no-exec:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_reset@virtual-engine-reset:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_reset@virtual-gt-reset:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-basic:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-fd-basic:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-fd-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-fd-userptr:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-fd-userptr-invalidate:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-fd-userptr-invalidate-race:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-fd-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-mixed-basic:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-mixed-fd-basic:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-mixed-fd-rebind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-mixed-fd-userptr:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-mixed-fd-userptr-invalidate:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-mixed-fd-userptr-invalidate-race:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-mixed-fd-userptr-rebind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-mixed-rebind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-mixed-shared-vm-basic:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-mixed-shared-vm-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-mixed-shared-vm-userptr:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-mixed-shared-vm-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-mixed-shared-vm-userptr-invalidate-race:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-mixed-shared-vm-userptr-rebind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-mixed-userptr:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-mixed-userptr-invalidate:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-mixed-userptr-invalidate-race:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-mixed-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-shared-vm-basic:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-shared-vm-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-shared-vm-userptr:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-shared-vm-userptr-invalidate:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-shared-vm-userptr-invalidate-race:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-shared-vm-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-userptr:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-userptr-invalidate:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-userptr-invalidate-race:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-bal-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-basic:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-cm-basic:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-cm-fd-basic:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-cm-fd-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-cm-fd-userptr:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-cm-fd-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-cm-fd-userptr-invalidate-race:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-cm-fd-userptr-rebind:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-cm-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-cm-shared-vm-basic:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-cm-shared-vm-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-cm-shared-vm-userptr:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-cm-shared-vm-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-cm-shared-vm-userptr-invalidate-race:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-cm-shared-vm-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-cm-userptr:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-cm-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-cm-userptr-invalidate-race:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-cm-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-fd-basic:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-fd-rebind:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-fd-userptr:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-fd-userptr-invalidate:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-fd-userptr-invalidate-race:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-fd-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-hang-basic:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-hang-fd-basic:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-hang-fd-rebind:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-hang-fd-userptr:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-hang-fd-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-hang-fd-userptr-invalidate-race:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-hang-fd-userptr-rebind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-hang-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-hang-shared-vm-basic:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-hang-shared-vm-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-hang-shared-vm-rebind-err:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-hang-shared-vm-userptr:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-hang-shared-vm-userptr-invalidate:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-hang-shared-vm-userptr-invalidate-race:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-hang-shared-vm-userptr-rebind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-hang-shared-vm-userptr-rebind-err:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-hang-userptr:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-hang-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-hang-userptr-invalidate-race:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-hang-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-mixed-basic:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-mixed-fd-basic:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-mixed-fd-rebind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-mixed-fd-userptr:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-mixed-fd-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-mixed-fd-userptr-invalidate-race:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-mixed-fd-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-mixed-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-mixed-shared-vm-basic:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-mixed-shared-vm-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-mixed-shared-vm-userptr:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-mixed-shared-vm-userptr-invalidate:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-mixed-shared-vm-userptr-invalidate-race:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-mixed-shared-vm-userptr-rebind:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-mixed-userptr:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-mixed-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-mixed-userptr-invalidate-race:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-mixed-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-rebind-bindengine:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-shared-vm-basic:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-shared-vm-rebind:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-shared-vm-rebind-bindengine:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-shared-vm-rebind-err:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-shared-vm-userptr:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-shared-vm-userptr-invalidate:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-shared-vm-userptr-invalidate-race:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-shared-vm-userptr-rebind:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-shared-vm-userptr-rebind-err:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-userptr:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-userptr-invalidate:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-userptr-invalidate-race:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_exec_threads@threads-userptr-rebind:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_guc_pc@freq_basic_api:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_guc_pc@freq_fixed_exec:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_guc_pc@freq_fixed_idle:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_guc_pc@freq_low_max:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_guc_pc@freq_range_exec:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_guc_pc@freq_range_idle:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_guc_pc@freq_reset:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_guc_pc@freq_reset_multiple:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_guc_pc@freq_suspend:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_guc_pc@rc0_on_exec:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_guc_pc@rc6_on_idle:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_huc_copy@huc_copy:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_mmap@system:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_mmap@vram:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_mmap@vram-system:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_mmio@mmio-invalid:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_mmio@mmio-timestamp:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_pm@d3cold-basic:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_pm@d3cold-basic-exec:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_pm@d3cold-multiple-execs:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_pm@d3hot-basic:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_pm@d3hot-basic-exec:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_pm@d3hot-multiple-execs:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_pm@s2idle-basic:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_pm@s2idle-basic-exec:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_pm@s2idle-d3cold-basic-exec:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_pm@s2idle-d3hot-basic-exec:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_pm@s2idle-exec-after:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_pm@s2idle-multiple-execs:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_pm@s3-basic:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_pm@s3-basic-exec:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_pm@s3-d3cold-basic-exec:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_pm@s3-d3hot-basic-exec:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_pm@s3-exec-after:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_pm@s3-multiple-execs:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_pm@s4-basic:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_pm@s4-basic-exec:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_pm@s4-d3cold-basic-exec:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_pm@s4-d3hot-basic-exec:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_pm@s4-exec-after:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_pm@s4-multiple-execs:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_prime_self_import@basic-llseek-bad:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_prime_self_import@basic-llseek-size:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_prime_self_import@basic-with_fd_dup:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_prime_self_import@basic-with_one_bo:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_prime_self_import@basic-with_one_bo_two_files:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_prime_self_import@basic-with_two_bos:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_prime_self_import@export-vs-gem_close-race:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_prime_self_import@reimport-vs-gem_close-race:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_query@query-config:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_query@query-engines:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_query@query-gts:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_query@query-hwconfig:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_query@query-invalid-query:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_query@query-invalid-size:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_query@query-mem-usage:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_query@query-topology:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@bind-array-engine-many:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@bind-array-engine-twice:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@bind-array-many:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@bind-array-twice:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@bind-engines-independent:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@bind-once:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@bind-one-bo-many-times:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@bind-one-bo-many-times-many-vm:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-binds-1073741824:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-binds-134217728:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-binds-16777216:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-binds-2097152:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-binds-2147483648:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-binds-268435456:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-binds-33554432:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-binds-4194304:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-binds-536870912:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-binds-67108864:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-binds-8388608:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-misaligned-binds-1073741824:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-misaligned-binds-134217728:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-misaligned-binds-16777216:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-misaligned-binds-2097152:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-misaligned-binds-2147483648:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-misaligned-binds-268435456:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-misaligned-binds-33554432:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-misaligned-binds-4194304:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-misaligned-binds-536870912:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-misaligned-binds-67108864:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-misaligned-binds-8388608:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-split-binds-1073741824:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-split-binds-134217728:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-split-binds-16777216:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-split-binds-2097152:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-split-binds-2147483648:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-split-binds-268435456:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-split-binds-33554432:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-split-binds-4194304:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-split-binds-536870912:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-split-binds-67108864:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-split-binds-8388608:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-split-misaligned-binds-1073741824:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-split-misaligned-binds-134217728:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-split-misaligned-binds-16777216:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-split-misaligned-binds-2097152:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-split-misaligned-binds-2147483648:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-split-misaligned-binds-268435456:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-split-misaligned-binds-33554432:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-split-misaligned-binds-4194304:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-split-misaligned-binds-536870912:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-split-misaligned-binds-67108864:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-split-misaligned-binds-8388608:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-binds-1073741824:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-binds-134217728:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-binds-16777216:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-binds-2097152:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-binds-2147483648:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-binds-268435456:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-binds-33554432:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-binds-4194304:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-binds-536870912:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-binds-67108864:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-binds-8388608:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-misaligned-binds-1073741824:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-misaligned-binds-134217728:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-misaligned-binds-16777216:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-misaligned-binds-2097152:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-misaligned-binds-2147483648:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-misaligned-binds-268435456:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-misaligned-binds-33554432:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-misaligned-binds-4194304:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-misaligned-binds-536870912:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-misaligned-binds-67108864:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-misaligned-binds-8388608:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-split-binds-1073741824:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-split-binds-134217728:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-split-binds-16777216:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-split-binds-2097152:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-split-binds-2147483648:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-split-binds-268435456:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-split-binds-33554432:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-split-binds-4194304:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-split-binds-536870912:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-split-binds-67108864:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-split-binds-8388608:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-split-misaligned-binds-1073741824:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-split-misaligned-binds-134217728:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-split-misaligned-binds-16777216:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-split-misaligned-binds-2097152:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-split-misaligned-binds-2147483648:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-split-misaligned-binds-268435456:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-split-misaligned-binds-33554432:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-split-misaligned-binds-4194304:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-split-misaligned-binds-536870912:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-split-misaligned-binds-67108864:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@large-userptr-split-misaligned-binds-8388608:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@mixed-binds-1611661312:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@mixed-binds-3145728:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@mixed-misaligned-binds-1611661312:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@mixed-misaligned-binds-3145728:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@mixed-userptr-binds-1611661312:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@mixed-userptr-binds-3145728:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@mixed-userptr-misaligned-binds-1611661312:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@mixed-userptr-misaligned-binds-3145728:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-all:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-either-side-full:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-either-side-partial:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-either-side-partial-hammer:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-end:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-front:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-many-all:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-many-either-side-full:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-many-either-side-partial:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-many-either-side-partial-hammer:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-many-end:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-many-front:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-one-partial:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-userptr-all:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-userptr-either-side-full:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-userptr-either-side-partial:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-userptr-end:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-userptr-front:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-userptr-inval-either-side-full:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-userptr-inval-end:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-userptr-inval-front:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-userptr-inval-many-all:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-userptr-inval-many-either-side-full:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-userptr-inval-many-either-side-partial:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-userptr-inval-many-end:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-userptr-inval-many-front:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-userptr-many-all:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-userptr-many-either-side-full:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-userptr-many-end:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-userptr-many-front:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@munmap-style-unbind-userptr-one-partial:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@scratch:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@shared-pde-page:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@shared-pde2-page:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@shared-pde3-page:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@shared-pte-page:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@unbind-all-2-vmas:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@unbind-all-8-vmas:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@vm-async-ops-err:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_vm@vm-async-ops-err-destroy:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@xe_waitfence@test:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  

Known issues
------------

  Here are the changes found in IGTPW_8587_full that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@gem_exec_fair@basic-throttle@rcs0:
    - shard-glk:          [PASS][3] -> [FAIL][4] ([i915#2842]) +3 similar issues
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-glk8/igt@gem_exec_fair@basic-throttle@rcs0.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-glk2/igt@gem_exec_fair@basic-throttle@rcs0.html

  * igt@gen9_exec_parse@allowed-single:
    - shard-apl:          [PASS][5] -> [ABORT][6] ([i915#5566])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-apl6/igt@gen9_exec_parse@allowed-single.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-apl6/igt@gen9_exec_parse@allowed-single.html

  * igt@kms_ccs@pipe-c-bad-rotation-90-y_tiled_gen12_mc_ccs:
    - shard-apl:          NOTRUN -> [SKIP][7] ([fdo#109271] / [i915#3886])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-apl3/igt@kms_ccs@pipe-c-bad-rotation-90-y_tiled_gen12_mc_ccs.html

  * igt@kms_flip@flip-vs-expired-vblank-interruptible@c-hdmi-a2:
    - shard-glk:          [PASS][8] -> [FAIL][9] ([i915#79])
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-glk8/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-hdmi-a2.html
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-glk5/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-hdmi-a2.html

  * igt@kms_flip@plain-flip-fb-recreate-interruptible@b-dp1:
    - shard-apl:          [PASS][10] -> [FAIL][11] ([i915#2122])
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-apl2/igt@kms_flip@plain-flip-fb-recreate-interruptible@b-dp1.html
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-apl2/igt@kms_flip@plain-flip-fb-recreate-interruptible@b-dp1.html

  * igt@perf@stress-open-close:
    - shard-glk:          [PASS][12] -> [ABORT][13] ([i915#5213])
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-glk7/igt@perf@stress-open-close.html
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-glk3/igt@perf@stress-open-close.html

  * {igt@xe_exec_basic@many-bindengine-rebind} (NEW):
    - {shard-tglu}:       NOTRUN -> [SKIP][14] ([fdo#109315] / [i915#2575]) +501 similar issues
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-tglu-8/igt@xe_exec_basic@many-bindengine-rebind.html

  * {igt@xe_exec_compute_mode@twice-bindengine-userptr-invalidate-race} (NEW):
    - shard-apl:          NOTRUN -> [SKIP][15] ([fdo#109271]) +783 similar issues
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-apl1/igt@xe_exec_compute_mode@twice-bindengine-userptr-invalidate-race.html

  * {igt@xe_vm@large-binds-536870912} (NEW):
    - {shard-rkl}:        NOTRUN -> [SKIP][16] ([fdo#109315]) +700 similar issues
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-rkl-5/igt@xe_vm@large-binds-536870912.html

  * {igt@xe_vm@large-userptr-misaligned-binds-2097152} (NEW):
    - shard-glk:          NOTRUN -> [SKIP][17] ([fdo#109271]) +784 similar issues
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-glk6/igt@xe_vm@large-userptr-misaligned-binds-2097152.html

  
#### Possible fixes ####

  * igt@drm_fdinfo@most-busy-check-all@rcs0:
    - {shard-rkl}:        [FAIL][18] ([i915#7742]) -> [PASS][19]
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-rkl-4/igt@drm_fdinfo@most-busy-check-all@rcs0.html
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-rkl-4/igt@drm_fdinfo@most-busy-check-all@rcs0.html

  * igt@fbdev@info:
    - {shard-rkl}:        [SKIP][20] ([i915#2582]) -> [PASS][21] +1 similar issue
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-rkl-1/igt@fbdev@info.html
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-rkl-2/igt@fbdev@info.html
    - {shard-tglu}:       [SKIP][22] ([i915#2582]) -> [PASS][23]
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-tglu-6/igt@fbdev@info.html
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-tglu-8/igt@fbdev@info.html

  * igt@feature_discovery@psr2:
    - {shard-rkl}:        [SKIP][24] ([i915#658]) -> [PASS][25]
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-rkl-3/igt@feature_discovery@psr2.html
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-rkl-6/igt@feature_discovery@psr2.html

  * igt@gem_bad_reloc@negative-reloc-lut:
    - {shard-rkl}:        [SKIP][26] ([i915#3281]) -> [PASS][27] +4 similar issues
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-rkl-6/igt@gem_bad_reloc@negative-reloc-lut.html
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-rkl-5/igt@gem_bad_reloc@negative-reloc-lut.html

  * igt@gem_exec_fair@basic-none-solo@rcs0:
    - shard-apl:          [FAIL][28] ([i915#2842]) -> [PASS][29]
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-apl4/igt@gem_exec_fair@basic-none-solo@rcs0.html
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-apl2/igt@gem_exec_fair@basic-none-solo@rcs0.html

  * igt@gem_exec_fair@basic-pace-share@rcs0:
    - shard-glk:          [FAIL][30] ([i915#2842]) -> [PASS][31]
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-glk8/igt@gem_exec_fair@basic-pace-share@rcs0.html
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-glk1/igt@gem_exec_fair@basic-pace-share@rcs0.html
    - {shard-tglu}:       [FAIL][32] ([i915#2842]) -> [PASS][33]
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-tglu-8/igt@gem_exec_fair@basic-pace-share@rcs0.html
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-tglu-6/igt@gem_exec_fair@basic-pace-share@rcs0.html

  * igt@gem_exec_fair@basic-throttle@rcs0:
    - {shard-rkl}:        [FAIL][34] ([i915#2842]) -> [PASS][35]
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-rkl-4/igt@gem_exec_fair@basic-throttle@rcs0.html
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-rkl-5/igt@gem_exec_fair@basic-throttle@rcs0.html

  * igt@gem_exec_suspend@basic-s0@smem:
    - {shard-rkl}:        [FAIL][36] ([fdo#103375]) -> [PASS][37]
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-rkl-3/igt@gem_exec_suspend@basic-s0@smem.html
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-rkl-2/igt@gem_exec_suspend@basic-s0@smem.html

  * igt@gem_mmap_wc@set-cache-level:
    - {shard-tglu}:       [SKIP][38] ([i915#1850]) -> [PASS][39]
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-tglu-6/igt@gem_mmap_wc@set-cache-level.html
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-tglu-8/igt@gem_mmap_wc@set-cache-level.html

  * igt@gem_pread@bench:
    - {shard-rkl}:        [SKIP][40] ([i915#3282]) -> [PASS][41] +6 similar issues
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-rkl-2/igt@gem_pread@bench.html
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-rkl-5/igt@gem_pread@bench.html

  * igt@gen9_exec_parse@allowed-single:
    - {shard-rkl}:        [SKIP][42] ([i915#2527]) -> [PASS][43] +1 similar issue
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-rkl-1/igt@gen9_exec_parse@allowed-single.html
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-rkl-5/igt@gen9_exec_parse@allowed-single.html

  * igt@i915_pm_rc6_residency@rc6-idle@vecs0:
    - {shard-dg1}:        [FAIL][44] ([i915#3591]) -> [PASS][45]
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-dg1-14/igt@i915_pm_rc6_residency@rc6-idle@vecs0.html
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-dg1-12/igt@i915_pm_rc6_residency@rc6-idle@vecs0.html

  * igt@i915_pm_rpm@dpms-lpsp:
    - {shard-tglu}:       [SKIP][46] ([i915#1397]) -> [PASS][47]
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-tglu-6/igt@i915_pm_rpm@dpms-lpsp.html
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-tglu-8/igt@i915_pm_rpm@dpms-lpsp.html

  * igt@i915_pm_rpm@modeset-non-lpsp-stress-no-wait:
    - {shard-dg1}:        [SKIP][48] ([i915#1397]) -> [PASS][49]
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-dg1-14/igt@i915_pm_rpm@modeset-non-lpsp-stress-no-wait.html
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-dg1-18/igt@i915_pm_rpm@modeset-non-lpsp-stress-no-wait.html

  * igt@kms_cursor_legacy@cursor-vs-flip-varying-size:
    - {shard-tglu}:       [SKIP][50] ([i915#1845]) -> [PASS][51] +1 similar issue
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-tglu-6/igt@kms_cursor_legacy@cursor-vs-flip-varying-size.html
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-tglu-8/igt@kms_cursor_legacy@cursor-vs-flip-varying-size.html

  * igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions:
    - shard-glk:          [FAIL][52] ([i915#2346]) -> [PASS][53]
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-glk8/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-glk3/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html

  * igt@kms_flip@flip-vs-expired-vblank@a-hdmi-a1:
    - shard-glk:          [FAIL][54] ([i915#79]) -> [PASS][55]
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-glk1/igt@kms_flip@flip-vs-expired-vblank@a-hdmi-a1.html
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-glk4/igt@kms_flip@flip-vs-expired-vblank@a-hdmi-a1.html

  * igt@kms_flip@flip-vs-suspend@b-dp1:
    - shard-apl:          [ABORT][56] ([i915#180]) -> [PASS][57]
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-apl3/igt@kms_flip@flip-vs-suspend@b-dp1.html
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-apl2/igt@kms_flip@flip-vs-suspend@b-dp1.html

  * igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-indfb-draw-mmap-wc:
    - {shard-rkl}:        [SKIP][58] ([i915#1849] / [i915#4098]) -> [PASS][59] +10 similar issues
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-rkl-5/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-indfb-draw-mmap-wc.html
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-rkl-6/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-indfb-plflip-blt:
    - {shard-tglu}:       [SKIP][60] ([i915#1849]) -> [PASS][61] +5 similar issues
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-tglu-6/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-indfb-plflip-blt.html
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-tglu-8/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-indfb-plflip-blt.html

  * igt@kms_plane@plane-position-hole-dpms@pipe-a-planes:
    - {shard-tglu}:       [SKIP][62] ([i915#1849] / [i915#3558]) -> [PASS][63] +1 similar issue
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-tglu-6/igt@kms_plane@plane-position-hole-dpms@pipe-a-planes.html
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-tglu-1/igt@kms_plane@plane-position-hole-dpms@pipe-a-planes.html

  * igt@kms_plane@plane-position-hole-dpms@pipe-b-planes:
    - {shard-rkl}:        [SKIP][64] ([i915#1849]) -> [PASS][65] +2 similar issues
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-rkl-1/igt@kms_plane@plane-position-hole-dpms@pipe-b-planes.html
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-rkl-6/igt@kms_plane@plane-position-hole-dpms@pipe-b-planes.html

  * igt@kms_psr@sprite_mmap_cpu:
    - {shard-rkl}:        [SKIP][66] ([i915#1072]) -> [PASS][67] +1 similar issue
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-rkl-3/igt@kms_psr@sprite_mmap_cpu.html
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-rkl-6/igt@kms_psr@sprite_mmap_cpu.html

  * igt@kms_universal_plane@universal-plane-pipe-c-sanity:
    - {shard-tglu}:       [SKIP][68] ([fdo#109274]) -> [PASS][69] +3 similar issues
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-tglu-6/igt@kms_universal_plane@universal-plane-pipe-c-sanity.html
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-tglu-8/igt@kms_universal_plane@universal-plane-pipe-c-sanity.html

  * igt@kms_vblank@pipe-b-query-idle:
    - {shard-rkl}:        [SKIP][70] ([i915#1845] / [i915#4098]) -> [PASS][71] +19 similar issues
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-rkl-1/igt@kms_vblank@pipe-b-query-idle.html
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-rkl-6/igt@kms_vblank@pipe-b-query-idle.html

  * igt@kms_vblank@pipe-b-ts-continuation-modeset:
    - {shard-tglu}:       [SKIP][72] ([i915#1845] / [i915#7651]) -> [PASS][73] +19 similar issues
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-tglu-6/igt@kms_vblank@pipe-b-ts-continuation-modeset.html
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-tglu-1/igt@kms_vblank@pipe-b-ts-continuation-modeset.html

  * igt@perf@gen12-unprivileged-single-ctx-counters:
    - {shard-rkl}:        [SKIP][74] ([fdo#109289]) -> [PASS][75]
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-rkl-5/igt@perf@gen12-unprivileged-single-ctx-counters.html
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-rkl-2/igt@perf@gen12-unprivileged-single-ctx-counters.html

  * igt@perf@polling-small-buf:
    - {shard-rkl}:        [FAIL][76] ([i915#1722]) -> [PASS][77]
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-rkl-4/igt@perf@polling-small-buf.html
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-rkl-6/igt@perf@polling-small-buf.html

  * igt@testdisplay:
    - {shard-rkl}:        [SKIP][78] ([i915#4098]) -> [PASS][79]
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12836/shard-rkl-4/igt@testdisplay.html
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/shard-rkl-6/igt@testdisplay.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [IGT#2]: https://gitlab.freedesktop.org/drm/igt-gpu-tools/issues/2
  [fdo#103375]: https://bugs.freedesktop.org/show_bug.cgi?id=103375
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109274]: https://bugs.freedesktop.org/show_bug.cgi?id=109274
  [fdo#109279]: https://bugs.freedesktop.org/show_bug.cgi?id=109279
  [fdo#109280]: https://bugs.freedesktop.org/show_bug.cgi?id=109280
  [fdo#109285]: https://bugs.freedesktop.org/show_bug.cgi?id=109285
  [fdo#109289]: https://bugs.freedesktop.org/show_bug.cgi?id=109289
  [fdo#109295]: https://bugs.freedesktop.org/show_bug.cgi?id=109295
  [fdo#109308]: https://bugs.freedesktop.org/show_bug.cgi?id=109308
  [fdo#109314]: https://bugs.freedesktop.org/show_bug.cgi?id=109314
  [fdo#109315]: https://bugs.freedesktop.org/show_bug.cgi?id=109315
  [fdo#109506]: https://bugs.freedesktop.org/show_bug.cgi?id=109506
  [fdo#109642]: https://bugs.freedesktop.org/show_bug.cgi?id=109642
  [fdo#110189]: https://bugs.freedesktop.org/show_bug.cgi?id=110189
  [fdo#110723]: https://bugs.freedesktop.org/show_bug.cgi?id=110723
  [fdo#111068]: https://bugs.freedesktop.org/show_bug.cgi?id=111068
  [fdo#111614]: https://bugs.freedesktop.org/show_bug.cgi?id=111614
  [fdo#111615]: https://bugs.freedesktop.org/show_bug.cgi?id=111615
  [fdo#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
  [fdo#112054]: https://bugs.freedesktop.org/show_bug.cgi?id=112054
  [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
  [i915#132]: https://gitlab.freedesktop.org/drm/intel/issues/132
  [i915#1397]: https://gitlab.freedesktop.org/drm/intel/issues/1397
  [i915#1722]: https://gitlab.freedesktop.org/drm/intel/issues/1722
  [i915#1755]: https://gitlab.freedesktop.org/drm/intel/issues/1755
  [i915#180]: https://gitlab.freedesktop.org/drm/intel/issues/180
  [i915#1825]: https://gitlab.freedesktop.org/drm/intel/issues/1825
  [i915#1839]: https://gitlab.freedesktop.org/drm/intel/issues/1839
  [i915#1845]: https://gitlab.freedesktop.org/drm/intel/issues/1845
  [i915#1849]: https://gitlab.freedesktop.org/drm/intel/issues/1849
  [i915#1850]: https://gitlab.freedesktop.org/drm/intel/issues/1850
  [i915#2122]: https://gitlab.freedesktop.org/drm/intel/issues/2122
  [i915#2190]: https://gitlab.freedesktop.org/drm/intel/issues/2190
  [i915#2232]: https://gitlab.freedesktop.org/drm/intel/issues/2232
  [i915#2346]: https://gitlab.freedesktop.org/drm/intel/issues/2346
  [i915#2433]: https://gitlab.

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8587/index.html

[-- Attachment #2: Type: text/html, Size: 124450 bytes --]

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [igt-dev] [PATCH i-g-t 17/18] xe_mmap: skip VRAM tests if no VRAM is found
  2023-03-10 10:52   ` Das, Nirmoy
@ 2023-03-13  6:48     ` Zbigniew Kempczyński
  2023-03-14 12:26       ` Das, Nirmoy
  0 siblings, 1 reply; 24+ messages in thread
From: Zbigniew Kempczyński @ 2023-03-13  6:48 UTC (permalink / raw)
  To: Das, Nirmoy; +Cc: igt-dev

On Fri, Mar 10, 2023 at 11:52:15AM +0100, Das, Nirmoy wrote:
> 
> On 3/10/2023 9:23 AM, Zbigniew Kempczyński wrote:
> > From: Mauro Carvalho Chehab <mchehab@kernel.org>
> > 
> > Instead of producing an error, if there's no VRAM, the test
> > should be skipped. There's a logic there that would be doing
> > that, except that it doesn't really work :-)
> > 
> > Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
> > Acked-by: Zbigniew Kempczyński <zbigniew.kempczynski@intel.com>
> > ---
> >   tests/xe/xe_mmap.c | 3 +--
> >   1 file changed, 1 insertion(+), 2 deletions(-)
> > 
> > diff --git a/tests/xe/xe_mmap.c b/tests/xe/xe_mmap.c
> > index 9dce6adbe2..6b313a1895 100644
> > --- a/tests/xe/xe_mmap.c
> > +++ b/tests/xe/xe_mmap.c
> > @@ -42,8 +42,7 @@ test_mmap(int fd, uint32_t flags)
> >   	uint64_t mmo;
> >   	void *map;
> > -	if (flags & vram_memory(fd, 0))
> > -		igt_require(xe_has_vram(fd));
> 
> This check should go to the igt_main instead.

You mean to igt_subtest()? In igt_main() you can't use fd.
IMO change is ok, if there's no region on xe fd flags passed == 0
what will cause skip on require.

--
Zbigniew

> 
> 
> Nirmoy
> 
> > +	igt_require_f(flags, "Device doesn't support such memory region\n");
> >   	bo = xe_bo_create_flags(fd, 0, 4096, flags);
> >   	mmo = xe_bo_mmap_offset(fd, bo);

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [igt-dev] [PATCH i-g-t 17/18] xe_mmap: skip VRAM tests if no VRAM is found
  2023-03-13  6:48     ` Zbigniew Kempczyński
@ 2023-03-14 12:26       ` Das, Nirmoy
  0 siblings, 0 replies; 24+ messages in thread
From: Das, Nirmoy @ 2023-03-14 12:26 UTC (permalink / raw)
  To: Zbigniew Kempczyński; +Cc: igt-dev


On 3/13/2023 7:48 AM, Zbigniew Kempczyński wrote:
> On Fri, Mar 10, 2023 at 11:52:15AM +0100, Das, Nirmoy wrote:
>> On 3/10/2023 9:23 AM, Zbigniew Kempczyński wrote:
>>> From: Mauro Carvalho Chehab <mchehab@kernel.org>
>>>
>>> Instead of producing an error, if there's no VRAM, the test
>>> should be skipped. There's a logic there that would be doing
>>> that, except that it doesn't really work :-)
>>>
>>> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
>>> Acked-by: Zbigniew Kempczyński <zbigniew.kempczynski@intel.com>
>>> ---
>>>    tests/xe/xe_mmap.c | 3 +--
>>>    1 file changed, 1 insertion(+), 2 deletions(-)
>>>
>>> diff --git a/tests/xe/xe_mmap.c b/tests/xe/xe_mmap.c
>>> index 9dce6adbe2..6b313a1895 100644
>>> --- a/tests/xe/xe_mmap.c
>>> +++ b/tests/xe/xe_mmap.c
>>> @@ -42,8 +42,7 @@ test_mmap(int fd, uint32_t flags)
>>>    	uint64_t mmo;
>>>    	void *map;
>>> -	if (flags & vram_memory(fd, 0))
>>> -		igt_require(xe_has_vram(fd));
>> This check should go to the igt_main instead.
> You mean to igt_subtest()? In igt_main() you can't use fd.

Ah okay.  Yes then we can't do much.

> IMO change is ok, if there's no region on xe fd flags passed == 0
> what will cause skip on require.


I am fine with the change. It was that xe_has_vram() seemed more readable.


Thanks,

Nirmoy

>
> --
> Zbigniew
>
>>
>> Nirmoy
>>
>>> +	igt_require_f(flags, "Device doesn't support such memory region\n");
>>>    	bo = xe_bo_create_flags(fd, 0, 4096, flags);
>>>    	mmo = xe_bo_mmap_offset(fd, bo);

^ permalink raw reply	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2023-03-14 12:26 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-03-10  8:23 [igt-dev] [PATCH i-g-t 00/18] Add igt_doc.py Zbigniew Kempczyński
2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 01/18] scripts/igt_doc.py: beautify its code Zbigniew Kempczyński
2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 02/18] scripts/igt_doc.py: add JSON file output Zbigniew Kempczyński
2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 03/18] scripts/igt_doc.py: dynamically create fields array from a JSON file Zbigniew Kempczyński
2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 04/18] scripts/igt_doc.py: add support to specify numeric values Zbigniew Kempczyński
2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 05/18] scripts/igt_doc.py: improve --show-subtests logic Zbigniew Kempczyński
2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 06/18] scripts/igt_doc.py: add error handler for subprocess Zbigniew Kempczyński
2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 07/18] scripts/igt_doc.py: improve multi-line logic Zbigniew Kempczyński
2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 08/18] scripts/igt_doc.py: don't use ":=" operator Zbigniew Kempczyński
2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 09/18] scripts/igt_doc.py: make it compatible with Python 3.6 Zbigniew Kempczyński
2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 10/18] scripts/igt_doc.py: sets the minimal version to run the script Zbigniew Kempczyński
2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 11/18] scripts/igt_doc.py: use a different logic to get IGT prefix Zbigniew Kempczyński
2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 12/18] testplan/meson.build: add targets to build Xe test documentation Zbigniew Kempczyński
2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 13/18] xe/xe_test_config.json: cleanup the field struct Zbigniew Kempczyński
2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 14/18] xe/xe_huc_copy: add GPU dependency to its documentation Zbigniew Kempczyński
2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 15/18] xe/xe_*: add TEST/SUBTEST documentation Zbigniew Kempczyński
2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 16/18] xe-fast-feedback.testlist: update debugfs tests Zbigniew Kempczyński
2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 17/18] xe_mmap: skip VRAM tests if no VRAM is found Zbigniew Kempczyński
2023-03-10 10:52   ` Das, Nirmoy
2023-03-13  6:48     ` Zbigniew Kempczyński
2023-03-14 12:26       ` Das, Nirmoy
2023-03-10  8:23 ` [igt-dev] [PATCH i-g-t 18/18] meson: replace "igt@xe/" by "igt@" Zbigniew Kempczyński
2023-03-10 10:23 ` [igt-dev] ✓ Fi.CI.BAT: success for Add igt_doc.py Patchwork
2023-03-13  1:18 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox