Igt-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH i-g-t 0/7] tools/vmtb: Sync VM Test Bench core with current xe SR-IOV
@ 2026-09-28  7:25 Adam Miszczak
  2026-09-28  7:25 ` [PATCH i-g-t 1/7] tools/vmtb: Introduce asynchronous VM state save/load functions Adam Miszczak
                   ` (10 more replies)
  0 siblings, 11 replies; 19+ messages in thread
From: Adam Miszczak @ 2026-09-28  7:25 UTC (permalink / raw)
  To: igt-dev; +Cc: marcin.bernatowicz, kamil.konieczny

This series brings the VM Test Bench (VMTB) core in line with the
current xe SR-IOV driver interfaces and fixes a number of robustness
issues found while running the vmm_flows test suite on recent kernels.
It also adds a few framework features required by upcoming tests.

New framework features:
- asynchronous VM snapshot save/load, enabling parallel migration of
  multiple VMs (patch 1)
- VirtualMachine.wait_for_dmesg() to block on a guest serial console
  pattern (patch 6)
- IgtExecutor 'env_vars' support, cached GemWsim results and a common
  clear_results() for both executors (patch 7)

Driver/device alignment:
- move VF VRAM quota provisioning from the obsolete debugfs lmem_quota
  to the sysfs sriov_admin profile tree and add DeviceInterface.reset()
  for PF/VF FLR (patch 3)
- align default VF scheduling with the xe KMD (16ms EQ/PT), rename
  VfSchedulingMode.INFINITE to AUTO and fix scheduler-only manual
  provisioning (patch 2)

Robustness fixes:
- consume QMP command acknowledgments and tighten query_status()/
  query_jobs() handling so the bench never acts on partial QMP
  responses (patch 1)
- fix guest timeout resolution, PCI BDF matching and physical Device
  bind()/unbind() calls (patches 3, 4)
- add EnvironmentCleaner to remove leftovers (orphaned QEMU processes,
  stale sockets, dirty SR-IOV state) from crashed or timed-out runs
  before each test setup (patch 5)

Existing vmm_flows tests (test_basic, test_migration) are updated to
follow the API changes.

Signed-off-by: Adam Miszczak <adam.miszczak@linux.intel.com>
Cc: Marcin Bernatowicz <marcin.bernatowicz@linux.intel.com>
Cc: Kamil Konieczny <kamil.konieczny@linux.intel.com>

Adam Miszczak (7):
  tools/vmtb: Introduce asynchronous VM state save/load functions
  tools/vmtb: Rework VF scheduler provisioning
  tools/vmtb: Align driver/device layer with current xe SR-IOV
    interfaces
  tools/vmtb: Fix guest timeout handling and PCI BDF matching
  tools/vmtb: Add pre-test environment cleanup
  tools/vmtb: Add VM dmesg wait support
  tools/vmtb: Extend IGT and WSIM executors

 .../configurators/vgpu_profile_config.py      |  20 ++-
 tools/vmtb/bench/drivers/driver_interface.py  |   9 +-
 tools/vmtb/bench/drivers/xe.py                |  40 +++--
 tools/vmtb/bench/exceptions.py                |  14 +-
 tools/vmtb/bench/executors/gem_wsim.py        |  38 ++++-
 tools/vmtb/bench/executors/igt.py             |  10 +-
 tools/vmtb/bench/helpers/cleanup.py           |  91 ++++++++++
 tools/vmtb/bench/machines/device_interface.py |   7 +
 tools/vmtb/bench/machines/physical/device.py  |  58 +++----
 .../machines/virtual/backends/qmp_monitor.py  |  55 +++---
 tools/vmtb/bench/machines/virtual/device.py   |   4 +
 tools/vmtb/bench/machines/virtual/vm.py       | 160 ++++++++++++++----
 tools/vmtb/vmm_flows/conftest.py              |  80 ++++++---
 tools/vmtb/vmm_flows/test_basic.py            |   2 +-
 tools/vmtb/vmm_flows/test_migration.py        |  22 ++-
 15 files changed, 445 insertions(+), 165 deletions(-)
 create mode 100644 tools/vmtb/bench/helpers/cleanup.py

-- 
2.39.1


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

* [PATCH i-g-t 1/7] tools/vmtb: Introduce asynchronous VM state save/load functions
  2026-09-28  7:25 [PATCH i-g-t 0/7] tools/vmtb: Sync VM Test Bench core with current xe SR-IOV Adam Miszczak
@ 2026-09-28  7:25 ` Adam Miszczak
  2026-10-08 13:53   ` Bernatowicz, Marcin
  2026-09-28  7:25 ` [PATCH i-g-t 2/7] tools/vmtb: Rework VF scheduler provisioning Adam Miszczak
                   ` (9 subsequent siblings)
  10 siblings, 1 reply; 19+ messages in thread
From: Adam Miszczak @ 2026-09-28  7:25 UTC (permalink / raw)
  To: igt-dev; +Cc: marcin.bernatowicz, kamil.konieczny

Split existing VM snapshot save/load functions into explicit initialization
and completion-check phases.
Making save and load as asynchronous/non-blocking operations allows
parallel migration of multiple VMs.

Refactor QMP 'query_jobs' handling function to keep reading QMP responses
until the requested job type is received. Remove unused 'get_qmp_event_job'
since 'query_jobs' now consumes JOB_STATUS_CHANGE events.

Add handling of QMP command acknowledgments to ensure QEMU has
processed a command before proceeding.
Implement __wait_for_ack() helper that consumes the QMP acknowledgment
(empty return on success) and raises QmpError on an error response.
Apply __wait_for_ack() to confirm QMP commands that have no event-based
confirmation: 'stop', 'cont', 'snapshot-save' and 'snapshot-load'.
Remaining commands like 'system_reset' or 'system_wakeup' are confirmed
via events in VirtualMachine wrappers.

Also tighten query_status() to wait until the response contains both
the 'status' and 'running' fields (QMP StatusInfo type), avoiding acting
on a partial return.

Signed-off-by: Adam Miszczak <adam.miszczak@linux.intel.com>
---
 tools/vmtb/bench/exceptions.py                | 10 ++-
 .../machines/virtual/backends/qmp_monitor.py  | 55 +++++++++-------
 tools/vmtb/bench/machines/virtual/vm.py       | 66 +++++++++++++------
 3 files changed, 86 insertions(+), 45 deletions(-)

diff --git a/tools/vmtb/bench/exceptions.py b/tools/vmtb/bench/exceptions.py
index 95ca2aa9b..1c151669a 100644
--- a/tools/vmtb/bench/exceptions.py
+++ b/tools/vmtb/bench/exceptions.py
@@ -1,5 +1,5 @@
 # SPDX-License-Identifier: MIT
-# Copyright © 2024 Intel Corporation
+# Copyright © 2024-2026 Intel Corporation
 
 class BenchError(Exception):
     pass
@@ -19,11 +19,19 @@ class GuestAgentError(GuestError):
     pass
 
 
+class GuestMigrationError(GuestError):
+    pass
+
+
 class AlarmTimeoutError(GuestError):
     pass
 
 
 # Generic errors:
+class QmpError(BenchError):
+    pass
+
+
 class GemWsimError(BenchError):
     pass
 
diff --git a/tools/vmtb/bench/machines/virtual/backends/qmp_monitor.py b/tools/vmtb/bench/machines/virtual/backends/qmp_monitor.py
index d364a5711..8b273ca07 100644
--- a/tools/vmtb/bench/machines/virtual/backends/qmp_monitor.py
+++ b/tools/vmtb/bench/machines/virtual/backends/qmp_monitor.py
@@ -9,6 +9,8 @@ import threading
 import time
 import typing
 
+from bench.exceptions import QmpError
+
 logger = logging.getLogger('QmpMonitor')
 
 
@@ -46,7 +48,7 @@ class QmpMonitor():
         self.sockf.flush()
 
         ret: typing.Dict = {}
-        while 'status' not in ret:
+        while not ('status' in ret and 'running' in ret):
             qmp_msg = self.qmp_queue.get()
             if 'return' in qmp_msg:
                 ret = qmp_msg.get('return')
@@ -55,26 +57,27 @@ class QmpMonitor():
         logger.debug('Machine status: %s', status)
         return status
 
-    def query_jobs(self, requested_type: str) -> typing.Tuple[str, str]:
+    def query_jobs(self, requested_type: str) -> typing.Tuple[str, typing.Optional[str]]:
         json.dump({'execute': 'query-jobs'}, self.sockf)
         self.sockf.flush()
 
-        job_type: str = ''
-        job_status: str = ''
-        job_error: str = ''
-        ret: typing.Dict = {}
+        job_status: str = 'N/A'
+        job_error: typing.Optional[str] = None
+        is_job_info: bool = False
 
-        qmp_msg = self.qmp_queue.get()
-        # logger.debug('[QMP RSP Queue] -> %s', qmp_msg)
-        if 'return' in qmp_msg:
-            ret = qmp_msg.get('return')
-            for param in ret:
-                job_type = param.get('type')
-                job_status = param.get('status')
-                job_error = param.get('error')
+        while not is_job_info:
+            qmp_msg = self.qmp_queue.get()
+            if 'return' in qmp_msg:
+                ret = qmp_msg.get('return')
+                if not isinstance(ret, list):
+                    continue
 
-                if job_type == requested_type:
-                    break
+                for job_info in ret:
+                    if job_info.get('type') == requested_type:
+                        job_status = job_info.get('status')
+                        job_error = job_info.get('error')
+                        is_job_info = True
+                        break
 
         return (job_status, job_error)
 
@@ -84,15 +87,15 @@ class QmpMonitor():
         event: str = qmp_msg.get('event', '')
         return event
 
-    def get_qmp_event_job(self) -> str:
+    def __wait_for_ack(self, cmd_name: str) -> None:
+        """Consume QMP command acknowledgment (empty return on success).
+        Throw QmpError exception on error response."""
         qmp_msg = self.qmp_queue.get()
-        # logger.debug('[QMP RSP Queue] -> %s', qmp_msg)
-
-        status: str = ''
-        if qmp_msg.get('event') == 'JOB_STATUS_CHANGE':
-            status = qmp_msg.get('data', {}).get('status', '')
-
-        return status
+        while not ('return' in qmp_msg or 'error' in qmp_msg):
+            qmp_msg = self.qmp_queue.get()
+        if 'error' in qmp_msg:
+            desc = qmp_msg['error'].get('desc', 'unknown error')
+            raise QmpError(f'QMP {cmd_name} failed: {desc}')
 
     def system_reset(self) -> None:
         json.dump({'execute': 'system_reset'}, self.sockf)
@@ -105,10 +108,12 @@ class QmpMonitor():
     def stop(self) -> None:
         json.dump({'execute': 'stop'}, self.sockf)
         self.sockf.flush()
+        self.__wait_for_ack('stop')
 
     def cont(self) -> None:
         json.dump({'execute': 'cont'}, self.sockf)
         self.sockf.flush()
+        self.__wait_for_ack('cont')
 
     def quit(self) -> None:
         json.dump({'execute': 'quit'}, self.sockf)
@@ -149,6 +154,7 @@ class QmpMonitor():
             'arguments': {'job-id': job_id, 'tag': snapshot_tag, 'vmstate': node_name, 'devices': [node_name]}},
             self.sockf)
         self.sockf.flush()
+        self.__wait_for_ack('snapshot-save')
 
     def load_snapshot(self) -> None:
         job_id: str = f'loadvm_{time.time()}'
@@ -160,3 +166,4 @@ class QmpMonitor():
             'arguments': {'job-id': job_id, 'tag': snapshot_tag, 'vmstate': node_name, 'devices': [node_name]}},
             self.sockf)
         self.sockf.flush()
+        self.__wait_for_ack('snapshot-load')
diff --git a/tools/vmtb/bench/machines/virtual/vm.py b/tools/vmtb/bench/machines/virtual/vm.py
index 2469af965..8229084d4 100644
--- a/tools/vmtb/bench/machines/virtual/vm.py
+++ b/tools/vmtb/bench/machines/virtual/vm.py
@@ -84,6 +84,7 @@ class VirtualMachine(MachineInterface):
 
         self.migrate_source_image: typing.Optional[str] = None
         self.migrate_destination_vm: bool = False
+        self._migration_ongoing: bool = False
 
         self.dmesg_logger = self.__setup_dmesg_logger()
 
@@ -558,32 +559,57 @@ class VirtualMachine(MachineInterface):
 
         return True
 
-    @Decorators.timeout_signal
-    def save_state(self) -> None:
-        logger.debug('Saving VM%s state (snapshot)', self.vmnum)
+    def save_state_init(self) -> None:
+        """Initiate VM snapshot-save operation (asynchronous)."""
+        logger.debug("Starting VM%s state save (snapshot)", self.vmnum)
         self.qm.save_snapshot()
+        self._migration_ongoing = True
 
-        job_status: str = self.qm.get_qmp_event_job()
-        while job_status != 'concluded':
-            job_status = self.qm.get_qmp_event_job()
+    def load_state_init(self) -> None:
+        """Initiate VM snapshot-load operation (asynchronous)."""
+        logger.debug("Starting VM%s state load (snapshot)", self.vmnum)
+        self.qm.load_snapshot()
+        self._migration_ongoing = True
 
-        job_status, job_error = self.qm.query_jobs('snapshot-save')
-        if job_status == 'concluded' and job_error is not None:
-            raise exceptions.GuestError(f'VM{self.vmnum} state save error: {job_error}')
+    def __is_snapshot_operation_complete(self, op_name: str) -> bool:
+        """Poll VM snapshot save/load job completion."""
+        if not self._migration_ongoing:
+            logger.warning("VM%s migration is not in progress", self.vmnum)
+            return False
 
-        logger.debug('VM%s state save finished successfully', self.vmnum)
+        job_status, job_error = self.qm.query_jobs(f'snapshot-{op_name}')
+        if job_error is not None:
+            logger.error("VM%s snapshot-%s error: %s", self.vmnum, op_name, job_error)
+            return False
+
+        return job_status == 'concluded'
 
     @Decorators.timeout_signal
-    def load_state(self) -> None:
-        logger.debug('Loading VM state (snapshot)')
-        self.qm.load_snapshot()
+    def save_state_check(self, timeout: int = DEFAULT_TIMEOUT) -> None:
+        """Check if previously started snapshot-save has completed successfully."""
+        if not self.__is_snapshot_operation_complete('save'):
+            logger.error("VM%s state save has not completed", self.vmnum)
+            raise exceptions.GuestMigrationError(f'VM{self.vmnum} state save has not completed')
+
+        self._migration_ongoing = False
+        logger.debug("VM%s state save finished successfully", self.vmnum)
+
+    @Decorators.timeout_signal
+    def load_state_check(self, timeout: int = DEFAULT_TIMEOUT) -> None:
+        """Check if previously started snapshot-load has completed successfully."""
+        if not self.__is_snapshot_operation_complete('load'):
+            logger.error("VM%s state load has not completed", self.vmnum)
+            raise exceptions.GuestMigrationError(f'VM{self.vmnum} state load has not completed')
 
-        job_status: str = self.qm.get_qmp_event_job()
-        while job_status != 'concluded':
-            job_status = self.qm.get_qmp_event_job()
+        self._migration_ongoing = False
+        logger.debug("VM%s state load finished successfully", self.vmnum)
 
-        job_status, job_error = self.qm.query_jobs('snapshot-load')
-        if job_status == 'concluded' and job_error is not None:
-            raise exceptions.GuestError(f'VM{self.vmnum} state load error: {job_error}')
+    def save_state(self) -> None:
+        """Save VF state - submit snapshot-save and check result (synchronous save)."""
+        self.save_state_init()
+        self.save_state_check()
 
-        logger.debug('VM state load finished successfully')
+    def load_state(self) -> None:
+        """Load VF state - submit snapshot-load and check result (synchronous load)."""
+        self.load_state_init()
+        self.load_state_check()
-- 
2.39.1


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

* [PATCH i-g-t 2/7] tools/vmtb: Rework VF scheduler provisioning
  2026-09-28  7:25 [PATCH i-g-t 0/7] tools/vmtb: Sync VM Test Bench core with current xe SR-IOV Adam Miszczak
  2026-09-28  7:25 ` [PATCH i-g-t 1/7] tools/vmtb: Introduce asynchronous VM state save/load functions Adam Miszczak
@ 2026-09-28  7:25 ` Adam Miszczak
  2026-10-08 13:54   ` Bernatowicz, Marcin
  2026-09-28  7:25 ` [PATCH i-g-t 3/7] tools/vmtb: Align driver/device layer with current xe SR-IOV interfaces Adam Miszczak
                   ` (8 subsequent siblings)
  10 siblings, 1 reply; 19+ messages in thread
From: Adam Miszczak @ 2026-09-28  7:25 UTC (permalink / raw)
  To: igt-dev; +Cc: marcin.bernatowicz, kamil.konieczny

Align default VF scheduling setup with the current xe KMD behavior.
Scheduling settings: execution quanta (EQ) and preemption-timeout (PT)
are set to 16ms by default (instead of infinite/0), therefore:
- rename VfSchedulingMode.INFINITE → AUTO
- update VmmTestingConfig default from INFINITE to AUTO

Fix scheduler-only manual provisioning - support VF config variants
where only the scheduler setup is needed (auto resources provisioning
with a concrete scheduling mode). In this case load scheduler profile
even when no matching resources profile exists.

In addition, fix max VFs handling, improve assertions for creating VFs
and skip unsupported test configs instead of failing.

Signed-off-by: Adam Miszczak <adam.miszczak@linux.intel.com>
---
 .../configurators/vgpu_profile_config.py      | 20 +++++---
 tools/vmtb/bench/exceptions.py                |  4 ++
 tools/vmtb/bench/machines/physical/device.py  |  9 ++--
 tools/vmtb/vmm_flows/conftest.py              | 46 +++++++++++--------
 tools/vmtb/vmm_flows/test_basic.py            |  2 +-
 5 files changed, 52 insertions(+), 29 deletions(-)

diff --git a/tools/vmtb/bench/configurators/vgpu_profile_config.py b/tools/vmtb/bench/configurators/vgpu_profile_config.py
index 4bddb641e..35a8a8835 100644
--- a/tools/vmtb/bench/configurators/vgpu_profile_config.py
+++ b/tools/vmtb/bench/configurators/vgpu_profile_config.py
@@ -23,7 +23,7 @@ class VfProvisioningMode(Enum):
 
 
 class VfSchedulingMode(str, Enum):
-    INFINITE = 'Infinite' # Infinite EQ/PT - HW default
+    AUTO = 'Auto' # Default EQ/PT (set by xe KMD automatically)
     DEFAULT_PROFILE = 'Default_Profile' # Default vGPU scheduler profile
     FLEXIBLE_30FPS = 'Flexible_30fps_GPUTimeSlicing'
     FIXED_30FPS = 'Fixed_30fps_GPUTimeSlicing'
@@ -87,8 +87,8 @@ class VgpuProfileConfigurator:
                 break
 
         if not is_vf_resource_found:
-            logger.error("vGPU VF resources profile %sxVF not found!", requested_num_vfs)
-            raise exceptions.VgpuProfileError(f'vGPU VF resources profile {requested_num_vfs}xVF not found!')
+            logger.warning("vGPU resources profile (%sxVF) not found!", requested_num_vfs)
+            raise exceptions.VgpuProfileNotFound(f'vGPU resources profile ({requested_num_vfs}xVF) not found!')
 
         return vgpu_resources_config
 
@@ -99,7 +99,7 @@ class VgpuProfileConfigurator:
         # pylint: disable=W0123
         vgpu_scheduler_config = VgpuSchedulerConfig()
 
-        if requested_scheduler is VfSchedulingMode.INFINITE:
+        if requested_scheduler is VfSchedulingMode.AUTO:
             return vgpu_scheduler_config
 
         for scheduler in self.supported_vgpu_profiles.scheduler_configs:
@@ -136,13 +136,19 @@ class VgpuProfileConfigurator:
 
         return vgpu_security_config
 
-    def get_vgpu_profile(self, requested_num_vfs: int, requested_scheduler: VfSchedulingMode) -> VgpuProfile:
-        """Get vGPU profile for requested number of VFs, scheduler and security modes."""
+    def get_vgpu_profile(self, requested_num_vfs: int, requested_scheduler: VfSchedulingMode,
+                         require_resources: bool = True) -> VgpuProfile:
+        """Get vGPU profile for requested number of VFs, scheduler and security modes.
+        If require_resources is False, skip VF resources lookup
+        (e.g. for auto provisioning where only the scheduler config is needed).
+        """
         logger.info("Requested vGPU profile: %s VFs / scheduling: %s", requested_num_vfs, requested_scheduler)
 
         vgpu_profile: VgpuProfile = VgpuProfile()
         vgpu_profile.num_vfs = requested_num_vfs
-        vgpu_profile.resources = self.select_vgpu_resources_profile(requested_num_vfs)
+
+        if require_resources:
+            vgpu_profile.resources = self.select_vgpu_resources_profile(requested_num_vfs)
 
         if requested_scheduler is VfSchedulingMode.DEFAULT_PROFILE:
             requested_scheduler = VfSchedulingMode(self.supported_vgpu_profiles.scheduler_config_default)
diff --git a/tools/vmtb/bench/exceptions.py b/tools/vmtb/bench/exceptions.py
index 1c151669a..557b44142 100644
--- a/tools/vmtb/bench/exceptions.py
+++ b/tools/vmtb/bench/exceptions.py
@@ -40,6 +40,10 @@ class VgpuProfileError(BenchError):
     pass
 
 
+class VgpuProfileNotFound(VgpuProfileError):
+    pass
+
+
 class NotAvailableError(BenchError):
     pass
 
diff --git a/tools/vmtb/bench/machines/physical/device.py b/tools/vmtb/bench/machines/physical/device.py
index f1f24c65c..6c0dc4ff9 100644
--- a/tools/vmtb/bench/machines/physical/device.py
+++ b/tools/vmtb/bench/machines/physical/device.py
@@ -59,7 +59,7 @@ class Device(DeviceInterface):
             driver_module = importlib.import_module(module_name)
             driver_class = getattr(driver_module, class_name)
         except (ImportError, AttributeError) as exc:
-            logging.error("Driver module/class is not available: %s", exc)
+            logger.error("Driver module/class is not available: %s", exc)
             raise exceptions.VmtbConfigError(f'Requested driver module {driver_name} is not available!')
 
         return driver_class(bdf)
@@ -102,7 +102,9 @@ class Device(DeviceInterface):
 
         self.driver.set_numvfs(num)
         ret = self.driver.get_numvfs()
-        assert ret == num
+        if ret != num:
+            logger.error("Failed to create requested number of VFs - expected: %s, got: %s", num, ret)
+            raise exceptions.HostError(f'Failed to create requested number of VFs ({num})')
 
         return ret
 
@@ -114,7 +116,8 @@ class Device(DeviceInterface):
         self.driver.set_numvfs(0)
         ret = self.driver.get_numvfs()
         if ret != 0:
-            raise exceptions.HostError('VFs not disabled after 0 write')
+            logger.error("Failed to disable VFs - expected 0, got: %s", ret)
+            raise exceptions.HostError('Failed to disable all VFs')
 
         logger.debug("[%s] Enable drivers autoprobe", self.pci_info.bdf)
         self.set_drivers_autoprobe(True)
diff --git a/tools/vmtb/vmm_flows/conftest.py b/tools/vmtb/vmm_flows/conftest.py
index 02c297f93..ba6487c84 100644
--- a/tools/vmtb/vmm_flows/conftest.py
+++ b/tools/vmtb/vmm_flows/conftest.py
@@ -44,7 +44,7 @@ class VmmTestingConfig:
     - num_vfs: requested number of VFs to enable
     - max_num_vms: maximal number of VMs (the value can be different than enabled number of VFs)
     - provisioning_mode: auto (fair resources allocation by a driver) or vGPU profile
-    - scheduling_mode: requested vGPU scheduling profile (infinite maps to default 0's)
+    - scheduling_mode: requested vGPU scheduling profile (auto maps to default EQ=16ms and PT=16000us)
     - auto_poweron_vm: assign VFs and power on VMs automatically in setup fixture
     - auto_probe_vm_driver: probe guest DRM driver in setup fixture (VM must be powered on)
     - unload_host_drivers_on_teardown: unload host DRM drivers in teardown fixture
@@ -53,7 +53,7 @@ class VmmTestingConfig:
     num_vfs: int = 1
     max_num_vms: int = 2
     provisioning_mode: VfProvisioningMode = VfProvisioningMode.AUTO
-    scheduling_mode: VfSchedulingMode = VfSchedulingMode.INFINITE
+    scheduling_mode: VfSchedulingMode = VfSchedulingMode.AUTO
 
     auto_poweron_vm: bool = True
     auto_probe_vm_driver: bool = True
@@ -68,8 +68,11 @@ class VmmTestingConfig:
             self.num_vfs = 0 # Actual value set in VmmTestingSetup
 
     def __str__(self) -> str:
-        test_config_id = (f'{self.num_vfs if not self.enable_max_vfs else "Max"}VF'
-                          + f'-(P:{self.provisioning_mode.name} S:{self.scheduling_mode.name})')
+        test_config_id = (f'{self.num_vfs if not self.enable_max_vfs else "Max"}VF')
+
+        if self.provisioning_mode is not VfProvisioningMode.AUTO or self.scheduling_mode is not VfSchedulingMode.AUTO:
+            test_config_id += f'-(P:{self.provisioning_mode.name} S:{self.scheduling_mode.name})'
+
         return test_config_id
 
     def __repr__(self) -> str:
@@ -126,10 +129,11 @@ class VmmTestingSetup:
         self.wsim_wl_dir = vmtb_root_path / vmtb_config.config.wsim_wl_path / self.get_dut().gpu_model.name.lower()
 
         if (self.testing_config.provisioning_mode is VfProvisioningMode.VGPU_PROFILE
-            or self.testing_config.scheduling_mode is not VfSchedulingMode.INFINITE):
+            or self.testing_config.scheduling_mode is not VfSchedulingMode.AUTO):
+            # vGPU profile or auto resources provisioning with concrete scheduling
             self.vgpu_profile: VgpuProfile = self.get_vgpu_profile()
-
-        if self.testing_config.provisioning_mode is VfProvisioningMode.AUTO and self.testing_config.enable_max_vfs:
+        elif self.testing_config.enable_max_vfs:
+            # Auto provisioning (with default/auto scheduling) for max VFs (HW limit)
             self.testing_config.num_vfs = self.total_vfs
 
         # Start maximum requested number of VMs, but not more than VFs supported by the given vGPU profile
@@ -143,17 +147,22 @@ class VmmTestingSetup:
     def get_vgpu_profile(self) -> VgpuProfile:
         configurator = VgpuProfileConfigurator(self.vgpu_profiles_dir, self.get_dut().gpu_model)
         if self.testing_config.enable_max_vfs:
-            # Get a vGPU profile with the most VFs (not necessarily equal to sysfs/sriov_totalvfs)
-            self.testing_config.num_vfs = max(configurator.supported_vgpu_profiles.vf_resources,
-                                              key=lambda profile: profile.vf_count).vf_count
-            logger.debug("Max VFs supported by vGPU profiles: %s", self.testing_config.num_vfs)
+            if self.testing_config.provisioning_mode is VfProvisioningMode.VGPU_PROFILE:
+                # Get a vGPU profile with the most VFs (not necessarily equal to sysfs/sriov_totalvfs)
+                self.testing_config.num_vfs = max(configurator.supported_vgpu_profiles.vf_resources,
+                                                  key=lambda profile: profile.vf_count).vf_count
+                logger.debug("Max VFs supported by vGPU profiles: %s", self.testing_config.num_vfs)
+            else:
+                # Use HW VFs limit (sysfs/sriov_totalvfs) with auto resources provisioning and concrete scheduling
+                self.testing_config.num_vfs = self.total_vfs
 
         try:
+            require_resources = self.testing_config.provisioning_mode is VfProvisioningMode.VGPU_PROFILE
             vgpu_profile = configurator.get_vgpu_profile(self.testing_config.num_vfs,
-                                                         self.testing_config.scheduling_mode)
-        except exceptions.VgpuProfileError as exc:
-            logger.error("Suitable vGPU profile not found: %s", exc)
-            raise exceptions.VgpuProfileError('Invalid test setup - vGPU profile not found!')
+                                                         self.testing_config.scheduling_mode,
+                                                         require_resources)
+        except exceptions.VgpuProfileNotFound as exc:
+            pytest.skip(f'Test config not supported: {exc}')
 
         return vgpu_profile
 
@@ -277,11 +286,12 @@ def fixture_setup_vms(get_vmtb_config, get_cmdline_config, get_host, request):
     else:
         device.driver.restore_auto_provisioning()
 
-    assert device.create_vf(num_vfs) == num_vfs
+    assert num_vfs <= ts.total_vfs, f'Requested number of VFs ({num_vfs}) exceeds total VFs ({ts.total_vfs})'
+    device.create_vf(num_vfs)
 
     if (ts.testing_config.provisioning_mode is VfProvisioningMode.AUTO and
-        ts.testing_config.scheduling_mode is not VfSchedulingMode.INFINITE):
-        # Auto resources provisioning with concrete scheduling (i.e. different than HW default: infinite).
+        ts.testing_config.scheduling_mode is not VfSchedulingMode.AUTO):
+        # Auto resources provisioning with scheduling override (i.e. different than default/auto).
         # Scheduler params override must be done after enabling VFs
         # to allow hard resources auto provisioning by KMD.
         ts.vgpu_profile.print_scheduler_config()
diff --git a/tools/vmtb/vmm_flows/test_basic.py b/tools/vmtb/vmm_flows/test_basic.py
index 9b8731273..597ebbb68 100644
--- a/tools/vmtb/vmm_flows/test_basic.py
+++ b/tools/vmtb/vmm_flows/test_basic.py
@@ -43,7 +43,7 @@ def set_test_config(test_variants: List[Tuple[int, VfProvisioningMode, VfSchedul
 
 test_variants_1 = [(1, VfProvisioningMode.VGPU_PROFILE, VfSchedulingMode.DEFAULT_PROFILE),
                    (2, VfProvisioningMode.VGPU_PROFILE, VfSchedulingMode.DEFAULT_PROFILE),
-                   (2, VfProvisioningMode.AUTO, VfSchedulingMode.INFINITE)]
+                   (2, VfProvisioningMode.AUTO, VfSchedulingMode.AUTO)]
 
 @pytest.mark.parametrize('setup_vms', set_test_config(test_variants_1), ids=idfn_test_config, indirect=['setup_vms'])
 class TestVmSetup:
-- 
2.39.1


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

* [PATCH i-g-t 3/7] tools/vmtb: Align driver/device layer with current xe SR-IOV interfaces
  2026-09-28  7:25 [PATCH i-g-t 0/7] tools/vmtb: Sync VM Test Bench core with current xe SR-IOV Adam Miszczak
  2026-09-28  7:25 ` [PATCH i-g-t 1/7] tools/vmtb: Introduce asynchronous VM state save/load functions Adam Miszczak
  2026-09-28  7:25 ` [PATCH i-g-t 2/7] tools/vmtb: Rework VF scheduler provisioning Adam Miszczak
@ 2026-09-28  7:25 ` Adam Miszczak
  2026-10-08 13:54   ` Bernatowicz, Marcin
  2026-09-28  7:25 ` [PATCH i-g-t 4/7] tools/vmtb: Fix guest timeout handling and PCI BDF matching Adam Miszczak
                   ` (7 subsequent siblings)
  10 siblings, 1 reply; 19+ messages in thread
From: Adam Miszczak @ 2026-09-28  7:25 UTC (permalink / raw)
  To: igt-dev; +Cc: marcin.bernatowicz, kamil.konieczny

Move VF VRAM quota provisioning from the obsolete debugfs lmem_quota
attribute to the sysfs SRIOV admin tree
(/sys/bus/pci/drivers/xe/[BDF]/sriov_admin/vf[N]/profile/vram_quota)
and update the driver abstraction and provisioning helpers.

Fix physical Device bind()/unbind() calls that still passed a PCI BDF
to DriverInterface, breaking unload_drivers() with a TypeError.

Add DeviceInterface.reset() that triggers an FLR via
/sys/bus/pci/devices/[BDF]/reset - PF FLR on the host for physical
devices and VF FLR in the guest for virtual devices.

Signed-off-by: Adam Miszczak <adam.miszczak@linux.intel.com>
---
 tools/vmtb/bench/drivers/driver_interface.py  |  8 ++--
 tools/vmtb/bench/drivers/xe.py                | 39 ++++++++++---------
 tools/vmtb/bench/machines/device_interface.py |  7 ++++
 tools/vmtb/bench/machines/physical/device.py  | 12 ++++--
 tools/vmtb/bench/machines/virtual/device.py   |  4 ++
 5 files changed, 44 insertions(+), 26 deletions(-)

diff --git a/tools/vmtb/bench/drivers/driver_interface.py b/tools/vmtb/bench/drivers/driver_interface.py
index 0b0bd5abb..9d1e5ab00 100644
--- a/tools/vmtb/bench/drivers/driver_interface.py
+++ b/tools/vmtb/bench/drivers/driver_interface.py
@@ -201,19 +201,19 @@ class PfDriverInterface(DriverInterface, abc.ABC):
 
     # VF provisioning
     @abc.abstractmethod
-    def get_ggtt_quota(self, vf_num: int, gt_num: int) -> int:
+    def get_vram_quota(self, vf_num: int) -> int:
         raise NotImplementedError
 
     @abc.abstractmethod
-    def set_ggtt_quota(self, vf_num: int, gt_num: int, val: int) -> None:
+    def set_vram_quota(self, vf_num: int, val: int) -> None:
         raise NotImplementedError
 
     @abc.abstractmethod
-    def get_lmem_quota(self, vf_num: int, gt_num: int) -> int:
+    def get_ggtt_quota(self, vf_num: int, gt_num: int) -> int:
         raise NotImplementedError
 
     @abc.abstractmethod
-    def set_lmem_quota(self, vf_num: int, gt_num: int, val: int) -> None:
+    def set_ggtt_quota(self, vf_num: int, gt_num: int, val: int) -> None:
         raise NotImplementedError
 
     @abc.abstractmethod
diff --git a/tools/vmtb/bench/drivers/xe.py b/tools/vmtb/bench/drivers/xe.py
index 26e4e0a08..479c1dd87 100644
--- a/tools/vmtb/bench/drivers/xe.py
+++ b/tools/vmtb/bench/drivers/xe.py
@@ -140,7 +140,27 @@ class XeDriver(PfDriverInterface):
         path = self.__helper_create_debugfs_path(0, gt_num, '', 'sample_period_ms')
         self.write_debugfs(path, str(val))
 
-    # VF and PF provisioning parameters
+    # VF provisioning parameters
+    # Sysfs location: [SRIOV sysfs base path]/sriov_admin/[vfN]/profile
+    # @vf_num: VF number (1-based) or 0 for PF
+    def get_vram_quota(self, vf_num: int) -> int:
+        if vf_num == 0:
+            logger.warning("PF vram_quota not available")
+            return 0
+
+        sriov_admin_path = self.__helper_create_sriov_admin_path(vf_num, 'vram_quota')
+        return int(self.read_sysfs(self.sysfs_device_path / sriov_admin_path)) if self.has_lmem() else 0
+
+    def set_vram_quota(self, vf_num: int, val: int) -> None:
+        if vf_num == 0:
+            logger.warning("PF vram_quota not available")
+            return
+
+        sriov_admin_path = self.__helper_create_sriov_admin_path(vf_num, 'vram_quota')
+        if self.has_lmem():
+            self.write_sysfs(self.sysfs_device_path / sriov_admin_path, str(val))
+
+    # VF provisioning parameters (debugfs)
     # Debugfs location: [SRIOV debugfs base path]/gtM/[pf|vfN]
     # @vf_num: VF number (1-based) or 0 for PF
     def get_ggtt_quota(self, vf_num: int, gt_num: int) -> int:
@@ -159,23 +179,6 @@ class XeDriver(PfDriverInterface):
         path = self.__helper_create_debugfs_path(vf_num, gt_num, '', 'ggtt_quota')
         self.write_debugfs(path, str(val))
 
-    def get_lmem_quota(self, vf_num: int, gt_num: int) -> int:
-        if vf_num == 0:
-            logger.warning("PF lmem_quota not available")
-            return 0
-
-        path = self.__helper_create_debugfs_path(vf_num, gt_num, '', 'lmem_quota')
-        return int(self.read_debugfs(path)) if self.has_lmem() else 0
-
-    def set_lmem_quota(self, vf_num: int, gt_num: int, val: int) -> None:
-        if vf_num == 0:
-            logger.warning("PF lmem_quota not available")
-            return
-
-        path = self.__helper_create_debugfs_path(vf_num, gt_num, '', 'lmem_quota')
-        if self.has_lmem():
-            self.write_debugfs(path, str(val))
-
     def get_contexts_quota(self, vf_num: int, gt_num: int) -> int:
         if vf_num == 0:
             logger.warning("PF contexts_quota not available")
diff --git a/tools/vmtb/bench/machines/device_interface.py b/tools/vmtb/bench/machines/device_interface.py
index 0eff493f0..76b47de03 100644
--- a/tools/vmtb/bench/machines/device_interface.py
+++ b/tools/vmtb/bench/machines/device_interface.py
@@ -10,8 +10,15 @@ class DeviceInterface(abc.ABC):
     """
     @abc.abstractmethod
     def bind_driver(self) -> None:
+        """Bind driver to device."""
         raise NotImplementedError
 
     @abc.abstractmethod
     def unbind_driver(self) -> None:
+        """Unbind driver from device."""
+        raise NotImplementedError
+
+    @abc.abstractmethod
+    def reset(self) -> None:
+        """Reset device (trigger FLR)."""
         raise NotImplementedError
diff --git a/tools/vmtb/bench/machines/physical/device.py b/tools/vmtb/bench/machines/physical/device.py
index 6c0dc4ff9..b4eebc245 100644
--- a/tools/vmtb/bench/machines/physical/device.py
+++ b/tools/vmtb/bench/machines/physical/device.py
@@ -125,10 +125,14 @@ class Device(DeviceInterface):
         return ret
 
     def bind_driver(self) -> None:
-        self.driver.bind(self.pci_info.bdf)
+        self.driver.bind()
 
     def unbind_driver(self) -> None:
-        self.driver.unbind(self.pci_info.bdf)
+        self.driver.unbind()
+
+    def reset(self) -> None:
+        logger.debug("[%s] Trigger reset (PF FLR)", self.pci_info.bdf)
+        self.driver.flr()
 
     def override_vf_driver(self, vf_num: int) -> str:
         """Set VFIO as VF driver."""
@@ -224,8 +228,8 @@ class Device(DeviceInterface):
             self.driver.set_pf_doorbells_spare(gt_num, resources_config.pfDoorbells)
         else:
             if not self.is_gt_media_type(gt_num):
+                self.driver.set_vram_quota(fn_num, resources_config.vfLmem)
                 self.driver.set_ggtt_quota(fn_num, gt_num, resources_config.vfGgtt)
-                self.driver.set_lmem_quota(fn_num, gt_num, resources_config.vfLmem)
             self.driver.set_contexts_quota(fn_num, gt_num, resources_config.vfContexts)
             self.driver.set_doorbells_quota(fn_num, gt_num, resources_config.vfDoorbells)
 
@@ -246,8 +250,8 @@ class Device(DeviceInterface):
                 self.driver.set_contexts_quota(vf_num, gt_num, 0)
                 self.driver.set_doorbells_quota(vf_num, gt_num, 0)
                 if not self.is_gt_media_type(gt_num):
+                    self.driver.set_vram_quota(vf_num, 0)
                     self.driver.set_ggtt_quota(vf_num, gt_num, 0)
-                    self.driver.set_lmem_quota(vf_num, gt_num, 0)
 
     def reset_provisioning(self, num_vfs: int) -> None:
         """Clear provisioning config for a given number of VFs and restore auto provisioning mode."""
diff --git a/tools/vmtb/bench/machines/virtual/device.py b/tools/vmtb/bench/machines/virtual/device.py
index c838db59d..b36dbba58 100644
--- a/tools/vmtb/bench/machines/virtual/device.py
+++ b/tools/vmtb/bench/machines/virtual/device.py
@@ -68,6 +68,10 @@ class VirtualDevice(DeviceInterface):
                      self.vm.get_drm_driver_name(), self.pci_info.bdf)
         self.driver.unbind()
 
+    def reset(self) -> None:
+        logger.debug("[%s] Trigger reset (VF FLR)", self.pci_info.bdf)
+        self.driver.flr() # VF FLR from guest's sysfs
+
     @property
     def lmem_size(self) -> typing.Optional[int]:
         if self._lmem_size is None:
-- 
2.39.1


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

* [PATCH i-g-t 4/7] tools/vmtb: Fix guest timeout handling and PCI BDF matching
  2026-09-28  7:25 [PATCH i-g-t 0/7] tools/vmtb: Sync VM Test Bench core with current xe SR-IOV Adam Miszczak
                   ` (2 preceding siblings ...)
  2026-09-28  7:25 ` [PATCH i-g-t 3/7] tools/vmtb: Align driver/device layer with current xe SR-IOV interfaces Adam Miszczak
@ 2026-09-28  7:25 ` Adam Miszczak
  2026-10-08 13:55   ` Bernatowicz, Marcin
  2026-09-28  7:25 ` [PATCH i-g-t 5/7] tools/vmtb: Add pre-test environment cleanup Adam Miszczak
                   ` (6 subsequent siblings)
  10 siblings, 1 reply; 19+ messages in thread
From: Adam Miszczak @ 2026-09-28  7:25 UTC (permalink / raw)
  To: igt-dev; +Cc: marcin.bernatowicz, kamil.konieczny

Resolve timeouts from keyword or positional arguments and function
defaults. Give VM power-off a configurable 60-second default.

Match complete PCI BDF names using hexadecimal fields and a literal
dot before the function number, rejecting malformed directory names.

Also, avoid nested f-string quotes for compatibility with older Python.

Signed-off-by: Adam Miszczak <adam.miszczak@linux.intel.com>
---
 tools/vmtb/bench/machines/virtual/vm.py | 48 +++++++++++++++++++------
 1 file changed, 38 insertions(+), 10 deletions(-)

diff --git a/tools/vmtb/bench/machines/virtual/vm.py b/tools/vmtb/bench/machines/virtual/vm.py
index 8229084d4..e0b6fb150 100644
--- a/tools/vmtb/bench/machines/virtual/vm.py
+++ b/tools/vmtb/bench/machines/virtual/vm.py
@@ -2,6 +2,7 @@
 # Copyright © 2024-2026 Intel Corporation
 
 import base64
+import inspect
 import json
 import logging
 import re
@@ -34,13 +35,39 @@ class VirtualMachine(MachineInterface):
 
         @classmethod
         def timeout_signal(cls, func: typing.Callable) -> typing.Callable:
+            timeout_default: int = DEFAULT_TIMEOUT
+
+            # Check for timeout provided as function signature default
+            func_sig = inspect.signature(func)
+            timeout_param = func_sig.parameters.get('timeout')
+            if timeout_param and isinstance(timeout_param.default, int):
+                timeout_default = timeout_param.default
+
+            # Check timeout parameter positional index
+            # (to avoid repeated introspection on every call)
+            timeout_positional_idx: typing.Optional[int] = None
+            positional_params = [
+                name for name, param in func_sig.parameters.items()
+                if param.kind == inspect.Parameter.POSITIONAL_OR_KEYWORD
+            ]
+            if 'timeout' in positional_params:
+                timeout_positional_idx = positional_params.index('timeout')
+
             def timeout_wrapper(*args: typing.Any, **kwargs: typing.Optional[typing.Any]) -> typing.Any:
-                timeout: int = DEFAULT_TIMEOUT
-                if len(args) > 2:
-                    timeout = args[2] # Argument position in execute_wait(self, pid, timeout)
-                elif kwargs.get('timeout') is not None:
-                    if isinstance(kwargs['timeout'], int):
-                        timeout = kwargs['timeout']
+                timeout: int = timeout_default
+
+                # Resolve timeout in this order:
+                # 1. Explicit keyword value, e.g. vm.func(timeout=60)
+                # 2. Explicit positional value, e.g. vm.func(..., 60)
+                # 3. Default function signature value, e.g. def func(self, timeout=60)
+                # 4. Default global value (DEFAULT_TIMEOUT)
+                timeout_kwarg = kwargs.get('timeout')
+                if isinstance(timeout_kwarg, int):
+                    timeout = timeout_kwarg
+                elif (timeout_positional_idx is not None
+                      and len(args) > timeout_positional_idx
+                      and isinstance(args[timeout_positional_idx], int)):
+                    timeout = args[timeout_positional_idx]
 
                 # mypy: silence the following problem in signal.signal() call:
                 # error: Argument 2 to "signal" has incompatible type "Callable[[Signals, FrameType], Any]";
@@ -89,7 +116,8 @@ class VirtualMachine(MachineInterface):
         self.dmesg_logger = self.__setup_dmesg_logger()
 
     def __str__(self) -> str:
-        return f'VM{self.vmnum}-VF:{self.passed_vf_bdfs[0] if self.passed_vf_bdfs else 'N/A'}'
+        vf_bdf = self.passed_vf_bdfs[0] if self.passed_vf_bdfs else 'N/A'
+        return f'VM{self.vmnum}-VF:{vf_bdf}'
 
     def __del__(self) -> None:
         if not self.is_running():
@@ -250,7 +278,7 @@ class VirtualMachine(MachineInterface):
 
         # Look for a directory name with a PCI BDF (e.g. 0000:1a:00.0)
         for bdf in dev_dir_ls:
-            match = re.match(r'\d{4}(?::[0-9a-z-A-Z]{2}){2}.[0-7]', bdf)
+            match = re.fullmatch(r'[0-9a-fA-F]{4}(?::[0-9a-fA-F]{2}){2}\.[0-7]', bdf)
             if match:
                 device = VirtualDevice(bdf, self)
                 detected_devices.append(device)
@@ -328,7 +356,7 @@ class VirtualMachine(MachineInterface):
         return False
 
     @Decorators.timeout_signal
-    def poweroff(self) -> None:
+    def poweroff(self, timeout: int = 60) -> None:
         """Power off VM via the Guest-Agent guest-shutdown(powerdown) command."""
         logger.debug('Powering off VM%s', self.vmnum)
         assert self.process
@@ -343,7 +371,7 @@ class VirtualMachine(MachineInterface):
             while event != 'SHUTDOWN':
                 event = self.qm.get_qmp_event()
         except exceptions.AlarmTimeoutError:
-            logger.warning('VM%s hanged on poweroff. Initiating forced termination', self.vmnum)
+            logger.warning('VM%s has not responded to power off request - force termination', self.vmnum)
             self.process.terminate()
         finally:
             # Wait and make sure that qemu shutdown
-- 
2.39.1


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

* [PATCH i-g-t 5/7] tools/vmtb: Add pre-test environment cleanup
  2026-09-28  7:25 [PATCH i-g-t 0/7] tools/vmtb: Sync VM Test Bench core with current xe SR-IOV Adam Miszczak
                   ` (3 preceding siblings ...)
  2026-09-28  7:25 ` [PATCH i-g-t 4/7] tools/vmtb: Fix guest timeout handling and PCI BDF matching Adam Miszczak
@ 2026-09-28  7:25 ` Adam Miszczak
  2026-10-08 13:55   ` Bernatowicz, Marcin
  2026-09-28  7:25 ` [PATCH i-g-t 6/7] tools/vmtb: Add VM dmesg wait support Adam Miszczak
                   ` (5 subsequent siblings)
  10 siblings, 1 reply; 19+ messages in thread
From: Adam Miszczak @ 2026-09-28  7:25 UTC (permalink / raw)
  To: igt-dev; +Cc: marcin.bernatowicz, kamil.konieczny

Introduce 'EnvironmentCleaner' to ensure a clean DUT state before each
test by removing leftovers from crashed, failed, or timed-out runs.
The cleaner handles:
- terminating orphaned QEMU processes (SIGTERM, then SIGKILL if needed)
- removing stale QEMU sockets (Guest Agent, QMP monitor)
- optionally removing leftover qcow2 guest images (disabled by default)
Wire EnvironmentCleaner().cleanup() into the VM setup fixtures in
vmm_flows/conftest.py so cleanup runs before every test setup phase.

Consolidate multi-step SR-IOV configuration teardown into a single
reset_sriov_config() function that removes VFs and restores
auto provisioning via debugfs.
Call reset_sriov_config() at test setup when leftover VFs are
detected, guarding against dirty state from crashed runs.

Drop the explicit provisioning attributes clearing
(clear_provisioning_attributes/reset_provisioning) and the unused
cancel_work() teardown step — restore_auto_provisioning is sufficient.
Remove implicit VF removal from create_vf() (handled by the setup check).

Signed-off-by: Adam Miszczak <adam.miszczak@linux.intel.com>
---
 tools/vmtb/bench/drivers/driver_interface.py |  1 +
 tools/vmtb/bench/drivers/xe.py               |  1 +
 tools/vmtb/bench/helpers/cleanup.py          | 91 ++++++++++++++++++++
 tools/vmtb/bench/machines/physical/device.py | 39 ++-------
 tools/vmtb/vmm_flows/conftest.py             | 34 ++++++--
 5 files changed, 126 insertions(+), 40 deletions(-)
 create mode 100644 tools/vmtb/bench/helpers/cleanup.py

diff --git a/tools/vmtb/bench/drivers/driver_interface.py b/tools/vmtb/bench/drivers/driver_interface.py
index 9d1e5ab00..498afa9af 100644
--- a/tools/vmtb/bench/drivers/driver_interface.py
+++ b/tools/vmtb/bench/drivers/driver_interface.py
@@ -146,6 +146,7 @@ class PfDriverInterface(DriverInterface, abc.ABC):
     def restore_auto_provisioning(self) -> None:
         raise NotImplementedError
 
+    # Deprecated - not used on xe
     @abc.abstractmethod
     def cancel_work(self) -> None:
         raise NotImplementedError
diff --git a/tools/vmtb/bench/drivers/xe.py b/tools/vmtb/bench/drivers/xe.py
index 479c1dd87..45182aad5 100644
--- a/tools/vmtb/bench/drivers/xe.py
+++ b/tools/vmtb/bench/drivers/xe.py
@@ -62,6 +62,7 @@ class XeDriver(PfDriverInterface):
         path = self.debugfs_path / 'sriov' / 'restore_auto_provisioning'
         self.write_debugfs(str(path), str(1))
 
+    # Deprecated - not used on xe
     def cancel_work(self) -> None:
         # Function to cancel all remaing work on GPU (for test cleanup).
         # Forcing reset (debugfs/gtM/force_reset_sync) shouldn't be used to idle GPU.
diff --git a/tools/vmtb/bench/helpers/cleanup.py b/tools/vmtb/bench/helpers/cleanup.py
new file mode 100644
index 000000000..f1d3e3f76
--- /dev/null
+++ b/tools/vmtb/bench/helpers/cleanup.py
@@ -0,0 +1,91 @@
+# SPDX-License-Identifier: MIT
+# Copyright © 2026 Intel Corporation
+
+import logging
+import subprocess
+import time
+from pathlib import Path
+
+logger = logging.getLogger('Cleanup')
+
+
+class EnvironmentCleaner:
+    """Pre-test environment cleanup utilities.
+
+    Ensures that leftovers from crashed, failed, or timed-out tests
+    are removed before the next test setup phase begins.
+    """
+
+    QEMU_PROCESS_NAME = 'qemu-system-x86_64'
+    SOCKET_PATTERNS = ['qga*.sock', 'mon*.sock']
+    QEMU_IMAGE_PATTERN = 'vm*_*_image.qcow2'
+
+    def __init__(self, work_dir: str = '.', remove_qemu_images: bool = False) -> None:
+        self.work_dir = Path(work_dir)
+        self.remove_qemu_images = remove_qemu_images
+
+    def cleanup(self) -> None:
+        """Perform full pre-test environment cleanup.
+        Handles:
+        - Terminating orphaned QEMU processes
+        - Removing stale QEMU sockets (Guest Agent, QMP monitor)
+        - Removing leftover QEMU qcow2 images (optionally)
+        """
+        logger.debug("Pre-test environment cleanup")
+        self.terminate_orphaned_qemu_processes()
+        self.remove_stale_sockets()
+        if self.remove_qemu_images:
+            self.remove_leftover_qemu_images()
+
+    def terminate_orphaned_qemu_processes(self) -> None:
+        """Find and terminate any leftover QEMU processes from previous test runs.
+           Try SIGTERM first, then SIGKILL if necessary."""
+        for signal in ('TERM', 'KILL'):
+            pids = self._find_qemu_pids()
+            if not pids:
+                return
+            for pid_str in pids:
+                logger.debug("Terminating (SIG%s) orphaned QEMU process (PID: %s)", signal, pid_str)
+                try:
+                    subprocess.run(['kill', f'-{signal}', pid_str], check=False)
+                except Exception as exc:
+                    logger.warning("Failed to %s QEMU PID %s: %s", signal, pid_str, exc)
+            time.sleep(1)  # Give the processes a moment to terminate
+
+    def _find_qemu_pids(self) -> list[str] | None:
+        """Return list of QEMU PIDs, or None if none found or pgrep unavailable."""
+        try:
+            result = subprocess.run(
+                ['pgrep', '-f', self.QEMU_PROCESS_NAME],
+                capture_output=True, text=True, check=False)
+        except FileNotFoundError:
+            logger.warning("pgrep not available, skipping orphan QEMU check")
+            return None
+
+        if result.returncode != 0:
+            return None
+
+        return [pid for pid in result.stdout.strip().split('\n') if pid] or None
+
+    def remove_stale_sockets(self) -> None:
+        """Remove leftover QEMU Guest Agent and QMP monitor sockets."""
+        for pattern in self.SOCKET_PATTERNS:
+            for sock_path in Path('/tmp').glob(pattern):
+                try:
+                    if not sock_path.is_socket():
+                        continue
+                    logger.debug("Removing stale VMTB/QEMU socket: %s", sock_path)
+                    sock_path.unlink()
+                except OSError as exc:
+                    logger.warning("Failed to remove stale socket %s: %s", sock_path, exc)
+
+    def remove_leftover_qemu_images(self) -> None:
+        """Remove leftover QEMU qcow2 images from previous test runs."""
+        for image_path in self.work_dir.glob(self.QEMU_IMAGE_PATTERN):
+            try:
+                if not image_path.is_file():
+                    continue
+                logger.debug("Removing leftover VMTB/QEMU guest image: %s", image_path)
+                image_path.unlink()
+            except OSError as exc:
+                logger.warning("Failed to remove leftover image %s: %s", image_path, exc)
diff --git a/tools/vmtb/bench/machines/physical/device.py b/tools/vmtb/bench/machines/physical/device.py
index b4eebc245..7cbbee277 100644
--- a/tools/vmtb/bench/machines/physical/device.py
+++ b/tools/vmtb/bench/machines/physical/device.py
@@ -91,9 +91,6 @@ class Device(DeviceInterface):
         Disable SRIOV drivers autoprobe to allow VFIO driver override for VFs.
         """
         logger.info("[%s] Enable %s VFs", self.pci_info.bdf, num)
-        if self.get_current_vfs() != 0:
-            self.remove_vfs()
-
         self.numvf = num
 
         # Disable driver autoprobe to avoid driver load on VF (override to vfio is required)
@@ -233,36 +230,6 @@ class Device(DeviceInterface):
             self.driver.set_contexts_quota(fn_num, gt_num, resources_config.vfContexts)
             self.driver.set_doorbells_quota(fn_num, gt_num, resources_config.vfDoorbells)
 
-    def clear_provisioning_attributes(self, num_vfs: int) -> None:
-        """Clear provisioning attributes for a requested number of VFs."""
-        # Provisioning config are likely wiped out by (xe) debugfs/restore_auto_provisioning,
-        # but explicit clear shouldn't harm.
-        self.driver.set_bulk_sched_priority(SchedulingPriority.LOW)
-        self.driver.set_bulk_exec_quantum_ms(0)
-        self.driver.set_bulk_preempt_timeout_us(0)
-
-        for gt_num in range(self.get_num_gts()):
-            self.driver.set_pf_policy_reset_engine(gt_num, 0)
-            self.driver.set_doorbells_quota(0, gt_num, 0)
-            # PF contexts cannot be set from sysfs
-
-            for vf_num in range(1, num_vfs + 1):
-                self.driver.set_contexts_quota(vf_num, gt_num, 0)
-                self.driver.set_doorbells_quota(vf_num, gt_num, 0)
-                if not self.is_gt_media_type(gt_num):
-                    self.driver.set_vram_quota(vf_num, 0)
-                    self.driver.set_ggtt_quota(vf_num, gt_num, 0)
-
-    def reset_provisioning(self, num_vfs: int) -> None:
-        """Clear provisioning config for a given number of VFs and restore auto provisioning mode."""
-        logger.info("[%s] Reset %sxVF provisioning configuration", self.pci_info.bdf, num_vfs)
-        self.clear_provisioning_attributes(num_vfs)
-        self.driver.restore_auto_provisioning()
-
-    def cancel_work(self) -> None:
-        """Drop and reset remaining GPU execution at exit."""
-        self.driver.cancel_work()
-
     def get_scheduling_priority(self, fn_num: int) -> SchedulingPriority:
         """Get scheduling priority for a given VF or PF."""
         return self.driver.get_sched_priority(fn_num)
@@ -274,3 +241,9 @@ class Device(DeviceInterface):
     def set_pf_scheduling_priority(self, val: SchedulingPriority) -> None:
         """Set scheduling priority for PF only. High prioritizes PF execution over VFs."""
         self.driver.set_pf_sched_priority(val)
+
+    def reset_sriov_config(self) -> None:
+        """Clear setup - remove enabled VFs and restore auto provisioning mode."""
+        logger.info("[%s] Reset VFs configuration", self.pci_info.bdf)
+        self.remove_vfs()
+        self.driver.restore_auto_provisioning()
diff --git a/tools/vmtb/vmm_flows/conftest.py b/tools/vmtb/vmm_flows/conftest.py
index ba6487c84..df395794c 100644
--- a/tools/vmtb/vmm_flows/conftest.py
+++ b/tools/vmtb/vmm_flows/conftest.py
@@ -16,6 +16,7 @@ from bench.configurators.vgpu_profile_config import (VfProvisioningMode,
                                                      VfSchedulingMode,
                                                      VgpuProfileConfigurator)
 from bench.configurators.vmtb_config import VmtbConfigurator
+from bench.helpers.cleanup import EnvironmentCleaner
 from bench.helpers.log import HOST_DMESG_FILE
 from bench.machines.host import Device, Host
 from bench.machines.virtual.vm import VirtualMachine
@@ -203,10 +204,7 @@ class VmmTestingSetup:
         except Exception as exc:
             logger.error("Error on test teardown (%s)", exc)
         finally:
-            num_vfs = self.get_dut().get_current_vfs()
-            self.get_dut().remove_vfs()
-            self.get_dut().reset_provisioning(num_vfs)
-            self.get_dut().cancel_work()
+            self.get_dut().reset_sriov_config()
 
             if self.testing_config.unload_host_drivers_on_teardown:
                 self.host.unload_drivers()
@@ -256,6 +254,9 @@ def fixture_setup_vms(get_vmtb_config, get_cmdline_config, get_host, request):
     tc: VmmTestingConfig = request.param
     logger.debug(repr(tc))
 
+    # Pre-test cleanup: remove leftovers from crashed/failed/timed-out tests
+    EnvironmentCleaner().cleanup()
+
     host: Host = get_host
     ts: VmmTestingSetup = VmmTestingSetup(get_vmtb_config, get_cmdline_config, host, tc)
 
@@ -263,6 +264,10 @@ def fixture_setup_vms(get_vmtb_config, get_cmdline_config, get_host, request):
     num_vfs = ts.testing_config.num_vfs
     num_vms = ts.get_num_vms()
 
+    if device.get_current_vfs() != 0:
+        logger.debug("Test environment is not clean - remove VFs remains")
+        device.reset_sriov_config()
+
     logger.info('[Test setup: %sVF-%sVM]', num_vfs, num_vms)
 
     if ts.testing_config.provisioning_mode is VfProvisioningMode.VGPU_PROFILE:
@@ -283,9 +288,6 @@ def fixture_setup_vms(get_vmtb_config, get_cmdline_config, get_host, request):
         if tc.wa_reduce_vf_lmem and device.has_lmem():
             ts.vgpu_profile.resources.vfLmem = org_vgpu_profile_vfLmem
 
-    else:
-        device.driver.restore_auto_provisioning()
-
     assert num_vfs <= ts.total_vfs, f'Requested number of VFs ({num_vfs}) exceeds total VFs ({ts.total_vfs})'
     device.create_vf(num_vfs)
 
@@ -320,9 +322,18 @@ def fixture_setup_vms(get_vmtb_config, get_cmdline_config, get_host, request):
 @pytest.fixture(scope='function')
 def create_1host_1vm(get_vmtb_config, get_cmdline_config, get_host):
     num_vfs, num_vms = 1, 1
+
+    # Pre-test cleanup: remove leftovers from crashed/failed/timed-out tests
+    EnvironmentCleaner().cleanup()
+
     ts: VmmTestingSetup = VmmTestingSetup(get_vmtb_config, get_cmdline_config, get_host,
                                           VmmTestingConfig(num_vfs, num_vms))
 
+    device: Device = ts.get_dut()
+    if device.get_current_vfs() != 0:
+        logger.debug("Test environment is not clean - remove VFs remains")
+        device.reset_sriov_config()
+
     logger.info('[Test setup: %sVF-%sVM]', num_vfs, num_vms)
     logger.debug(repr(ts.testing_config))
 
@@ -336,9 +347,18 @@ def create_1host_1vm(get_vmtb_config, get_cmdline_config, get_host):
 @pytest.fixture(scope='function')
 def create_1host_2vm(get_vmtb_config, get_cmdline_config, get_host):
     num_vfs, num_vms = 2, 2
+
+    # Pre-test cleanup: remove leftovers from crashed/failed/timed-out tests
+    EnvironmentCleaner().cleanup()
+
     ts: VmmTestingSetup = VmmTestingSetup(get_vmtb_config, get_cmdline_config, get_host,
                                           VmmTestingConfig(num_vfs, num_vms))
 
+    device: Device = ts.get_dut()
+    if device.get_current_vfs() != 0:
+        logger.debug("Test environment is not clean - remove VFs remains")
+        device.reset_sriov_config()
+
     logger.info('[Test setup: %sVF-%sVM]', num_vfs, num_vms)
     logger.debug(repr(ts.testing_config))
 
-- 
2.39.1


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

* [PATCH i-g-t 6/7] tools/vmtb: Add VM dmesg wait support
  2026-09-28  7:25 [PATCH i-g-t 0/7] tools/vmtb: Sync VM Test Bench core with current xe SR-IOV Adam Miszczak
                   ` (4 preceding siblings ...)
  2026-09-28  7:25 ` [PATCH i-g-t 5/7] tools/vmtb: Add pre-test environment cleanup Adam Miszczak
@ 2026-09-28  7:25 ` Adam Miszczak
  2026-10-08 13:56   ` Bernatowicz, Marcin
  2026-09-28  7:26 ` [PATCH i-g-t 7/7] tools/vmtb: Extend IGT and WSIM executors Adam Miszczak
                   ` (4 subsequent siblings)
  10 siblings, 1 reply; 19+ messages in thread
From: Adam Miszczak @ 2026-09-28  7:25 UTC (permalink / raw)
  To: igt-dev; +Cc: marcin.bernatowicz, kamil.konieczny

Introduce VirtualMachine.wait_for_dmesg() to block until a line matching
a given regex pattern appears on the guest serial console, returning the
matched line or raising an exception on timeout.

QEMU output (including guest dmesg) is buffered in a thread-safe buffer
guarded by a condition variable, notifying waiters as new lines arrive.
ANSI escape (color) codes are stripped from dmesg before logging.

New function provides 'from_beginning' parameter:
default (from_beginning=True) scans the whole dmesg collected since
power on, while from_beginning=False resumes right after the previously
matched line (uses cursor shared for all patterns).

Signed-off-by: Adam Miszczak <adam.miszczak@linux.intel.com>
---
 tools/vmtb/bench/machines/virtual/vm.py | 48 ++++++++++++++++++++++++-
 1 file changed, 47 insertions(+), 1 deletion(-)

diff --git a/tools/vmtb/bench/machines/virtual/vm.py b/tools/vmtb/bench/machines/virtual/vm.py
index e0b6fb150..6b8425d13 100644
--- a/tools/vmtb/bench/machines/virtual/vm.py
+++ b/tools/vmtb/bench/machines/virtual/vm.py
@@ -26,6 +26,10 @@ from bench.machines.virtual.device import VirtualDevice
 
 logger = logging.getLogger('VirtualMachine')
 
+# Matches ANSI escape sequences (e.g. color codes like \x1b[0;32m) emitted on the
+# guest serial console, so they can be stripped before logging dmesg lines.
+ANSI_ESCAPE_RE = re.compile(r'\x1b\[[0-9;]*[A-Za-z]')
+
 
 class VirtualMachine(MachineInterface):
     class Decorators():
@@ -113,6 +117,13 @@ class VirtualMachine(MachineInterface):
         self.migrate_destination_vm: bool = False
         self._migration_ongoing: bool = False
 
+        # Buffer of guest serial console (dmesg) lines captured since power on,
+        # guarded by a condition variable to allow waiting for specific messages.
+        self._dmesg_buffer: typing.List[str] = []
+        self._dmesg_condition = threading.Condition()
+        # Dmesg wait cursor (shared across patterns): first dmesg line not consumed yet
+        self._dmesg_scan_idx: int = 0
+
         self.dmesg_logger = self.__setup_dmesg_logger()
 
     def __str__(self) -> str:
@@ -180,7 +191,11 @@ class VirtualMachine(MachineInterface):
 
     def __log_qemu_output(self, out: typing.TextIO) -> None:
         for line in iter(out.readline, ''):
-            self.dmesg_logger.debug(line.strip())
+            stripped_line = ANSI_ESCAPE_RE.sub('', line).strip()
+            self.dmesg_logger.debug(stripped_line)
+            with self._dmesg_condition:
+                self._dmesg_buffer.append(stripped_line)
+                self._dmesg_condition.notify_all()
 
     def __sockets_exists(self) -> bool:
         return self.questagent_sockpath.exists() and self.qmp_sockpath.exists()
@@ -587,6 +602,37 @@ class VirtualMachine(MachineInterface):
 
         return True
 
+    @Decorators.timeout_signal
+    def wait_for_dmesg(self, pattern: str, from_beginning: bool = True, timeout: int = 300) -> str:
+        """Wait until a line matching the given regex pattern appears in the guest dmesg.
+
+        Scans the guest serial console output and blocks until a matching line is observed.
+        By default the whole dmesg collected since VM power on is scanned.
+        Clear 'from_beginning' to start right after the line matched by a previous
+        wait_for_dmesg() call, to match consecutive occurrences of a repeating message.
+        Returns the matched dmesg line (e.g. for further parsing) or raises AlarmTimeoutError
+        if the pattern does not appear within the given timeout (in seconds).
+        """
+        regex = re.compile(pattern)
+        logger.debug("[VM%s] Waiting for dmesg pattern: '%s'%s", self.vmnum, pattern,
+                     '' if from_beginning else ' (since last match)')
+
+        with self._dmesg_condition:
+            scan_idx = 0 if from_beginning else self._dmesg_scan_idx
+            while True:
+                while scan_idx < len(self._dmesg_buffer):
+                    line = self._dmesg_buffer[scan_idx]
+                    scan_idx += 1
+                    if regex.search(line):
+                        # Do not rewind the cursor
+                        self._dmesg_scan_idx = max(self._dmesg_scan_idx, scan_idx)
+                        logger.debug("[VM%s] Matched dmesg pattern: '%s'", self.vmnum, pattern)
+                        return line
+
+                # Poll with a short timeout so the SIGALRM raised by
+                # Decorators.timeout_signal can interrupt the wait and propagate.
+                self._dmesg_condition.wait(timeout=1)
+
     def save_state_init(self) -> None:
         """Initiate VM snapshot-save operation (asynchronous)."""
         logger.debug("Starting VM%s state save (snapshot)", self.vmnum)
-- 
2.39.1


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

* [PATCH i-g-t 7/7] tools/vmtb: Extend IGT and WSIM executors
  2026-09-28  7:25 [PATCH i-g-t 0/7] tools/vmtb: Sync VM Test Bench core with current xe SR-IOV Adam Miszczak
                   ` (5 preceding siblings ...)
  2026-09-28  7:25 ` [PATCH i-g-t 6/7] tools/vmtb: Add VM dmesg wait support Adam Miszczak
@ 2026-09-28  7:26 ` Adam Miszczak
  2026-10-08 12:59   ` Bernatowicz, Marcin
  2026-09-28 20:28 ` ✓ i915.CI.BAT: success for tools/vmtb: Sync VM Test Bench core with current xe SR-IOV Patchwork
                   ` (3 subsequent siblings)
  10 siblings, 1 reply; 19+ messages in thread
From: Adam Miszczak @ 2026-09-28  7:26 UTC (permalink / raw)
  To: igt-dev; +Cc: marcin.bernatowicz, kamil.konieczny

Introduce an optional 'env_vars' param (list) on IgtExecutor
that injects 'igt_runner --environment KEY=VALUE' options,
allowing environment variables to be passed to IGT test processes.

Cache GemWsim ProcessResult (like IgtExecutor) so status()/wait()
results are reused instead of re-fetched.
Add a common clear_results() to both: GemWsim and IgtExecutor.

Additionally, align test_migration with executors' changes:
- use common IGT/WSIM clear_results() instead of instance checks.
- call check_results() before failing so the IGT or WSIM
  error output is logged on unexpected workload exit.

Signed-off-by: Adam Miszczak <adam.miszczak@linux.intel.com>
---
 tools/vmtb/bench/executors/gem_wsim.py | 38 +++++++++++++++++++++-----
 tools/vmtb/bench/executors/igt.py      | 10 ++++++-
 tools/vmtb/vmm_flows/test_migration.py | 22 +++++++++------
 3 files changed, 54 insertions(+), 16 deletions(-)

diff --git a/tools/vmtb/bench/executors/gem_wsim.py b/tools/vmtb/bench/executors/gem_wsim.py
index 0cdfcc7e4..0510a9f9a 100644
--- a/tools/vmtb/bench/executors/gem_wsim.py
+++ b/tools/vmtb/bench/executors/gem_wsim.py
@@ -8,7 +8,7 @@ from pathlib import Path
 
 from bench import exceptions
 from bench.executors.shell import ShellExecutor
-from bench.machines.machine_interface import DEFAULT_TIMEOUT, MachineInterface
+from bench.machines.machine_interface import (DEFAULT_TIMEOUT, MachineInterface, ProcessResult)
 
 logger = logging.getLogger('GemWsim')
 
@@ -44,26 +44,45 @@ class GemWsim(ShellExecutor):
 
         wsim_path = Path(target.get_igt_config().test_dir) / 'benchmarks' / 'gem_wsim'
         command = f'{wsim_path} -w {workload} -c {num_clients} -r {num_repeats}'
+        self.proc_result = ProcessResult()
 
         super().__init__(target, command, timeout)
 
     def __str__(self) -> str:
         return f'gem_wsim({self.machine_id}:{self.pid})'
 
+    # ShellExecutor overrides
+    def status(self) -> ProcessResult:
+        if self.proc_result.exited:
+            return self.proc_result
+
+        self.proc_result = super().status()
+        return self.proc_result
+
+    def wait(self) -> ProcessResult:
+        if self.proc_result.exited:
+            return self.proc_result
+
+        self.proc_result = super().wait()
+        return self.proc_result
+
+    # IGT/WSIM specific methods
     def is_running(self) -> bool:
         return not self.status().exited
 
     def wait_results(self) -> GemWsimResult:
-        proc_result = self.wait()
-        if proc_result.exit_code == 0:
-            logger.info('%s: %s', self, proc_result.stdout)
+        if not self.proc_result.exited:
+            self.proc_result = self.wait()
+
+        if self.proc_result.exit_code == 0:
+            logger.info('%s: %s', self, self.proc_result.stdout)
             # Try parse output ex.: 19.449s elapsed (102.836 workloads/s)
             pattern = r'(?P<elapsed>\d+(\.\d*)?|\.\d+)s elapsed \((?P<wps>\d+(\.\d*)?|\.\d+) workloads/s\)'
-            match = re.search(pattern, proc_result.stdout, re.MULTILINE)
+            match = re.search(pattern, self.proc_result.stdout, re.MULTILINE)
             if match:
                 return GemWsimResult(float(match.group('elapsed')), float(match.group('wps')))
-        raise exceptions.GemWsimError(f'{self}: exit_code: {proc_result.exit_code}'
-                                      f' stdout: {proc_result.stdout} stderr: {proc_result.stderr}')
+        raise exceptions.GemWsimError(f'{self}: exit_code: {self.proc_result.exit_code}'
+                                      f' stdout: {self.proc_result.stdout} stderr: {self.proc_result.stderr}')
 
     def check_results(self) -> bool:
         """Verify gem_wsim execution results. Return True for workload success, False on fail."""
@@ -78,6 +97,11 @@ class GemWsim(ShellExecutor):
                       self.target, wl_results.elapsed_sec, wl_results.workloads_per_sec)
         return True
 
+    def clear_results(self) -> None:
+        """Clear gem_wsim results cache."""
+        self.proc_result = ProcessResult()
+        self.machine_id = str(self.target)
+
 
 def gem_wsim_parallel_exec_and_check(vms: typing.List[MachineInterface], workload: str, iterations: int,
                                      expected: typing.Optional[GemWsimResult] = None) -> GemWsimResult:
diff --git a/tools/vmtb/bench/executors/igt.py b/tools/vmtb/bench/executors/igt.py
index f443fb99e..f4587c1fb 100644
--- a/tools/vmtb/bench/executors/igt.py
+++ b/tools/vmtb/bench/executors/igt.py
@@ -119,6 +119,7 @@ class IgtExecutor(ExecutorInterface):
     def __init__(self, target: MachineInterface,
                  test: typing.Union[str, IgtType],
                  num_repeats: int = 1,
+                 env_vars: typing.Optional[typing.List[str]] = None,
                  timeout: int = DEFAULT_TIMEOUT) -> None:
         self.igt_config = target.get_igt_config()
 
@@ -126,7 +127,9 @@ class IgtExecutor(ExecutorInterface):
         #ld_library_path = f'LD_LIBRARY_PATH={igt_config.lib_dir}'
         runner = posixpath.join(self.igt_config.tool_dir, 'igt_runner')
         testlist = '/tmp/igt_executor.testlist'
-        command = f'{runner} {self.igt_config.options} ' \
+        # Set test environment variables via igt_runner: --environment KEY=VALUE (or KEY)
+        env_options = ''.join(f'--environment {env} ' for env in env_vars) if env_vars else ''
+        command = f'{runner} {self.igt_config.options} {env_options}' \
                   f'--test-list {testlist} {self.igt_config.test_dir} {self.igt_config.result_dir}'
         self.results: typing.Dict[str, typing.Any] = {}
         self.target: MachineInterface = target
@@ -176,6 +179,11 @@ class IgtExecutor(ExecutorInterface):
         logger.error("[%s] IGT failed: %s", self.target, self.proc_result)
         return False
 
+    def clear_results(self) -> None:
+        """Clear IGT results cache."""
+        self.proc_result = ProcessResult()
+        self.results.clear()
+
     def get_results_log(self) -> typing.Dict:
         # Results are cached
         if self.results:
diff --git a/tools/vmtb/vmm_flows/test_migration.py b/tools/vmtb/vmm_flows/test_migration.py
index 8a3f10d52..c13350fd2 100644
--- a/tools/vmtb/vmm_flows/test_migration.py
+++ b/tools/vmtb/vmm_flows/test_migration.py
@@ -233,7 +233,9 @@ class BaseTestBusyMigration:
         logger.debug("Execute migration in-flight workload on source VM")
         migration_wl = run_source_workload
         time.sleep(IGT_INIT_DELAY)
-        assert migration_wl.is_running(), 'IGT/wsim migration workload is not running on source VM'
+        if not migration_wl.is_running():
+            migration_wl.check_results()
+            assert False, 'IGT/wsim migration workload is not running on source VM'
 
         # Pause VM and save snapshot
         logger.debug("Pause execution and save source VM state")
@@ -267,10 +269,7 @@ class BaseTestBusyMigration:
 
         # Patch the source IgtExecutor/GemWsim instance with the current VM
         migration_wl.target = vm_dst
-        if isinstance(migration_wl, IgtExecutor):
-            # Clear IGT test results cache - remove post-save source VM results
-            # TODO: implement common IgtExecutor/GemWsim results clear interface to avoid instance type check
-            migration_wl.results.clear()
+        migration_wl.clear_results()
 
         # Load the source state snapshot
         logger.debug("Restore source state on the destination VM")
@@ -281,7 +280,10 @@ class BaseTestBusyMigration:
         sync_value = random.randint(1, 0xFFFF)
         assert vm_dst.ga.sync(sync_value)['return'] == sync_value
 
-        assert migration_wl.is_running(), 'IGT/wsim migration workload is not running on destination VM'
+        if not migration_wl.is_running():
+            migration_wl.check_results()
+            assert False, 'IGT/wsim migration workload is not running on destination VM'
+
         time.sleep(IGT_RESTORE_DELAY)
 
         assert migration_wl.check_results(), 'VF migration workload failed on destination VM (post-restore)'
@@ -824,7 +826,9 @@ class BaseTestDoubleMigration:
         logger.debug("Execute throughout-migration workload on source VM")
         migration_wl: GemWsim = run_source_workload
         time.sleep(IGT_INIT_DELAY)
-        assert migration_wl.is_running(), 'IGT/wsim migration workload is not running on source VM'
+        if not migration_wl.is_running():
+            migration_wl.check_results()
+            assert False, 'IGT/wsim migration workload is not running on source VM'
 
         # Pause source VM and save snapshot
         logger.debug("Pause execution and save source VM state (snapshot #1)")
@@ -1113,7 +1117,9 @@ def test_2vm_pause_resume(create_1host_2vm):
 
     # Allow wsim WL to run some time
     time.sleep(IGT_INIT_DELAY)
-    assert gem_wsim_vm0.is_running()
+    if not gem_wsim_vm0.is_running():
+        gem_wsim_vm0.check_results()
+        assert False, 'IGT/wsim workload is not running on VM0'
 
     logger.debug("Submit IGT WL (gem_spin_batch) on VM1")
     igt_vm1 = IgtExecutor(vm1, IgtType.SPIN_BATCH)
-- 
2.39.1


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

* ✓ i915.CI.BAT: success for tools/vmtb: Sync VM Test Bench core with current xe SR-IOV
  2026-09-28  7:25 [PATCH i-g-t 0/7] tools/vmtb: Sync VM Test Bench core with current xe SR-IOV Adam Miszczak
                   ` (6 preceding siblings ...)
  2026-09-28  7:26 ` [PATCH i-g-t 7/7] tools/vmtb: Extend IGT and WSIM executors Adam Miszczak
@ 2026-09-28 20:28 ` Patchwork
  2026-09-28 20:47 ` ✓ Xe.CI.BAT: " Patchwork
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 19+ messages in thread
From: Patchwork @ 2026-09-28 20:28 UTC (permalink / raw)
  To: Adam Miszczak; +Cc: igt-dev

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

== Series Details ==

Series: tools/vmtb: Sync VM Test Bench core with current xe SR-IOV
URL   : https://patchwork.freedesktop.org/series/175090/
State : success

== Summary ==

CI Bug Log - changes from IGT_9114 -> IGTPW_15909
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

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

Participating hosts (39 -> 38)
------------------------------

  Missing    (1): bat-dg2-13 


Changes
-------

  No changes found


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

  * CI: CI-20190529 -> None
  * IGT: IGT_9114 -> IGTPW_15909

  CI-20190529: 20190529
  CI_DRM_19232: 972eeb850a4ca07aba05ccb805db28a33eab2c9a @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_15909: 36489129f40b37725a6324d29e5a0a3e50d1af82 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  IGT_9114: 916c79cfb7675ca01607dcd821f8c49d4f633a6f @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git

== Logs ==

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

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

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

* ✓ Xe.CI.BAT: success for tools/vmtb: Sync VM Test Bench core with current xe SR-IOV
  2026-09-28  7:25 [PATCH i-g-t 0/7] tools/vmtb: Sync VM Test Bench core with current xe SR-IOV Adam Miszczak
                   ` (7 preceding siblings ...)
  2026-09-28 20:28 ` ✓ i915.CI.BAT: success for tools/vmtb: Sync VM Test Bench core with current xe SR-IOV Patchwork
@ 2026-09-28 20:47 ` Patchwork
  2026-09-29  2:19 ` ✗ Xe.CI.FULL: failure " Patchwork
  2026-09-29  4:08 ` ✗ i915.CI.Full: " Patchwork
  10 siblings, 0 replies; 19+ messages in thread
From: Patchwork @ 2026-09-28 20:47 UTC (permalink / raw)
  To: Adam Miszczak; +Cc: igt-dev

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

== Series Details ==

Series: tools/vmtb: Sync VM Test Bench core with current xe SR-IOV
URL   : https://patchwork.freedesktop.org/series/175090/
State : success

== Summary ==

CI Bug Log - changes from XEIGT_9114_BAT -> XEIGTPW_15909_BAT
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (13 -> 13)
------------------------------

  No changes in participating hosts

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

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

### IGT changes ###

#### Possible fixes ####

  * igt@core_hotunplug@unbind-rebind:
    - bat-nvls-1:         [DMESG-WARN][1] ([Intel XE#8762] / [Intel XE#9069]) -> [PASS][2]
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9114/bat-nvls-1/igt@core_hotunplug@unbind-rebind.html
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/bat-nvls-1/igt@core_hotunplug@unbind-rebind.html

  
  [Intel XE#8762]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8762
  [Intel XE#9069]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9069


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

  * IGT: IGT_9114 -> IGTPW_15909

  IGTPW_15909: 36489129f40b37725a6324d29e5a0a3e50d1af82 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  IGT_9114: 916c79cfb7675ca01607dcd821f8c49d4f633a6f @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  xe-5837-972eeb850a4ca07aba05ccb805db28a33eab2c9a: 972eeb850a4ca07aba05ccb805db28a33eab2c9a

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/index.html

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

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

* ✗ Xe.CI.FULL: failure for tools/vmtb: Sync VM Test Bench core with current xe SR-IOV
  2026-09-28  7:25 [PATCH i-g-t 0/7] tools/vmtb: Sync VM Test Bench core with current xe SR-IOV Adam Miszczak
                   ` (8 preceding siblings ...)
  2026-09-28 20:47 ` ✓ Xe.CI.BAT: " Patchwork
@ 2026-09-29  2:19 ` Patchwork
  2026-09-29  4:08 ` ✗ i915.CI.Full: " Patchwork
  10 siblings, 0 replies; 19+ messages in thread
From: Patchwork @ 2026-09-29  2:19 UTC (permalink / raw)
  To: Adam Miszczak; +Cc: igt-dev

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

== Series Details ==

Series: tools/vmtb: Sync VM Test Bench core with current xe SR-IOV
URL   : https://patchwork.freedesktop.org/series/175090/
State : failure

== Summary ==

CI Bug Log - changes from XEIGT_9114_FULL -> XEIGTPW_15909_FULL
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with XEIGTPW_15909_FULL absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in XEIGTPW_15909_FULL, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
  to document this new failure mode, which will reduce false positives in CI.

  

Participating hosts (3 -> 3)
------------------------------

  No changes in participating hosts

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

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

### IGT changes ###

#### Possible regressions ####

  * igt@kms_pm_rpm@legacy-planes:
    - shard-ptl:          [PASS][1] -> [SKIP][2]
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9114/shard-ptl-4/igt@kms_pm_rpm@legacy-planes.html
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-7/igt@kms_pm_rpm@legacy-planes.html

  * igt@xe_fault_injection@vm-create-fail-xe_vm_create_scratch:
    - shard-bmg:          [PASS][3] -> [ABORT][4] +1 other test abort
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9114/shard-bmg-8/igt@xe_fault_injection@vm-create-fail-xe_vm_create_scratch.html
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-3/igt@xe_fault_injection@vm-create-fail-xe_vm_create_scratch.html

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

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

### IGT changes ###

#### Issues hit ####

  * igt@intel_hwmon@hwmon-write:
    - shard-ptl:          NOTRUN -> [SKIP][5] ([Intel XE#7225])
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-4/igt@intel_hwmon@hwmon-write.html

  * igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels:
    - shard-bmg:          NOTRUN -> [SKIP][6] ([Intel XE#2370])
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-2/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html

  * igt@kms_big_fb@4-tiled-32bpp-rotate-90:
    - shard-bmg:          NOTRUN -> [SKIP][7] ([Intel XE#2327]) +1 other test skip
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-10/igt@kms_big_fb@4-tiled-32bpp-rotate-90.html

  * igt@kms_big_fb@linear-16bpp-rotate-270:
    - shard-ptl:          NOTRUN -> [SKIP][8] ([Intel XE#5901]) +2 other tests skip
   [8]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-7/igt@kms_big_fb@linear-16bpp-rotate-270.html

  * igt@kms_big_fb@x-tiled-16bpp-rotate-270:
    - shard-ptl:          NOTRUN -> [SKIP][9] ([Intel XE#5808]) +14 other tests skip
   [9]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-8/igt@kms_big_fb@x-tiled-16bpp-rotate-270.html

  * igt@kms_big_fb@x-tiled-32bpp-rotate-90:
    - shard-lnl:          NOTRUN -> [SKIP][10] ([Intel XE#1407]) +1 other test skip
   [10]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-6/igt@kms_big_fb@x-tiled-32bpp-rotate-90.html

  * igt@kms_big_fb@x-tiled-addfb:
    - shard-ptl:          NOTRUN -> [SKIP][11] ([Intel XE#5850]) +1 other test skip
   [11]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-8/igt@kms_big_fb@x-tiled-addfb.html

  * igt@kms_big_fb@x-tiled-addfb-size-offset-overflow:
    - shard-ptl:          NOTRUN -> [SKIP][12] ([Intel XE#5851])
   [12]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-5/igt@kms_big_fb@x-tiled-addfb-size-offset-overflow.html

  * igt@kms_big_fb@y-tiled-addfb:
    - shard-bmg:          NOTRUN -> [SKIP][13] ([Intel XE#2328] / [Intel XE#7367])
   [13]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-8/igt@kms_big_fb@y-tiled-addfb.html

  * igt@kms_big_fb@y-tiled-addfb-size-overflow:
    - shard-bmg:          NOTRUN -> [SKIP][14] ([Intel XE#610] / [Intel XE#7387])
   [14]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-5/igt@kms_big_fb@y-tiled-addfb-size-overflow.html

  * igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
    - shard-bmg:          NOTRUN -> [SKIP][15] ([Intel XE#1124]) +5 other tests skip
   [15]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-1/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0:
    - shard-lnl:          NOTRUN -> [SKIP][16] ([Intel XE#1124]) +1 other test skip
   [16]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-1/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0.html

  * igt@kms_bw@connected-linear-tiling-3-displays-target-2560x1440p:
    - shard-ptl:          NOTRUN -> [SKIP][17] ([Intel XE#7679])
   [17]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-4/igt@kms_bw@connected-linear-tiling-3-displays-target-2560x1440p.html

  * igt@kms_bw@linear-tiling-3-displays-target-2160x1440p:
    - shard-lnl:          NOTRUN -> [SKIP][18] ([Intel XE#367])
   [18]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-3/igt@kms_bw@linear-tiling-3-displays-target-2160x1440p.html

  * igt@kms_bw@linear-tiling-4-displays-target-1920x1080p:
    - shard-ptl:          NOTRUN -> [SKIP][19] ([Intel XE#367]) +1 other test skip
   [19]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-7/igt@kms_bw@linear-tiling-4-displays-target-1920x1080p.html

  * igt@kms_bw@linear-tiling-4-displays-target-3840x2160p:
    - shard-bmg:          NOTRUN -> [SKIP][20] ([Intel XE#367])
   [20]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-4/igt@kms_bw@linear-tiling-4-displays-target-3840x2160p.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs-cc:
    - shard-ptl:          NOTRUN -> [SKIP][21] ([Intel XE#5822]) +10 other tests skip
   [21]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-5/igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs-cc.html

  * igt@kms_ccs@ccs-on-another-bo-y-tiled-gen12-rc-ccs:
    - shard-lnl:          NOTRUN -> [SKIP][22] ([Intel XE#2887]) +1 other test skip
   [22]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-1/igt@kms_ccs@ccs-on-another-bo-y-tiled-gen12-rc-ccs.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-bmg-ccs@pipe-b-edp-1:
    - shard-lnl:          NOTRUN -> [SKIP][23] ([Intel XE#2669] / [Intel XE#7389]) +3 other tests skip
   [23]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-8/igt@kms_ccs@crc-primary-rotation-180-4-tiled-bmg-ccs@pipe-b-edp-1.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-bmg-ccs@pipe-d-edp-1:
    - shard-ptl:          NOTRUN -> [SKIP][24] ([Intel XE#5823] / [Intel XE#6918]) +4 other tests skip
   [24]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-2/igt@kms_ccs@crc-primary-rotation-180-4-tiled-bmg-ccs@pipe-d-edp-1.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs:
    - shard-bmg:          [PASS][25] -> [INCOMPLETE][26] ([Intel XE#7084] / [Intel XE#8150]) +1 other test incomplete
   [25]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9114/shard-bmg-3/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html
   [26]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-10/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html

  * igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs:
    - shard-bmg:          NOTRUN -> [SKIP][27] ([Intel XE#3432]) +1 other test skip
   [27]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-6/igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs.html

  * igt@kms_ccs@random-ccs-data-y-tiled-gen12-rc-ccs-cc:
    - shard-bmg:          NOTRUN -> [SKIP][28] ([Intel XE#2887]) +7 other tests skip
   [28]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-5/igt@kms_ccs@random-ccs-data-y-tiled-gen12-rc-ccs-cc.html

  * igt@kms_cdclk@mode-transition:
    - shard-ptl:          NOTRUN -> [SKIP][29] ([Intel XE#9205]) +4 other tests skip
   [29]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-6/igt@kms_cdclk@mode-transition.html

  * igt@kms_cdclk@mode-transition-all-outputs:
    - shard-bmg:          NOTRUN -> [SKIP][30] ([Intel XE#2724] / [Intel XE#7449])
   [30]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-4/igt@kms_cdclk@mode-transition-all-outputs.html

  * igt@kms_chamelium_color@ctm-max:
    - shard-ptl:          NOTRUN -> [SKIP][31] ([Intel XE#5824]) +1 other test skip
   [31]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-3/igt@kms_chamelium_color@ctm-max.html

  * igt@kms_chamelium_color_pipeline@plane-ctm3x4:
    - shard-bmg:          NOTRUN -> [SKIP][32] ([Intel XE#7358]) +1 other test skip
   [32]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-2/igt@kms_chamelium_color_pipeline@plane-ctm3x4.html

  * igt@kms_chamelium_color_pipeline@plane-ctm3x4-lut1d:
    - shard-lnl:          NOTRUN -> [SKIP][33] ([Intel XE#7358]) +1 other test skip
   [33]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-8/igt@kms_chamelium_color_pipeline@plane-ctm3x4-lut1d.html

  * igt@kms_chamelium_frames@hdmi-crc-fast:
    - shard-lnl:          NOTRUN -> [SKIP][34] ([Intel XE#373]) +1 other test skip
   [34]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-3/igt@kms_chamelium_frames@hdmi-crc-fast.html

  * igt@kms_chamelium_frames@hdmi-crc-nonplanar-formats:
    - shard-ptl:          NOTRUN -> [SKIP][35] ([Intel XE#2252]) +4 other tests skip
   [35]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-7/igt@kms_chamelium_frames@hdmi-crc-nonplanar-formats.html

  * igt@kms_chamelium_hpd@hdmi-hpd-storm-disable:
    - shard-bmg:          NOTRUN -> [SKIP][36] ([Intel XE#2252]) +5 other tests skip
   [36]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-7/igt@kms_chamelium_hpd@hdmi-hpd-storm-disable.html

  * igt@kms_color_pipeline@plane-fixed-matrix-yuv-rgb-bt601-lut1d@pipe-c-plane-4:
    - shard-ptl:          NOTRUN -> [FAIL][37] ([Intel XE#9333]) +20 other tests fail
   [37]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-8/igt@kms_color_pipeline@plane-fixed-matrix-yuv-rgb-bt601-lut1d@pipe-c-plane-4.html

  * igt@kms_color_pipeline@plane-fixed-matrix-yuv-rgb-bt709-lim@pipe-a-plane-3:
    - shard-lnl:          NOTRUN -> [FAIL][38] ([Intel XE#9333]) +15 other tests fail
   [38]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-3/igt@kms_color_pipeline@plane-fixed-matrix-yuv-rgb-bt709-lim@pipe-a-plane-3.html

  * igt@kms_color_pipeline@plane-lut1d-ctm3x4-lut1d@pipe-d-plane-3:
    - shard-ptl:          NOTRUN -> [SKIP][39] ([Intel XE#6969]) +7 other tests skip
   [39]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-5/igt@kms_color_pipeline@plane-lut1d-ctm3x4-lut1d@pipe-d-plane-3.html

  * igt@kms_color_pipeline@plane-lut1d-ctm3x4@pipe-b-plane-4:
    - shard-bmg:          NOTRUN -> [SKIP][40] ([Intel XE#6969]) +7 other tests skip
   [40]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-10/igt@kms_color_pipeline@plane-lut1d-ctm3x4@pipe-b-plane-4.html

  * igt@kms_content_protection@atomic:
    - shard-bmg:          NOTRUN -> [FAIL][41] ([Intel XE#1178] / [Intel XE#3304] / [Intel XE#7374]) +3 other tests fail
   [41]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-3/igt@kms_content_protection@atomic.html
    - shard-ptl:          NOTRUN -> [SKIP][42] ([Intel XE#7642])
   [42]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-1/igt@kms_content_protection@atomic.html

  * igt@kms_content_protection@dp-mst-lic-type-1:
    - shard-lnl:          NOTRUN -> [SKIP][43] ([Intel XE#307] / [Intel XE#6974])
   [43]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-7/igt@kms_content_protection@dp-mst-lic-type-1.html

  * igt@kms_content_protection@dp-mst-type-1:
    - shard-ptl:          NOTRUN -> [SKIP][44] ([Intel XE#5832] / [Intel XE#6974])
   [44]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-2/igt@kms_content_protection@dp-mst-type-1.html

  * igt@kms_content_protection@dp-mst-type-1-suspend-resume:
    - shard-ptl:          NOTRUN -> [SKIP][45] ([Intel XE#6974])
   [45]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-8/igt@kms_content_protection@dp-mst-type-1-suspend-resume.html

  * igt@kms_cursor_crc@cursor-random-64x21:
    - shard-lnl:          NOTRUN -> [SKIP][46] ([Intel XE#1424])
   [46]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-5/igt@kms_cursor_crc@cursor-random-64x21.html

  * igt@kms_cursor_crc@cursor-rapid-movement-128x42:
    - shard-ptl:          NOTRUN -> [SKIP][47] ([Intel XE#5900])
   [47]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-5/igt@kms_cursor_crc@cursor-rapid-movement-128x42.html

  * igt@kms_cursor_crc@cursor-sliding-max-size:
    - shard-bmg:          NOTRUN -> [SKIP][48] ([Intel XE#2320])
   [48]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-10/igt@kms_cursor_crc@cursor-sliding-max-size.html

  * igt@kms_cursor_legacy@2x-long-cursor-vs-flip-atomic:
    - shard-ptl:          NOTRUN -> [SKIP][49] ([Intel XE#5962]) +2 other tests skip
   [49]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-6/igt@kms_cursor_legacy@2x-long-cursor-vs-flip-atomic.html

  * igt@kms_cursor_legacy@cursora-vs-flipb-legacy:
    - shard-lnl:          NOTRUN -> [SKIP][50] ([Intel XE#309] / [Intel XE#7343])
   [50]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-4/igt@kms_cursor_legacy@cursora-vs-flipb-legacy.html

  * igt@kms_cursor_legacy@cursorb-vs-flipb-toggle:
    - shard-ptl:          NOTRUN -> [SKIP][51] ([Intel XE#5962] / [Intel XE#7343]) +1 other test skip
   [51]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-5/igt@kms_cursor_legacy@cursorb-vs-flipb-toggle.html

  * igt@kms_dirtyfb@drrs-dirtyfb-ioctl:
    - shard-lnl:          NOTRUN -> [SKIP][52] ([Intel XE#1508])
   [52]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-3/igt@kms_dirtyfb@drrs-dirtyfb-ioctl.html

  * igt@kms_dirtyfb@fbc-dirtyfb-ioctl:
    - shard-bmg:          NOTRUN -> [SKIP][53] ([Intel XE#4210] / [Intel XE#7467])
   [53]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-2/igt@kms_dirtyfb@fbc-dirtyfb-ioctl.html

  * igt@kms_dp_link_training@uhbr-sst:
    - shard-ptl:          NOTRUN -> [SKIP][54] ([Intel XE#5870])
   [54]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-4/igt@kms_dp_link_training@uhbr-sst.html

  * igt@kms_dsc@dsc-with-bpc-formats-ultrajoiner:
    - shard-ptl:          NOTRUN -> [SKIP][55] ([Intel XE#5907])
   [55]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-3/igt@kms_dsc@dsc-with-bpc-formats-ultrajoiner.html

  * igt@kms_dsc@dsc-with-output-formats-with-bpc:
    - shard-bmg:          NOTRUN -> [SKIP][56] ([Intel XE#8265]) +1 other test skip
   [56]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-1/igt@kms_dsc@dsc-with-output-formats-with-bpc.html

  * igt@kms_dsc@dsc-with-output-formats-with-bpc-ultrajoiner:
    - shard-lnl:          NOTRUN -> [SKIP][57] ([Intel XE#8265])
   [57]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-7/igt@kms_dsc@dsc-with-output-formats-with-bpc-ultrajoiner.html

  * igt@kms_fbcon_fbt@fbc-suspend:
    - shard-bmg:          NOTRUN -> [SKIP][58] ([Intel XE#4156] / [Intel XE#7425])
   [58]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-5/igt@kms_fbcon_fbt@fbc-suspend.html
    - shard-ptl:          NOTRUN -> [ABORT][59] ([Intel XE#9362]) +2 other tests abort
   [59]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-5/igt@kms_fbcon_fbt@fbc-suspend.html

  * igt@kms_feature_discovery@display-4x:
    - shard-lnl:          NOTRUN -> [SKIP][60] ([Intel XE#1138] / [Intel XE#7344])
   [60]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-6/igt@kms_feature_discovery@display-4x.html

  * igt@kms_feature_discovery@dsc:
    - shard-ptl:          NOTRUN -> [SKIP][61] ([Intel XE#9287])
   [61]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-3/igt@kms_feature_discovery@dsc.html

  * igt@kms_flip@2x-flip-vs-expired-vblank:
    - shard-lnl:          NOTRUN -> [SKIP][62] ([Intel XE#1421]) +2 other tests skip
   [62]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-7/igt@kms_flip@2x-flip-vs-expired-vblank.html

  * igt@kms_flip@2x-nonexisting-fb-interruptible:
    - shard-ptl:          NOTRUN -> [SKIP][63] ([Intel XE#2316]) +12 other tests skip
   [63]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-3/igt@kms_flip@2x-nonexisting-fb-interruptible.html

  * igt@kms_flip@flip-vs-expired-vblank@a-edp1:
    - shard-lnl:          [PASS][64] -> [FAIL][65] ([Intel XE#301]) +3 other tests fail
   [64]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9114/shard-lnl-8/igt@kms_flip@flip-vs-expired-vblank@a-edp1.html
   [65]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-2/igt@kms_flip@flip-vs-expired-vblank@a-edp1.html

  * igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling:
    - shard-lnl:          NOTRUN -> [SKIP][66] ([Intel XE#7178] / [Intel XE#7349])
   [66]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-4/igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-upscaling:
    - shard-bmg:          NOTRUN -> [SKIP][67] ([Intel XE#7178] / [Intel XE#7351])
   [67]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-9/igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-upscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling:
    - shard-bmg:          NOTRUN -> [SKIP][68] ([Intel XE#7178] / [Intel XE#7349])
   [68]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-10/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-downscaling:
    - shard-ptl:          NOTRUN -> [SKIP][69] ([Intel XE#7178]) +2 other tests skip
   [69]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-4/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-downscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-upscaling:
    - shard-lnl:          NOTRUN -> [SKIP][70] ([Intel XE#7178] / [Intel XE#7351])
   [70]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-5/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-upscaling.html

  * igt@kms_force_connector_basic@force-connector-state:
    - shard-lnl:          NOTRUN -> [SKIP][71] ([Intel XE#352])
   [71]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-6/igt@kms_force_connector_basic@force-connector-state.html

  * igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-mmap-wc:
    - shard-ptl:          NOTRUN -> [SKIP][72] ([Intel XE#5800] / [Intel XE#6312]) +8 other tests skip
   [72]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-3/igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@drrs-shrfb-scaledprimary:
    - shard-lnl:          NOTRUN -> [SKIP][73] ([Intel XE#6312] / [Intel XE#651]) +2 other tests skip
   [73]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-8/igt@kms_frontbuffer_tracking@drrs-shrfb-scaledprimary.html

  * igt@kms_frontbuffer_tracking@drrshdr-1p-primscrn-cur-indfb-draw-mmap-wc:
    - shard-ptl:          NOTRUN -> [SKIP][74] ([Intel XE#6312]) +14 other tests skip
   [74]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-4/igt@kms_frontbuffer_tracking@drrshdr-1p-primscrn-cur-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@drrshdr-1p-primscrn-shrfb-plflip-blt:
    - shard-lnl:          NOTRUN -> [SKIP][75] ([Intel XE#6312]) +3 other tests skip
   [75]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-2/igt@kms_frontbuffer_tracking@drrshdr-1p-primscrn-shrfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@fbc-1p-offscreen-pri-indfb-draw-blt:
    - shard-bmg:          NOTRUN -> [SKIP][76] ([Intel XE#4141]) +8 other tests skip
   [76]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-8/igt@kms_frontbuffer_tracking@fbc-1p-offscreen-pri-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbc-abgr161616f-draw-mmap-wc:
    - shard-ptl:          NOTRUN -> [SKIP][77] ([Intel XE#7061] / [Intel XE#7356]) +3 other tests skip
   [77]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-1/igt@kms_frontbuffer_tracking@fbc-abgr161616f-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbc-argb161616f-draw-mmap-wc:
    - shard-lnl:          NOTRUN -> [SKIP][78] ([Intel XE#7061] / [Intel XE#7356]) +1 other test skip
   [78]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-1/igt@kms_frontbuffer_tracking@fbc-argb161616f-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-2p-rte:
    - shard-lnl:          NOTRUN -> [SKIP][79] ([Intel XE#656] / [Intel XE#7905]) +6 other tests skip
   [79]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-1/igt@kms_frontbuffer_tracking@fbcdrrs-2p-rte.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-argb161616f-draw-render:
    - shard-bmg:          NOTRUN -> [SKIP][80] ([Intel XE#7061] / [Intel XE#7356]) +1 other test skip
   [80]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-4/igt@kms_frontbuffer_tracking@fbcdrrs-argb161616f-draw-render.html

  * igt@kms_frontbuffer_tracking@fbcdrrshdr-2p-primscrn-cur-indfb-draw-render:
    - shard-ptl:          NOTRUN -> [SKIP][81] ([Intel XE#5812]) +65 other tests skip
   [81]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-1/igt@kms_frontbuffer_tracking@fbcdrrshdr-2p-primscrn-cur-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbcdrrshdr-2p-scndscrn-cur-indfb-draw-render:
    - shard-lnl:          NOTRUN -> [SKIP][82] ([Intel XE#7905]) +10 other tests skip
   [82]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-6/igt@kms_frontbuffer_tracking@fbcdrrshdr-2p-scndscrn-cur-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbcdrrshdr-rgb565-draw-blt:
    - shard-bmg:          NOTRUN -> [SKIP][83] ([Intel XE#2311]) +32 other tests skip
   [83]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-8/igt@kms_frontbuffer_tracking@fbcdrrshdr-rgb565-draw-blt.html

  * igt@kms_frontbuffer_tracking@hdr-1p-primscrn-pri-indfb-draw-blt:
    - shard-ptl:          NOTRUN -> [SKIP][84] ([Intel XE#7865]) +19 other tests skip
   [84]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-6/igt@kms_frontbuffer_tracking@hdr-1p-primscrn-pri-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@hdr-abgr161616f-draw-blt:
    - shard-lnl:          NOTRUN -> [SKIP][85] ([Intel XE#7061])
   [85]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-5/igt@kms_frontbuffer_tracking@hdr-abgr161616f-draw-blt.html

  * igt@kms_frontbuffer_tracking@hdr-argb161616f-draw-blt:
    - shard-bmg:          NOTRUN -> [SKIP][86] ([Intel XE#7061]) +1 other test skip
   [86]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-1/igt@kms_frontbuffer_tracking@hdr-argb161616f-draw-blt.html
    - shard-ptl:          NOTRUN -> [SKIP][87] ([Intel XE#7061]) +4 other tests skip
   [87]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-8/igt@kms_frontbuffer_tracking@hdr-argb161616f-draw-blt.html

  * igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-spr-indfb-draw-blt:
    - shard-lnl:          NOTRUN -> [SKIP][88] ([Intel XE#7865]) +5 other tests skip
   [88]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-6/igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-spr-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@psrhdr-2p-primscrn-spr-indfb-move:
    - shard-bmg:          NOTRUN -> [SKIP][89] ([Intel XE#2313]) +41 other tests skip
   [89]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-1/igt@kms_frontbuffer_tracking@psrhdr-2p-primscrn-spr-indfb-move.html

  * igt@kms_hdmi_audio_bw@audio-bw-hblank160:
    - shard-lnl:          NOTRUN -> [SKIP][90] ([Intel XE#9312])
   [90]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-7/igt@kms_hdmi_audio_bw@audio-bw-hblank160.html

  * igt@kms_hdr@bpc-switch-suspend@pipe-a-dp-2-xrgb2101010:
    - shard-bmg:          [PASS][91] -> [ABORT][92] ([Intel XE#9362] / [Intel XE#9438])
   [91]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9114/shard-bmg-7/igt@kms_hdr@bpc-switch-suspend@pipe-a-dp-2-xrgb2101010.html
   [92]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-7/igt@kms_hdr@bpc-switch-suspend@pipe-a-dp-2-xrgb2101010.html

  * igt@kms_hdr@brightness-with-hdr:
    - shard-bmg:          NOTRUN -> [SKIP][93] ([Intel XE#3544])
   [93]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-10/igt@kms_hdr@brightness-with-hdr.html

  * igt@kms_joiner@basic-ultra-joiner:
    - shard-ptl:          NOTRUN -> [SKIP][94] ([Intel XE#6900])
   [94]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-4/igt@kms_joiner@basic-ultra-joiner.html

  * igt@kms_multipipe_modeset@basic-max-pipe-crc-check:
    - shard-ptl:          NOTRUN -> [SKIP][95] ([Intel XE#7591])
   [95]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-8/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html

  * igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-cc-modifier:
    - shard-bmg:          NOTRUN -> [SKIP][96] ([Intel XE#7283]) +1 other test skip
   [96]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-8/igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-cc-modifier.html

  * igt@kms_plane@pixel-format-4-tiled-mtl-rc-ccs-cc-modifier:
    - shard-ptl:          NOTRUN -> [SKIP][97] ([Intel XE#7283]) +1 other test skip
   [97]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-4/igt@kms_plane@pixel-format-4-tiled-mtl-rc-ccs-cc-modifier.html

  * igt@kms_plane@pixel-format-x-tiled-modifier@pipe-b-plane-5:
    - shard-bmg:          NOTRUN -> [SKIP][98] ([Intel XE#8303]) +1 other test skip
   [98]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-8/igt@kms_plane@pixel-format-x-tiled-modifier@pipe-b-plane-5.html

  * igt@kms_plane_multiple@tiling-x:
    - shard-ptl:          NOTRUN -> [SKIP][99] ([Intel XE#5020])
   [99]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-3/igt@kms_plane_multiple@tiling-x.html

  * igt@kms_plane_scaling@intel-max-src-size:
    - shard-bmg:          [PASS][100] -> [SKIP][101] ([Intel XE#2685] / [Intel XE#3307])
   [100]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9114/shard-bmg-2/igt@kms_plane_scaling@intel-max-src-size.html
   [101]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-1/igt@kms_plane_scaling@intel-max-src-size.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-5-unity-scaling@pipe-b:
    - shard-lnl:          NOTRUN -> [SKIP][102] ([Intel XE#2763] / [Intel XE#6886]) +3 other tests skip
   [102]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-7/igt@kms_plane_scaling@planes-downscale-factor-0-5-unity-scaling@pipe-b.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-5-unity-scaling@pipe-d:
    - shard-ptl:          NOTRUN -> [SKIP][103] ([Intel XE#6886]) +14 other tests skip
   [103]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-6/igt@kms_plane_scaling@planes-downscale-factor-0-5-unity-scaling@pipe-d.html

  * igt@kms_pm_backlight@bad-brightness:
    - shard-bmg:          NOTRUN -> [SKIP][104] ([Intel XE#7376] / [Intel XE#7760] / [Intel XE#870])
   [104]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-6/igt@kms_pm_backlight@bad-brightness.html

  * igt@kms_pm_lpsp@kms-lpsp:
    - shard-bmg:          NOTRUN -> [SKIP][105] ([Intel XE#2499])
   [105]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-7/igt@kms_pm_lpsp@kms-lpsp.html

  * igt@kms_pm_rpm@dpms-non-lpsp:
    - shard-ptl:          NOTRUN -> [SKIP][106] ([Intel XE#5849]) +1 other test skip
   [106]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-6/igt@kms_pm_rpm@dpms-non-lpsp.html
    - shard-lnl:          NOTRUN -> [SKIP][107] ([Intel XE#1439] / [Intel XE#3141] / [Intel XE#7383])
   [107]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-2/igt@kms_pm_rpm@dpms-non-lpsp.html

  * igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-sf:
    - shard-bmg:          NOTRUN -> [SKIP][108] ([Intel XE#1489]) +5 other tests skip
   [108]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-7/igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-sf.html

  * igt@kms_psr2_sf@fbc-pr-plane-move-sf-dmg-area:
    - shard-ptl:          NOTRUN -> [SKIP][109] ([Intel XE#7304])
   [109]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-7/igt@kms_psr2_sf@fbc-pr-plane-move-sf-dmg-area.html

  * igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-sf:
    - shard-lnl:          NOTRUN -> [SKIP][110] ([Intel XE#2893] / [Intel XE#4608] / [Intel XE#7304])
   [110]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-7/igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-sf.html

  * igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-sf@pipe-a-edp-1:
    - shard-ptl:          NOTRUN -> [SKIP][111] ([Intel XE#5858]) +1 other test skip
   [111]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-4/igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-sf@pipe-a-edp-1.html
    - shard-lnl:          NOTRUN -> [SKIP][112] ([Intel XE#4608])
   [112]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-7/igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-sf@pipe-a-edp-1.html

  * igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-sf@pipe-b-edp-1:
    - shard-ptl:          NOTRUN -> [SKIP][113] ([Intel XE#5858] / [Intel XE#7304]) +3 other tests skip
   [113]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-4/igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-sf@pipe-b-edp-1.html
    - shard-lnl:          NOTRUN -> [SKIP][114] ([Intel XE#4608] / [Intel XE#7304])
   [114]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-7/igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-sf@pipe-b-edp-1.html

  * igt@kms_psr2_sf@pr-overlay-plane-update-sf-dmg-area:
    - shard-lnl:          NOTRUN -> [SKIP][115] ([Intel XE#2893] / [Intel XE#7304])
   [115]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-3/igt@kms_psr2_sf@pr-overlay-plane-update-sf-dmg-area.html

  * igt@kms_psr2_su@frontbuffer-xrgb8888:
    - shard-ptl:          NOTRUN -> [SKIP][116] ([Intel XE#7413]) +1 other test skip
   [116]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-3/igt@kms_psr2_su@frontbuffer-xrgb8888.html

  * igt@kms_psr2_su@page_flip-p010:
    - shard-bmg:          NOTRUN -> [SKIP][117] ([Intel XE#2387] / [Intel XE#7429]) +1 other test skip
   [117]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-7/igt@kms_psr2_su@page_flip-p010.html

  * igt@kms_psr@fbc-psr2-primary-blt:
    - shard-bmg:          NOTRUN -> [SKIP][118] ([Intel XE#2234] / [Intel XE#2850]) +5 other tests skip
   [118]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-5/igt@kms_psr@fbc-psr2-primary-blt.html

  * igt@kms_psr@fbc-psr2-primary-page-flip@edp-1:
    - shard-ptl:          NOTRUN -> [SKIP][119] ([Intel XE#1406] / [Intel XE#5835]) +3 other tests skip
   [119]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-7/igt@kms_psr@fbc-psr2-primary-page-flip@edp-1.html

  * igt@kms_psr@fbc-psr2-primary-render:
    - shard-lnl:          NOTRUN -> [SKIP][120] ([Intel XE#1406] / [Intel XE#7345])
   [120]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-4/igt@kms_psr@fbc-psr2-primary-render.html

  * igt@kms_psr@fbc-psr2-primary-render@edp-1:
    - shard-lnl:          NOTRUN -> [SKIP][121] ([Intel XE#1406] / [Intel XE#4609] / [Intel XE#7345])
   [121]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-4/igt@kms_psr@fbc-psr2-primary-render@edp-1.html

  * igt@kms_psr@pr-primary-page-flip:
    - shard-ptl:          NOTRUN -> [SKIP][122] ([Intel XE#1406]) +2 other tests skip
   [122]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-2/igt@kms_psr@pr-primary-page-flip.html
    - shard-lnl:          NOTRUN -> [SKIP][123] ([Intel XE#1406])
   [123]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-6/igt@kms_psr@pr-primary-page-flip.html

  * igt@kms_rotation_crc@primary-4-tiled-reflect-x-0:
    - shard-ptl:          NOTRUN -> [SKIP][124] ([Intel XE#5821])
   [124]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-4/igt@kms_rotation_crc@primary-4-tiled-reflect-x-0.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180:
    - shard-bmg:          NOTRUN -> [SKIP][125] ([Intel XE#2330] / [Intel XE#5813])
   [125]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-8/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180.html

  * igt@kms_rotation_crc@sprite-rotation-90-pos-100-0:
    - shard-bmg:          NOTRUN -> [SKIP][126] ([Intel XE#3904] / [Intel XE#7342])
   [126]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-8/igt@kms_rotation_crc@sprite-rotation-90-pos-100-0.html

  * igt@kms_scaling_modes@scaling-mode-full:
    - shard-bmg:          NOTRUN -> [SKIP][127] ([Intel XE#2413])
   [127]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-1/igt@kms_scaling_modes@scaling-mode-full.html

  * igt@kms_sharpness_filter@filter-basic:
    - shard-bmg:          NOTRUN -> [SKIP][128] ([Intel XE#6503])
   [128]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-4/igt@kms_sharpness_filter@filter-basic.html

  * igt@kms_tiled_display@basic-test-pattern:
    - shard-ptl:          NOTRUN -> [SKIP][129] ([Intel XE#5848])
   [129]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-6/igt@kms_tiled_display@basic-test-pattern.html

  * igt@kms_tv_load_detect@load-detect:
    - shard-ptl:          NOTRUN -> [SKIP][130] ([Intel XE#5857])
   [130]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-7/igt@kms_tv_load_detect@load-detect.html

  * igt@kms_vrr@flip-suspend@pipe-a-edp-1:
    - shard-ptl:          [PASS][131] -> [ABORT][132] ([Intel XE#9362]) +4 other tests abort
   [131]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9114/shard-ptl-8/igt@kms_vrr@flip-suspend@pipe-a-edp-1.html
   [132]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-8/igt@kms_vrr@flip-suspend@pipe-a-edp-1.html

  * igt@kms_vrr@negative-basic:
    - shard-ptl:          NOTRUN -> [SKIP][133] ([Intel XE#5949] / [Intel XE#9277])
   [133]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-3/igt@kms_vrr@negative-basic.html
    - shard-lnl:          NOTRUN -> [SKIP][134] ([Intel XE#1499] / [Intel XE#9271])
   [134]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-5/igt@kms_vrr@negative-basic.html

  * igt@xe_ccs@suspend-resume:
    - shard-bmg:          [PASS][135] -> [ABORT][136] ([Intel XE#9362] / [Intel XE#9425]) +1 other test abort
   [135]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9114/shard-bmg-8/igt@xe_ccs@suspend-resume.html
   [136]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-9/igt@xe_ccs@suspend-resume.html

  * igt@xe_ccs@suspend-resume@tile64-compressed-compfmt0-system-vram01:
    - shard-bmg:          [PASS][137] -> [DMESG-WARN][138] ([Intel XE#9365])
   [137]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9114/shard-bmg-8/igt@xe_ccs@suspend-resume@tile64-compressed-compfmt0-system-vram01.html
   [138]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-9/igt@xe_ccs@suspend-resume@tile64-compressed-compfmt0-system-vram01.html

  * igt@xe_compute@ccs-mode-compute-kernel:
    - shard-ptl:          NOTRUN -> [SKIP][139] ([Intel XE#6599])
   [139]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-1/igt@xe_compute@ccs-mode-compute-kernel.html

  * igt@xe_evict@evict-beng-large-multi-vm-cm:
    - shard-lnl:          NOTRUN -> [SKIP][140] ([Intel XE#6540] / [Intel XE#688]) +2 other tests skip
   [140]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-6/igt@xe_evict@evict-beng-large-multi-vm-cm.html

  * igt@xe_evict@evict-beng-mixed-many-threads-small:
    - shard-bmg:          [PASS][141] -> [INCOMPLETE][142] ([Intel XE#6321] / [Intel XE#8355])
   [141]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9114/shard-bmg-4/igt@xe_evict@evict-beng-mixed-many-threads-small.html
   [142]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-4/igt@xe_evict@evict-beng-mixed-many-threads-small.html

  * igt@xe_evict@evict-cm-threads-small-multi-vm:
    - shard-ptl:          NOTRUN -> [SKIP][143] ([Intel XE#5764]) +10 other tests skip
   [143]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-4/igt@xe_evict@evict-cm-threads-small-multi-vm.html

  * igt@xe_evict@evict-mixed-many-threads-small:
    - shard-bmg:          NOTRUN -> [INCOMPLETE][144] ([Intel XE#6321] / [Intel XE#8355])
   [144]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-6/igt@xe_evict@evict-mixed-many-threads-small.html

  * igt@xe_evict@evict-small-multi-queue-priority-cm:
    - shard-bmg:          NOTRUN -> [SKIP][145] ([Intel XE#8370]) +1 other test skip
   [145]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-1/igt@xe_evict@evict-small-multi-queue-priority-cm.html

  * igt@xe_evict_ccs@evict-overcommit-parallel-instantfree-samefd:
    - shard-ptl:          NOTRUN -> [SKIP][146] ([Intel XE#6144]) +1 other test skip
   [146]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-1/igt@xe_evict_ccs@evict-overcommit-parallel-instantfree-samefd.html

  * igt@xe_exec_balancer@many-execqueues-virtual-userptr-invalidate-race:
    - shard-ptl:          NOTRUN -> [SKIP][147] ([Intel XE#7482]) +16 other tests skip
   [147]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-2/igt@xe_exec_balancer@many-execqueues-virtual-userptr-invalidate-race.html

  * igt@xe_exec_balancer@twice-cm-parallel-userptr-rebind:
    - shard-lnl:          NOTRUN -> [SKIP][148] ([Intel XE#7482]) +3 other tests skip
   [148]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-8/igt@xe_exec_balancer@twice-cm-parallel-userptr-rebind.html

  * igt@xe_exec_basic@multigpu-many-execqueues-many-vm-basic-defer-mmap:
    - shard-bmg:          NOTRUN -> [SKIP][149] ([Intel XE#2322] / [Intel XE#7372]) +6 other tests skip
   [149]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-2/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-basic-defer-mmap.html

  * igt@xe_exec_basic@multigpu-no-exec-bindexecqueue-userptr-rebind:
    - shard-ptl:          NOTRUN -> [SKIP][150] ([Intel XE#5575] / [Intel XE#7484]) +7 other tests skip
   [150]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-2/igt@xe_exec_basic@multigpu-no-exec-bindexecqueue-userptr-rebind.html

  * igt@xe_exec_basic@multigpu-once-bindexecqueue-userptr-invalidate:
    - shard-lnl:          NOTRUN -> [SKIP][151] ([Intel XE#1392]) +2 other tests skip
   [151]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-1/igt@xe_exec_basic@multigpu-once-bindexecqueue-userptr-invalidate.html

  * igt@xe_exec_fault_mode@many-multi-queue-invalid-fault:
    - shard-lnl:          NOTRUN -> [SKIP][152] ([Intel XE#8374])
   [152]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-2/igt@xe_exec_fault_mode@many-multi-queue-invalid-fault.html

  * igt@xe_exec_fault_mode@once-multi-queue-invalid-fault:
    - shard-ptl:          NOTRUN -> [SKIP][153] ([Intel XE#8374]) +14 other tests skip
   [153]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-4/igt@xe_exec_fault_mode@once-multi-queue-invalid-fault.html

  * igt@xe_exec_fault_mode@twice-multi-queue-userptr-invalidate:
    - shard-bmg:          NOTRUN -> [SKIP][154] ([Intel XE#8374]) +10 other tests skip
   [154]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-8/igt@xe_exec_fault_mode@twice-multi-queue-userptr-invalidate.html

  * igt@xe_exec_mix_modes@exec-multi-queue-spinner-interrupted-lr:
    - shard-ptl:          NOTRUN -> [SKIP][155] ([Intel XE#9003])
   [155]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-4/igt@xe_exec_mix_modes@exec-multi-queue-spinner-interrupted-lr.html

  * igt@xe_exec_multi_queue@max-queues-preempt-mode-close-fd-smem:
    - shard-bmg:          NOTRUN -> [SKIP][156] ([Intel XE#8364]) +18 other tests skip
   [156]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-5/igt@xe_exec_multi_queue@max-queues-preempt-mode-close-fd-smem.html

  * igt@xe_exec_multi_queue@max-queues-preempt-mode-priority:
    - shard-ptl:          NOTRUN -> [SKIP][157] ([Intel XE#8364]) +23 other tests skip
   [157]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-7/igt@xe_exec_multi_queue@max-queues-preempt-mode-priority.html

  * igt@xe_exec_multi_queue@one-queue-basic:
    - shard-lnl:          NOTRUN -> [SKIP][158] ([Intel XE#8364]) +7 other tests skip
   [158]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-6/igt@xe_exec_multi_queue@one-queue-basic.html

  * igt@xe_exec_reset@cm-multi-queue-close-execqueues:
    - shard-lnl:          NOTRUN -> [SKIP][159] ([Intel XE#8369])
   [159]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-3/igt@xe_exec_reset@cm-multi-queue-close-execqueues.html

  * igt@xe_exec_reset@cm-multi-queue-gt-reset:
    - shard-ptl:          NOTRUN -> [SKIP][160] ([Intel XE#8369]) +3 other tests skip
   [160]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-4/igt@xe_exec_reset@cm-multi-queue-gt-reset.html

  * igt@xe_exec_reset@multi-queue-cat-error:
    - shard-bmg:          NOTRUN -> [SKIP][161] ([Intel XE#8369]) +1 other test skip
   [161]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-3/igt@xe_exec_reset@multi-queue-cat-error.html

  * igt@xe_exec_threads@threads-multi-queue-cm-fd-basic:
    - shard-bmg:          NOTRUN -> [SKIP][162] ([Intel XE#8378]) +7 other tests skip
   [162]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-2/igt@xe_exec_threads@threads-multi-queue-cm-fd-basic.html

  * igt@xe_exec_threads@threads-multi-queue-fd-basic:
    - shard-lnl:          NOTRUN -> [SKIP][163] ([Intel XE#8378]) +1 other test skip
   [163]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-1/igt@xe_exec_threads@threads-multi-queue-fd-basic.html

  * igt@xe_exec_threads@threads-multi-queue-shared-vm-userptr-rebind:
    - shard-ptl:          NOTRUN -> [SKIP][164] ([Intel XE#8378]) +6 other tests skip
   [164]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-4/igt@xe_exec_threads@threads-multi-queue-shared-vm-userptr-rebind.html

  * igt@xe_live_ktest@xe_eudebug:
    - shard-bmg:          NOTRUN -> [SKIP][165] ([Intel XE#2833])
   [165]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-7/igt@xe_live_ktest@xe_eudebug.html

  * igt@xe_madvise@atomic-global:
    - shard-ptl:          NOTRUN -> [SKIP][166] ([Intel XE#7980])
   [166]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-7/igt@xe_madvise@atomic-global.html

  * igt@xe_mmap@small-bar:
    - shard-bmg:          NOTRUN -> [SKIP][167] ([Intel XE#586] / [Intel XE#7323] / [Intel XE#7384])
   [167]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-3/igt@xe_mmap@small-bar.html

  * igt@xe_multigpu_svm@mgpu-atomic-op-conflict:
    - shard-ptl:          NOTRUN -> [SKIP][168] ([Intel XE#6964]) +1 other test skip
   [168]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-5/igt@xe_multigpu_svm@mgpu-atomic-op-conflict.html

  * igt@xe_multigpu_svm@mgpu-pagefault-basic:
    - shard-bmg:          NOTRUN -> [SKIP][169] ([Intel XE#6964]) +1 other test skip
   [169]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-7/igt@xe_multigpu_svm@mgpu-pagefault-basic.html

  * igt@xe_page_reclaim@random:
    - shard-bmg:          NOTRUN -> [SKIP][170] ([Intel XE#7793])
   [170]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-8/igt@xe_page_reclaim@random.html

  * igt@xe_pat@l2-flush-opt-svm-pat-restrict:
    - shard-ptl:          NOTRUN -> [SKIP][171] ([Intel XE#7590])
   [171]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-2/igt@xe_pat@l2-flush-opt-svm-pat-restrict.html
    - shard-bmg:          NOTRUN -> [SKIP][172] ([Intel XE#7590])
   [172]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-2/igt@xe_pat@l2-flush-opt-svm-pat-restrict.html

  * igt@xe_pat@pat-index-xelp:
    - shard-ptl:          NOTRUN -> [SKIP][173] ([Intel XE#5771] / [Intel XE#7590])
   [173]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-7/igt@xe_pat@pat-index-xelp.html
    - shard-bmg:          NOTRUN -> [SKIP][174] ([Intel XE#2245] / [Intel XE#7590])
   [174]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-7/igt@xe_pat@pat-index-xelp.html

  * igt@xe_pm@d3cold-i2c:
    - shard-ptl:          NOTRUN -> [SKIP][175] ([Intel XE#5741])
   [175]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-1/igt@xe_pm@d3cold-i2c.html

  * igt@xe_pm@s3-basic:
    - shard-lnl:          NOTRUN -> [SKIP][176] ([Intel XE#584] / [Intel XE#7369])
   [176]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-2/igt@xe_pm@s3-basic.html

  * igt@xe_pm@s3-mocs:
    - shard-ptl:          NOTRUN -> [SKIP][177] ([Intel XE#6867]) +1 other test skip
   [177]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-1/igt@xe_pm@s3-mocs.html

  * igt@xe_pm@s4-basic:
    - shard-lnl:          [PASS][178] -> [ABORT][179] ([Intel XE#9362]) +2 other tests abort
   [178]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9114/shard-lnl-6/igt@xe_pm@s4-basic.html
   [179]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-1/igt@xe_pm@s4-basic.html

  * igt@xe_pm@vram-d3cold-threshold:
    - shard-ptl:          NOTRUN -> [SKIP][180] ([Intel XE#5611] / [Intel XE#7456])
   [180]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-5/igt@xe_pm@vram-d3cold-threshold.html

  * igt@xe_pm_residency@aspm_link_residency:
    - shard-ptl:          NOTRUN -> [SKIP][181] ([Intel XE#7271])
   [181]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-3/igt@xe_pm_residency@aspm_link_residency.html

  * igt@xe_pm_residency@gt-c6-freeze@gt1:
    - shard-bmg:          [PASS][182] -> [ABORT][183] ([Intel XE#9362]) +1 other test abort
   [182]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9114/shard-bmg-7/igt@xe_pm_residency@gt-c6-freeze@gt1.html
   [183]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-6/igt@xe_pm_residency@gt-c6-freeze@gt1.html

  * igt@xe_pxp@pxp-stale-bo-exec-post-termination-irq:
    - shard-bmg:          NOTRUN -> [SKIP][184] ([Intel XE#4733] / [Intel XE#7417]) +1 other test skip
   [184]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-8/igt@xe_pxp@pxp-stale-bo-exec-post-termination-irq.html

  * igt@xe_query@multigpu-query-engines:
    - shard-ptl:          NOTRUN -> [SKIP][185] ([Intel XE#6019]) +1 other test skip
   [185]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-1/igt@xe_query@multigpu-query-engines.html
    - shard-bmg:          NOTRUN -> [SKIP][186] ([Intel XE#944])
   [186]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-7/igt@xe_query@multigpu-query-engines.html

  * igt@xe_query@multigpu-query-hwconfig:
    - shard-lnl:          NOTRUN -> [SKIP][187] ([Intel XE#944])
   [187]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-6/igt@xe_query@multigpu-query-hwconfig.html

  * igt@xe_sriov_vram@vf-access-after-resize-up:
    - shard-ptl:          NOTRUN -> [SKIP][188] ([Intel XE#6376] / [Intel XE#7422])
   [188]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-1/igt@xe_sriov_vram@vf-access-after-resize-up.html

  * igt@xe_sriov_vram@vf-access-beyond:
    - shard-lnl:          NOTRUN -> [SKIP][189] ([Intel XE#6376] / [Intel XE#7330] / [Intel XE#7422])
   [189]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-2/igt@xe_sriov_vram@vf-access-beyond.html

  * igt@xe_vm@overcommit-nonfault-vram-lr-external-nodefer:
    - shard-ptl:          NOTRUN -> [SKIP][190] ([Intel XE#7892])
   [190]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-3/igt@xe_vm@overcommit-nonfault-vram-lr-external-nodefer.html

  
#### Possible fixes ####

  * igt@core_hotunplug@hotunbind-rebind-with-load:
    - shard-bmg:          [ABORT][191] -> [PASS][192]
   [191]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9114/shard-bmg-1/igt@core_hotunplug@hotunbind-rebind-with-load.html
   [192]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-7/igt@core_hotunplug@hotunbind-rebind-with-load.html

  * igt@intel_hwmon@hwmon-write:
    - shard-bmg:          [FAIL][193] ([Intel XE#8583]) -> [PASS][194]
   [193]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9114/shard-bmg-1/igt@intel_hwmon@hwmon-write.html
   [194]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-10/igt@intel_hwmon@hwmon-write.html

  * igt@kms_async_flips@alternate-sync-async-flip:
    - shard-bmg:          [FAIL][195] ([Intel XE#3718] / [Intel XE#6078]) -> [PASS][196] +1 other test pass
   [195]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9114/shard-bmg-3/igt@kms_async_flips@alternate-sync-async-flip.html
   [196]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-6/igt@kms_async_flips@alternate-sync-async-flip.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs@pipe-a-edp-1:
    - shard-ptl:          [ABORT][197] ([Intel XE#9362]) -> [PASS][198] +4 other tests pass
   [197]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9114/shard-ptl-7/igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs@pipe-a-edp-1.html
   [198]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-2/igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs@pipe-a-edp-1.html

  * igt@kms_flip@flip-vs-expired-vblank-interruptible@d-edp1:
    - shard-ptl:          [FAIL][199] ([Intel XE#3149] / [Intel XE#3321]) -> [PASS][200] +1 other test pass
   [199]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9114/shard-ptl-6/igt@kms_flip@flip-vs-expired-vblank-interruptible@d-edp1.html
   [200]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-2/igt@kms_flip@flip-vs-expired-vblank-interruptible@d-edp1.html

  * igt@kms_flip@flip-vs-expired-vblank@c-edp1:
    - shard-lnl:          [FAIL][201] ([Intel XE#301] / [Intel XE#3149]) -> [PASS][202]
   [201]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9114/shard-lnl-8/igt@kms_flip@flip-vs-expired-vblank@c-edp1.html
   [202]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-2/igt@kms_flip@flip-vs-expired-vblank@c-edp1.html

  * igt@kms_plane@pixel-format-4-tiled-modifier-source-clamping@pipe-a-plane-0:
    - shard-ptl:          [FAIL][203] ([Intel XE#9340]) -> [PASS][204] +1 other test pass
   [203]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9114/shard-ptl-2/igt@kms_plane@pixel-format-4-tiled-modifier-source-clamping@pipe-a-plane-0.html
   [204]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-3/igt@kms_plane@pixel-format-4-tiled-modifier-source-clamping@pipe-a-plane-0.html

  * igt@kms_pm_dc@dc5-dpms-suspend-resume:
    - shard-bmg:          [DMESG-WARN][205] ([Intel XE#9390]) -> [PASS][206]
   [205]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9114/shard-bmg-7/igt@kms_pm_dc@dc5-dpms-suspend-resume.html
   [206]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-6/igt@kms_pm_dc@dc5-dpms-suspend-resume.html

  * igt@kms_pm_dc@dc6-psr:
    - shard-lnl:          [FAIL][207] ([Intel XE#8399]) -> [PASS][208] +1 other test pass
   [207]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9114/shard-lnl-6/igt@kms_pm_dc@dc6-psr.html
   [208]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-7/igt@kms_pm_dc@dc6-psr.html

  * igt@kms_vrr@flip-dpms@pipe-a-edp-1:
    - shard-ptl:          [FAIL][209] ([Intel XE#4227] / [Intel XE#7397]) -> [PASS][210] +3 other tests pass
   [209]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9114/shard-ptl-1/igt@kms_vrr@flip-dpms@pipe-a-edp-1.html
   [210]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-ptl-2/igt@kms_vrr@flip-dpms@pipe-a-edp-1.html

  
#### Warnings ####

  * igt@kms_flip@flip-vs-expired-vblank:
    - shard-lnl:          [FAIL][211] ([Intel XE#301] / [Intel XE#3149]) -> [FAIL][212] ([Intel XE#301])
   [211]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9114/shard-lnl-8/igt@kms_flip@flip-vs-expired-vblank.html
   [212]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-2/igt@kms_flip@flip-vs-expired-vblank.html

  * igt@kms_hdr@bpc-switch-suspend:
    - shard-bmg:          [INCOMPLETE][213] ([Intel XE#9320]) -> [ABORT][214] ([Intel XE#9362] / [Intel XE#9438])
   [213]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9114/shard-bmg-7/igt@kms_hdr@bpc-switch-suspend.html
   [214]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-7/igt@kms_hdr@bpc-switch-suspend.html

  * igt@kms_tiled_display@basic-test-pattern:
    - shard-bmg:          [FAIL][215] ([Intel XE#1729] / [Intel XE#7424]) -> [SKIP][216] ([Intel XE#2426] / [Intel XE#5848])
   [215]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9114/shard-bmg-5/igt@kms_tiled_display@basic-test-pattern.html
   [216]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-bmg-9/igt@kms_tiled_display@basic-test-pattern.html

  * igt@xe_pm@s4-mocs:
    - shard-lnl:          [DMESG-WARN][217] ([Intel XE#7727]) -> [ABORT][218] ([Intel XE#9362])
   [217]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9114/shard-lnl-8/igt@xe_pm@s4-mocs.html
   [218]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/shard-lnl-8/igt@xe_pm@s4-mocs.html

  
  [Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
  [Intel XE#1138]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1138
  [Intel XE#1178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1178
  [Intel XE#1392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1392
  [Intel XE#1406]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1406
  [Intel XE#1407]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1407
  [Intel XE#1421]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1421
  [Intel XE#1424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1424
  [Intel XE#1439]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1439
  [Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
  [Intel XE#1499]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1499
  [Intel XE#1508]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1508
  [Intel XE#1729]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1729
  [Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
  [Intel XE#2245]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2245
  [Intel XE#2252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2252
  [Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
  [Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
  [Intel XE#2316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2316
  [Intel XE#2320]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2320
  [Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
  [Intel XE#2327]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2327
  [Intel XE#2328]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2328
  [Intel XE#2330]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2330
  [Intel XE#2370]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2370
  [Intel XE#2387]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2387
  [Intel XE#2413]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2413
  [Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
  [Intel XE#2499]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2499
  [Intel XE#2669]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2669
  [Intel XE#2685]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2685
  [Intel XE#2724]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2724
  [Intel XE#2763]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2763
  [Intel XE#2833]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2833
  [Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
  [Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887
  [Intel XE#2893]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2893
  [Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
  [Intel XE#307]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/307
  [Intel XE#309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/309
  [Intel XE#3141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3141
  [Intel XE#3149]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3149
  [Intel XE#3304]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3304
  [Intel XE#3307]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3307
  [Intel XE#3321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3321
  [Intel XE#3432]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3432
  [Intel XE#352]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/352
  [Intel XE#3544]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3544
  [Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
  [Intel XE#3718]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3718
  [Intel XE#373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/373
  [Intel XE#3904]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3904
  [Intel XE#4141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4141
  [Intel XE#4156]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4156
  [Intel XE#4210]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4210
  [Intel XE#4227]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4227
  [Intel XE#4608]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4608
  [Intel XE#4609]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4609
  [Intel XE#4733]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4733
  [Intel XE#5020]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5020
  [Intel XE#5575]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5575
  [Intel XE#5611]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5611
  [Intel XE#5741]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5741
  [Intel XE#5764]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5764
  [Intel XE#5771]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5771
  [Intel XE#5800]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5800
  [Intel XE#5808]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5808
  [Intel XE#5812]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5812
  [Intel XE#5813]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5813
  [Intel XE#5821]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5821
  [Intel XE#5822]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5822
  [Intel XE#5823]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5823
  [Intel XE#5824]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5824
  [Intel XE#5832]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5832
  [Intel XE#5835]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5835
  [Intel XE#584]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/584
  [Intel XE#5848]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5848
  [Intel XE#5849]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5849
  [Intel XE#5850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5850
  [Intel XE#5851]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5851
  [Intel XE#5857]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5857
  [Intel XE#5858]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5858
  [Intel XE#586]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/586
  [Intel XE#5870]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5870
  [Intel XE#5900]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5900
  [Intel XE#5901]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5901
  [Intel XE#5907]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5907
  [Intel XE#5949]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5949
  [Intel XE#5962]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5962
  [Intel XE#6019]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6019
  [Intel XE#6078]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6078
  [Intel XE#610]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/610
  [Intel XE#6144]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6144
  [Intel XE#6312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6312
  [Intel XE#6321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6321
  [Intel XE#6376]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6376
  [Intel XE#6503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6503
  [Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651
  [Intel XE#6540]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6540
  [Intel XE#656]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/656
  [Intel XE#6599]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6599
  [Intel XE#6867]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6867
  [Intel XE#688]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/688
  [Intel XE#6886]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6886
  [Intel XE#6900]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6900
  [Intel XE#6918]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6918
  [Intel XE#6964]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6964
  [Intel XE#6969]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6969
  [Intel XE#6974]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6974
  [Intel XE#7061]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7061
  [Intel XE#7084]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7084
  [Intel XE#7178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7178
  [Intel XE#7225]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7225
  [Intel XE#7271]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7271
  [Intel XE#7283]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7283
  [Intel XE#7304]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7304
  [Intel XE#7323]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7323
  [Intel XE#7330]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7330
  [Intel XE#7342]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7342
  [Intel XE#7343]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7343
  [Intel XE#7344]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7344
  [Intel XE#7345]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7345
  [Intel XE#7349]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7349
  [Intel XE#7351]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7351
  [Intel XE#7356]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7356
  [Intel XE#7358]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7358
  [Intel XE#7367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7367
  [Intel XE#7369]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7369
  [Intel XE#7372]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7372
  [Intel XE#7374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7374
  [Intel XE#7376]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7376
  [Intel XE#7383]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7383
  [Intel XE#7384]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7384
  [Intel XE#7387]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7387
  [Intel XE#7389]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7389
  [Intel XE#7397]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7397
  [Intel XE#7413]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7413
  [Intel XE#7417]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7417
  [Intel XE#7422]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7422
  [Intel XE#7424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7424
  [Intel XE#7425]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7425
  [Intel XE#7429]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7429
  [Intel XE#7449]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7449
  [Intel XE#7456]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7456
  [Intel XE#7467]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7467
  [Intel XE#7482]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7482
  [Intel XE#7484]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7484
  [Intel XE#7590]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7590
  [Intel XE#7591]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7591
  [Intel XE#7642]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7642
  [Intel XE#7679]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7679
  [Intel XE#7727]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7727
  [Intel XE#7760]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7760
  [Intel XE#7793]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7793
  [Intel XE#7865]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7865
  [Intel XE#7892]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7892
  [Intel XE#7905]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7905
  [Intel XE#7980]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7980
  [Intel XE#8150]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8150
  [Intel XE#8265]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8265
  [Intel XE#8303]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8303
  [Intel XE#8355]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8355
  [Intel XE#8364]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8364
  [Intel XE#8369]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8369
  [Intel XE#8370]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8370
  [Intel XE#8374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8374
  [Intel XE#8378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8378
  [Intel XE#8399]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8399
  [Intel XE#8583]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8583
  [Intel XE#870]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/870
  [Intel XE#9003]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9003
  [Intel XE#9205]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9205
  [Intel XE#9271]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9271
  [Intel XE#9277]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9277
  [Intel XE#9287]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9287
  [Intel XE#9312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9312
  [Intel XE#9320]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9320
  [Intel XE#9333]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9333
  [Intel XE#9340]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9340
  [Intel XE#9362]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9362
  [Intel XE#9365]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9365
  [Intel XE#9390]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9390
  [Intel XE#9425]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9425
  [Intel XE#9438]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9438
  [Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944


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

  * IGT: IGT_9114 -> IGTPW_15909

  IGTPW_15909: 36489129f40b37725a6324d29e5a0a3e50d1af82 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  IGT_9114: 916c79cfb7675ca01607dcd821f8c49d4f633a6f @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  xe-5837-972eeb850a4ca07aba05ccb805db28a33eab2c9a: 972eeb850a4ca07aba05ccb805db28a33eab2c9a

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15909/index.html

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

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

* ✗ i915.CI.Full: failure for tools/vmtb: Sync VM Test Bench core with current xe SR-IOV
  2026-09-28  7:25 [PATCH i-g-t 0/7] tools/vmtb: Sync VM Test Bench core with current xe SR-IOV Adam Miszczak
                   ` (9 preceding siblings ...)
  2026-09-29  2:19 ` ✗ Xe.CI.FULL: failure " Patchwork
@ 2026-09-29  4:08 ` Patchwork
  10 siblings, 0 replies; 19+ messages in thread
From: Patchwork @ 2026-09-29  4:08 UTC (permalink / raw)
  To: Adam Miszczak; +Cc: igt-dev

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

== Series Details ==

Series: tools/vmtb: Sync VM Test Bench core with current xe SR-IOV
URL   : https://patchwork.freedesktop.org/series/175090/
State : failure

== Summary ==

CI Bug Log - changes from IGT_9114_full -> IGTPW_15909_full
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with IGTPW_15909_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in IGTPW_15909_full, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
  to document this new failure mode, which will reduce false positives in CI.

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

Participating hosts (10 -> 10)
------------------------------

  No changes in participating hosts

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

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

### IGT changes ###

#### Possible regressions ####

  * igt@gem_exec_balancer@full-late-pulse:
    - shard-mtlp:         [PASS][1] -> [FAIL][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-mtlp-8/igt@gem_exec_balancer@full-late-pulse.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-7/igt@gem_exec_balancer@full-late-pulse.html
    - shard-dg2:          [PASS][3] -> [FAIL][4]
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-dg2-6/igt@gem_exec_balancer@full-late-pulse.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-3/igt@gem_exec_balancer@full-late-pulse.html

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

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

### IGT changes ###

#### Issues hit ####

  * igt@api_intel_bb@blit-reloc-keep-cache:
    - shard-dg1:          NOTRUN -> [SKIP][5] ([i915#8411]) +1 other test skip
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-16/igt@api_intel_bb@blit-reloc-keep-cache.html

  * igt@api_intel_bb@crc32:
    - shard-rkl:          NOTRUN -> [SKIP][6] ([i915#6230])
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-7/igt@api_intel_bb@crc32.html

  * igt@device_reset@cold-reset-bound:
    - shard-rkl:          NOTRUN -> [SKIP][7] ([i915#11078])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-4/igt@device_reset@cold-reset-bound.html

  * igt@gem_ccs@ctrl-surf-copy:
    - shard-rkl:          NOTRUN -> [SKIP][8] ([i915#3555] / [i915#9323])
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-2/igt@gem_ccs@ctrl-surf-copy.html

  * igt@gem_ccs@suspend-resume@xmajor-compressed-compfmt0-smem-lmem0:
    - shard-dg2:          NOTRUN -> [INCOMPLETE][9] ([i915#13356] / [i915#16348])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-1/igt@gem_ccs@suspend-resume@xmajor-compressed-compfmt0-smem-lmem0.html

  * igt@gem_close_race@multigpu-basic-process:
    - shard-dg1:          NOTRUN -> [SKIP][10] ([i915#7697])
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-18/igt@gem_close_race@multigpu-basic-process.html

  * igt@gem_close_race@multigpu-basic-threads:
    - shard-rkl:          NOTRUN -> [SKIP][11] ([i915#7697])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-7/igt@gem_close_race@multigpu-basic-threads.html

  * igt@gem_create@create-ext-cpu-access-sanity-check:
    - shard-tglu-1:       NOTRUN -> [SKIP][12] ([i915#6335]) +1 other test skip
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@gem_create@create-ext-cpu-access-sanity-check.html
    - shard-rkl:          NOTRUN -> [SKIP][13] ([i915#6335])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-4/igt@gem_create@create-ext-cpu-access-sanity-check.html

  * igt@gem_ctx_persistence@heartbeat-many:
    - shard-dg2:          NOTRUN -> [SKIP][14] ([i915#8555])
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-7/igt@gem_ctx_persistence@heartbeat-many.html
    - shard-dg1:          NOTRUN -> [SKIP][15] ([i915#8555])
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-18/igt@gem_ctx_persistence@heartbeat-many.html

  * igt@gem_ctx_persistence@legacy-engines-cleanup:
    - shard-snb:          NOTRUN -> [SKIP][16] ([i915#1099]) +3 other tests skip
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-snb4/igt@gem_ctx_persistence@legacy-engines-cleanup.html

  * igt@gem_ctx_sseu@invalid-sseu:
    - shard-rkl:          NOTRUN -> [SKIP][17] ([i915#280])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-3/igt@gem_ctx_sseu@invalid-sseu.html

  * igt@gem_ctx_sseu@mmap-args:
    - shard-dg1:          NOTRUN -> [SKIP][18] ([i915#280])
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-16/igt@gem_ctx_sseu@mmap-args.html

  * igt@gem_eio@in-flight-suspend:
    - shard-glk10:        NOTRUN -> [INCOMPLETE][19] ([i915#13356] / [i915#13390])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk10/igt@gem_eio@in-flight-suspend.html

  * igt@gem_eio@reset-stress@bsd:
    - shard-snb:          NOTRUN -> [FAIL][20] ([i915#8898]) +1 other test fail
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-snb1/igt@gem_eio@reset-stress@bsd.html

  * igt@gem_eio@suspend:
    - shard-mtlp:         [PASS][21] -> [TIMEOUT][22] ([i915#17038])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-mtlp-5/igt@gem_eio@suspend.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-3/igt@gem_eio@suspend.html

  * igt@gem_exec_balancer@parallel:
    - shard-tglu:         NOTRUN -> [SKIP][23] ([i915#4525]) +1 other test skip
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-7/igt@gem_exec_balancer@parallel.html

  * igt@gem_exec_balancer@parallel-bb-first:
    - shard-tglu-1:       NOTRUN -> [SKIP][24] ([i915#4525])
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@gem_exec_balancer@parallel-bb-first.html

  * igt@gem_exec_big@single:
    - shard-tglu:         [PASS][25] -> [FAIL][26] ([i915#15816])
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-tglu-9/igt@gem_exec_big@single.html
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-4/igt@gem_exec_big@single.html

  * igt@gem_exec_capture@capture-invisible@smem0:
    - shard-tglu:         NOTRUN -> [SKIP][27] ([i915#6334]) +1 other test skip
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-10/igt@gem_exec_capture@capture-invisible@smem0.html

  * igt@gem_exec_capture@capture-recoverable:
    - shard-rkl:          NOTRUN -> [SKIP][28] ([i915#6344])
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-3/igt@gem_exec_capture@capture-recoverable.html

  * igt@gem_exec_capture@capture@vecs0-lmem0:
    - shard-dg2:          NOTRUN -> [FAIL][29] ([i915#16904]) +4 other tests fail
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-7/igt@gem_exec_capture@capture@vecs0-lmem0.html

  * igt@gem_exec_flush@basic-uc-ro-default:
    - shard-dg1:          NOTRUN -> [SKIP][30] ([i915#3539] / [i915#4852]) +4 other tests skip
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-16/igt@gem_exec_flush@basic-uc-ro-default.html

  * igt@gem_exec_flush@basic-uc-rw-default:
    - shard-dg2:          NOTRUN -> [SKIP][31] ([i915#3539] / [i915#4852])
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-1/igt@gem_exec_flush@basic-uc-rw-default.html

  * igt@gem_exec_reloc@basic-cpu-noreloc:
    - shard-dg2:          NOTRUN -> [SKIP][32] ([i915#3281]) +3 other tests skip
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-4/igt@gem_exec_reloc@basic-cpu-noreloc.html

  * igt@gem_exec_reloc@basic-gtt-noreloc:
    - shard-mtlp:         NOTRUN -> [SKIP][33] ([i915#3281]) +1 other test skip
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-7/igt@gem_exec_reloc@basic-gtt-noreloc.html

  * igt@gem_exec_reloc@basic-write-cpu-active:
    - shard-dg1:          NOTRUN -> [SKIP][34] ([i915#3281]) +10 other tests skip
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-19/igt@gem_exec_reloc@basic-write-cpu-active.html

  * igt@gem_exec_reloc@basic-write-read:
    - shard-rkl:          NOTRUN -> [SKIP][35] ([i915#3281]) +6 other tests skip
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-5/igt@gem_exec_reloc@basic-write-read.html

  * igt@gem_exec_schedule@preempt-queue:
    - shard-dg1:          NOTRUN -> [SKIP][36] ([i915#4812]) +3 other tests skip
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-16/igt@gem_exec_schedule@preempt-queue.html

  * igt@gem_exec_suspend@basic-s3:
    - shard-glk:          NOTRUN -> [INCOMPLETE][37] ([i915#13196] / [i915#13356]) +1 other test incomplete
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk4/igt@gem_exec_suspend@basic-s3.html

  * igt@gem_fence_thrash@bo-write-verify-threaded-none:
    - shard-dg1:          NOTRUN -> [SKIP][38] ([i915#4860]) +3 other tests skip
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-15/igt@gem_fence_thrash@bo-write-verify-threaded-none.html

  * igt@gem_fence_thrash@bo-write-verify-y:
    - shard-dg2:          NOTRUN -> [SKIP][39] ([i915#4860]) +1 other test skip
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-8/igt@gem_fence_thrash@bo-write-verify-y.html

  * igt@gem_gtt_cpu_tlb:
    - shard-dg1:          NOTRUN -> [SKIP][40] ([i915#4077]) +6 other tests skip
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-14/igt@gem_gtt_cpu_tlb.html

  * igt@gem_huc_copy@huc-copy:
    - shard-rkl:          NOTRUN -> [SKIP][41] ([i915#14544] / [i915#2190])
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@gem_huc_copy@huc-copy.html

  * igt@gem_lmem_swapping@heavy-multi:
    - shard-tglu-1:       NOTRUN -> [SKIP][42] ([i915#4613]) +1 other test skip
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@gem_lmem_swapping@heavy-multi.html

  * igt@gem_lmem_swapping@heavy-verify-multi:
    - shard-mtlp:         NOTRUN -> [SKIP][43] ([i915#4613]) +1 other test skip
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-1/igt@gem_lmem_swapping@heavy-verify-multi.html

  * igt@gem_lmem_swapping@heavy-verify-multi-ccs:
    - shard-glk:          NOTRUN -> [SKIP][44] ([i915#4613]) +4 other tests skip
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk4/igt@gem_lmem_swapping@heavy-verify-multi-ccs.html
    - shard-tglu:         NOTRUN -> [SKIP][45] ([i915#4613]) +3 other tests skip
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-4/igt@gem_lmem_swapping@heavy-verify-multi-ccs.html

  * igt@gem_lmem_swapping@massive-random:
    - shard-rkl:          NOTRUN -> [SKIP][46] ([i915#4613]) +1 other test skip
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-3/igt@gem_lmem_swapping@massive-random.html

  * igt@gem_lmem_swapping@verify-random-ccs:
    - shard-dg1:          NOTRUN -> [SKIP][47] ([i915#12193]) +2 other tests skip
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-14/igt@gem_lmem_swapping@verify-random-ccs.html

  * igt@gem_lmem_swapping@verify-random-ccs@lmem0:
    - shard-dg1:          NOTRUN -> [SKIP][48] ([i915#4565]) +2 other tests skip
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-14/igt@gem_lmem_swapping@verify-random-ccs@lmem0.html

  * igt@gem_mmap@short-mmap:
    - shard-dg2:          NOTRUN -> [SKIP][49] ([i915#4083]) +3 other tests skip
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-3/igt@gem_mmap@short-mmap.html

  * igt@gem_mmap_gtt@basic-read-write:
    - shard-dg2:          NOTRUN -> [SKIP][50] ([i915#4077]) +2 other tests skip
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-4/igt@gem_mmap_gtt@basic-read-write.html

  * igt@gem_mmap_gtt@hang-user:
    - shard-mtlp:         NOTRUN -> [SKIP][51] ([i915#4077]) +1 other test skip
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-6/igt@gem_mmap_gtt@hang-user.html

  * igt@gem_mmap_wc@read:
    - shard-dg1:          NOTRUN -> [SKIP][52] ([i915#4083]) +6 other tests skip
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-14/igt@gem_mmap_wc@read.html

  * igt@gem_mmap_wc@read-write-distinct:
    - shard-mtlp:         NOTRUN -> [SKIP][53] ([i915#4083]) +1 other test skip
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-8/igt@gem_mmap_wc@read-write-distinct.html

  * igt@gem_partial_pwrite_pread@writes-after-reads:
    - shard-rkl:          NOTRUN -> [SKIP][54] ([i915#3282]) +4 other tests skip
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-4/igt@gem_partial_pwrite_pread@writes-after-reads.html

  * igt@gem_partial_pwrite_pread@writes-after-reads-display:
    - shard-dg1:          NOTRUN -> [SKIP][55] ([i915#3282]) +4 other tests skip
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-14/igt@gem_partial_pwrite_pread@writes-after-reads-display.html

  * igt@gem_pwrite@basic-exhaustion:
    - shard-glk11:        NOTRUN -> [WARN][56] ([i915#14702] / [i915#2658])
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk11/igt@gem_pwrite@basic-exhaustion.html

  * igt@gem_pxp@create-regular-context-1:
    - shard-dg2:          NOTRUN -> [SKIP][57] ([i915#4270])
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-6/igt@gem_pxp@create-regular-context-1.html

  * igt@gem_pxp@hw-rejects-pxp-buffer:
    - shard-rkl:          NOTRUN -> [SKIP][58] ([i915#13717])
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-4/igt@gem_pxp@hw-rejects-pxp-buffer.html

  * igt@gem_pxp@protected-raw-src-copy-not-readible:
    - shard-dg1:          NOTRUN -> [SKIP][59] ([i915#4270]) +6 other tests skip
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-12/igt@gem_pxp@protected-raw-src-copy-not-readible.html

  * igt@gem_readwrite@read-write:
    - shard-rkl:          NOTRUN -> [SKIP][60] ([i915#14544] / [i915#3282]) +1 other test skip
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@gem_readwrite@read-write.html

  * igt@gem_render_copy@x-tiled-to-vebox-yf-tiled:
    - shard-mtlp:         NOTRUN -> [SKIP][61] ([i915#8428]) +2 other tests skip
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-7/igt@gem_render_copy@x-tiled-to-vebox-yf-tiled.html

  * igt@gem_render_copy@y-tiled-ccs-to-y-tiled-ccs:
    - shard-dg2:          NOTRUN -> [SKIP][62] ([i915#5190] / [i915#8428])
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-7/igt@gem_render_copy@y-tiled-ccs-to-y-tiled-ccs.html

  * igt@gem_render_copy@y-tiled-ccs-to-y-tiled-mc-ccs:
    - shard-glk:          NOTRUN -> [SKIP][63] +367 other tests skip
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk2/igt@gem_render_copy@y-tiled-ccs-to-y-tiled-mc-ccs.html

  * igt@gem_set_tiling_vs_blt@tiled-to-untiled:
    - shard-dg1:          NOTRUN -> [SKIP][64] ([i915#4079]) +1 other test skip
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-15/igt@gem_set_tiling_vs_blt@tiled-to-untiled.html

  * igt@gem_softpin@evict-snoop-interruptible:
    - shard-dg1:          NOTRUN -> [SKIP][65] ([i915#4885])
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-18/igt@gem_softpin@evict-snoop-interruptible.html

  * igt@gem_softpin@noreloc-s3:
    - shard-glk:          [PASS][66] -> [INCOMPLETE][67] ([i915#13356] / [i915#13809] / [i915#16193])
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-glk4/igt@gem_softpin@noreloc-s3.html
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk6/igt@gem_softpin@noreloc-s3.html

  * igt@gem_userptr_blits@create-destroy-unsync:
    - shard-tglu:         NOTRUN -> [SKIP][68] ([i915#3297]) +1 other test skip
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-10/igt@gem_userptr_blits@create-destroy-unsync.html

  * igt@gem_userptr_blits@dmabuf-sync:
    - shard-glk:          NOTRUN -> [SKIP][69] ([i915#3323])
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk8/igt@gem_userptr_blits@dmabuf-sync.html
    - shard-rkl:          NOTRUN -> [SKIP][70] ([i915#3297] / [i915#3323])
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-3/igt@gem_userptr_blits@dmabuf-sync.html

  * igt@gem_userptr_blits@dmabuf-unsync:
    - shard-rkl:          NOTRUN -> [SKIP][71] ([i915#3297])
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-5/igt@gem_userptr_blits@dmabuf-unsync.html

  * igt@gem_userptr_blits@forbidden-operations:
    - shard-dg1:          NOTRUN -> [SKIP][72] ([i915#3282] / [i915#3297])
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-14/igt@gem_userptr_blits@forbidden-operations.html

  * igt@gem_userptr_blits@invalid-mmap-offset-unsync:
    - shard-tglu-1:       NOTRUN -> [SKIP][73] ([i915#3297])
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@gem_userptr_blits@invalid-mmap-offset-unsync.html

  * igt@gem_userptr_blits@map-fixed-invalidate:
    - shard-dg2:          NOTRUN -> [SKIP][74] ([i915#3297] / [i915#4880])
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-7/igt@gem_userptr_blits@map-fixed-invalidate.html

  * igt@gem_userptr_blits@relocations:
    - shard-dg1:          NOTRUN -> [SKIP][75] ([i915#3281] / [i915#3297])
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-18/igt@gem_userptr_blits@relocations.html

  * igt@gem_userptr_blits@sd-probe:
    - shard-dg2:          NOTRUN -> [SKIP][76] ([i915#3297] / [i915#4958])
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-8/igt@gem_userptr_blits@sd-probe.html
    - shard-dg1:          NOTRUN -> [SKIP][77] ([i915#3297] / [i915#4958])
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-17/igt@gem_userptr_blits@sd-probe.html

  * igt@gem_userptr_blits@unsync-unmap-cycles:
    - shard-dg1:          NOTRUN -> [SKIP][78] ([i915#3297])
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-18/igt@gem_userptr_blits@unsync-unmap-cycles.html

  * igt@gen7_exec_parse@basic-rejected:
    - shard-dg2:          NOTRUN -> [SKIP][79] +4 other tests skip
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-5/igt@gen7_exec_parse@basic-rejected.html

  * igt@gen9_exec_parse@basic-rejected:
    - shard-rkl:          NOTRUN -> [SKIP][80] ([i915#14544] / [i915#2527])
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@gen9_exec_parse@basic-rejected.html

  * igt@gen9_exec_parse@bb-large:
    - shard-mtlp:         NOTRUN -> [SKIP][81] ([i915#2856]) +2 other tests skip
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-1/igt@gen9_exec_parse@bb-large.html

  * igt@gen9_exec_parse@bb-oversize:
    - shard-tglu-1:       NOTRUN -> [SKIP][82] ([i915#2527] / [i915#2856]) +2 other tests skip
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@gen9_exec_parse@bb-oversize.html

  * igt@gen9_exec_parse@bb-start-far:
    - shard-dg1:          NOTRUN -> [SKIP][83] ([i915#2527]) +1 other test skip
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-16/igt@gen9_exec_parse@bb-start-far.html

  * igt@gen9_exec_parse@unaligned-jump:
    - shard-tglu:         NOTRUN -> [SKIP][84] ([i915#2527] / [i915#2856]) +5 other tests skip
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-10/igt@gen9_exec_parse@unaligned-jump.html

  * igt@gen9_exec_parse@valid-registers:
    - shard-dg2:          NOTRUN -> [SKIP][85] ([i915#2856])
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-3/igt@gen9_exec_parse@valid-registers.html
    - shard-rkl:          NOTRUN -> [SKIP][86] ([i915#2527])
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-2/igt@gen9_exec_parse@valid-registers.html

  * igt@gpu_buddy@gpu_buddy:
    - shard-tglu-1:       NOTRUN -> [SKIP][87] ([i915#15678])
   [87]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@gpu_buddy@gpu_buddy.html

  * igt@i915_drm_fdinfo@all-busy-idle-check-all:
    - shard-dg1:          NOTRUN -> [SKIP][88] ([i915#14123])
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-14/igt@i915_drm_fdinfo@all-busy-idle-check-all.html

  * igt@i915_drm_fdinfo@busy@rcs0:
    - shard-dg1:          NOTRUN -> [SKIP][89] ([i915#14073]) +5 other tests skip
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-18/igt@i915_drm_fdinfo@busy@rcs0.html

  * igt@i915_drm_fdinfo@busy@vecs1:
    - shard-dg2:          NOTRUN -> [SKIP][90] ([i915#14073]) +7 other tests skip
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-7/igt@i915_drm_fdinfo@busy@vecs1.html

  * igt@i915_drm_fdinfo@virtual-busy-idle:
    - shard-dg1:          NOTRUN -> [SKIP][91] ([i915#14118])
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-18/igt@i915_drm_fdinfo@virtual-busy-idle.html

  * igt@i915_fb_tiling@basic-x-tiling:
    - shard-dg1:          NOTRUN -> [SKIP][92] ([i915#13786])
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-14/igt@i915_fb_tiling@basic-x-tiling.html

  * igt@i915_module_load@fault-injection@intel_connector_register:
    - shard-glk10:        NOTRUN -> [ABORT][93] ([i915#15342]) +1 other test abort
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk10/igt@i915_module_load@fault-injection@intel_connector_register.html

  * igt@i915_module_load@fault-injection@intel_gt_init-enodev:
    - shard-glk10:        NOTRUN -> [SKIP][94] +95 other tests skip
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk10/igt@i915_module_load@fault-injection@intel_gt_init-enodev.html

  * igt@i915_pm_freq_api@freq-reset-multiple:
    - shard-tglu-1:       NOTRUN -> [SKIP][95] ([i915#8399])
   [95]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@i915_pm_freq_api@freq-reset-multiple.html

  * igt@i915_pm_freq_api@freq-suspend:
    - shard-rkl:          NOTRUN -> [SKIP][96] ([i915#8399])
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-8/igt@i915_pm_freq_api@freq-suspend.html

  * igt@i915_pm_freq_mult@media-freq@gt0:
    - shard-rkl:          NOTRUN -> [SKIP][97] ([i915#6590]) +1 other test skip
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-5/igt@i915_pm_freq_mult@media-freq@gt0.html

  * igt@i915_pm_rc6_residency@media-rc6-accuracy:
    - shard-rkl:          NOTRUN -> [SKIP][98] ([i915#16080] / [i915#16166])
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-8/igt@i915_pm_rc6_residency@media-rc6-accuracy.html

  * igt@i915_pm_rc6_residency@rc6-fence:
    - shard-tglu-1:       NOTRUN -> [WARN][99] ([i915#13790] / [i915#2681]) +1 other test warn
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@i915_pm_rc6_residency@rc6-fence.html

  * igt@i915_pm_rpm@system-suspend:
    - shard-glk:          NOTRUN -> [INCOMPLETE][100] ([i915#13356]) +1 other test incomplete
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk2/igt@i915_pm_rpm@system-suspend.html

  * igt@i915_pm_rps@basic-api:
    - shard-dg1:          NOTRUN -> [SKIP][101] ([i915#11681] / [i915#6621])
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-18/igt@i915_pm_rps@basic-api.html

  * igt@i915_pm_rps@thresholds-park:
    - shard-dg1:          NOTRUN -> [SKIP][102] ([i915#11681])
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-12/igt@i915_pm_rps@thresholds-park.html

  * igt@i915_power@sanity:
    - shard-rkl:          NOTRUN -> [SKIP][103] ([i915#7984])
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-5/igt@i915_power@sanity.html

  * igt@i915_query@hwconfig_table:
    - shard-rkl:          NOTRUN -> [SKIP][104] ([i915#6245])
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-8/igt@i915_query@hwconfig_table.html

  * igt@i915_query@query-topology-unsupported:
    - shard-tglu:         NOTRUN -> [SKIP][105] ([i915#16079])
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-4/igt@i915_query@query-topology-unsupported.html

  * igt@i915_query@test-query-geometry-subslices:
    - shard-rkl:          NOTRUN -> [SKIP][106] ([i915#14544] / [i915#5723])
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@i915_query@test-query-geometry-subslices.html
    - shard-tglu:         NOTRUN -> [SKIP][107] ([i915#5723])
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-4/igt@i915_query@test-query-geometry-subslices.html

  * igt@i915_selftest@perf:
    - shard-dg2:          [PASS][108] -> [DMESG-WARN][109] ([i915#14545])
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-dg2-1/igt@i915_selftest@perf.html
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-7/igt@i915_selftest@perf.html

  * igt@i915_suspend@basic-s2idle-without-i915:
    - shard-rkl:          [PASS][110] -> [ABORT][111] ([i915#15131]) +1 other test abort
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-4/igt@i915_suspend@basic-s2idle-without-i915.html
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-1/igt@i915_suspend@basic-s2idle-without-i915.html

  * igt@i915_suspend@basic-s3-without-i915:
    - shard-tglu:         NOTRUN -> [INCOMPLETE][112] ([i915#4817] / [i915#7443])
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-2/igt@i915_suspend@basic-s3-without-i915.html

  * igt@i915_suspend@sysfs-reader:
    - shard-glk:          NOTRUN -> [INCOMPLETE][113] ([i915#13356] / [i915#16182] / [i915#4817])
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk9/igt@i915_suspend@sysfs-reader.html

  * igt@kms_addfb_basic@addfb25-x-tiled-mismatch-legacy:
    - shard-dg2:          NOTRUN -> [SKIP][114] ([i915#4212]) +1 other test skip
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-6/igt@kms_addfb_basic@addfb25-x-tiled-mismatch-legacy.html

  * igt@kms_addfb_basic@bo-too-small-due-to-tiling:
    - shard-dg1:          NOTRUN -> [SKIP][115] ([i915#4212]) +5 other tests skip
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-14/igt@kms_addfb_basic@bo-too-small-due-to-tiling.html

  * igt@kms_addfb_basic@invalid-smem-bo-on-discrete:
    - shard-tglu-1:       NOTRUN -> [SKIP][116] ([i915#12454] / [i915#12712])
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_addfb_basic@invalid-smem-bo-on-discrete.html

  * igt@kms_async_flips@async-flip-suspend-resume:
    - shard-rkl:          NOTRUN -> [INCOMPLETE][117] ([i915#12761]) +1 other test incomplete
   [117]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-7/igt@kms_async_flips@async-flip-suspend-resume.html
    - shard-glk:          NOTRUN -> [INCOMPLETE][118] ([i915#12761] / [i915#13356]) +1 other test incomplete
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk1/igt@kms_async_flips@async-flip-suspend-resume.html

  * igt@kms_atomic@plane-primary-overlay-mutable-zpos:
    - shard-tglu:         NOTRUN -> [SKIP][119] ([i915#9531])
   [119]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-4/igt@kms_atomic@plane-primary-overlay-mutable-zpos.html

  * igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels:
    - shard-tglu-1:       NOTRUN -> [SKIP][120] ([i915#1769] / [i915#3555]) +1 other test skip
   [120]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html

  * igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels:
    - shard-snb:          NOTRUN -> [SKIP][121] ([i915#1769])
   [121]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-snb4/igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels.html

  * igt@kms_big_fb@4-tiled-64bpp-rotate-0:
    - shard-tglu:         NOTRUN -> [SKIP][122] ([i915#5286]) +5 other tests skip
   [122]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-9/igt@kms_big_fb@4-tiled-64bpp-rotate-0.html

  * igt@kms_big_fb@4-tiled-addfb:
    - shard-dg1:          NOTRUN -> [SKIP][123] ([i915#5286]) +1 other test skip
   [123]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-15/igt@kms_big_fb@4-tiled-addfb.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0-hflip:
    - shard-tglu-1:       NOTRUN -> [SKIP][124] ([i915#5286]) +2 other tests skip
   [124]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0-hflip.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip:
    - shard-mtlp:         [PASS][125] -> [FAIL][126] ([i915#15733] / [i915#5138])
   [125]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-mtlp-1/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip.html
   [126]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-8/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-async-flip:
    - shard-dg1:          NOTRUN -> [SKIP][127] ([i915#4538] / [i915#5286]) +5 other tests skip
   [127]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-12/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-async-flip.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip:
    - shard-rkl:          NOTRUN -> [SKIP][128] ([i915#5286]) +6 other tests skip
   [128]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-7/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip.html

  * igt@kms_big_fb@linear-32bpp-rotate-90:
    - shard-dg1:          NOTRUN -> [SKIP][129] ([i915#3638]) +4 other tests skip
   [129]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-19/igt@kms_big_fb@linear-32bpp-rotate-90.html

  * igt@kms_big_fb@linear-8bpp-rotate-90:
    - shard-rkl:          NOTRUN -> [SKIP][130] ([i915#3638])
   [130]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-7/igt@kms_big_fb@linear-8bpp-rotate-90.html

  * igt@kms_big_fb@linear-max-hw-stride-64bpp-rotate-0-hflip:
    - shard-dg1:          NOTRUN -> [SKIP][131] ([i915#3828])
   [131]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-14/igt@kms_big_fb@linear-max-hw-stride-64bpp-rotate-0-hflip.html

  * igt@kms_big_fb@linear-max-hw-stride-64bpp-rotate-180-hflip:
    - shard-rkl:          NOTRUN -> [SKIP][132] ([i915#3828]) +1 other test skip
   [132]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-8/igt@kms_big_fb@linear-max-hw-stride-64bpp-rotate-180-hflip.html

  * igt@kms_big_fb@y-tiled-64bpp-rotate-270:
    - shard-rkl:          NOTRUN -> [SKIP][133] ([i915#14544] / [i915#3638])
   [133]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_big_fb@y-tiled-64bpp-rotate-270.html

  * igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0-hflip:
    - shard-mtlp:         NOTRUN -> [SKIP][134] +5 other tests skip
   [134]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-6/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0-hflip.html

  * igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip:
    - shard-dg2:          NOTRUN -> [SKIP][135] ([i915#4538] / [i915#5190]) +3 other tests skip
   [135]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-4/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip.html

  * igt@kms_big_fb@yf-tiled-32bpp-rotate-90:
    - shard-dg1:          NOTRUN -> [SKIP][136] ([i915#4538]) +6 other tests skip
   [136]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-18/igt@kms_big_fb@yf-tiled-32bpp-rotate-90.html

  * igt@kms_big_fb@yf-tiled-addfb-size-overflow:
    - shard-dg2:          NOTRUN -> [SKIP][137] ([i915#5190]) +1 other test skip
   [137]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-6/igt@kms_big_fb@yf-tiled-addfb-size-overflow.html
    - shard-mtlp:         NOTRUN -> [SKIP][138] ([i915#6187]) +1 other test skip
   [138]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-8/igt@kms_big_fb@yf-tiled-addfb-size-overflow.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0:
    - shard-tglu-1:       NOTRUN -> [SKIP][139] +72 other tests skip
   [139]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-dg2-mc-ccs@pipe-a-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][140] ([i915#14544] / [i915#6095]) +3 other tests skip
   [140]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_ccs@bad-rotation-90-4-tiled-dg2-mc-ccs@pipe-a-hdmi-a-2.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-dg2-mc-ccs@pipe-c-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][141] ([i915#14098] / [i915#14544] / [i915#6095]) +2 other tests skip
   [141]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_ccs@bad-rotation-90-4-tiled-dg2-mc-ccs@pipe-c-hdmi-a-2.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs-cc@pipe-b-hdmi-a-4:
    - shard-dg1:          NOTRUN -> [SKIP][142] ([i915#6095]) +176 other tests skip
   [142]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-17/igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs-cc@pipe-b-hdmi-a-4.html

  * igt@kms_ccs@crc-primary-basic-4-tiled-bmg-ccs:
    - shard-tglu:         NOTRUN -> [SKIP][143] ([i915#12313])
   [143]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-4/igt@kms_ccs@crc-primary-basic-4-tiled-bmg-ccs.html

  * igt@kms_ccs@crc-primary-basic-4-tiled-dg2-rc-ccs@pipe-a-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][144] ([i915#6095]) +4 other tests skip
   [144]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-7/igt@kms_ccs@crc-primary-basic-4-tiled-dg2-rc-ccs@pipe-a-edp-1.html

  * igt@kms_ccs@crc-primary-basic-4-tiled-lnl-ccs:
    - shard-dg1:          NOTRUN -> [SKIP][145] ([i915#12313]) +1 other test skip
   [145]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-16/igt@kms_ccs@crc-primary-basic-4-tiled-lnl-ccs.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-lnl-ccs:
    - shard-tglu-1:       NOTRUN -> [SKIP][146] ([i915#12313]) +1 other test skip
   [146]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_ccs@crc-primary-rotation-180-4-tiled-lnl-ccs.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-mc-ccs:
    - shard-dg2:          NOTRUN -> [SKIP][147] ([i915#10307] / [i915#10434] / [i915#6095]) +1 other test skip
   [147]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-1/igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-mc-ccs.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-mc-ccs@pipe-a-hdmi-a-3:
    - shard-dg2:          NOTRUN -> [SKIP][148] ([i915#10307] / [i915#6095]) +67 other tests skip
   [148]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-1/igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-mc-ccs@pipe-a-hdmi-a-3.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs:
    - shard-tglu:         NOTRUN -> [SKIP][149] ([i915#12805])
   [149]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-4/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs:
    - shard-tglu-1:       NOTRUN -> [SKIP][150] ([i915#6095]) +59 other tests skip
   [150]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-rc-ccs-cc@pipe-b-hdmi-a-1:
    - shard-tglu:         NOTRUN -> [SKIP][151] ([i915#6095]) +64 other tests skip
   [151]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-3/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-rc-ccs-cc@pipe-b-hdmi-a-1.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-rc-ccs@pipe-b-hdmi-a-1:
    - shard-rkl:          NOTRUN -> [SKIP][152] ([i915#6095]) +65 other tests skip
   [152]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-5/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-rc-ccs@pipe-b-hdmi-a-1.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs-cc:
    - shard-mtlp:         [PASS][153] -> [INCOMPLETE][154] ([i915#15582]) +1 other test incomplete
   [153]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-mtlp-6/igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs-cc.html
   [154]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-5/igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs-cc.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs-cc@pipe-a-hdmi-a-1:
    - shard-dg2:          NOTRUN -> [SKIP][155] ([i915#6095]) +3 other tests skip
   [155]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-4/igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs-cc@pipe-a-hdmi-a-1.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs-cc@pipe-c-edp-1:
    - shard-mtlp:         [PASS][156] -> [FAIL][157] ([i915#17158])
   [156]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-mtlp-6/igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs-cc@pipe-c-edp-1.html
   [157]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-5/igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs-cc@pipe-c-edp-1.html

  * igt@kms_ccs@crc-primary-suspend-y-tiled-ccs:
    - shard-glk:          NOTRUN -> [INCOMPLETE][158] ([i915#13356] / [i915#15582]) +2 other tests incomplete
   [158]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk5/igt@kms_ccs@crc-primary-suspend-y-tiled-ccs.html

  * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-lnl-ccs:
    - shard-rkl:          NOTRUN -> [SKIP][159] ([i915#12313]) +1 other test skip
   [159]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-7/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-lnl-ccs.html

  * igt@kms_ccs@crc-sprite-planes-basic-y-tiled-ccs@pipe-c-hdmi-a-1:
    - shard-rkl:          NOTRUN -> [SKIP][160] ([i915#14098] / [i915#6095]) +46 other tests skip
   [160]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-2/igt@kms_ccs@crc-sprite-planes-basic-y-tiled-ccs@pipe-c-hdmi-a-1.html

  * igt@kms_cdclk@mode-transition-all-outputs:
    - shard-dg1:          NOTRUN -> [SKIP][161] ([i915#3742])
   [161]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-12/igt@kms_cdclk@mode-transition-all-outputs.html

  * igt@kms_cdclk@plane-scaling:
    - shard-tglu:         NOTRUN -> [SKIP][162] ([i915#3742])
   [162]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-8/igt@kms_cdclk@plane-scaling.html

  * igt@kms_cdclk@plane-scaling@pipe-c-hdmi-a-3:
    - shard-dg2:          NOTRUN -> [SKIP][163] ([i915#13781]) +3 other tests skip
   [163]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-5/igt@kms_cdclk@plane-scaling@pipe-c-hdmi-a-3.html

  * igt@kms_chamelium_audio@dp-audio-after-suspend:
    - shard-tglu:         NOTRUN -> [SKIP][164] ([i915#11151])
   [164]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-10/igt@kms_chamelium_audio@dp-audio-after-suspend.html

  * igt@kms_chamelium_audio@hdmi-audio-after-suspend:
    - shard-rkl:          NOTRUN -> [SKIP][165] ([i915#11151])
   [165]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-4/igt@kms_chamelium_audio@hdmi-audio-after-suspend.html

  * igt@kms_chamelium_audio@hdmi-audio-edid:
    - shard-dg1:          NOTRUN -> [SKIP][166] ([i915#11151] / [i915#7828]) +9 other tests skip
   [166]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-15/igt@kms_chamelium_audio@hdmi-audio-edid.html

  * igt@kms_chamelium_color_pipeline@plane-ctm3x4-lut1d:
    - shard-rkl:          NOTRUN -> [SKIP][167] ([i915#16471])
   [167]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-1/igt@kms_chamelium_color_pipeline@plane-ctm3x4-lut1d.html

  * igt@kms_chamelium_color_pipeline@plane-lut1d-ctm3x4-lut1d:
    - shard-dg1:          NOTRUN -> [SKIP][168] ([i915#16471]) +2 other tests skip
   [168]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-15/igt@kms_chamelium_color_pipeline@plane-lut1d-ctm3x4-lut1d.html

  * igt@kms_chamelium_color_pipeline@plane-lut1d-post-ctm3x4:
    - shard-dg2:          NOTRUN -> [SKIP][169] ([i915#16471])
   [169]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-7/igt@kms_chamelium_color_pipeline@plane-lut1d-post-ctm3x4.html
    - shard-tglu:         NOTRUN -> [SKIP][170] ([i915#16471]) +1 other test skip
   [170]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-5/igt@kms_chamelium_color_pipeline@plane-lut1d-post-ctm3x4.html
    - shard-mtlp:         NOTRUN -> [SKIP][171] ([i915#16464] / [i915#16471])
   [171]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-6/igt@kms_chamelium_color_pipeline@plane-lut1d-post-ctm3x4.html

  * igt@kms_chamelium_frames@dp-crc-fast:
    - shard-tglu-1:       NOTRUN -> [SKIP][172] ([i915#11151] / [i915#7828]) +5 other tests skip
   [172]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_chamelium_frames@dp-crc-fast.html

  * igt@kms_chamelium_frames@hdmi-crc-multiple:
    - shard-dg2:          NOTRUN -> [SKIP][173] ([i915#11151] / [i915#7828]) +3 other tests skip
   [173]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-4/igt@kms_chamelium_frames@hdmi-crc-multiple.html

  * igt@kms_chamelium_hpd@dp-hpd-enable-disable-mode:
    - shard-mtlp:         NOTRUN -> [SKIP][174] ([i915#11151] / [i915#7828]) +2 other tests skip
   [174]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-3/igt@kms_chamelium_hpd@dp-hpd-enable-disable-mode.html

  * igt@kms_chamelium_hpd@dp-hpd-storm:
    - shard-tglu:         NOTRUN -> [SKIP][175] ([i915#11151] / [i915#7828]) +7 other tests skip
   [175]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-5/igt@kms_chamelium_hpd@dp-hpd-storm.html

  * igt@kms_chamelium_hpd@vga-hpd-for-each-pipe:
    - shard-rkl:          NOTRUN -> [SKIP][176] ([i915#11151] / [i915#7828]) +7 other tests skip
   [176]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-4/igt@kms_chamelium_hpd@vga-hpd-for-each-pipe.html

  * igt@kms_color@deep-color:
    - shard-rkl:          NOTRUN -> [SKIP][177] ([i915#12655] / [i915#3555])
   [177]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-5/igt@kms_color@deep-color.html

  * igt@kms_color_pipeline@plane-ctm3x4@pipe-a-plane-4:
    - shard-rkl:          NOTRUN -> [SKIP][178] ([i915#16990]) +11 other tests skip
   [178]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-8/igt@kms_color_pipeline@plane-ctm3x4@pipe-a-plane-4.html

  * igt@kms_color_pipeline@plane-fixed-matrix-yuv-rgb-bt2020@pipe-a-plane-2:
    - shard-dg1:          NOTRUN -> [FAIL][179] ([i915#17116]) +78 other tests fail
   [179]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-12/igt@kms_color_pipeline@plane-fixed-matrix-yuv-rgb-bt2020@pipe-a-plane-2.html

  * igt@kms_color_pipeline@plane-fixed-matrix-yuv-rgb-bt601@pipe-d-plane-2:
    - shard-dg2:          NOTRUN -> [FAIL][180] ([i915#17116]) +41 other tests fail
   [180]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-6/igt@kms_color_pipeline@plane-fixed-matrix-yuv-rgb-bt601@pipe-d-plane-2.html

  * igt@kms_color_pipeline@plane-fixed-matrix-yuv-rgb-bt601@pipe-d-plane-4:
    - shard-mtlp:         NOTRUN -> [FAIL][181] ([i915#15733]) +20 other tests fail
   [181]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-7/igt@kms_color_pipeline@plane-fixed-matrix-yuv-rgb-bt601@pipe-d-plane-4.html

  * igt@kms_color_pipeline@plane-fixed-matrix-yuv-rgb-bt709-lim-lut1d@pipe-a-plane-2:
    - shard-tglu:         NOTRUN -> [FAIL][182] ([i915#17116]) +86 other tests fail
   [182]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-10/igt@kms_color_pipeline@plane-fixed-matrix-yuv-rgb-bt709-lim-lut1d@pipe-a-plane-2.html

  * igt@kms_color_pipeline@plane-fixed-matrix-yuv-rgb-bt709-lut1d@pipe-b-plane-2:
    - shard-rkl:          NOTRUN -> [FAIL][183] ([i915#17116]) +31 other tests fail
   [183]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-2/igt@kms_color_pipeline@plane-fixed-matrix-yuv-rgb-bt709-lut1d@pipe-b-plane-2.html

  * igt@kms_color_pipeline@plane-fixed-matrix-yuv-rgb-bt709@pipe-a-plane-0:
    - shard-tglu-1:       NOTRUN -> [FAIL][184] ([i915#17116]) +57 other tests fail
   [184]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_color_pipeline@plane-fixed-matrix-yuv-rgb-bt709@pipe-a-plane-0.html

  * igt@kms_color_pipeline@plane-lut1d-ctm3x4-lut1d@pipe-d-plane-3:
    - shard-tglu:         NOTRUN -> [SKIP][185] ([i915#16990]) +15 other tests skip
   [185]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-3/igt@kms_color_pipeline@plane-lut1d-ctm3x4-lut1d@pipe-d-plane-3.html

  * igt@kms_color_pipeline@plane-lut1d-post-ctm3x4@pipe-d-plane-5:
    - shard-dg1:          NOTRUN -> [SKIP][186] ([i915#16990]) +31 other tests skip
   [186]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-18/igt@kms_color_pipeline@plane-lut1d-post-ctm3x4@pipe-d-plane-5.html

  * igt@kms_color_pipeline@plane-lut1d-pre-ctm3x4@pipe-d-plane-4:
    - shard-mtlp:         NOTRUN -> [SKIP][187] ([i915#16990]) +7 other tests skip
   [187]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-8/igt@kms_color_pipeline@plane-lut1d-pre-ctm3x4@pipe-d-plane-4.html

  * igt@kms_content_protection@atomic-dpms:
    - shard-rkl:          NOTRUN -> [SKIP][188] ([i915#15865])
   [188]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-5/igt@kms_content_protection@atomic-dpms.html

  * igt@kms_content_protection@atomic-hdcp14:
    - shard-dg1:          NOTRUN -> [SKIP][189] ([i915#15865]) +8 other tests skip
   [189]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-19/igt@kms_content_protection@atomic-hdcp14.html

  * igt@kms_content_protection@dp-mst-lic-type-1:
    - shard-tglu-1:       NOTRUN -> [SKIP][190] ([i915#15330] / [i915#3116] / [i915#3299]) +1 other test skip
   [190]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_content_protection@dp-mst-lic-type-1.html

  * igt@kms_content_protection@dp-mst-type-0:
    - shard-tglu:         NOTRUN -> [SKIP][191] ([i915#15330] / [i915#3116] / [i915#3299])
   [191]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-5/igt@kms_content_protection@dp-mst-type-0.html

  * igt@kms_content_protection@dp-mst-type-1:
    - shard-rkl:          NOTRUN -> [SKIP][192] ([i915#14544] / [i915#15330] / [i915#3116])
   [192]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_content_protection@dp-mst-type-1.html

  * igt@kms_content_protection@dp-mst-type-1-suspend-resume:
    - shard-tglu:         NOTRUN -> [SKIP][193] ([i915#15330])
   [193]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-8/igt@kms_content_protection@dp-mst-type-1-suspend-resume.html

  * igt@kms_content_protection@srm:
    - shard-dg2:          NOTRUN -> [SKIP][194] ([i915#15865]) +2 other tests skip
   [194]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-7/igt@kms_content_protection@srm.html
    - shard-rkl:          NOTRUN -> [SKIP][195] ([i915#14544] / [i915#15865])
   [195]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_content_protection@srm.html
    - shard-tglu:         NOTRUN -> [SKIP][196] ([i915#15865])
   [196]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-10/igt@kms_content_protection@srm.html
    - shard-mtlp:         NOTRUN -> [SKIP][197] ([i915#15865])
   [197]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-4/igt@kms_content_protection@srm.html

  * igt@kms_content_protection@type1:
    - shard-tglu-1:       NOTRUN -> [SKIP][198] ([i915#15865]) +1 other test skip
   [198]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_content_protection@type1.html

  * igt@kms_cursor_crc@cursor-onscreen-128x42:
    - shard-rkl:          [PASS][199] -> [FAIL][200] ([i915#13566])
   [199]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-8/igt@kms_cursor_crc@cursor-onscreen-128x42.html
   [200]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_cursor_crc@cursor-onscreen-128x42.html
    - shard-tglu:         [PASS][201] -> [FAIL][202] ([i915#13566]) +3 other tests fail
   [201]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-tglu-5/igt@kms_cursor_crc@cursor-onscreen-128x42.html
   [202]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-4/igt@kms_cursor_crc@cursor-onscreen-128x42.html

  * igt@kms_cursor_crc@cursor-onscreen-128x42@pipe-a-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [FAIL][203] ([i915#13566])
   [203]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_cursor_crc@cursor-onscreen-128x42@pipe-a-hdmi-a-2.html

  * igt@kms_cursor_crc@cursor-onscreen-max-size:
    - shard-tglu-1:       NOTRUN -> [SKIP][204] ([i915#3555]) +2 other tests skip
   [204]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_cursor_crc@cursor-onscreen-max-size.html

  * igt@kms_cursor_crc@cursor-random-512x170:
    - shard-tglu:         NOTRUN -> [SKIP][205] ([i915#13049]) +1 other test skip
   [205]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-8/igt@kms_cursor_crc@cursor-random-512x170.html

  * igt@kms_cursor_crc@cursor-random-512x512:
    - shard-tglu-1:       NOTRUN -> [SKIP][206] ([i915#13049]) +2 other tests skip
   [206]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_cursor_crc@cursor-random-512x512.html

  * igt@kms_cursor_crc@cursor-rapid-movement-32x10:
    - shard-rkl:          NOTRUN -> [SKIP][207] ([i915#3555]) +6 other tests skip
   [207]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-7/igt@kms_cursor_crc@cursor-rapid-movement-32x10.html

  * igt@kms_cursor_crc@cursor-rapid-movement-512x170:
    - shard-dg1:          NOTRUN -> [SKIP][208] ([i915#13049])
   [208]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-19/igt@kms_cursor_crc@cursor-rapid-movement-512x170.html

  * igt@kms_cursor_crc@cursor-sliding-32x10:
    - shard-tglu:         NOTRUN -> [SKIP][209] ([i915#3555]) +3 other tests skip
   [209]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-5/igt@kms_cursor_crc@cursor-sliding-32x10.html

  * igt@kms_cursor_crc@cursor-suspend:
    - shard-mtlp:         [PASS][210] -> [INCOMPLETE][211] ([i915#12358]) +1 other test incomplete
   [210]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-mtlp-6/igt@kms_cursor_crc@cursor-suspend.html
   [211]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-1/igt@kms_cursor_crc@cursor-suspend.html
    - shard-glk:          NOTRUN -> [INCOMPLETE][212] ([i915#12358] / [i915#13356] / [i915#14152] / [i915#7882])
   [212]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk6/igt@kms_cursor_crc@cursor-suspend.html

  * igt@kms_cursor_crc@cursor-suspend@pipe-a-edp-1:
    - shard-mtlp:         [PASS][213] -> [FAIL][214] ([i915#17157])
   [213]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-mtlp-6/igt@kms_cursor_crc@cursor-suspend@pipe-a-edp-1.html
   [214]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-1/igt@kms_cursor_crc@cursor-suspend@pipe-a-edp-1.html

  * igt@kms_cursor_crc@cursor-suspend@pipe-a-hdmi-a-1:
    - shard-glk:          NOTRUN -> [INCOMPLETE][215] ([i915#12358] / [i915#13356] / [i915#14152])
   [215]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk6/igt@kms_cursor_crc@cursor-suspend@pipe-a-hdmi-a-1.html

  * igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy:
    - shard-rkl:          NOTRUN -> [SKIP][216] +99 other tests skip
   [216]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-4/igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy:
    - shard-dg1:          NOTRUN -> [SKIP][217] ([i915#4103])
   [217]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-19/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html
    - shard-mtlp:         NOTRUN -> [SKIP][218] ([i915#16119] / [i915#4213])
   [218]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-2/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size:
    - shard-rkl:          NOTRUN -> [SKIP][219] ([i915#4103]) +1 other test skip
   [219]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-5/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size.html

  * igt@kms_cursor_legacy@cursora-vs-flipb-atomic-transitions-varying-size:
    - shard-dg2:          NOTRUN -> [SKIP][220] ([i915#13046] / [i915#5354]) +1 other test skip
   [220]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-6/igt@kms_cursor_legacy@cursora-vs-flipb-atomic-transitions-varying-size.html
    - shard-mtlp:         NOTRUN -> [SKIP][221] ([i915#9809]) +1 other test skip
   [221]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-7/igt@kms_cursor_legacy@cursora-vs-flipb-atomic-transitions-varying-size.html

  * igt@kms_cursor_legacy@modeset-atomic-cursor-hotspot:
    - shard-dg1:          NOTRUN -> [SKIP][222] ([i915#9067])
   [222]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-18/igt@kms_cursor_legacy@modeset-atomic-cursor-hotspot.html

  * igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle:
    - shard-tglu-1:       NOTRUN -> [SKIP][223] ([i915#4103])
   [223]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle.html

  * igt@kms_dirtyfb@drrs-dirtyfb-ioctl:
    - shard-rkl:          NOTRUN -> [SKIP][224] ([i915#9723])
   [224]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-1/igt@kms_dirtyfb@drrs-dirtyfb-ioctl.html

  * igt@kms_dp_aux_dev@basic:
    - shard-tglu-1:       NOTRUN -> [SKIP][225] ([i915#1257])
   [225]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_dp_aux_dev@basic.html

  * igt@kms_dp_link_training@non-uhbr-mst:
    - shard-dg1:          NOTRUN -> [SKIP][226] ([i915#13749])
   [226]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-14/igt@kms_dp_link_training@non-uhbr-mst.html

  * igt@kms_dp_link_training@non-uhbr-sst:
    - shard-rkl:          NOTRUN -> [SKIP][227] ([i915#13749])
   [227]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-7/igt@kms_dp_link_training@non-uhbr-sst.html

  * igt@kms_dp_link_training@uhbr-sst:
    - shard-rkl:          NOTRUN -> [SKIP][228] ([i915#13748])
   [228]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-8/igt@kms_dp_link_training@uhbr-sst.html

  * igt@kms_dp_linktrain_fallback@dsc-fallback:
    - shard-dg1:          NOTRUN -> [SKIP][229] ([i915#13707])
   [229]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-17/igt@kms_dp_linktrain_fallback@dsc-fallback.html

  * igt@kms_dp_linktrain_fallback@uhbr-to-hbr-fallback:
    - shard-rkl:          NOTRUN -> [SKIP][230] ([i915#16867])
   [230]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-5/igt@kms_dp_linktrain_fallback@uhbr-to-hbr-fallback.html

  * igt@kms_dsc@dsc-basic-ultrajoiner:
    - shard-dg1:          NOTRUN -> [SKIP][231] ([i915#16361]) +6 other tests skip
   [231]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-14/igt@kms_dsc@dsc-basic-ultrajoiner.html

  * igt@kms_dsc@dsc-fractional-bpp:
    - shard-dg2:          NOTRUN -> [SKIP][232] ([i915#16361]) +2 other tests skip
   [232]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-8/igt@kms_dsc@dsc-fractional-bpp.html

  * igt@kms_dsc@dsc-fractional-bpp-ultrajoiner:
    - shard-tglu:         NOTRUN -> [SKIP][233] ([i915#16361]) +3 other tests skip
   [233]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-10/igt@kms_dsc@dsc-fractional-bpp-ultrajoiner.html

  * igt@kms_dsc@dsc-with-bpc-formats-ultrajoiner:
    - shard-rkl:          NOTRUN -> [SKIP][234] ([i915#16361]) +3 other tests skip
   [234]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-1/igt@kms_dsc@dsc-with-bpc-formats-ultrajoiner.html
    - shard-mtlp:         NOTRUN -> [SKIP][235] ([i915#16361]) +1 other test skip
   [235]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-6/igt@kms_dsc@dsc-with-bpc-formats-ultrajoiner.html

  * igt@kms_dsc@dsc-with-output-formats-bigjoiner:
    - shard-tglu-1:       NOTRUN -> [SKIP][236] ([i915#16361]) +3 other tests skip
   [236]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_dsc@dsc-with-output-formats-bigjoiner.html

  * igt@kms_fbcon_fbt@fbc-suspend:
    - shard-glk10:        NOTRUN -> [INCOMPLETE][237] ([i915#13356] / [i915#9878])
   [237]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk10/igt@kms_fbcon_fbt@fbc-suspend.html

  * igt@kms_fbcon_fbt@psr-suspend:
    - shard-mtlp:         [PASS][238] -> [FAIL][239] ([i915#17189])
   [238]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-mtlp-6/igt@kms_fbcon_fbt@psr-suspend.html
   [239]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-3/igt@kms_fbcon_fbt@psr-suspend.html

  * igt@kms_feature_discovery@chamelium:
    - shard-tglu:         NOTRUN -> [SKIP][240] ([i915#2065])
   [240]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-3/igt@kms_feature_discovery@chamelium.html

  * igt@kms_feature_discovery@display-4x:
    - shard-dg1:          NOTRUN -> [SKIP][241] ([i915#16081])
   [241]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-17/igt@kms_feature_discovery@display-4x.html

  * igt@kms_feature_discovery@dp-mst:
    - shard-rkl:          NOTRUN -> [SKIP][242] ([i915#16599])
   [242]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-8/igt@kms_feature_discovery@dp-mst.html

  * igt@kms_feature_discovery@hdr:
    - shard-rkl:          NOTRUN -> [SKIP][243] ([i915#16600])
   [243]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-2/igt@kms_feature_discovery@hdr.html

  * igt@kms_feature_discovery@psr1:
    - shard-rkl:          NOTRUN -> [SKIP][244] ([i915#658])
   [244]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-5/igt@kms_feature_discovery@psr1.html

  * igt@kms_fence_pin_leak:
    - shard-dg1:          NOTRUN -> [SKIP][245] ([i915#4881])
   [245]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-19/igt@kms_fence_pin_leak.html

  * igt@kms_flip@2x-absolute-wf_vblank:
    - shard-dg2:          NOTRUN -> [SKIP][246] ([i915#9934]) +2 other tests skip
   [246]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-8/igt@kms_flip@2x-absolute-wf_vblank.html
    - shard-dg1:          NOTRUN -> [SKIP][247] ([i915#9934]) +11 other tests skip
   [247]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-17/igt@kms_flip@2x-absolute-wf_vblank.html
    - shard-tglu:         NOTRUN -> [SKIP][248] ([i915#3637] / [i915#9934]) +8 other tests skip
   [248]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-10/igt@kms_flip@2x-absolute-wf_vblank.html

  * igt@kms_flip@2x-dpms-vs-vblank-race:
    - shard-rkl:          NOTRUN -> [SKIP][249] ([i915#9934]) +2 other tests skip
   [249]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-3/igt@kms_flip@2x-dpms-vs-vblank-race.html

  * igt@kms_flip@2x-flip-vs-dpms-off-vs-modeset-interruptible:
    - shard-tglu-1:       NOTRUN -> [SKIP][250] ([i915#3637] / [i915#9934]) +3 other tests skip
   [250]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_flip@2x-flip-vs-dpms-off-vs-modeset-interruptible.html

  * igt@kms_flip@2x-flip-vs-dpms-on-nop:
    - shard-tglu-1:       NOTRUN -> [SKIP][251] ([i915#9934])
   [251]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_flip@2x-flip-vs-dpms-on-nop.html

  * igt@kms_flip@2x-flip-vs-wf_vblank-interruptible:
    - shard-mtlp:         NOTRUN -> [SKIP][252] ([i915#3637] / [i915#9934]) +3 other tests skip
   [252]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-4/igt@kms_flip@2x-flip-vs-wf_vblank-interruptible.html

  * igt@kms_flip@flip-vs-absolute-wf_vblank-interruptible:
    - shard-dg1:          [PASS][253] -> [FAIL][254] ([i915#14600])
   [253]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-dg1-18/igt@kms_flip@flip-vs-absolute-wf_vblank-interruptible.html
   [254]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-12/igt@kms_flip@flip-vs-absolute-wf_vblank-interruptible.html

  * igt@kms_flip@flip-vs-absolute-wf_vblank-interruptible@c-hdmi-a3:
    - shard-dg1:          NOTRUN -> [FAIL][255] ([i915#14600])
   [255]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-12/igt@kms_flip@flip-vs-absolute-wf_vblank-interruptible@c-hdmi-a3.html

  * igt@kms_flip@flip-vs-expired-vblank:
    - shard-glk:          NOTRUN -> [FAIL][256] ([i915#13027]) +1 other test fail
   [256]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk3/igt@kms_flip@flip-vs-expired-vblank.html

  * igt@kms_flip@flip-vs-fences-interruptible:
    - shard-dg1:          NOTRUN -> [SKIP][257] ([i915#8381]) +1 other test skip
   [257]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-18/igt@kms_flip@flip-vs-fences-interruptible.html
    - shard-mtlp:         NOTRUN -> [SKIP][258] ([i915#8381])
   [258]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-2/igt@kms_flip@flip-vs-fences-interruptible.html

  * igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling:
    - shard-tglu-1:       NOTRUN -> [SKIP][259] ([i915#15643]) +1 other test skip
   [259]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling.html

  * igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-64bpp-4tile-downscaling:
    - shard-rkl:          NOTRUN -> [SKIP][260] ([i915#14544] / [i915#15643])
   [260]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-64bpp-4tile-downscaling.html

  * igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-upscaling:
    - shard-tglu:         NOTRUN -> [SKIP][261] ([i915#15643]) +4 other tests skip
   [261]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-3/igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-upscaling.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-downscaling:
    - shard-dg2:          NOTRUN -> [SKIP][262] ([i915#15643] / [i915#5190])
   [262]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-4/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-downscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling:
    - shard-dg1:          NOTRUN -> [SKIP][263] ([i915#15643])
   [263]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-19/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling.html
    - shard-mtlp:         NOTRUN -> [SKIP][264] ([i915#15643])
   [264]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-5/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling:
    - shard-rkl:          NOTRUN -> [SKIP][265] ([i915#15643]) +3 other tests skip
   [265]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-4/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling.html

  * igt@kms_frontbuffer_tracking@fbc-1p-offscreen-pri-shrfb-draw-mmap-gtt:
    - shard-mtlp:         NOTRUN -> [SKIP][266] ([i915#15104] / [i915#15990])
   [266]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-4/igt@kms_frontbuffer_tracking@fbc-1p-offscreen-pri-shrfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-cpu:
    - shard-dg1:          NOTRUN -> [SKIP][267] +98 other tests skip
   [267]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-16/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-indfb-draw-render:
    - shard-dg2:          NOTRUN -> [SKIP][268] ([i915#15991] / [i915#5354]) +7 other tests skip
   [268]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-6/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-shrfb-draw-mmap-gtt:
    - shard-rkl:          NOTRUN -> [SKIP][269] ([i915#1825]) +8 other tests skip
   [269]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-8/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-shrfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbc-tiling-4:
    - shard-tglu-1:       NOTRUN -> [SKIP][270] ([i915#5439])
   [270]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_frontbuffer_tracking@fbc-tiling-4.html

  * igt@kms_frontbuffer_tracking@fbchdr-1p-offscreen-pri-shrfb-draw-pwrite:
    - shard-dg2:          NOTRUN -> [SKIP][271] ([i915#15989]) +6 other tests skip
   [271]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-4/igt@kms_frontbuffer_tracking@fbchdr-1p-offscreen-pri-shrfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-shrfb-plflip-blt:
    - shard-rkl:          NOTRUN -> [SKIP][272] ([i915#15989]) +18 other tests skip
   [272]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-7/igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-shrfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-spr-indfb-draw-pwrite:
    - shard-tglu:         NOTRUN -> [SKIP][273] ([i915#15989]) +23 other tests skip
   [273]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-10/igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-spr-indfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-spr-indfb-move:
    - shard-rkl:          [PASS][274] -> [SKIP][275] ([i915#15989]) +3 other tests skip
   [274]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-6/igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-spr-indfb-move.html
   [275]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-7/igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-spr-indfb-move.html

  * igt@kms_frontbuffer_tracking@fbchdr-2p-primscrn-spr-indfb-draw-mmap-gtt:
    - shard-dg2:          NOTRUN -> [SKIP][276] ([i915#15990]) +8 other tests skip
   [276]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-3/igt@kms_frontbuffer_tracking@fbchdr-2p-primscrn-spr-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbchdr-2p-scndscrn-spr-indfb-draw-mmap-gtt:
    - shard-mtlp:         NOTRUN -> [SKIP][277] ([i915#15990]) +3 other tests skip
   [277]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-1/igt@kms_frontbuffer_tracking@fbchdr-2p-scndscrn-spr-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbchdr-farfromfence-mmap-gtt:
    - shard-dg1:          NOTRUN -> [SKIP][278] ([i915#15990]) +27 other tests skip
   [278]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-14/igt@kms_frontbuffer_tracking@fbchdr-farfromfence-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbchdr-tiling-y:
    - shard-dg2:          NOTRUN -> [SKIP][279] ([i915#10055])
   [279]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-3/igt@kms_frontbuffer_tracking@fbchdr-tiling-y.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-pri-shrfb-draw-mmap-wc:
    - shard-mtlp:         NOTRUN -> [SKIP][280] ([i915#15991] / [i915#1825]) +9 other tests skip
   [280]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-3/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-pri-shrfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-fullscreen:
    - shard-tglu:         NOTRUN -> [SKIP][281] +114 other tests skip
   [281]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-9/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-fullscreen.html

  * igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-mmap-wc:
    - shard-dg1:          NOTRUN -> [SKIP][282] ([i915#15990] / [i915#8708]) +14 other tests skip
   [282]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-14/igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsr-tiling-4:
    - shard-dg1:          NOTRUN -> [SKIP][283] ([i915#5439])
   [283]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-12/igt@kms_frontbuffer_tracking@fbcpsr-tiling-4.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-primscrn-cur-indfb-move:
    - shard-dg1:          NOTRUN -> [SKIP][284] ([i915#15102]) +46 other tests skip
   [284]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-18/igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-primscrn-cur-indfb-move.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-primscrn-spr-indfb-fullscreen:
    - shard-mtlp:         NOTRUN -> [SKIP][285] ([i915#15989]) +6 other tests skip
   [285]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-5/igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-primscrn-spr-indfb-fullscreen.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-primscrn-spr-indfb-draw-render:
    - shard-rkl:          NOTRUN -> [SKIP][286] ([i915#14544]) +9 other tests skip
   [286]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-primscrn-spr-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@hdr-1p-primscrn-shrfb-plflip-blt:
    - shard-tglu-1:       NOTRUN -> [SKIP][287] ([i915#15989]) +12 other tests skip
   [287]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_frontbuffer_tracking@hdr-1p-primscrn-shrfb-plflip-blt.html
    - shard-dg1:          NOTRUN -> [SKIP][288] ([i915#15989]) +17 other tests skip
   [288]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-17/igt@kms_frontbuffer_tracking@hdr-1p-primscrn-shrfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@hdr-2p-primscrn-cur-indfb-draw-blt:
    - shard-glk:          [PASS][289] -> [SKIP][290] +4 other tests skip
   [289]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-glk8/igt@kms_frontbuffer_tracking@hdr-2p-primscrn-cur-indfb-draw-blt.html
   [290]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk2/igt@kms_frontbuffer_tracking@hdr-2p-primscrn-cur-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@hdr-2p-primscrn-pri-shrfb-draw-blt:
    - shard-dg2:          NOTRUN -> [SKIP][291] ([i915#15991]) +11 other tests skip
   [291]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-5/igt@kms_frontbuffer_tracking@hdr-2p-primscrn-pri-shrfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@pipe-fbc-rte:
    - shard-dg1:          NOTRUN -> [SKIP][292] ([i915#9766])
   [292]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-19/igt@kms_frontbuffer_tracking@pipe-fbc-rte.html

  * igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-shrfb-draw-mmap-gtt:
    - shard-dg1:          NOTRUN -> [SKIP][293] ([i915#15104] / [i915#15990]) +1 other test skip
   [293]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-15/igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-shrfb-draw-mmap-gtt.html
    - shard-dg2:          NOTRUN -> [SKIP][294] ([i915#15104] / [i915#15990])
   [294]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-3/igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-shrfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-indfb-plflip-blt:
    - shard-rkl:          NOTRUN -> [SKIP][295] ([i915#15102]) +37 other tests skip
   [295]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-2/igt@kms_frontbuffer_tracking@psr-1p-primscrn-indfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-move:
    - shard-tglu:         NOTRUN -> [SKIP][296] ([i915#15102]) +44 other tests skip
   [296]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-4/igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-move.html

  * igt@kms_frontbuffer_tracking@psr-1p-rte:
    - shard-dg2:          NOTRUN -> [SKIP][297] ([i915#15102]) +14 other tests skip
   [297]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-8/igt@kms_frontbuffer_tracking@psr-1p-rte.html

  * igt@kms_frontbuffer_tracking@psr-2p-primscrn-spr-indfb-draw-mmap-gtt:
    - shard-dg2:          NOTRUN -> [SKIP][298] ([i915#15990] / [i915#8708]) +4 other tests skip
   [298]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-7/igt@kms_frontbuffer_tracking@psr-2p-primscrn-spr-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@psr-suspend:
    - shard-rkl:          NOTRUN -> [SKIP][299] ([i915#14544] / [i915#15102]) +6 other tests skip
   [299]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_frontbuffer_tracking@psr-suspend.html

  * igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-cur-indfb-draw-mmap-wc:
    - shard-tglu-1:       NOTRUN -> [SKIP][300] ([i915#15102]) +26 other tests skip
   [300]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-cur-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@psrhdr-2p-primscrn-cur-indfb-draw-mmap-cpu:
    - shard-mtlp:         NOTRUN -> [SKIP][301] ([i915#15991]) +13 other tests skip
   [301]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-5/igt@kms_frontbuffer_tracking@psrhdr-2p-primscrn-cur-indfb-draw-mmap-cpu.html

  * igt@kms_hdmi_inject@inject-4k:
    - shard-mtlp:         [PASS][302] -> [SKIP][303] ([i915#15725])
   [302]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-mtlp-6/igt@kms_hdmi_inject@inject-4k.html
   [303]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-1/igt@kms_hdmi_inject@inject-4k.html

  * igt@kms_hdr@invalid-hdr:
    - shard-tglu:         NOTRUN -> [SKIP][304] ([i915#3555] / [i915#8228]) +1 other test skip
   [304]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-3/igt@kms_hdr@invalid-hdr.html

  * igt@kms_hdr@invalid-metadata-sizes:
    - shard-dg1:          NOTRUN -> [SKIP][305] ([i915#3555] / [i915#8228]) +2 other tests skip
   [305]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-17/igt@kms_hdr@invalid-metadata-sizes.html

  * igt@kms_hdr@static-toggle-suspend:
    - shard-rkl:          NOTRUN -> [SKIP][306] ([i915#16644] / [i915#3555] / [i915#8228]) +1 other test skip
   [306]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-5/igt@kms_hdr@static-toggle-suspend.html

  * igt@kms_joiner@basic-big-joiner:
    - shard-dg1:          NOTRUN -> [SKIP][307] ([i915#15460])
   [307]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-19/igt@kms_joiner@basic-big-joiner.html

  * igt@kms_joiner@basic-force-big-joiner:
    - shard-tglu:         NOTRUN -> [SKIP][308] ([i915#15459])
   [308]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-7/igt@kms_joiner@basic-force-big-joiner.html

  * igt@kms_joiner@basic-force-ultra-joiner:
    - shard-tglu-1:       NOTRUN -> [SKIP][309] ([i915#15458])
   [309]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_joiner@basic-force-ultra-joiner.html

  * igt@kms_joiner@basic-max-non-joiner:
    - shard-tglu:         NOTRUN -> [SKIP][310] ([i915#13688])
   [310]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-7/igt@kms_joiner@basic-max-non-joiner.html
    - shard-rkl:          NOTRUN -> [SKIP][311] ([i915#13688])
   [311]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-7/igt@kms_joiner@basic-max-non-joiner.html

  * igt@kms_joiner@basic-ultra-joiner:
    - shard-tglu:         NOTRUN -> [SKIP][312] ([i915#15458])
   [312]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-4/igt@kms_joiner@basic-ultra-joiner.html

  * igt@kms_joiner@invalid-modeset-force-big-joiner:
    - shard-rkl:          NOTRUN -> [SKIP][313] ([i915#15459])
   [313]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-8/igt@kms_joiner@invalid-modeset-force-big-joiner.html

  * igt@kms_joiner@invalid-modeset-ultra-joiner:
    - shard-rkl:          NOTRUN -> [SKIP][314] ([i915#15458])
   [314]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-5/igt@kms_joiner@invalid-modeset-ultra-joiner.html

  * igt@kms_panel_fitting@atomic-fastset:
    - shard-rkl:          NOTRUN -> [SKIP][315] ([i915#6301])
   [315]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-3/igt@kms_panel_fitting@atomic-fastset.html

  * igt@kms_panel_fitting@legacy:
    - shard-dg2:          NOTRUN -> [SKIP][316] ([i915#6301])
   [316]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-1/igt@kms_panel_fitting@legacy.html
    - shard-dg1:          NOTRUN -> [SKIP][317] ([i915#6301])
   [317]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-18/igt@kms_panel_fitting@legacy.html

  * igt@kms_pipe_crc_basic@suspend-read-crc:
    - shard-glk:          NOTRUN -> [INCOMPLETE][318] ([i915#12756] / [i915#13356] / [i915#13409] / [i915#13476] / [i915#16789])
   [318]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk4/igt@kms_pipe_crc_basic@suspend-read-crc.html

  * igt@kms_pipe_crc_basic@suspend-read-crc@pipe-c-hdmi-a-1:
    - shard-glk:          NOTRUN -> [INCOMPLETE][319] ([i915#12756] / [i915#13356] / [i915#13409] / [i915#16789])
   [319]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk4/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-c-hdmi-a-1.html

  * igt@kms_pipe_stress@stress-xrgb8888-4tiled:
    - shard-tglu:         NOTRUN -> [SKIP][320] ([i915#14712])
   [320]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-10/igt@kms_pipe_stress@stress-xrgb8888-4tiled.html

  * igt@kms_pipe_stress@stress-xrgb8888-untiled:
    - shard-glk11:        NOTRUN -> [DMESG-WARN][321] ([i915#118])
   [321]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk11/igt@kms_pipe_stress@stress-xrgb8888-untiled.html

  * igt@kms_plane@pixel-format-4-tiled-dg2-mc-ccs-modifier-source-clamping:
    - shard-mtlp:         NOTRUN -> [SKIP][322] ([i915#15709])
   [322]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-7/igt@kms_plane@pixel-format-4-tiled-dg2-mc-ccs-modifier-source-clamping.html

  * igt@kms_plane@pixel-format-4-tiled-mtl-rc-ccs-cc-modifier:
    - shard-tglu-1:       NOTRUN -> [SKIP][323] ([i915#15709]) +2 other tests skip
   [323]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_plane@pixel-format-4-tiled-mtl-rc-ccs-cc-modifier.html

  * igt@kms_plane@pixel-format-x-tiled-modifier@pipe-a-plane-7:
    - shard-tglu:         NOTRUN -> [SKIP][324] ([i915#16386]) +3 other tests skip
   [324]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-10/igt@kms_plane@pixel-format-x-tiled-modifier@pipe-a-plane-7.html

  * igt@kms_plane@pixel-format-y-tiled-gen12-mc-ccs-modifier:
    - shard-dg2:          NOTRUN -> [SKIP][325] ([i915#15709])
   [325]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-8/igt@kms_plane@pixel-format-y-tiled-gen12-mc-ccs-modifier.html
    - shard-dg1:          NOTRUN -> [SKIP][326] ([i915#15709]) +2 other tests skip
   [326]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-19/igt@kms_plane@pixel-format-y-tiled-gen12-mc-ccs-modifier.html

  * igt@kms_plane@pixel-format-yf-tiled-ccs-modifier:
    - shard-tglu:         NOTRUN -> [SKIP][327] ([i915#15709]) +3 other tests skip
   [327]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-8/igt@kms_plane@pixel-format-yf-tiled-ccs-modifier.html

  * igt@kms_plane@pixel-format-yf-tiled-modifier:
    - shard-rkl:          NOTRUN -> [SKIP][328] ([i915#15709]) +3 other tests skip
   [328]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-7/igt@kms_plane@pixel-format-yf-tiled-modifier.html

  * igt@kms_plane@planar-pixel-format-settings@nv12-tile4-src-y:
    - shard-rkl:          NOTRUN -> [SKIP][329] ([i915#16112])
   [329]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-5/igt@kms_plane@planar-pixel-format-settings@nv12-tile4-src-y.html

  * igt@kms_plane@plane-panning-bottom-right-suspend:
    - shard-glk:          NOTRUN -> [INCOMPLETE][330] ([i915#13026] / [i915#13356]) +1 other test incomplete
   [330]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk3/igt@kms_plane@plane-panning-bottom-right-suspend.html

  * igt@kms_plane@plane-panning-bottom-right-suspend@pipe-a:
    - shard-rkl:          [PASS][331] -> [INCOMPLETE][332] ([i915#14412]) +1 other test incomplete
   [331]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-5/igt@kms_plane@plane-panning-bottom-right-suspend@pipe-a.html
   [332]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_plane@plane-panning-bottom-right-suspend@pipe-a.html

  * igt@kms_plane_lowres@tiling-yf:
    - shard-dg2:          NOTRUN -> [SKIP][333] ([i915#3555] / [i915#8821])
   [333]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-4/igt@kms_plane_lowres@tiling-yf.html

  * igt@kms_plane_multiple@2x-tiling-4:
    - shard-tglu-1:       NOTRUN -> [SKIP][334] ([i915#13958])
   [334]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_plane_multiple@2x-tiling-4.html

  * igt@kms_plane_multiple@2x-tiling-none:
    - shard-rkl:          NOTRUN -> [SKIP][335] ([i915#13958])
   [335]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-4/igt@kms_plane_multiple@2x-tiling-none.html

  * igt@kms_plane_multiple@2x-tiling-y:
    - shard-dg1:          NOTRUN -> [SKIP][336] ([i915#13958])
   [336]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-18/igt@kms_plane_multiple@2x-tiling-y.html

  * igt@kms_plane_multiple@2x-tiling-yf:
    - shard-tglu:         NOTRUN -> [SKIP][337] ([i915#13958]) +1 other test skip
   [337]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-9/igt@kms_plane_multiple@2x-tiling-yf.html

  * igt@kms_plane_multiple@tiling-4:
    - shard-rkl:          NOTRUN -> [SKIP][338] ([i915#14259])
   [338]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-7/igt@kms_plane_multiple@tiling-4.html

  * igt@kms_plane_multiple@tiling-yf:
    - shard-tglu-1:       NOTRUN -> [SKIP][339] ([i915#14259])
   [339]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_plane_multiple@tiling-yf.html

  * igt@kms_plane_scaling@intel-max-src-size:
    - shard-dg1:          NOTRUN -> [SKIP][340] ([i915#6953])
   [340]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-16/igt@kms_plane_scaling@intel-max-src-size.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-5-with-rotation@pipe-c:
    - shard-tglu:         NOTRUN -> [SKIP][341] ([i915#15329]) +4 other tests skip
   [341]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-9/igt@kms_plane_scaling@plane-downscale-factor-0-5-with-rotation@pipe-c.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-75-with-rotation@pipe-a:
    - shard-tglu-1:       NOTRUN -> [SKIP][342] ([i915#15329]) +4 other tests skip
   [342]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_plane_scaling@plane-downscale-factor-0-75-with-rotation@pipe-a.html

  * igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-a:
    - shard-glk11:        NOTRUN -> [SKIP][343] +121 other tests skip
   [343]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk11/igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-a.html

  * igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-b:
    - shard-dg1:          NOTRUN -> [SKIP][344] ([i915#15329]) +4 other tests skip
   [344]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-16/igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-b.html

  * igt@kms_plane_scaling@plane-upscale-factor-0-25-with-rotation@pipe-c:
    - shard-rkl:          NOTRUN -> [SKIP][345] ([i915#15329]) +3 other tests skip
   [345]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-2/igt@kms_plane_scaling@plane-upscale-factor-0-25-with-rotation@pipe-c.html

  * igt@kms_pm_backlight@brightness-with-dpms:
    - shard-tglu-1:       NOTRUN -> [SKIP][346] ([i915#12343])
   [346]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_pm_backlight@brightness-with-dpms.html

  * igt@kms_pm_backlight@fade:
    - shard-dg1:          NOTRUN -> [SKIP][347] ([i915#12343] / [i915#5354])
   [347]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-18/igt@kms_pm_backlight@fade.html

  * igt@kms_pm_dc@dc5-dpms-suspend-resume:
    - shard-glk:          NOTRUN -> [INCOMPLETE][348] ([i915#13356] / [i915#16938])
   [348]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk8/igt@kms_pm_dc@dc5-dpms-suspend-resume.html
    - shard-rkl:          [PASS][349] -> [INCOMPLETE][350] ([i915#16943])
   [349]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-3/igt@kms_pm_dc@dc5-dpms-suspend-resume.html
   [350]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-3/igt@kms_pm_dc@dc5-dpms-suspend-resume.html

  * igt@kms_pm_dc@dc5-psr:
    - shard-rkl:          NOTRUN -> [SKIP][351] ([i915#14544] / [i915#15948])
   [351]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_pm_dc@dc5-psr.html

  * igt@kms_pm_dc@dc5-psr-suspend-resume:
    - shard-dg1:          NOTRUN -> [SKIP][352] ([i915#16914])
   [352]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-19/igt@kms_pm_dc@dc5-psr-suspend-resume.html

  * igt@kms_pm_dc@dc6-dpms:
    - shard-dg2:          NOTRUN -> [SKIP][353] ([i915#15751])
   [353]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-1/igt@kms_pm_dc@dc6-dpms.html
    - shard-dg1:          NOTRUN -> [SKIP][354] ([i915#3361])
   [354]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-18/igt@kms_pm_dc@dc6-dpms.html

  * igt@kms_pm_dc@dc6-psr:
    - shard-dg1:          NOTRUN -> [SKIP][355] ([i915#15948])
   [355]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-14/igt@kms_pm_dc@dc6-psr.html

  * igt@kms_pm_dc@dc9-dpms:
    - shard-rkl:          NOTRUN -> [SKIP][356] ([i915#15739])
   [356]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-1/igt@kms_pm_dc@dc9-dpms.html

  * igt@kms_pm_lpsp@kms-lpsp:
    - shard-tglu-1:       NOTRUN -> [SKIP][357] ([i915#3828])
   [357]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_pm_lpsp@kms-lpsp.html

  * igt@kms_pm_lpsp@screens-disabled:
    - shard-tglu:         NOTRUN -> [SKIP][358] ([i915#8430])
   [358]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-10/igt@kms_pm_lpsp@screens-disabled.html

  * igt@kms_pm_rpm@dpms-lpsp:
    - shard-dg2:          NOTRUN -> [SKIP][359] ([i915#15073])
   [359]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-8/igt@kms_pm_rpm@dpms-lpsp.html
    - shard-dg1:          NOTRUN -> [SKIP][360] ([i915#15073])
   [360]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-17/igt@kms_pm_rpm@dpms-lpsp.html

  * igt@kms_pm_rpm@modeset-non-lpsp-stress:
    - shard-dg2:          [PASS][361] -> [SKIP][362] ([i915#15073]) +1 other test skip
   [361]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-dg2-3/igt@kms_pm_rpm@modeset-non-lpsp-stress.html
   [362]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-4/igt@kms_pm_rpm@modeset-non-lpsp-stress.html

  * igt@kms_pm_rpm@system-suspend-idle:
    - shard-rkl:          [PASS][363] -> [INCOMPLETE][364] ([i915#14419])
   [363]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-8/igt@kms_pm_rpm@system-suspend-idle.html
   [364]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-3/igt@kms_pm_rpm@system-suspend-idle.html

  * igt@kms_prime@basic-crc-hybrid:
    - shard-tglu-1:       NOTRUN -> [SKIP][365] ([i915#6524])
   [365]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_prime@basic-crc-hybrid.html

  * igt@kms_prime@basic-modeset-hybrid:
    - shard-rkl:          NOTRUN -> [SKIP][366] ([i915#6524])
   [366]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-4/igt@kms_prime@basic-modeset-hybrid.html

  * igt@kms_prime@d3hot:
    - shard-tglu:         NOTRUN -> [SKIP][367] ([i915#6524])
   [367]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-5/igt@kms_prime@d3hot.html

  * igt@kms_psr2_sf@fbc-pr-overlay-plane-update-sf-dmg-area:
    - shard-glk:          NOTRUN -> [SKIP][368] ([i915#11520]) +10 other tests skip
   [368]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk9/igt@kms_psr2_sf@fbc-pr-overlay-plane-update-sf-dmg-area.html

  * igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-fully-sf:
    - shard-glk10:        NOTRUN -> [SKIP][369] ([i915#11520])
   [369]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk10/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-fully-sf.html

  * igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-sf@pipe-a-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][370] ([i915#9808])
   [370]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-7/igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-sf@pipe-a-edp-1.html

  * igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-sf@pipe-b-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][371] ([i915#12316]) +1 other test skip
   [371]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-7/igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-sf@pipe-b-edp-1.html

  * igt@kms_psr2_sf@fbc-psr2-overlay-primary-update-sf-dmg-area:
    - shard-glk11:        NOTRUN -> [SKIP][372] ([i915#11520]) +1 other test skip
   [372]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk11/igt@kms_psr2_sf@fbc-psr2-overlay-primary-update-sf-dmg-area.html
    - shard-dg2:          NOTRUN -> [SKIP][373] ([i915#11520]) +1 other test skip
   [373]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-8/igt@kms_psr2_sf@fbc-psr2-overlay-primary-update-sf-dmg-area.html

  * igt@kms_psr2_sf@pr-cursor-plane-move-continuous-exceed-fully-sf:
    - shard-snb:          NOTRUN -> [SKIP][374] ([i915#11520]) +8 other tests skip
   [374]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-snb4/igt@kms_psr2_sf@pr-cursor-plane-move-continuous-exceed-fully-sf.html

  * igt@kms_psr2_sf@pr-cursor-plane-move-continuous-sf:
    - shard-tglu-1:       NOTRUN -> [SKIP][375] ([i915#11520]) +5 other tests skip
   [375]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_psr2_sf@pr-cursor-plane-move-continuous-sf.html

  * igt@kms_psr2_sf@pr-overlay-plane-update-continuous-sf:
    - shard-rkl:          NOTRUN -> [SKIP][376] ([i915#11520]) +2 other tests skip
   [376]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-3/igt@kms_psr2_sf@pr-overlay-plane-update-continuous-sf.html

  * igt@kms_psr2_sf@psr2-overlay-plane-move-continuous-exceed-fully-sf:
    - shard-tglu:         NOTRUN -> [SKIP][377] ([i915#11520]) +7 other tests skip
   [377]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-7/igt@kms_psr2_sf@psr2-overlay-plane-move-continuous-exceed-fully-sf.html

  * igt@kms_psr2_sf@psr2-overlay-plane-move-continuous-exceed-sf:
    - shard-rkl:          NOTRUN -> [SKIP][378] ([i915#11520] / [i915#14544]) +1 other test skip
   [378]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_psr2_sf@psr2-overlay-plane-move-continuous-exceed-sf.html

  * igt@kms_psr2_sf@psr2-overlay-plane-move-continuous-sf:
    - shard-dg1:          NOTRUN -> [SKIP][379] ([i915#11520]) +6 other tests skip
   [379]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-18/igt@kms_psr2_sf@psr2-overlay-plane-move-continuous-sf.html

  * igt@kms_psr2_su@frontbuffer-xrgb8888:
    - shard-rkl:          NOTRUN -> [SKIP][380] ([i915#9683]) +1 other test skip
   [380]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-8/igt@kms_psr2_su@frontbuffer-xrgb8888.html

  * igt@kms_psr2_su@page_flip-xrgb8888:
    - shard-tglu:         NOTRUN -> [SKIP][381] ([i915#9683]) +1 other test skip
   [381]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-4/igt@kms_psr2_su@page_flip-xrgb8888.html

  * igt@kms_psr@fbc-pr-sprite-render:
    - shard-dg1:          NOTRUN -> [SKIP][382] ([i915#1072] / [i915#9732]) +24 other tests skip
   [382]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-15/igt@kms_psr@fbc-pr-sprite-render.html

  * igt@kms_psr@fbc-psr-cursor-plane-move@edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][383] ([i915#9688]) +3 other tests skip
   [383]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-6/igt@kms_psr@fbc-psr-cursor-plane-move@edp-1.html

  * igt@kms_psr@fbc-psr2-primary-blt:
    - shard-rkl:          NOTRUN -> [SKIP][384] ([i915#1072] / [i915#9732]) +22 other tests skip
   [384]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-8/igt@kms_psr@fbc-psr2-primary-blt.html

  * igt@kms_psr@pr-primary-page-flip:
    - shard-tglu:         NOTRUN -> [SKIP][385] ([i915#9732]) +19 other tests skip
   [385]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-4/igt@kms_psr@pr-primary-page-flip.html

  * igt@kms_psr@psr-cursor-plane-onoff:
    - shard-tglu-1:       NOTRUN -> [SKIP][386] ([i915#9732]) +15 other tests skip
   [386]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_psr@psr-cursor-plane-onoff.html

  * igt@kms_psr@psr-cursor-render:
    - shard-dg2:          NOTRUN -> [SKIP][387] ([i915#1072] / [i915#9732]) +7 other tests skip
   [387]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-4/igt@kms_psr@psr-cursor-render.html

  * igt@kms_psr@psr-sprite-blt:
    - shard-snb:          NOTRUN -> [SKIP][388] +512 other tests skip
   [388]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-snb4/igt@kms_psr@psr-sprite-blt.html

  * igt@kms_psr@psr2-sprite-render:
    - shard-rkl:          NOTRUN -> [SKIP][389] ([i915#1072] / [i915#14544] / [i915#9732]) +2 other tests skip
   [389]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_psr@psr2-sprite-render.html

  * igt@kms_psr_stress_test@flip-primary-invalidate-overlay:
    - shard-rkl:          NOTRUN -> [SKIP][390] ([i915#15949])
   [390]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-5/igt@kms_psr_stress_test@flip-primary-invalidate-overlay.html

  * igt@kms_psr_stress_test@invalidate-primary-flip-overlay:
    - shard-dg1:          NOTRUN -> [SKIP][391] ([i915#15949])
   [391]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-12/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html

  * igt@kms_rotation_crc@multiplane-rotation:
    - shard-glk:          NOTRUN -> [INCOMPLETE][392] ([i915#15492] / [i915#16184])
   [392]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk2/igt@kms_rotation_crc@multiplane-rotation.html

  * igt@kms_rotation_crc@primary-4-tiled-reflect-x-180:
    - shard-rkl:          NOTRUN -> [SKIP][393] ([i915#5289])
   [393]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-2/igt@kms_rotation_crc@primary-4-tiled-reflect-x-180.html
    - shard-tglu:         NOTRUN -> [SKIP][394] ([i915#5289]) +1 other test skip
   [394]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-7/igt@kms_rotation_crc@primary-4-tiled-reflect-x-180.html

  * igt@kms_setmode@invalid-clone-single-crtc:
    - shard-dg2:          NOTRUN -> [SKIP][395] ([i915#3555])
   [395]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-6/igt@kms_setmode@invalid-clone-single-crtc.html
    - shard-dg1:          NOTRUN -> [SKIP][396] ([i915#3555]) +2 other tests skip
   [396]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-15/igt@kms_setmode@invalid-clone-single-crtc.html

  * igt@kms_tiled_display@basic-test-pattern:
    - shard-tglu-1:       NOTRUN -> [SKIP][397] ([i915#8623])
   [397]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_tiled_display@basic-test-pattern.html
    - shard-dg1:          NOTRUN -> [SKIP][398] ([i915#8623])
   [398]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-14/igt@kms_tiled_display@basic-test-pattern.html
    - shard-dg2:          NOTRUN -> [SKIP][399] ([i915#8623])
   [399]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-3/igt@kms_tiled_display@basic-test-pattern.html

  * igt@kms_tiled_display@basic-test-pattern-with-chamelium:
    - shard-tglu:         NOTRUN -> [SKIP][400] ([i915#8623])
   [400]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-5/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html

  * igt@kms_vblank@ts-continuation-dpms-suspend:
    - shard-glk11:        NOTRUN -> [INCOMPLETE][401] ([i915#12276] / [i915#13356]) +1 other test incomplete
   [401]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk11/igt@kms_vblank@ts-continuation-dpms-suspend.html

  * igt@kms_vblank@ts-continuation-dpms-suspend@pipe-a-hdmi-a-2:
    - shard-rkl:          [PASS][402] -> [INCOMPLETE][403] ([i915#12276])
   [402]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-3/igt@kms_vblank@ts-continuation-dpms-suspend@pipe-a-hdmi-a-2.html
   [403]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-4/igt@kms_vblank@ts-continuation-dpms-suspend@pipe-a-hdmi-a-2.html

  * igt@kms_vrr@lobf:
    - shard-dg1:          NOTRUN -> [SKIP][404] ([i915#11920])
   [404]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-15/igt@kms_vrr@lobf.html

  * igt@kms_vrr@negative-basic:
    - shard-tglu:         NOTRUN -> [SKIP][405] ([i915#3555] / [i915#9906])
   [405]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-7/igt@kms_vrr@negative-basic.html

  * igt@kms_vrr@seamless-rr-switch-drrs:
    - shard-tglu-1:       NOTRUN -> [SKIP][406] ([i915#9906])
   [406]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-1/igt@kms_vrr@seamless-rr-switch-drrs.html

  * igt@kms_vrr@seamless-rr-switch-virtual:
    - shard-rkl:          NOTRUN -> [SKIP][407] ([i915#9906])
   [407]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-4/igt@kms_vrr@seamless-rr-switch-virtual.html

  * igt@kms_vrr@seamless-rr-switch-vrr:
    - shard-tglu:         NOTRUN -> [SKIP][408] ([i915#9906])
   [408]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-10/igt@kms_vrr@seamless-rr-switch-vrr.html

  * igt@perf@mi-rpc:
    - shard-rkl:          NOTRUN -> [SKIP][409] ([i915#2434])
   [409]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-5/igt@perf@mi-rpc.html

  * igt@perf@unprivileged-single-ctx-counters:
    - shard-rkl:          NOTRUN -> [SKIP][410] ([i915#2433])
   [410]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-2/igt@perf@unprivileged-single-ctx-counters.html

  * igt@perf_pmu@busy-double-start:
    - shard-mtlp:         [PASS][411] -> [FAIL][412] ([i915#4349]) +2 other tests fail
   [411]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-mtlp-1/igt@perf_pmu@busy-double-start.html
   [412]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-2/igt@perf_pmu@busy-double-start.html

  * igt@perf_pmu@busy-double-start@vecs1:
    - shard-dg2:          [PASS][413] -> [FAIL][414] ([i915#4349]) +4 other tests fail
   [413]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-dg2-6/igt@perf_pmu@busy-double-start@vecs1.html
   [414]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-4/igt@perf_pmu@busy-double-start@vecs1.html

  * igt@perf_pmu@rc6-all-gts:
    - shard-dg1:          NOTRUN -> [SKIP][415] ([i915#8516])
   [415]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-18/igt@perf_pmu@rc6-all-gts.html

  * igt@perf_pmu@rc6@other-idle-gt0:
    - shard-dg2:          NOTRUN -> [SKIP][416] ([i915#8516])
   [416]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-7/igt@perf_pmu@rc6@other-idle-gt0.html
    - shard-tglu:         NOTRUN -> [SKIP][417] ([i915#8516])
   [417]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-5/igt@perf_pmu@rc6@other-idle-gt0.html

  * igt@prime_mmap@test_aperture_limit@test_aperture_limit-smem:
    - shard-mtlp:         NOTRUN -> [SKIP][418] ([i915#14121]) +1 other test skip
   [418]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-7/igt@prime_mmap@test_aperture_limit@test_aperture_limit-smem.html

  * igt@prime_udl@share-import:
    - shard-dg1:          NOTRUN -> [SKIP][419] ([i915#16420]) +1 other test skip
   [419]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-14/igt@prime_udl@share-import.html

  * igt@prime_vgem@basic-gtt:
    - shard-mtlp:         NOTRUN -> [SKIP][420] ([i915#3708] / [i915#4077])
   [420]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-5/igt@prime_vgem@basic-gtt.html
    - shard-dg2:          NOTRUN -> [SKIP][421] ([i915#3708] / [i915#4077])
   [421]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-5/igt@prime_vgem@basic-gtt.html
    - shard-dg1:          NOTRUN -> [SKIP][422] ([i915#3708] / [i915#4077])
   [422]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-14/igt@prime_vgem@basic-gtt.html

  * igt@prime_vgem@fence-flip-hang:
    - shard-rkl:          NOTRUN -> [SKIP][423] ([i915#3708])
   [423]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-2/igt@prime_vgem@fence-flip-hang.html

  
#### Possible fixes ####

  * igt@gem_ccs@suspend-resume@linear-compressed-compfmt0-smem-lmem0:
    - shard-dg2:          [INCOMPLETE][424] ([i915#13356] / [i915#16348]) -> [PASS][425]
   [424]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-dg2-5/igt@gem_ccs@suspend-resume@linear-compressed-compfmt0-smem-lmem0.html
   [425]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-1/igt@gem_ccs@suspend-resume@linear-compressed-compfmt0-smem-lmem0.html

  * igt@gem_exec_big@single:
    - shard-mtlp:         [FAIL][426] ([i915#15871]) -> [PASS][427]
   [426]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-mtlp-7/igt@gem_exec_big@single.html
   [427]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-8/igt@gem_exec_big@single.html

  * igt@gem_exec_suspend@basic-s3-devices:
    - shard-mtlp:         [ABORT][428] ([i915#17175]) -> [PASS][429] +1 other test pass
   [428]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-mtlp-5/igt@gem_exec_suspend@basic-s3-devices.html
   [429]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-8/igt@gem_exec_suspend@basic-s3-devices.html

  * igt@gem_exec_suspend@basic-s3@smem:
    - shard-snb:          [ABORT][430] ([i915#15840]) -> [PASS][431] +1 other test pass
   [430]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-snb6/igt@gem_exec_suspend@basic-s3@smem.html
   [431]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-snb1/igt@gem_exec_suspend@basic-s3@smem.html
    - shard-mtlp:         [FAIL][432] ([i915#17160]) -> [PASS][433] +1 other test pass
   [432]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-mtlp-6/igt@gem_exec_suspend@basic-s3@smem.html
   [433]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-7/igt@gem_exec_suspend@basic-s3@smem.html

  * igt@gem_pxp@protected-raw-src-copy-not-readible:
    - shard-rkl:          [SKIP][434] ([i915#4270]) -> [PASS][435] +1 other test pass
   [434]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-8/igt@gem_pxp@protected-raw-src-copy-not-readible.html
   [435]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-2/igt@gem_pxp@protected-raw-src-copy-not-readible.html

  * igt@gen9_exec_parse@allowed-single:
    - shard-glk:          [ABORT][436] ([i915#5566]) -> [PASS][437]
   [436]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-glk2/igt@gen9_exec_parse@allowed-single.html
   [437]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk2/igt@gen9_exec_parse@allowed-single.html

  * igt@i915_module_load@resize-bar:
    - shard-dg2:          [DMESG-WARN][438] ([i915#14545]) -> [PASS][439]
   [438]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-dg2-7/igt@i915_module_load@resize-bar.html
   [439]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-7/igt@i915_module_load@resize-bar.html

  * igt@i915_pm_rc6_residency@rc6-accuracy:
    - shard-dg2:          [FAIL][440] ([i915#12964]) -> [PASS][441] +1 other test pass
   [440]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-dg2-3/igt@i915_pm_rc6_residency@rc6-accuracy.html
   [441]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-7/igt@i915_pm_rc6_residency@rc6-accuracy.html

  * igt@i915_selftest@perf:
    - shard-tglu:         [ABORT][442] ([i915#17018]) -> [PASS][443] +1 other test pass
   [442]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-tglu-3/igt@i915_selftest@perf.html
   [443]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-10/igt@i915_selftest@perf.html

  * igt@i915_suspend@fence-restore-untiled:
    - shard-rkl:          [INCOMPLETE][444] ([i915#4817]) -> [PASS][445]
   [444]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-7/igt@i915_suspend@fence-restore-untiled.html
   [445]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-5/igt@i915_suspend@fence-restore-untiled.html

  * igt@kms_async_flips@async-flip-suspend-resume@pipe-d-edp-1:
    - shard-mtlp:         [FAIL][446] ([i915#17150]) -> [PASS][447] +1 other test pass
   [446]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-mtlp-2/igt@kms_async_flips@async-flip-suspend-resume@pipe-d-edp-1.html
   [447]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-3/igt@kms_async_flips@async-flip-suspend-resume@pipe-d-edp-1.html

  * igt@kms_big_fb@4-tiled-64bpp-rotate-180:
    - shard-mtlp:         [FAIL][448] ([i915#15733] / [i915#5138]) -> [PASS][449]
   [448]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-mtlp-1/igt@kms_big_fb@4-tiled-64bpp-rotate-180.html
   [449]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-6/igt@kms_big_fb@4-tiled-64bpp-rotate-180.html

  * igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs@pipe-a-hdmi-a-1:
    - shard-glk:          [INCOMPLETE][450] ([i915#13356] / [i915#15582]) -> [PASS][451]
   [450]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-glk8/igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs@pipe-a-hdmi-a-1.html
   [451]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk4/igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs@pipe-a-hdmi-a-1.html

  * igt@kms_cursor_crc@cursor-random-128x42:
    - shard-rkl:          [FAIL][452] ([i915#13566]) -> [PASS][453] +3 other tests pass
   [452]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-7/igt@kms_cursor_crc@cursor-random-128x42.html
   [453]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-4/igt@kms_cursor_crc@cursor-random-128x42.html

  * igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-pri-shrfb-draw-render:
    - shard-glk:          [SKIP][454] -> [PASS][455] +12 other tests pass
   [454]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-glk2/igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-pri-shrfb-draw-render.html
   [455]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk8/igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-pri-shrfb-draw-render.html

  * igt@kms_frontbuffer_tracking@hdr-1p-primscrn-cur-indfb-draw-blt:
    - shard-rkl:          [SKIP][456] ([i915#15989]) -> [PASS][457] +12 other tests pass
   [456]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-7/igt@kms_frontbuffer_tracking@hdr-1p-primscrn-cur-indfb-draw-blt.html
   [457]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_frontbuffer_tracking@hdr-1p-primscrn-cur-indfb-draw-blt.html

  * igt@kms_hdmi_audio_bw@audio-bw-hblank160:
    - shard-tglu:         [FAIL][458] ([i915#17104]) -> [PASS][459]
   [458]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-tglu-8/igt@kms_hdmi_audio_bw@audio-bw-hblank160.html
   [459]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-tglu-5/igt@kms_hdmi_audio_bw@audio-bw-hblank160.html

  * igt@kms_pipe_crc_basic@suspend-read-crc:
    - shard-mtlp:         [INCOMPLETE][460] ([i915#12756] / [i915#13476]) -> [PASS][461]
   [460]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-mtlp-4/igt@kms_pipe_crc_basic@suspend-read-crc.html
   [461]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-8/igt@kms_pipe_crc_basic@suspend-read-crc.html

  * igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-edp-1:
    - shard-mtlp:         [INCOMPLETE][462] -> [PASS][463]
   [462]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-mtlp-4/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-edp-1.html
   [463]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-8/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-edp-1.html

  * igt@kms_pm_rpm@dpms-mode-unset-non-lpsp:
    - shard-dg2:          [SKIP][464] ([i915#15073]) -> [PASS][465] +1 other test pass
   [464]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-dg2-4/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html
   [465]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-7/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html

  * igt@kms_pm_rpm@modeset-lpsp-stress:
    - shard-dg1:          [SKIP][466] ([i915#15073]) -> [PASS][467] +1 other test pass
   [466]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-dg1-16/igt@kms_pm_rpm@modeset-lpsp-stress.html
   [467]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-14/igt@kms_pm_rpm@modeset-lpsp-stress.html

  * igt@perf_pmu@busy-idle-check-all@vecs0:
    - shard-mtlp:         [FAIL][468] ([i915#4349]) -> [PASS][469] +3 other tests pass
   [468]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-mtlp-8/igt@perf_pmu@busy-idle-check-all@vecs0.html
   [469]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-mtlp-2/igt@perf_pmu@busy-idle-check-all@vecs0.html

  * igt@perf_pmu@gt-awake:
    - shard-dg1:          [FAIL][470] ([i915#17054]) -> [PASS][471]
   [470]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-dg1-16/igt@perf_pmu@gt-awake.html
   [471]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg1-19/igt@perf_pmu@gt-awake.html

  * igt@perf_pmu@render-node-busy-idle@vcs1:
    - shard-dg2:          [FAIL][472] ([i915#4349]) -> [PASS][473] +5 other tests pass
   [472]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-dg2-3/igt@perf_pmu@render-node-busy-idle@vcs1.html
   [473]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-dg2-6/igt@perf_pmu@render-node-busy-idle@vcs1.html

  
#### Warnings ####

  * igt@gem_ccs@ctrl-surf-copy-new-ctx:
    - shard-rkl:          [SKIP][474] ([i915#9323]) -> [SKIP][475] ([i915#14544] / [i915#9323]) +1 other test skip
   [474]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-8/igt@gem_ccs@ctrl-surf-copy-new-ctx.html
   [475]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@gem_ccs@ctrl-surf-copy-new-ctx.html

  * igt@gem_close_race@multigpu-basic-process:
    - shard-rkl:          [SKIP][476] ([i915#7697]) -> [SKIP][477] ([i915#14544] / [i915#7697])
   [476]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-8/igt@gem_close_race@multigpu-basic-process.html
   [477]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@gem_close_race@multigpu-basic-process.html

  * igt@gem_ctx_sseu@invalid-args:
    - shard-rkl:          [SKIP][478] ([i915#280]) -> [SKIP][479] ([i915#14544] / [i915#280])
   [478]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-8/igt@gem_ctx_sseu@invalid-args.html
   [479]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@gem_ctx_sseu@invalid-args.html

  * igt@gem_exec_balancer@parallel-ordering:
    - shard-rkl:          [SKIP][480] ([i915#4525]) -> [SKIP][481] ([i915#14544] / [i915#4525])
   [480]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-4/igt@gem_exec_balancer@parallel-ordering.html
   [481]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@gem_exec_balancer@parallel-ordering.html

  * igt@gem_exec_balancer@parallel-out-fence:
    - shard-rkl:          [SKIP][482] ([i915#14544] / [i915#4525]) -> [SKIP][483] ([i915#4525])
   [482]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-6/igt@gem_exec_balancer@parallel-out-fence.html
   [483]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-8/igt@gem_exec_balancer@parallel-out-fence.html

  * igt@gem_exec_reloc@basic-cpu-gtt-noreloc:
    - shard-rkl:          [SKIP][484] ([i915#3281]) -> [SKIP][485] ([i915#14544] / [i915#3281]) +1 other test skip
   [484]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-5/igt@gem_exec_reloc@basic-cpu-gtt-noreloc.html
   [485]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@gem_exec_reloc@basic-cpu-gtt-noreloc.html

  * igt@gem_lmem_evict@dontneed-evict-race:
    - shard-rkl:          [SKIP][486] ([i915#14544] / [i915#4613] / [i915#7582]) -> [SKIP][487] ([i915#4613] / [i915#7582])
   [486]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-6/igt@gem_lmem_evict@dontneed-evict-race.html
   [487]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-5/igt@gem_lmem_evict@dontneed-evict-race.html

  * igt@gem_lmem_swapping@verify-random:
    - shard-rkl:          [SKIP][488] ([i915#4613]) -> [SKIP][489] ([i915#14544] / [i915#4613]) +1 other test skip
   [488]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-2/igt@gem_lmem_swapping@verify-random.html
   [489]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@gem_lmem_swapping@verify-random.html

  * igt@gem_madvise@dontneed-before-pwrite:
    - shard-rkl:          [SKIP][490] ([i915#3282]) -> [SKIP][491] ([i915#14544] / [i915#3282]) +1 other test skip
   [490]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-2/igt@gem_madvise@dontneed-before-pwrite.html
   [491]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@gem_madvise@dontneed-before-pwrite.html

  * igt@gem_partial_pwrite_pread@write-snoop:
    - shard-rkl:          [SKIP][492] ([i915#14544] / [i915#3282]) -> [SKIP][493] ([i915#3282]) +3 other tests skip
   [492]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-6/igt@gem_partial_pwrite_pread@write-snoop.html
   [493]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-7/igt@gem_partial_pwrite_pread@write-snoop.html

  * igt@gem_pxp@hw-rejects-pxp-context:
    - shard-rkl:          [SKIP][494] ([i915#13717]) -> [SKIP][495] ([i915#13717] / [i915#14544])
   [494]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-3/igt@gem_pxp@hw-rejects-pxp-context.html
   [495]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@gem_pxp@hw-rejects-pxp-context.html

  * igt@gem_userptr_blits@coherency-sync:
    - shard-rkl:          [SKIP][496] ([i915#3297]) -> [SKIP][497] ([i915#14544] / [i915#3297]) +1 other test skip
   [496]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-3/igt@gem_userptr_blits@coherency-sync.html
   [497]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@gem_userptr_blits@coherency-sync.html

  * igt@gen9_exec_parse@bb-start-cmd:
    - shard-rkl:          [SKIP][498] ([i915#14544] / [i915#2527]) -> [SKIP][499] ([i915#2527])
   [498]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-6/igt@gen9_exec_parse@bb-start-cmd.html
   [499]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-2/igt@gen9_exec_parse@bb-start-cmd.html

  * igt@i915_query@query-topology-unsupported:
    - shard-rkl:          [SKIP][500] ([i915#16079]) -> [SKIP][501] ([i915#14544] / [i915#16079])
   [500]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-5/igt@i915_query@query-topology-unsupported.html
   [501]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@i915_query@query-topology-unsupported.html

  * igt@intel_hwmon@hwmon-read:
    - shard-rkl:          [SKIP][502] ([i915#7707]) -> [SKIP][503] ([i915#14544] / [i915#7707])
   [502]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-4/igt@intel_hwmon@hwmon-read.html
   [503]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@intel_hwmon@hwmon-read.html

  * igt@kms_big_fb@4-tiled-64bpp-rotate-270:
    - shard-rkl:          [SKIP][504] ([i915#5286]) -> [SKIP][505] ([i915#14544] / [i915#5286]) +2 other tests skip
   [504]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-3/igt@kms_big_fb@4-tiled-64bpp-rotate-270.html
   [505]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_big_fb@4-tiled-64bpp-rotate-270.html

  * igt@kms_big_fb@4-tiled-8bpp-rotate-270:
    - shard-rkl:          [SKIP][506] ([i915#14544] / [i915#5286]) -> [SKIP][507] ([i915#5286])
   [506]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-6/igt@kms_big_fb@4-tiled-8bpp-rotate-270.html
   [507]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-7/igt@kms_big_fb@4-tiled-8bpp-rotate-270.html

  * igt@kms_big_fb@linear-32bpp-rotate-90:
    - shard-rkl:          [SKIP][508] ([i915#14544] / [i915#3638]) -> [SKIP][509] ([i915#3638]) +2 other tests skip
   [508]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-6/igt@kms_big_fb@linear-32bpp-rotate-90.html
   [509]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-2/igt@kms_big_fb@linear-32bpp-rotate-90.html

  * igt@kms_big_fb@linear-8bpp-rotate-270:
    - shard-rkl:          [SKIP][510] ([i915#3638]) -> [SKIP][511] ([i915#14544] / [i915#3638])
   [510]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-7/igt@kms_big_fb@linear-8bpp-rotate-270.html
   [511]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_big_fb@linear-8bpp-rotate-270.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-bmg-ccs:
    - shard-rkl:          [SKIP][512] ([i915#12313] / [i915#14544]) -> [SKIP][513] ([i915#12313])
   [512]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-6/igt@kms_ccs@bad-rotation-90-4-tiled-bmg-ccs.html
   [513]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-4/igt@kms_ccs@bad-rotation-90-4-tiled-bmg-ccs.html

  * igt@kms_ccs@crc-primary-basic-4-tiled-bmg-ccs:
    - shard-rkl:          [SKIP][514] ([i915#12313]) -> [SKIP][515] ([i915#12313] / [i915#14544])
   [514]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-2/igt@kms_ccs@crc-primary-basic-4-tiled-bmg-ccs.html
   [515]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_ccs@crc-primary-basic-4-tiled-bmg-ccs.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-rc-ccs@pipe-c-hdmi-a-2:
    - shard-rkl:          [SKIP][516] ([i915#14098] / [i915#6095]) -> [SKIP][517] ([i915#14098] / [i915#14544] / [i915#6095]) +6 other tests skip
   [516]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-7/igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-rc-ccs@pipe-c-hdmi-a-2.html
   [517]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-rc-ccs@pipe-c-hdmi-a-2.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-2:
    - shard-rkl:          [SKIP][518] ([i915#6095]) -> [SKIP][519] ([i915#14544] / [i915#6095]) +5 other tests skip
   [518]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-4/igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-2.html
   [519]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-2.html

  * igt@kms_chamelium_audio@dp-audio-after-suspend:
    - shard-rkl:          [SKIP][520] ([i915#11151]) -> [SKIP][521] ([i915#11151] / [i915#14544])
   [520]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-5/igt@kms_chamelium_audio@dp-audio-after-suspend.html
   [521]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_chamelium_audio@dp-audio-after-suspend.html

  * igt@kms_chamelium_color_pipeline@plane-lut1d-ctm3x4:
    - shard-rkl:          [SKIP][522] ([i915#14544] / [i915#16471]) -> [SKIP][523] ([i915#16471])
   [522]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-6/igt@kms_chamelium_color_pipeline@plane-lut1d-ctm3x4.html
   [523]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-5/igt@kms_chamelium_color_pipeline@plane-lut1d-ctm3x4.html

  * igt@kms_chamelium_edid@dp-mode-timings:
    - shard-rkl:          [SKIP][524] ([i915#11151] / [i915#14544] / [i915#7828]) -> [SKIP][525] ([i915#11151] / [i915#7828]) +1 other test skip
   [524]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-6/igt@kms_chamelium_edid@dp-mode-timings.html
   [525]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-4/igt@kms_chamelium_edid@dp-mode-timings.html

  * igt@kms_chamelium_hpd@dp-hpd-enable-disable-mode:
    - shard-rkl:          [SKIP][526] ([i915#11151] / [i915#7828]) -> [SKIP][527] ([i915#11151] / [i915#14544] / [i915#7828]) +5 other tests skip
   [526]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-4/igt@kms_chamelium_hpd@dp-hpd-enable-disable-mode.html
   [527]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_chamelium_hpd@dp-hpd-enable-disable-mode.html

  * igt@kms_content_protection@mei-interface:
    - shard-rkl:          [SKIP][528] ([i915#14544] / [i915#15865]) -> [SKIP][529] ([i915#15865]) +1 other test skip
   [528]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-6/igt@kms_content_protection@mei-interface.html
   [529]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-4/igt@kms_content_protection@mei-interface.html

  * igt@kms_content_protection@uevent-hdcp14:
    - shard-rkl:          [SKIP][530] ([i915#15865]) -> [SKIP][531] ([i915#14544] / [i915#15865])
   [530]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-8/igt@kms_content_protection@uevent-hdcp14.html
   [531]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_content_protection@uevent-hdcp14.html

  * igt@kms_cursor_crc@cursor-offscreen-512x512:
    - shard-rkl:          [SKIP][532] ([i915#13049] / [i915#14544]) -> [SKIP][533] ([i915#13049])
   [532]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-6/igt@kms_cursor_crc@cursor-offscreen-512x512.html
   [533]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-7/igt@kms_cursor_crc@cursor-offscreen-512x512.html

  * igt@kms_cursor_legacy@modeset-atomic-cursor-hotspot:
    - shard-rkl:          [SKIP][534] ([i915#9067]) -> [SKIP][535] ([i915#14544] / [i915#9067])
   [534]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-7/igt@kms_cursor_legacy@modeset-atomic-cursor-hotspot.html
   [535]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_cursor_legacy@modeset-atomic-cursor-hotspot.html

  * igt@kms_dither@fb-8bpc-vs-panel-6bpc:
    - shard-rkl:          [SKIP][536] ([i915#14544] / [i915#3555] / [i915#3804]) -> [SKIP][537] ([i915#3555] / [i915#3804])
   [536]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-6/igt@kms_dither@fb-8bpc-vs-panel-6bpc.html
   [537]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-7/igt@kms_dither@fb-8bpc-vs-panel-6bpc.html

  * igt@kms_dither@fb-8bpc-vs-panel-6bpc@pipe-a-hdmi-a-2:
    - shard-rkl:          [SKIP][538] ([i915#14544] / [i915#3804]) -> [SKIP][539] ([i915#3804])
   [538]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-6/igt@kms_dither@fb-8bpc-vs-panel-6bpc@pipe-a-hdmi-a-2.html
   [539]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-7/igt@kms_dither@fb-8bpc-vs-panel-6bpc@pipe-a-hdmi-a-2.html

  * igt@kms_dsc@dsc-with-formats-bigjoiner:
    - shard-rkl:          [SKIP][540] ([i915#14544] / [i915#16361]) -> [SKIP][541] ([i915#16361])
   [540]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-6/igt@kms_dsc@dsc-with-formats-bigjoiner.html
   [541]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-2/igt@kms_dsc@dsc-with-formats-bigjoiner.html

  * igt@kms_dsc@dsc-with-output-formats-with-bpc-bigjoiner:
    - shard-rkl:          [SKIP][542] ([i915#16361]) -> [SKIP][543] ([i915#14544] / [i915#16361]) +1 other test skip
   [542]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-3/igt@kms_dsc@dsc-with-output-formats-with-bpc-bigjoiner.html
   [543]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_dsc@dsc-with-output-formats-with-bpc-bigjoiner.html

  * igt@kms_feature_discovery@display-4x:
    - shard-rkl:          [SKIP][544] ([i915#14544] / [i915#16081]) -> [SKIP][545] ([i915#16081])
   [544]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-6/igt@kms_feature_discovery@display-4x.html
   [545]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-7/igt@kms_feature_discovery@display-4x.html

  * igt@kms_flip@2x-plain-flip:
    - shard-rkl:          [SKIP][546] ([i915#14544] / [i915#9934]) -> [SKIP][547] ([i915#9934]) +4 other tests skip
   [546]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-6/igt@kms_flip@2x-plain-flip.html
   [547]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-7/igt@kms_flip@2x-plain-flip.html

  * igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling:
    - shard-rkl:          [SKIP][548] ([i915#15643]) -> [SKIP][549] ([i915#14544] / [i915#15643])
   [548]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-8/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling.html
   [549]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-mmap-gtt:
    - shard-rkl:          [SKIP][550] ([i915#14544] / [i915#1825]) -> [SKIP][551] ([i915#1825]) +1 other test skip
   [550]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-6/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-mmap-gtt.html
   [551]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-4/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbchdr-suspend:
    - shard-rkl:          [SKIP][552] ([i915#15989]) -> [INCOMPLETE][553] ([i915#16056])
   [552]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-3/igt@kms_frontbuffer_tracking@fbchdr-suspend.html
   [553]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_frontbuffer_tracking@fbchdr-suspend.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-rte:
    - shard-rkl:          [SKIP][554] ([i915#15102]) -> [SKIP][555] ([i915#14544] / [i915#15102]) +21 other tests skip
   [554]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-5/igt@kms_frontbuffer_tracking@fbcpsr-1p-rte.html
   [555]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-1p-rte.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-draw-mmap-wc:
    - shard-rkl:          [SKIP][556] ([i915#1825]) -> [SKIP][557] ([i915#14544] / [i915#1825]) +3 other tests skip
   [556]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-5/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-draw-mmap-wc.html
   [557]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsr-tiling-4:
    - shard-rkl:          [SKIP][558] ([i915#14544] / [i915#5439]) -> [SKIP][559] ([i915#5439])
   [558]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-tiling-4.html
   [559]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-2/igt@kms_frontbuffer_tracking@fbcpsr-tiling-4.html

  * igt@kms_frontbuffer_tracking@hdr-suspend:
    - shard-rkl:          [ABORT][560] ([i915#15132]) -> [SKIP][561] ([i915#15989])
   [560]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-1/igt@kms_frontbuffer_tracking@hdr-suspend.html
   [561]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-2/igt@kms_frontbuffer_tracking@hdr-suspend.html
    - shard-glk:          [SKIP][562] -> [INCOMPLETE][563] ([i915#13356] / [i915#16056] / [i915#16593])
   [562]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-glk2/igt@kms_frontbuffer_tracking@hdr-suspend.html
   [563]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-glk8/igt@kms_frontbuffer_tracking@hdr-suspend.html

  * igt@kms_frontbuffer_tracking@pipe-fbc-rte:
    - shard-rkl:          [SKIP][564] ([i915#14544] / [i915#9766]) -> [SKIP][565] ([i915#9766])
   [564]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-6/igt@kms_frontbuffer_tracking@pipe-fbc-rte.html
   [565]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-8/igt@kms_frontbuffer_tracking@pipe-fbc-rte.html

  * igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-shrfb-msflip-blt:
    - shard-rkl:          [SKIP][566] ([i915#14544] / [i915#15102]) -> [SKIP][567] ([i915#15102]) +6 other tests skip
   [566]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-6/igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-shrfb-msflip-blt.html
   [567]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-7/igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-shrfb-msflip-blt.html

  * igt@kms_frontbuffer_tracking@psrhdr-2p-primscrn-cur-indfb-draw-mmap-wc:
    - shard-rkl:          [SKIP][568] -> [SKIP][569] ([i915#14544]) +39 other tests skip
   [568]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-3/igt@kms_frontbuffer_tracking@psrhdr-2p-primscrn-cur-indfb-draw-mmap-wc.html
   [569]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_frontbuffer_tracking@psrhdr-2p-primscrn-cur-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@psrhdr-2p-scndscrn-cur-indfb-move:
    - shard-rkl:          [SKIP][570] ([i915#14544]) -> [SKIP][571] +16 other tests skip
   [570]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-6/igt@kms_frontbuffer_tracking@psrhdr-2p-scndscrn-cur-indfb-move.html
   [571]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-8/igt@kms_frontbuffer_tracking@psrhdr-2p-scndscrn-cur-indfb-move.html

  * igt@kms_joiner@basic-big-joiner:
    - shard-rkl:          [SKIP][572] ([i915#14544] / [i915#15460]) -> [SKIP][573] ([i915#15460])
   [572]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-6/igt@kms_joiner@basic-big-joiner.html
   [573]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-2/igt@kms_joiner@basic-big-joiner.html

  * igt@kms_panel_fitting@legacy:
    - shard-rkl:          [SKIP][574] ([i915#6301]) -> [SKIP][575] ([i915#14544] / [i915#6301])
   [574]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-2/igt@kms_panel_fitting@legacy.html
   [575]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_panel_fitting@legacy.html

  * igt@kms_pipe_stress@stress-xrgb8888-4tiled:
    - shard-rkl:          [SKIP][576] ([i915#14712]) -> [SKIP][577] ([i915#14544] / [i915#14712])
   [576]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-5/igt@kms_pipe_stress@stress-xrgb8888-4tiled.html
   [577]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_pipe_stress@stress-xrgb8888-4tiled.html

  * igt@kms_plane@pixel-format-4-tiled-mtl-mc-ccs-modifier:
    - shard-rkl:          [SKIP][578] ([i915#15709]) -> [SKIP][579] ([i915#14544] / [i915#15709]) +1 other test skip
   [578]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-4/igt@kms_plane@pixel-format-4-tiled-mtl-mc-ccs-modifier.html
   [579]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_plane@pixel-format-4-tiled-mtl-mc-ccs-modifier.html

  * igt@kms_plane@pixel-format-yf-tiled-ccs-modifier:
    - shard-rkl:          [SKIP][580] ([i915#14544] / [i915#15709]) -> [SKIP][581] ([i915#15709])
   [580]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-6/igt@kms_plane@pixel-format-yf-tiled-ccs-modifier.html
   [581]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-3/igt@kms_plane@pixel-format-yf-tiled-ccs-modifier.html

  * igt@kms_plane_lowres@tiling-yf:
    - shard-rkl:          [SKIP][582] ([i915#3555]) -> [SKIP][583] ([i915#14544] / [i915#3555]) +4 other tests skip
   [582]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-2/igt@kms_plane_lowres@tiling-yf.html
   [583]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_plane_lowres@tiling-yf.html

  * igt@kms_pm_backlight@fade:
    - shard-rkl:          [SKIP][584] ([i915#12343] / [i915#14544] / [i915#5354]) -> [SKIP][585] ([i915#12343] / [i915#5354])
   [584]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-6/igt@kms_pm_backlight@fade.html
   [585]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-5/igt@kms_pm_backlight@fade.html

  * igt@kms_pm_lpsp@screens-disabled:
    - shard-rkl:          [SKIP][586] ([i915#8430]) -> [SKIP][587] ([i915#14544] / [i915#8430])
   [586]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-2/igt@kms_pm_lpsp@screens-disabled.html
   [587]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_pm_lpsp@screens-disabled.html

  * igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-sf:
    - shard-rkl:          [SKIP][588] ([i915#11520] / [i915#14544]) -> [SKIP][589] ([i915#11520]) +1 other test skip
   [588]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-6/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-sf.html
   [589]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-5/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-sf.html

  * igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-exceed-sf:
    - shard-rkl:          [SKIP][590] ([i915#11520]) -> [SKIP][591] ([i915#11520] / [i915#14544]) +2 other tests skip
   [590]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-8/igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-exceed-sf.html
   [591]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-exceed-sf.html

  * igt@kms_psr2_su@page_flip-xrgb8888:
    - shard-rkl:          [SKIP][592] ([i915#9683]) -> [SKIP][593] ([i915#14544] / [i915#9683])
   [592]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-2/igt@kms_psr2_su@page_flip-xrgb8888.html
   [593]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_psr2_su@page_flip-xrgb8888.html

  * igt@kms_psr@fbc-pr-suspend:
    - shard-rkl:          [SKIP][594] ([i915#1072] / [i915#14544] / [i915#9732]) -> [SKIP][595] ([i915#1072] / [i915#9732]) +5 other tests skip
   [594]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-6/igt@kms_psr@fbc-pr-suspend.html
   [595]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-5/igt@kms_psr@fbc-pr-suspend.html

  * igt@kms_psr@fbc-psr-dpms:
    - shard-rkl:          [SKIP][596] ([i915#1072] / [i915#9732]) -> [SKIP][597] ([i915#1072] / [i915#14544] / [i915#9732]) +6 other tests skip
   [596]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-4/igt@kms_psr@fbc-psr-dpms.html
   [597]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_psr@fbc-psr-dpms.html

  * igt@kms_vrr@max-min:
    - shard-rkl:          [SKIP][598] ([i915#9906]) -> [SKIP][599] ([i915#14544] / [i915#9906])
   [598]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-3/igt@kms_vrr@max-min.html
   [599]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@kms_vrr@max-min.html

  * igt@perf_pmu@rc6-all-gts:
    - shard-rkl:          [SKIP][600] ([i915#8516]) -> [SKIP][601] ([i915#14544] / [i915#8516])
   [600]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9114/shard-rkl-7/igt@perf_pmu@rc6-all-gts.html
   [601]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15909/shard-rkl-6/igt@perf_pmu@rc6-all-gts.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [i915#10055]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10055
  [i915#10307]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10307
  [i915#10434]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10434
  [i915#1072]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1072
  [i915#1099]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1099
  [i915#11078]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11078
  [i915#11151]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11151
  [i915#11520]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11520
  [i915#11681]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11681
  [i915#118]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/118
  [i915#11920]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11920
  [i915#12193]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12193
  [i915#12276]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12276
  [i915#12313]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12313
  [i915#12316]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12316
  [i915#12343]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12343
  [i915#12358]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12358
  [i915#12454]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12454
  [i915#1257]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1257
  [i915#12655]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12655
  [i915#12712]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12712
  [i915#12756]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12756
  [i915#12761]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12761
  [i915#12805]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12805
  [i915#12964]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12964
  [i915#13026]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13026
  [i915#13027]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13027
  [i915#13046]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13046
  [i915#13049]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13049
  [i915#13196]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13196
  [i915#13356]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13356
  [i915#13390]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13390
  [i915#13409]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13409
  [i915#13476]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13476
  [i915#13566]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13566
  [i915#13688]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13688
  [i915#13707]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13707
  [i915#13717]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13717
  [i915#13748]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13748
  [i915#13749]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13749
  [i915#13781]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13781
  [i915#13786]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13786
  [i915#13790]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13790
  [i915#13809]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13809
  [i915#13958]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13958
  [i915#14073]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14073
  [i915#14098]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14098
  [i915#14118]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14118
  [i915#14121]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14121
  [i915#14123]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14123
  [i915#14152]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14152
  [i915#14259]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14259
  [i915#14412]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14412
  [i915#14419]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14419
  [i915#14544]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14544
  [i915#14545]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14545
  [i915#14600]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14600
  [i915#14702]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14702
  [i915#14712]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14712
  [i915#15073]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15073
  [i915#15102]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15102
  [i915#15104]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15104
  [i915#15131]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15131
  [i915#15132]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15132
  [i915#15329]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15329
  [i915#15330]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15330
  [i915#15342]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15342
  [i915#15458]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15458
  [i915#15459]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15459
  [i915#15460]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15460
  [i915#15492]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15492
  [i915#15582]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15582
  [i915#15643]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15643
  [i915#15678]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15678
  [i915#15709]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15709
  [i915#15725]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15725
  [i915#15733]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15733
  [i915#15739]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15739
  [i915#15751]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15751
  [i915#15816]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15816
  [i915#15840]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15840
  [i915#15865]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15865
  [i915#15871]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15871
  [i915#15948]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15948
  [i915#15949]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15949
  [i915#15989]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15989
  [i915#15990]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15990
  [i915#15991]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15991
  [i915#16056]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16056
  [i915#16079]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16079
  [i915#16080]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16080
  [i915#16081]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16081
  [i915#16112]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16112
  [i915#16119]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16119
  [i915#16166]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16166
  [i915#16182]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16182
  [i915#16184]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16184
  [i915#16193]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16193
  [i915#16348]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16348
  [i915#16361]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16361
  [i915#16386]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16386
  [i915#16420]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16420
  [i915#16464]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16464
  [i915#16471]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16471
  [i915#16593]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16593
  [i915#16599]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16599
  [i915#16600]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16600
  [i915#16644]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16644
  [i915#16789]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16789
  [i915#16867]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16867
  [i915#16904]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16904
  [i915#16914]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16914
  [i915#16938]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16938
  [i915#16943]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16943
  [i915#16990]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16990
  [i915#17018]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/17018
  [i915#17038]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/17038
  [i915#17054]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/17054
  [i915#17104]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/17104
  [i915#17116]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/17116
  [i915#17150]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/17150
  [i915#17157]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/17157
  [i915#17158]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/17158
  [i915#17160]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/17160
  [i915#17175]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/17175
  [i915#17189]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/17189
  [i915#1769]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1769
  [i915#1825]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1825
  [i915#2065]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2065
  [i915#2190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2190
  [i915#2433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2433
  [i915#2434]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2434
  [i915#2527]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2527
  [i915#2658]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2658
  [i915#2681]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2681
  [i915#280]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/280
  [i915#2856]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2856
  [i915#3116]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3116
  [i915#3281]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3281
  [i915#3282]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3282
  [i915#3297]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3297
  [i915#3299]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3299
  [i915#3323]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3323
  [i915#3361]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3361
  [i915#3539]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3539
  [i915#3555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3555
  [i915#3637]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3637
  [i915#3638]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3638
  [i915#3708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3708
  [i915#3742]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3742
  [i915#3804]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3804
  [i915#3828]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3828
  [i915#4077]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4077
  [i915#4079]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4079
  [i915#4083]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4083
  [i915#4103]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4103
  [i915#4212]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4212
  [i915#4213]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4213
  [i915#4270]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4270
  [i915#4349]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4349
  [i915#4525]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4525
  [i915#4538]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4538
  [i915#4565]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4565
  [i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613
  [i915#4812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4812
  [i915#4817]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4817
  [i915#4852]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4852
  [i915#4860]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4860
  [i915#4880]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4880
  [i915#4881]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4881
  [i915#4885]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4885
  [i915#4958]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4958
  [i915#5138]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5138
  [i915#5190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5190
  [i915#5286]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5286
  [i915#5289]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5289
  [i915#5354]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5354
  [i915#5439]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5439
  [i915#5566]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5566
  [i915#5723]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5723
  [i915#6095]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6095
  [i915#6187]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6187
  [i915#6230]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6230
  [i915#6245]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6245
  [i915#6301]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6301
  [i915#6334]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6334
  [i915#6335]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6335
  [i915#6344]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6344
  [i915#6524]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6524
  [i915#658]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/658
  [i915#6590]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6590
  [i915#6621]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6621
  [i915#6953]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6953
  [i915#7443]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7443
  [i915#7582]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7582
  [i915#7697]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7697
  [i915#7707]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7707
  [i915#7828]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7828
  [i915#7882]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7882
  [i915#7984]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7984
  [i915#8228]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8228
  [i915#8381]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8381
  [i915#8399]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8399
  [i915#8411]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8411
  [i915#8428]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8428
  [i915#8430]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8430
  [i915#8516]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8516
  [i915#8555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8555
  [i915#8623]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8623
  [i915#8708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8708
  [i915#8821]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8821
  [i915#8898]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8898
  [i915#9067]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9067
  [i915#9323]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9323
  [i915#9531]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9531
  [i915#9683]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9683
  [i915#9688]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9688
  [i915#9723]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9723
  [i915#9732]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9732
  [i915#9766]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9766
  [i915#9808]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9808
  [i915#9809]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9809
  [i915#9878]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9878
  [i915#9906]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9906
  [i915#9934]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9934


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

  * CI: CI-20190529 -> None
  * IGT: IGT_9114 -> IGTPW_15909

  CI-20190529: 20190529
  CI_DRM_19232: 972eeb850a4ca07aba05ccb805db28a33eab2c9a @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_15909: 36489129f40b37725a6324d29e5a0a3e50d1af82 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  IGT_9114: 916c79cfb7675ca01607dcd821f8c49d4f633a6f @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git

== Logs ==

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

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

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

* Re: [PATCH i-g-t 7/7] tools/vmtb: Extend IGT and WSIM executors
  2026-09-28  7:26 ` [PATCH i-g-t 7/7] tools/vmtb: Extend IGT and WSIM executors Adam Miszczak
@ 2026-10-08 12:59   ` Bernatowicz, Marcin
  0 siblings, 0 replies; 19+ messages in thread
From: Bernatowicz, Marcin @ 2026-10-08 12:59 UTC (permalink / raw)
  To: Adam Miszczak, igt-dev; +Cc: kamil.konieczny

LGTM,

Reviewed-by: Marcin Bernatowicz <marcin.bernatowicz@linux.intel.com>

On 9/28/2026 9:26 AM, Adam Miszczak wrote:
> Introduce an optional 'env_vars' param (list) on IgtExecutor
> that injects 'igt_runner --environment KEY=VALUE' options,
> allowing environment variables to be passed to IGT test processes.
>
> Cache GemWsim ProcessResult (like IgtExecutor) so status()/wait()
> results are reused instead of re-fetched.
> Add a common clear_results() to both: GemWsim and IgtExecutor.
>
> Additionally, align test_migration with executors' changes:
> - use common IGT/WSIM clear_results() instead of instance checks.
> - call check_results() before failing so the IGT or WSIM
>    error output is logged on unexpected workload exit.
>
> Signed-off-by: Adam Miszczak <adam.miszczak@linux.intel.com>
> ---
>   tools/vmtb/bench/executors/gem_wsim.py | 38 +++++++++++++++++++++-----
>   tools/vmtb/bench/executors/igt.py      | 10 ++++++-
>   tools/vmtb/vmm_flows/test_migration.py | 22 +++++++++------
>   3 files changed, 54 insertions(+), 16 deletions(-)
>
> diff --git a/tools/vmtb/bench/executors/gem_wsim.py b/tools/vmtb/bench/executors/gem_wsim.py
> index 0cdfcc7e4..0510a9f9a 100644
> --- a/tools/vmtb/bench/executors/gem_wsim.py
> +++ b/tools/vmtb/bench/executors/gem_wsim.py
> @@ -8,7 +8,7 @@ from pathlib import Path
>   
>   from bench import exceptions
>   from bench.executors.shell import ShellExecutor
> -from bench.machines.machine_interface import DEFAULT_TIMEOUT, MachineInterface
> +from bench.machines.machine_interface import (DEFAULT_TIMEOUT, MachineInterface, ProcessResult)
>   
>   logger = logging.getLogger('GemWsim')
>   
> @@ -44,26 +44,45 @@ class GemWsim(ShellExecutor):
>   
>           wsim_path = Path(target.get_igt_config().test_dir) / 'benchmarks' / 'gem_wsim'
>           command = f'{wsim_path} -w {workload} -c {num_clients} -r {num_repeats}'
> +        self.proc_result = ProcessResult()
>   
>           super().__init__(target, command, timeout)
>   
>       def __str__(self) -> str:
>           return f'gem_wsim({self.machine_id}:{self.pid})'
>   
> +    # ShellExecutor overrides
> +    def status(self) -> ProcessResult:
> +        if self.proc_result.exited:
> +            return self.proc_result
> +
> +        self.proc_result = super().status()
> +        return self.proc_result
> +
> +    def wait(self) -> ProcessResult:
> +        if self.proc_result.exited:
> +            return self.proc_result
> +
> +        self.proc_result = super().wait()
> +        return self.proc_result
> +
> +    # IGT/WSIM specific methods
>       def is_running(self) -> bool:
>           return not self.status().exited
>   
>       def wait_results(self) -> GemWsimResult:
> -        proc_result = self.wait()
> -        if proc_result.exit_code == 0:
> -            logger.info('%s: %s', self, proc_result.stdout)
> +        if not self.proc_result.exited:
> +            self.proc_result = self.wait()
> +
> +        if self.proc_result.exit_code == 0:
> +            logger.info('%s: %s', self, self.proc_result.stdout)
>               # Try parse output ex.: 19.449s elapsed (102.836 workloads/s)
>               pattern = r'(?P<elapsed>\d+(\.\d*)?|\.\d+)s elapsed \((?P<wps>\d+(\.\d*)?|\.\d+) workloads/s\)'
> -            match = re.search(pattern, proc_result.stdout, re.MULTILINE)
> +            match = re.search(pattern, self.proc_result.stdout, re.MULTILINE)
>               if match:
>                   return GemWsimResult(float(match.group('elapsed')), float(match.group('wps')))
> -        raise exceptions.GemWsimError(f'{self}: exit_code: {proc_result.exit_code}'
> -                                      f' stdout: {proc_result.stdout} stderr: {proc_result.stderr}')
> +        raise exceptions.GemWsimError(f'{self}: exit_code: {self.proc_result.exit_code}'
> +                                      f' stdout: {self.proc_result.stdout} stderr: {self.proc_result.stderr}')
>   
>       def check_results(self) -> bool:
>           """Verify gem_wsim execution results. Return True for workload success, False on fail."""
> @@ -78,6 +97,11 @@ class GemWsim(ShellExecutor):
>                         self.target, wl_results.elapsed_sec, wl_results.workloads_per_sec)
>           return True
>   
> +    def clear_results(self) -> None:
> +        """Clear gem_wsim results cache."""
> +        self.proc_result = ProcessResult()
> +        self.machine_id = str(self.target)
> +
>   
>   def gem_wsim_parallel_exec_and_check(vms: typing.List[MachineInterface], workload: str, iterations: int,
>                                        expected: typing.Optional[GemWsimResult] = None) -> GemWsimResult:
> diff --git a/tools/vmtb/bench/executors/igt.py b/tools/vmtb/bench/executors/igt.py
> index f443fb99e..f4587c1fb 100644
> --- a/tools/vmtb/bench/executors/igt.py
> +++ b/tools/vmtb/bench/executors/igt.py
> @@ -119,6 +119,7 @@ class IgtExecutor(ExecutorInterface):
>       def __init__(self, target: MachineInterface,
>                    test: typing.Union[str, IgtType],
>                    num_repeats: int = 1,
> +                 env_vars: typing.Optional[typing.List[str]] = None,
>                    timeout: int = DEFAULT_TIMEOUT) -> None:
>           self.igt_config = target.get_igt_config()
>   
> @@ -126,7 +127,9 @@ class IgtExecutor(ExecutorInterface):
>           #ld_library_path = f'LD_LIBRARY_PATH={igt_config.lib_dir}'
>           runner = posixpath.join(self.igt_config.tool_dir, 'igt_runner')
>           testlist = '/tmp/igt_executor.testlist'
> -        command = f'{runner} {self.igt_config.options} ' \
> +        # Set test environment variables via igt_runner: --environment KEY=VALUE (or KEY)
> +        env_options = ''.join(f'--environment {env} ' for env in env_vars) if env_vars else ''
> +        command = f'{runner} {self.igt_config.options} {env_options}' \
>                     f'--test-list {testlist} {self.igt_config.test_dir} {self.igt_config.result_dir}'
>           self.results: typing.Dict[str, typing.Any] = {}
>           self.target: MachineInterface = target
> @@ -176,6 +179,11 @@ class IgtExecutor(ExecutorInterface):
>           logger.error("[%s] IGT failed: %s", self.target, self.proc_result)
>           return False
>   
> +    def clear_results(self) -> None:
> +        """Clear IGT results cache."""
> +        self.proc_result = ProcessResult()
> +        self.results.clear()
> +
>       def get_results_log(self) -> typing.Dict:
>           # Results are cached
>           if self.results:
> diff --git a/tools/vmtb/vmm_flows/test_migration.py b/tools/vmtb/vmm_flows/test_migration.py
> index 8a3f10d52..c13350fd2 100644
> --- a/tools/vmtb/vmm_flows/test_migration.py
> +++ b/tools/vmtb/vmm_flows/test_migration.py
> @@ -233,7 +233,9 @@ class BaseTestBusyMigration:
>           logger.debug("Execute migration in-flight workload on source VM")
>           migration_wl = run_source_workload
>           time.sleep(IGT_INIT_DELAY)
> -        assert migration_wl.is_running(), 'IGT/wsim migration workload is not running on source VM'
> +        if not migration_wl.is_running():
> +            migration_wl.check_results()
> +            assert False, 'IGT/wsim migration workload is not running on source VM'
>   
>           # Pause VM and save snapshot
>           logger.debug("Pause execution and save source VM state")
> @@ -267,10 +269,7 @@ class BaseTestBusyMigration:
>   
>           # Patch the source IgtExecutor/GemWsim instance with the current VM
>           migration_wl.target = vm_dst
> -        if isinstance(migration_wl, IgtExecutor):
> -            # Clear IGT test results cache - remove post-save source VM results
> -            # TODO: implement common IgtExecutor/GemWsim results clear interface to avoid instance type check
> -            migration_wl.results.clear()
> +        migration_wl.clear_results()
>   
>           # Load the source state snapshot
>           logger.debug("Restore source state on the destination VM")
> @@ -281,7 +280,10 @@ class BaseTestBusyMigration:
>           sync_value = random.randint(1, 0xFFFF)
>           assert vm_dst.ga.sync(sync_value)['return'] == sync_value
>   
> -        assert migration_wl.is_running(), 'IGT/wsim migration workload is not running on destination VM'
> +        if not migration_wl.is_running():
> +            migration_wl.check_results()
> +            assert False, 'IGT/wsim migration workload is not running on destination VM'
> +
>           time.sleep(IGT_RESTORE_DELAY)
>   
>           assert migration_wl.check_results(), 'VF migration workload failed on destination VM (post-restore)'
> @@ -824,7 +826,9 @@ class BaseTestDoubleMigration:
>           logger.debug("Execute throughout-migration workload on source VM")
>           migration_wl: GemWsim = run_source_workload
>           time.sleep(IGT_INIT_DELAY)
> -        assert migration_wl.is_running(), 'IGT/wsim migration workload is not running on source VM'
> +        if not migration_wl.is_running():
> +            migration_wl.check_results()
> +            assert False, 'IGT/wsim migration workload is not running on source VM'
>   
>           # Pause source VM and save snapshot
>           logger.debug("Pause execution and save source VM state (snapshot #1)")
> @@ -1113,7 +1117,9 @@ def test_2vm_pause_resume(create_1host_2vm):
>   
>       # Allow wsim WL to run some time
>       time.sleep(IGT_INIT_DELAY)
> -    assert gem_wsim_vm0.is_running()
> +    if not gem_wsim_vm0.is_running():
> +        gem_wsim_vm0.check_results()
> +        assert False, 'IGT/wsim workload is not running on VM0'
>   
>       logger.debug("Submit IGT WL (gem_spin_batch) on VM1")
>       igt_vm1 = IgtExecutor(vm1, IgtType.SPIN_BATCH)

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

* Re: [PATCH i-g-t 1/7] tools/vmtb: Introduce asynchronous VM state save/load functions
  2026-09-28  7:25 ` [PATCH i-g-t 1/7] tools/vmtb: Introduce asynchronous VM state save/load functions Adam Miszczak
@ 2026-10-08 13:53   ` Bernatowicz, Marcin
  0 siblings, 0 replies; 19+ messages in thread
From: Bernatowicz, Marcin @ 2026-10-08 13:53 UTC (permalink / raw)
  To: Adam Miszczak, igt-dev; +Cc: kamil.konieczny

LGTM,

Reviewed-by: Marcin Bernatowicz <marcin.bernatowicz@linux.intel.com>

On 9/28/2026 9:25 AM, Adam Miszczak wrote:
> Split existing VM snapshot save/load functions into explicit initialization
> and completion-check phases.
> Making save and load as asynchronous/non-blocking operations allows
> parallel migration of multiple VMs.
>
> Refactor QMP 'query_jobs' handling function to keep reading QMP responses
> until the requested job type is received. Remove unused 'get_qmp_event_job'
> since 'query_jobs' now consumes JOB_STATUS_CHANGE events.
>
> Add handling of QMP command acknowledgments to ensure QEMU has
> processed a command before proceeding.
> Implement __wait_for_ack() helper that consumes the QMP acknowledgment
> (empty return on success) and raises QmpError on an error response.
> Apply __wait_for_ack() to confirm QMP commands that have no event-based
> confirmation: 'stop', 'cont', 'snapshot-save' and 'snapshot-load'.
> Remaining commands like 'system_reset' or 'system_wakeup' are confirmed
> via events in VirtualMachine wrappers.
>
> Also tighten query_status() to wait until the response contains both
> the 'status' and 'running' fields (QMP StatusInfo type), avoiding acting
> on a partial return.
>
> Signed-off-by: Adam Miszczak <adam.miszczak@linux.intel.com>
> ---
>   tools/vmtb/bench/exceptions.py                | 10 ++-
>   .../machines/virtual/backends/qmp_monitor.py  | 55 +++++++++-------
>   tools/vmtb/bench/machines/virtual/vm.py       | 66 +++++++++++++------
>   3 files changed, 86 insertions(+), 45 deletions(-)
>
> diff --git a/tools/vmtb/bench/exceptions.py b/tools/vmtb/bench/exceptions.py
> index 95ca2aa9b..1c151669a 100644
> --- a/tools/vmtb/bench/exceptions.py
> +++ b/tools/vmtb/bench/exceptions.py
> @@ -1,5 +1,5 @@
>   # SPDX-License-Identifier: MIT
> -# Copyright © 2024 Intel Corporation
> +# Copyright © 2024-2026 Intel Corporation
>   
>   class BenchError(Exception):
>       pass
> @@ -19,11 +19,19 @@ class GuestAgentError(GuestError):
>       pass
>   
>   
> +class GuestMigrationError(GuestError):
> +    pass
> +
> +
>   class AlarmTimeoutError(GuestError):
>       pass
>   
>   
>   # Generic errors:
> +class QmpError(BenchError):
> +    pass
> +
> +
>   class GemWsimError(BenchError):
>       pass
>   
> diff --git a/tools/vmtb/bench/machines/virtual/backends/qmp_monitor.py b/tools/vmtb/bench/machines/virtual/backends/qmp_monitor.py
> index d364a5711..8b273ca07 100644
> --- a/tools/vmtb/bench/machines/virtual/backends/qmp_monitor.py
> +++ b/tools/vmtb/bench/machines/virtual/backends/qmp_monitor.py
> @@ -9,6 +9,8 @@ import threading
>   import time
>   import typing
>   
> +from bench.exceptions import QmpError
> +
>   logger = logging.getLogger('QmpMonitor')
>   
>   
> @@ -46,7 +48,7 @@ class QmpMonitor():
>           self.sockf.flush()
>   
>           ret: typing.Dict = {}
> -        while 'status' not in ret:
> +        while not ('status' in ret and 'running' in ret):
>               qmp_msg = self.qmp_queue.get()
>               if 'return' in qmp_msg:
>                   ret = qmp_msg.get('return')
> @@ -55,26 +57,27 @@ class QmpMonitor():
>           logger.debug('Machine status: %s', status)
>           return status
>   
> -    def query_jobs(self, requested_type: str) -> typing.Tuple[str, str]:
> +    def query_jobs(self, requested_type: str) -> typing.Tuple[str, typing.Optional[str]]:
>           json.dump({'execute': 'query-jobs'}, self.sockf)
>           self.sockf.flush()
>   
> -        job_type: str = ''
> -        job_status: str = ''
> -        job_error: str = ''
> -        ret: typing.Dict = {}
> +        job_status: str = 'N/A'
> +        job_error: typing.Optional[str] = None
> +        is_job_info: bool = False
>   
> -        qmp_msg = self.qmp_queue.get()
> -        # logger.debug('[QMP RSP Queue] -> %s', qmp_msg)
> -        if 'return' in qmp_msg:
> -            ret = qmp_msg.get('return')
> -            for param in ret:
> -                job_type = param.get('type')
> -                job_status = param.get('status')
> -                job_error = param.get('error')
> +        while not is_job_info:
> +            qmp_msg = self.qmp_queue.get()
> +            if 'return' in qmp_msg:
> +                ret = qmp_msg.get('return')
> +                if not isinstance(ret, list):
> +                    continue
>   
> -                if job_type == requested_type:
> -                    break
> +                for job_info in ret:
> +                    if job_info.get('type') == requested_type:
> +                        job_status = job_info.get('status')
> +                        job_error = job_info.get('error')
> +                        is_job_info = True
> +                        break
>   
>           return (job_status, job_error)
>   
> @@ -84,15 +87,15 @@ class QmpMonitor():
>           event: str = qmp_msg.get('event', '')
>           return event
>   
> -    def get_qmp_event_job(self) -> str:
> +    def __wait_for_ack(self, cmd_name: str) -> None:
> +        """Consume QMP command acknowledgment (empty return on success).
> +        Throw QmpError exception on error response."""
>           qmp_msg = self.qmp_queue.get()
> -        # logger.debug('[QMP RSP Queue] -> %s', qmp_msg)
> -
> -        status: str = ''
> -        if qmp_msg.get('event') == 'JOB_STATUS_CHANGE':
> -            status = qmp_msg.get('data', {}).get('status', '')
> -
> -        return status
> +        while not ('return' in qmp_msg or 'error' in qmp_msg):
> +            qmp_msg = self.qmp_queue.get()
> +        if 'error' in qmp_msg:
> +            desc = qmp_msg['error'].get('desc', 'unknown error')
> +            raise QmpError(f'QMP {cmd_name} failed: {desc}')
>   
>       def system_reset(self) -> None:
>           json.dump({'execute': 'system_reset'}, self.sockf)
> @@ -105,10 +108,12 @@ class QmpMonitor():
>       def stop(self) -> None:
>           json.dump({'execute': 'stop'}, self.sockf)
>           self.sockf.flush()
> +        self.__wait_for_ack('stop')
>   
>       def cont(self) -> None:
>           json.dump({'execute': 'cont'}, self.sockf)
>           self.sockf.flush()
> +        self.__wait_for_ack('cont')
>   
>       def quit(self) -> None:
>           json.dump({'execute': 'quit'}, self.sockf)
> @@ -149,6 +154,7 @@ class QmpMonitor():
>               'arguments': {'job-id': job_id, 'tag': snapshot_tag, 'vmstate': node_name, 'devices': [node_name]}},
>               self.sockf)
>           self.sockf.flush()
> +        self.__wait_for_ack('snapshot-save')
>   
>       def load_snapshot(self) -> None:
>           job_id: str = f'loadvm_{time.time()}'
> @@ -160,3 +166,4 @@ class QmpMonitor():
>               'arguments': {'job-id': job_id, 'tag': snapshot_tag, 'vmstate': node_name, 'devices': [node_name]}},
>               self.sockf)
>           self.sockf.flush()
> +        self.__wait_for_ack('snapshot-load')
> diff --git a/tools/vmtb/bench/machines/virtual/vm.py b/tools/vmtb/bench/machines/virtual/vm.py
> index 2469af965..8229084d4 100644
> --- a/tools/vmtb/bench/machines/virtual/vm.py
> +++ b/tools/vmtb/bench/machines/virtual/vm.py
> @@ -84,6 +84,7 @@ class VirtualMachine(MachineInterface):
>   
>           self.migrate_source_image: typing.Optional[str] = None
>           self.migrate_destination_vm: bool = False
> +        self._migration_ongoing: bool = False
>   
>           self.dmesg_logger = self.__setup_dmesg_logger()
>   
> @@ -558,32 +559,57 @@ class VirtualMachine(MachineInterface):
>   
>           return True
>   
> -    @Decorators.timeout_signal
> -    def save_state(self) -> None:
> -        logger.debug('Saving VM%s state (snapshot)', self.vmnum)
> +    def save_state_init(self) -> None:
> +        """Initiate VM snapshot-save operation (asynchronous)."""
> +        logger.debug("Starting VM%s state save (snapshot)", self.vmnum)
>           self.qm.save_snapshot()
> +        self._migration_ongoing = True
>   
> -        job_status: str = self.qm.get_qmp_event_job()
> -        while job_status != 'concluded':
> -            job_status = self.qm.get_qmp_event_job()
> +    def load_state_init(self) -> None:
> +        """Initiate VM snapshot-load operation (asynchronous)."""
> +        logger.debug("Starting VM%s state load (snapshot)", self.vmnum)
> +        self.qm.load_snapshot()
> +        self._migration_ongoing = True
>   
> -        job_status, job_error = self.qm.query_jobs('snapshot-save')
> -        if job_status == 'concluded' and job_error is not None:
> -            raise exceptions.GuestError(f'VM{self.vmnum} state save error: {job_error}')
> +    def __is_snapshot_operation_complete(self, op_name: str) -> bool:
> +        """Poll VM snapshot save/load job completion."""
> +        if not self._migration_ongoing:
> +            logger.warning("VM%s migration is not in progress", self.vmnum)
> +            return False
>   
> -        logger.debug('VM%s state save finished successfully', self.vmnum)
> +        job_status, job_error = self.qm.query_jobs(f'snapshot-{op_name}')
> +        if job_error is not None:
> +            logger.error("VM%s snapshot-%s error: %s", self.vmnum, op_name, job_error)
> +            return False
> +
> +        return job_status == 'concluded'
>   
>       @Decorators.timeout_signal
> -    def load_state(self) -> None:
> -        logger.debug('Loading VM state (snapshot)')
> -        self.qm.load_snapshot()
> +    def save_state_check(self, timeout: int = DEFAULT_TIMEOUT) -> None:
> +        """Check if previously started snapshot-save has completed successfully."""
> +        if not self.__is_snapshot_operation_complete('save'):
> +            logger.error("VM%s state save has not completed", self.vmnum)
> +            raise exceptions.GuestMigrationError(f'VM{self.vmnum} state save has not completed')
> +
> +        self._migration_ongoing = False
> +        logger.debug("VM%s state save finished successfully", self.vmnum)
> +
> +    @Decorators.timeout_signal
> +    def load_state_check(self, timeout: int = DEFAULT_TIMEOUT) -> None:
> +        """Check if previously started snapshot-load has completed successfully."""
> +        if not self.__is_snapshot_operation_complete('load'):
> +            logger.error("VM%s state load has not completed", self.vmnum)
> +            raise exceptions.GuestMigrationError(f'VM{self.vmnum} state load has not completed')
>   
> -        job_status: str = self.qm.get_qmp_event_job()
> -        while job_status != 'concluded':
> -            job_status = self.qm.get_qmp_event_job()
> +        self._migration_ongoing = False
> +        logger.debug("VM%s state load finished successfully", self.vmnum)
>   
> -        job_status, job_error = self.qm.query_jobs('snapshot-load')
> -        if job_status == 'concluded' and job_error is not None:
> -            raise exceptions.GuestError(f'VM{self.vmnum} state load error: {job_error}')
> +    def save_state(self) -> None:
> +        """Save VF state - submit snapshot-save and check result (synchronous save)."""
> +        self.save_state_init()
> +        self.save_state_check()
>   
> -        logger.debug('VM state load finished successfully')
> +    def load_state(self) -> None:
> +        """Load VF state - submit snapshot-load and check result (synchronous load)."""
> +        self.load_state_init()
> +        self.load_state_check()

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

* Re: [PATCH i-g-t 2/7] tools/vmtb: Rework VF scheduler provisioning
  2026-09-28  7:25 ` [PATCH i-g-t 2/7] tools/vmtb: Rework VF scheduler provisioning Adam Miszczak
@ 2026-10-08 13:54   ` Bernatowicz, Marcin
  0 siblings, 0 replies; 19+ messages in thread
From: Bernatowicz, Marcin @ 2026-10-08 13:54 UTC (permalink / raw)
  To: Adam Miszczak, igt-dev; +Cc: kamil.konieczny

LGTM,

Reviewed-by: Marcin Bernatowicz <marcin.bernatowicz@linux.intel.com>

On 9/28/2026 9:25 AM, Adam Miszczak wrote:
> Align default VF scheduling setup with the current xe KMD behavior.
> Scheduling settings: execution quanta (EQ) and preemption-timeout (PT)
> are set to 16ms by default (instead of infinite/0), therefore:
> - rename VfSchedulingMode.INFINITE → AUTO
> - update VmmTestingConfig default from INFINITE to AUTO
>
> Fix scheduler-only manual provisioning - support VF config variants
> where only the scheduler setup is needed (auto resources provisioning
> with a concrete scheduling mode). In this case load scheduler profile
> even when no matching resources profile exists.
>
> In addition, fix max VFs handling, improve assertions for creating VFs
> and skip unsupported test configs instead of failing.
>
> Signed-off-by: Adam Miszczak <adam.miszczak@linux.intel.com>
> ---
>   .../configurators/vgpu_profile_config.py      | 20 +++++---
>   tools/vmtb/bench/exceptions.py                |  4 ++
>   tools/vmtb/bench/machines/physical/device.py  |  9 ++--
>   tools/vmtb/vmm_flows/conftest.py              | 46 +++++++++++--------
>   tools/vmtb/vmm_flows/test_basic.py            |  2 +-
>   5 files changed, 52 insertions(+), 29 deletions(-)
>
> diff --git a/tools/vmtb/bench/configurators/vgpu_profile_config.py b/tools/vmtb/bench/configurators/vgpu_profile_config.py
> index 4bddb641e..35a8a8835 100644
> --- a/tools/vmtb/bench/configurators/vgpu_profile_config.py
> +++ b/tools/vmtb/bench/configurators/vgpu_profile_config.py
> @@ -23,7 +23,7 @@ class VfProvisioningMode(Enum):
>   
>   
>   class VfSchedulingMode(str, Enum):
> -    INFINITE = 'Infinite' # Infinite EQ/PT - HW default
> +    AUTO = 'Auto' # Default EQ/PT (set by xe KMD automatically)
>       DEFAULT_PROFILE = 'Default_Profile' # Default vGPU scheduler profile
>       FLEXIBLE_30FPS = 'Flexible_30fps_GPUTimeSlicing'
>       FIXED_30FPS = 'Fixed_30fps_GPUTimeSlicing'
> @@ -87,8 +87,8 @@ class VgpuProfileConfigurator:
>                   break
>   
>           if not is_vf_resource_found:
> -            logger.error("vGPU VF resources profile %sxVF not found!", requested_num_vfs)
> -            raise exceptions.VgpuProfileError(f'vGPU VF resources profile {requested_num_vfs}xVF not found!')
> +            logger.warning("vGPU resources profile (%sxVF) not found!", requested_num_vfs)
> +            raise exceptions.VgpuProfileNotFound(f'vGPU resources profile ({requested_num_vfs}xVF) not found!')
>   
>           return vgpu_resources_config
>   
> @@ -99,7 +99,7 @@ class VgpuProfileConfigurator:
>           # pylint: disable=W0123
>           vgpu_scheduler_config = VgpuSchedulerConfig()
>   
> -        if requested_scheduler is VfSchedulingMode.INFINITE:
> +        if requested_scheduler is VfSchedulingMode.AUTO:
>               return vgpu_scheduler_config
>   
>           for scheduler in self.supported_vgpu_profiles.scheduler_configs:
> @@ -136,13 +136,19 @@ class VgpuProfileConfigurator:
>   
>           return vgpu_security_config
>   
> -    def get_vgpu_profile(self, requested_num_vfs: int, requested_scheduler: VfSchedulingMode) -> VgpuProfile:
> -        """Get vGPU profile for requested number of VFs, scheduler and security modes."""
> +    def get_vgpu_profile(self, requested_num_vfs: int, requested_scheduler: VfSchedulingMode,
> +                         require_resources: bool = True) -> VgpuProfile:
> +        """Get vGPU profile for requested number of VFs, scheduler and security modes.
> +        If require_resources is False, skip VF resources lookup
> +        (e.g. for auto provisioning where only the scheduler config is needed).
> +        """
>           logger.info("Requested vGPU profile: %s VFs / scheduling: %s", requested_num_vfs, requested_scheduler)
>   
>           vgpu_profile: VgpuProfile = VgpuProfile()
>           vgpu_profile.num_vfs = requested_num_vfs
> -        vgpu_profile.resources = self.select_vgpu_resources_profile(requested_num_vfs)
> +
> +        if require_resources:
> +            vgpu_profile.resources = self.select_vgpu_resources_profile(requested_num_vfs)
>   
>           if requested_scheduler is VfSchedulingMode.DEFAULT_PROFILE:
>               requested_scheduler = VfSchedulingMode(self.supported_vgpu_profiles.scheduler_config_default)
> diff --git a/tools/vmtb/bench/exceptions.py b/tools/vmtb/bench/exceptions.py
> index 1c151669a..557b44142 100644
> --- a/tools/vmtb/bench/exceptions.py
> +++ b/tools/vmtb/bench/exceptions.py
> @@ -40,6 +40,10 @@ class VgpuProfileError(BenchError):
>       pass
>   
>   
> +class VgpuProfileNotFound(VgpuProfileError):
> +    pass
> +
> +
>   class NotAvailableError(BenchError):
>       pass
>   
> diff --git a/tools/vmtb/bench/machines/physical/device.py b/tools/vmtb/bench/machines/physical/device.py
> index f1f24c65c..6c0dc4ff9 100644
> --- a/tools/vmtb/bench/machines/physical/device.py
> +++ b/tools/vmtb/bench/machines/physical/device.py
> @@ -59,7 +59,7 @@ class Device(DeviceInterface):
>               driver_module = importlib.import_module(module_name)
>               driver_class = getattr(driver_module, class_name)
>           except (ImportError, AttributeError) as exc:
> -            logging.error("Driver module/class is not available: %s", exc)
> +            logger.error("Driver module/class is not available: %s", exc)
>               raise exceptions.VmtbConfigError(f'Requested driver module {driver_name} is not available!')
>   
>           return driver_class(bdf)
> @@ -102,7 +102,9 @@ class Device(DeviceInterface):
>   
>           self.driver.set_numvfs(num)
>           ret = self.driver.get_numvfs()
> -        assert ret == num
> +        if ret != num:
> +            logger.error("Failed to create requested number of VFs - expected: %s, got: %s", num, ret)
> +            raise exceptions.HostError(f'Failed to create requested number of VFs ({num})')
>   
>           return ret
>   
> @@ -114,7 +116,8 @@ class Device(DeviceInterface):
>           self.driver.set_numvfs(0)
>           ret = self.driver.get_numvfs()
>           if ret != 0:
> -            raise exceptions.HostError('VFs not disabled after 0 write')
> +            logger.error("Failed to disable VFs - expected 0, got: %s", ret)
> +            raise exceptions.HostError('Failed to disable all VFs')
>   
>           logger.debug("[%s] Enable drivers autoprobe", self.pci_info.bdf)
>           self.set_drivers_autoprobe(True)
> diff --git a/tools/vmtb/vmm_flows/conftest.py b/tools/vmtb/vmm_flows/conftest.py
> index 02c297f93..ba6487c84 100644
> --- a/tools/vmtb/vmm_flows/conftest.py
> +++ b/tools/vmtb/vmm_flows/conftest.py
> @@ -44,7 +44,7 @@ class VmmTestingConfig:
>       - num_vfs: requested number of VFs to enable
>       - max_num_vms: maximal number of VMs (the value can be different than enabled number of VFs)
>       - provisioning_mode: auto (fair resources allocation by a driver) or vGPU profile
> -    - scheduling_mode: requested vGPU scheduling profile (infinite maps to default 0's)
> +    - scheduling_mode: requested vGPU scheduling profile (auto maps to default EQ=16ms and PT=16000us)
>       - auto_poweron_vm: assign VFs and power on VMs automatically in setup fixture
>       - auto_probe_vm_driver: probe guest DRM driver in setup fixture (VM must be powered on)
>       - unload_host_drivers_on_teardown: unload host DRM drivers in teardown fixture
> @@ -53,7 +53,7 @@ class VmmTestingConfig:
>       num_vfs: int = 1
>       max_num_vms: int = 2
>       provisioning_mode: VfProvisioningMode = VfProvisioningMode.AUTO
> -    scheduling_mode: VfSchedulingMode = VfSchedulingMode.INFINITE
> +    scheduling_mode: VfSchedulingMode = VfSchedulingMode.AUTO
>   
>       auto_poweron_vm: bool = True
>       auto_probe_vm_driver: bool = True
> @@ -68,8 +68,11 @@ class VmmTestingConfig:
>               self.num_vfs = 0 # Actual value set in VmmTestingSetup
>   
>       def __str__(self) -> str:
> -        test_config_id = (f'{self.num_vfs if not self.enable_max_vfs else "Max"}VF'
> -                          + f'-(P:{self.provisioning_mode.name} S:{self.scheduling_mode.name})')
> +        test_config_id = (f'{self.num_vfs if not self.enable_max_vfs else "Max"}VF')
> +
> +        if self.provisioning_mode is not VfProvisioningMode.AUTO or self.scheduling_mode is not VfSchedulingMode.AUTO:
> +            test_config_id += f'-(P:{self.provisioning_mode.name} S:{self.scheduling_mode.name})'
> +
>           return test_config_id
>   
>       def __repr__(self) -> str:
> @@ -126,10 +129,11 @@ class VmmTestingSetup:
>           self.wsim_wl_dir = vmtb_root_path / vmtb_config.config.wsim_wl_path / self.get_dut().gpu_model.name.lower()
>   
>           if (self.testing_config.provisioning_mode is VfProvisioningMode.VGPU_PROFILE
> -            or self.testing_config.scheduling_mode is not VfSchedulingMode.INFINITE):
> +            or self.testing_config.scheduling_mode is not VfSchedulingMode.AUTO):
> +            # vGPU profile or auto resources provisioning with concrete scheduling
>               self.vgpu_profile: VgpuProfile = self.get_vgpu_profile()
> -
> -        if self.testing_config.provisioning_mode is VfProvisioningMode.AUTO and self.testing_config.enable_max_vfs:
> +        elif self.testing_config.enable_max_vfs:
> +            # Auto provisioning (with default/auto scheduling) for max VFs (HW limit)
>               self.testing_config.num_vfs = self.total_vfs
>   
>           # Start maximum requested number of VMs, but not more than VFs supported by the given vGPU profile
> @@ -143,17 +147,22 @@ class VmmTestingSetup:
>       def get_vgpu_profile(self) -> VgpuProfile:
>           configurator = VgpuProfileConfigurator(self.vgpu_profiles_dir, self.get_dut().gpu_model)
>           if self.testing_config.enable_max_vfs:
> -            # Get a vGPU profile with the most VFs (not necessarily equal to sysfs/sriov_totalvfs)
> -            self.testing_config.num_vfs = max(configurator.supported_vgpu_profiles.vf_resources,
> -                                              key=lambda profile: profile.vf_count).vf_count
> -            logger.debug("Max VFs supported by vGPU profiles: %s", self.testing_config.num_vfs)
> +            if self.testing_config.provisioning_mode is VfProvisioningMode.VGPU_PROFILE:
> +                # Get a vGPU profile with the most VFs (not necessarily equal to sysfs/sriov_totalvfs)
> +                self.testing_config.num_vfs = max(configurator.supported_vgpu_profiles.vf_resources,
> +                                                  key=lambda profile: profile.vf_count).vf_count
> +                logger.debug("Max VFs supported by vGPU profiles: %s", self.testing_config.num_vfs)
> +            else:
> +                # Use HW VFs limit (sysfs/sriov_totalvfs) with auto resources provisioning and concrete scheduling
> +                self.testing_config.num_vfs = self.total_vfs
>   
>           try:
> +            require_resources = self.testing_config.provisioning_mode is VfProvisioningMode.VGPU_PROFILE
>               vgpu_profile = configurator.get_vgpu_profile(self.testing_config.num_vfs,
> -                                                         self.testing_config.scheduling_mode)
> -        except exceptions.VgpuProfileError as exc:
> -            logger.error("Suitable vGPU profile not found: %s", exc)
> -            raise exceptions.VgpuProfileError('Invalid test setup - vGPU profile not found!')
> +                                                         self.testing_config.scheduling_mode,
> +                                                         require_resources)
> +        except exceptions.VgpuProfileNotFound as exc:
> +            pytest.skip(f'Test config not supported: {exc}')
>   
>           return vgpu_profile
>   
> @@ -277,11 +286,12 @@ def fixture_setup_vms(get_vmtb_config, get_cmdline_config, get_host, request):
>       else:
>           device.driver.restore_auto_provisioning()
>   
> -    assert device.create_vf(num_vfs) == num_vfs
> +    assert num_vfs <= ts.total_vfs, f'Requested number of VFs ({num_vfs}) exceeds total VFs ({ts.total_vfs})'
> +    device.create_vf(num_vfs)
>   
>       if (ts.testing_config.provisioning_mode is VfProvisioningMode.AUTO and
> -        ts.testing_config.scheduling_mode is not VfSchedulingMode.INFINITE):
> -        # Auto resources provisioning with concrete scheduling (i.e. different than HW default: infinite).
> +        ts.testing_config.scheduling_mode is not VfSchedulingMode.AUTO):
> +        # Auto resources provisioning with scheduling override (i.e. different than default/auto).
>           # Scheduler params override must be done after enabling VFs
>           # to allow hard resources auto provisioning by KMD.
>           ts.vgpu_profile.print_scheduler_config()
> diff --git a/tools/vmtb/vmm_flows/test_basic.py b/tools/vmtb/vmm_flows/test_basic.py
> index 9b8731273..597ebbb68 100644
> --- a/tools/vmtb/vmm_flows/test_basic.py
> +++ b/tools/vmtb/vmm_flows/test_basic.py
> @@ -43,7 +43,7 @@ def set_test_config(test_variants: List[Tuple[int, VfProvisioningMode, VfSchedul
>   
>   test_variants_1 = [(1, VfProvisioningMode.VGPU_PROFILE, VfSchedulingMode.DEFAULT_PROFILE),
>                      (2, VfProvisioningMode.VGPU_PROFILE, VfSchedulingMode.DEFAULT_PROFILE),
> -                   (2, VfProvisioningMode.AUTO, VfSchedulingMode.INFINITE)]
> +                   (2, VfProvisioningMode.AUTO, VfSchedulingMode.AUTO)]
>   
>   @pytest.mark.parametrize('setup_vms', set_test_config(test_variants_1), ids=idfn_test_config, indirect=['setup_vms'])
>   class TestVmSetup:

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

* Re: [PATCH i-g-t 3/7] tools/vmtb: Align driver/device layer with current xe SR-IOV interfaces
  2026-09-28  7:25 ` [PATCH i-g-t 3/7] tools/vmtb: Align driver/device layer with current xe SR-IOV interfaces Adam Miszczak
@ 2026-10-08 13:54   ` Bernatowicz, Marcin
  0 siblings, 0 replies; 19+ messages in thread
From: Bernatowicz, Marcin @ 2026-10-08 13:54 UTC (permalink / raw)
  To: Adam Miszczak, igt-dev; +Cc: kamil.konieczny

LGTM,

Reviewed-by: Marcin Bernatowicz <marcin.bernatowicz@linux.intel.com>

On 9/28/2026 9:25 AM, Adam Miszczak wrote:
> Move VF VRAM quota provisioning from the obsolete debugfs lmem_quota
> attribute to the sysfs SRIOV admin tree
> (/sys/bus/pci/drivers/xe/[BDF]/sriov_admin/vf[N]/profile/vram_quota)
> and update the driver abstraction and provisioning helpers.
>
> Fix physical Device bind()/unbind() calls that still passed a PCI BDF
> to DriverInterface, breaking unload_drivers() with a TypeError.
>
> Add DeviceInterface.reset() that triggers an FLR via
> /sys/bus/pci/devices/[BDF]/reset - PF FLR on the host for physical
> devices and VF FLR in the guest for virtual devices.
>
> Signed-off-by: Adam Miszczak <adam.miszczak@linux.intel.com>
> ---
>   tools/vmtb/bench/drivers/driver_interface.py  |  8 ++--
>   tools/vmtb/bench/drivers/xe.py                | 39 ++++++++++---------
>   tools/vmtb/bench/machines/device_interface.py |  7 ++++
>   tools/vmtb/bench/machines/physical/device.py  | 12 ++++--
>   tools/vmtb/bench/machines/virtual/device.py   |  4 ++
>   5 files changed, 44 insertions(+), 26 deletions(-)
>
> diff --git a/tools/vmtb/bench/drivers/driver_interface.py b/tools/vmtb/bench/drivers/driver_interface.py
> index 0b0bd5abb..9d1e5ab00 100644
> --- a/tools/vmtb/bench/drivers/driver_interface.py
> +++ b/tools/vmtb/bench/drivers/driver_interface.py
> @@ -201,19 +201,19 @@ class PfDriverInterface(DriverInterface, abc.ABC):
>   
>       # VF provisioning
>       @abc.abstractmethod
> -    def get_ggtt_quota(self, vf_num: int, gt_num: int) -> int:
> +    def get_vram_quota(self, vf_num: int) -> int:
>           raise NotImplementedError
>   
>       @abc.abstractmethod
> -    def set_ggtt_quota(self, vf_num: int, gt_num: int, val: int) -> None:
> +    def set_vram_quota(self, vf_num: int, val: int) -> None:
>           raise NotImplementedError
>   
>       @abc.abstractmethod
> -    def get_lmem_quota(self, vf_num: int, gt_num: int) -> int:
> +    def get_ggtt_quota(self, vf_num: int, gt_num: int) -> int:
>           raise NotImplementedError
>   
>       @abc.abstractmethod
> -    def set_lmem_quota(self, vf_num: int, gt_num: int, val: int) -> None:
> +    def set_ggtt_quota(self, vf_num: int, gt_num: int, val: int) -> None:
>           raise NotImplementedError
>   
>       @abc.abstractmethod
> diff --git a/tools/vmtb/bench/drivers/xe.py b/tools/vmtb/bench/drivers/xe.py
> index 26e4e0a08..479c1dd87 100644
> --- a/tools/vmtb/bench/drivers/xe.py
> +++ b/tools/vmtb/bench/drivers/xe.py
> @@ -140,7 +140,27 @@ class XeDriver(PfDriverInterface):
>           path = self.__helper_create_debugfs_path(0, gt_num, '', 'sample_period_ms')
>           self.write_debugfs(path, str(val))
>   
> -    # VF and PF provisioning parameters
> +    # VF provisioning parameters
> +    # Sysfs location: [SRIOV sysfs base path]/sriov_admin/[vfN]/profile
> +    # @vf_num: VF number (1-based) or 0 for PF
> +    def get_vram_quota(self, vf_num: int) -> int:
> +        if vf_num == 0:
> +            logger.warning("PF vram_quota not available")
> +            return 0
> +
> +        sriov_admin_path = self.__helper_create_sriov_admin_path(vf_num, 'vram_quota')
> +        return int(self.read_sysfs(self.sysfs_device_path / sriov_admin_path)) if self.has_lmem() else 0
> +
> +    def set_vram_quota(self, vf_num: int, val: int) -> None:
> +        if vf_num == 0:
> +            logger.warning("PF vram_quota not available")
> +            return
> +
> +        sriov_admin_path = self.__helper_create_sriov_admin_path(vf_num, 'vram_quota')
> +        if self.has_lmem():
> +            self.write_sysfs(self.sysfs_device_path / sriov_admin_path, str(val))
> +
> +    # VF provisioning parameters (debugfs)
>       # Debugfs location: [SRIOV debugfs base path]/gtM/[pf|vfN]
>       # @vf_num: VF number (1-based) or 0 for PF
>       def get_ggtt_quota(self, vf_num: int, gt_num: int) -> int:
> @@ -159,23 +179,6 @@ class XeDriver(PfDriverInterface):
>           path = self.__helper_create_debugfs_path(vf_num, gt_num, '', 'ggtt_quota')
>           self.write_debugfs(path, str(val))
>   
> -    def get_lmem_quota(self, vf_num: int, gt_num: int) -> int:
> -        if vf_num == 0:
> -            logger.warning("PF lmem_quota not available")
> -            return 0
> -
> -        path = self.__helper_create_debugfs_path(vf_num, gt_num, '', 'lmem_quota')
> -        return int(self.read_debugfs(path)) if self.has_lmem() else 0
> -
> -    def set_lmem_quota(self, vf_num: int, gt_num: int, val: int) -> None:
> -        if vf_num == 0:
> -            logger.warning("PF lmem_quota not available")
> -            return
> -
> -        path = self.__helper_create_debugfs_path(vf_num, gt_num, '', 'lmem_quota')
> -        if self.has_lmem():
> -            self.write_debugfs(path, str(val))
> -
>       def get_contexts_quota(self, vf_num: int, gt_num: int) -> int:
>           if vf_num == 0:
>               logger.warning("PF contexts_quota not available")
> diff --git a/tools/vmtb/bench/machines/device_interface.py b/tools/vmtb/bench/machines/device_interface.py
> index 0eff493f0..76b47de03 100644
> --- a/tools/vmtb/bench/machines/device_interface.py
> +++ b/tools/vmtb/bench/machines/device_interface.py
> @@ -10,8 +10,15 @@ class DeviceInterface(abc.ABC):
>       """
>       @abc.abstractmethod
>       def bind_driver(self) -> None:
> +        """Bind driver to device."""
>           raise NotImplementedError
>   
>       @abc.abstractmethod
>       def unbind_driver(self) -> None:
> +        """Unbind driver from device."""
> +        raise NotImplementedError
> +
> +    @abc.abstractmethod
> +    def reset(self) -> None:
> +        """Reset device (trigger FLR)."""
>           raise NotImplementedError
> diff --git a/tools/vmtb/bench/machines/physical/device.py b/tools/vmtb/bench/machines/physical/device.py
> index 6c0dc4ff9..b4eebc245 100644
> --- a/tools/vmtb/bench/machines/physical/device.py
> +++ b/tools/vmtb/bench/machines/physical/device.py
> @@ -125,10 +125,14 @@ class Device(DeviceInterface):
>           return ret
>   
>       def bind_driver(self) -> None:
> -        self.driver.bind(self.pci_info.bdf)
> +        self.driver.bind()
>   
>       def unbind_driver(self) -> None:
> -        self.driver.unbind(self.pci_info.bdf)
> +        self.driver.unbind()
> +
> +    def reset(self) -> None:
> +        logger.debug("[%s] Trigger reset (PF FLR)", self.pci_info.bdf)
> +        self.driver.flr()
>   
>       def override_vf_driver(self, vf_num: int) -> str:
>           """Set VFIO as VF driver."""
> @@ -224,8 +228,8 @@ class Device(DeviceInterface):
>               self.driver.set_pf_doorbells_spare(gt_num, resources_config.pfDoorbells)
>           else:
>               if not self.is_gt_media_type(gt_num):
> +                self.driver.set_vram_quota(fn_num, resources_config.vfLmem)
>                   self.driver.set_ggtt_quota(fn_num, gt_num, resources_config.vfGgtt)
> -                self.driver.set_lmem_quota(fn_num, gt_num, resources_config.vfLmem)
>               self.driver.set_contexts_quota(fn_num, gt_num, resources_config.vfContexts)
>               self.driver.set_doorbells_quota(fn_num, gt_num, resources_config.vfDoorbells)
>   
> @@ -246,8 +250,8 @@ class Device(DeviceInterface):
>                   self.driver.set_contexts_quota(vf_num, gt_num, 0)
>                   self.driver.set_doorbells_quota(vf_num, gt_num, 0)
>                   if not self.is_gt_media_type(gt_num):
> +                    self.driver.set_vram_quota(vf_num, 0)
>                       self.driver.set_ggtt_quota(vf_num, gt_num, 0)
> -                    self.driver.set_lmem_quota(vf_num, gt_num, 0)
>   
>       def reset_provisioning(self, num_vfs: int) -> None:
>           """Clear provisioning config for a given number of VFs and restore auto provisioning mode."""
> diff --git a/tools/vmtb/bench/machines/virtual/device.py b/tools/vmtb/bench/machines/virtual/device.py
> index c838db59d..b36dbba58 100644
> --- a/tools/vmtb/bench/machines/virtual/device.py
> +++ b/tools/vmtb/bench/machines/virtual/device.py
> @@ -68,6 +68,10 @@ class VirtualDevice(DeviceInterface):
>                        self.vm.get_drm_driver_name(), self.pci_info.bdf)
>           self.driver.unbind()
>   
> +    def reset(self) -> None:
> +        logger.debug("[%s] Trigger reset (VF FLR)", self.pci_info.bdf)
> +        self.driver.flr() # VF FLR from guest's sysfs
> +
>       @property
>       def lmem_size(self) -> typing.Optional[int]:
>           if self._lmem_size is None:

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

* Re: [PATCH i-g-t 4/7] tools/vmtb: Fix guest timeout handling and PCI BDF matching
  2026-09-28  7:25 ` [PATCH i-g-t 4/7] tools/vmtb: Fix guest timeout handling and PCI BDF matching Adam Miszczak
@ 2026-10-08 13:55   ` Bernatowicz, Marcin
  0 siblings, 0 replies; 19+ messages in thread
From: Bernatowicz, Marcin @ 2026-10-08 13:55 UTC (permalink / raw)
  To: Adam Miszczak, igt-dev; +Cc: kamil.konieczny

LGTM,

Reviewed-by: Marcin Bernatowicz <marcin.bernatowicz@linux.intel.com>

On 9/28/2026 9:25 AM, Adam Miszczak wrote:
> Resolve timeouts from keyword or positional arguments and function
> defaults. Give VM power-off a configurable 60-second default.
>
> Match complete PCI BDF names using hexadecimal fields and a literal
> dot before the function number, rejecting malformed directory names.
>
> Also, avoid nested f-string quotes for compatibility with older Python.
>
> Signed-off-by: Adam Miszczak <adam.miszczak@linux.intel.com>
> ---
>   tools/vmtb/bench/machines/virtual/vm.py | 48 +++++++++++++++++++------
>   1 file changed, 38 insertions(+), 10 deletions(-)
>
> diff --git a/tools/vmtb/bench/machines/virtual/vm.py b/tools/vmtb/bench/machines/virtual/vm.py
> index 8229084d4..e0b6fb150 100644
> --- a/tools/vmtb/bench/machines/virtual/vm.py
> +++ b/tools/vmtb/bench/machines/virtual/vm.py
> @@ -2,6 +2,7 @@
>   # Copyright © 2024-2026 Intel Corporation
>   
>   import base64
> +import inspect
>   import json
>   import logging
>   import re
> @@ -34,13 +35,39 @@ class VirtualMachine(MachineInterface):
>   
>           @classmethod
>           def timeout_signal(cls, func: typing.Callable) -> typing.Callable:
> +            timeout_default: int = DEFAULT_TIMEOUT
> +
> +            # Check for timeout provided as function signature default
> +            func_sig = inspect.signature(func)
> +            timeout_param = func_sig.parameters.get('timeout')
> +            if timeout_param and isinstance(timeout_param.default, int):
> +                timeout_default = timeout_param.default
> +
> +            # Check timeout parameter positional index
> +            # (to avoid repeated introspection on every call)
> +            timeout_positional_idx: typing.Optional[int] = None
> +            positional_params = [
> +                name for name, param in func_sig.parameters.items()
> +                if param.kind == inspect.Parameter.POSITIONAL_OR_KEYWORD
> +            ]
> +            if 'timeout' in positional_params:
> +                timeout_positional_idx = positional_params.index('timeout')
> +
>               def timeout_wrapper(*args: typing.Any, **kwargs: typing.Optional[typing.Any]) -> typing.Any:
> -                timeout: int = DEFAULT_TIMEOUT
> -                if len(args) > 2:
> -                    timeout = args[2] # Argument position in execute_wait(self, pid, timeout)
> -                elif kwargs.get('timeout') is not None:
> -                    if isinstance(kwargs['timeout'], int):
> -                        timeout = kwargs['timeout']
> +                timeout: int = timeout_default
> +
> +                # Resolve timeout in this order:
> +                # 1. Explicit keyword value, e.g. vm.func(timeout=60)
> +                # 2. Explicit positional value, e.g. vm.func(..., 60)
> +                # 3. Default function signature value, e.g. def func(self, timeout=60)
> +                # 4. Default global value (DEFAULT_TIMEOUT)
> +                timeout_kwarg = kwargs.get('timeout')
> +                if isinstance(timeout_kwarg, int):
> +                    timeout = timeout_kwarg
> +                elif (timeout_positional_idx is not None
> +                      and len(args) > timeout_positional_idx
> +                      and isinstance(args[timeout_positional_idx], int)):
> +                    timeout = args[timeout_positional_idx]
>   
>                   # mypy: silence the following problem in signal.signal() call:
>                   # error: Argument 2 to "signal" has incompatible type "Callable[[Signals, FrameType], Any]";
> @@ -89,7 +116,8 @@ class VirtualMachine(MachineInterface):
>           self.dmesg_logger = self.__setup_dmesg_logger()
>   
>       def __str__(self) -> str:
> -        return f'VM{self.vmnum}-VF:{self.passed_vf_bdfs[0] if self.passed_vf_bdfs else 'N/A'}'
> +        vf_bdf = self.passed_vf_bdfs[0] if self.passed_vf_bdfs else 'N/A'
> +        return f'VM{self.vmnum}-VF:{vf_bdf}'
>   
>       def __del__(self) -> None:
>           if not self.is_running():
> @@ -250,7 +278,7 @@ class VirtualMachine(MachineInterface):
>   
>           # Look for a directory name with a PCI BDF (e.g. 0000:1a:00.0)
>           for bdf in dev_dir_ls:
> -            match = re.match(r'\d{4}(?::[0-9a-z-A-Z]{2}){2}.[0-7]', bdf)
> +            match = re.fullmatch(r'[0-9a-fA-F]{4}(?::[0-9a-fA-F]{2}){2}\.[0-7]', bdf)
>               if match:
>                   device = VirtualDevice(bdf, self)
>                   detected_devices.append(device)
> @@ -328,7 +356,7 @@ class VirtualMachine(MachineInterface):
>           return False
>   
>       @Decorators.timeout_signal
> -    def poweroff(self) -> None:
> +    def poweroff(self, timeout: int = 60) -> None:
>           """Power off VM via the Guest-Agent guest-shutdown(powerdown) command."""
>           logger.debug('Powering off VM%s', self.vmnum)
>           assert self.process
> @@ -343,7 +371,7 @@ class VirtualMachine(MachineInterface):
>               while event != 'SHUTDOWN':
>                   event = self.qm.get_qmp_event()
>           except exceptions.AlarmTimeoutError:
> -            logger.warning('VM%s hanged on poweroff. Initiating forced termination', self.vmnum)
> +            logger.warning('VM%s has not responded to power off request - force termination', self.vmnum)
>               self.process.terminate()
>           finally:
>               # Wait and make sure that qemu shutdown

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

* Re: [PATCH i-g-t 5/7] tools/vmtb: Add pre-test environment cleanup
  2026-09-28  7:25 ` [PATCH i-g-t 5/7] tools/vmtb: Add pre-test environment cleanup Adam Miszczak
@ 2026-10-08 13:55   ` Bernatowicz, Marcin
  0 siblings, 0 replies; 19+ messages in thread
From: Bernatowicz, Marcin @ 2026-10-08 13:55 UTC (permalink / raw)
  To: Adam Miszczak, igt-dev; +Cc: kamil.konieczny

LGTM,

Reviewed-by: Marcin Bernatowicz <marcin.bernatowicz@linux.intel.com>

On 9/28/2026 9:25 AM, Adam Miszczak wrote:
> Introduce 'EnvironmentCleaner' to ensure a clean DUT state before each
> test by removing leftovers from crashed, failed, or timed-out runs.
> The cleaner handles:
> - terminating orphaned QEMU processes (SIGTERM, then SIGKILL if needed)
> - removing stale QEMU sockets (Guest Agent, QMP monitor)
> - optionally removing leftover qcow2 guest images (disabled by default)
> Wire EnvironmentCleaner().cleanup() into the VM setup fixtures in
> vmm_flows/conftest.py so cleanup runs before every test setup phase.
>
> Consolidate multi-step SR-IOV configuration teardown into a single
> reset_sriov_config() function that removes VFs and restores
> auto provisioning via debugfs.
> Call reset_sriov_config() at test setup when leftover VFs are
> detected, guarding against dirty state from crashed runs.
>
> Drop the explicit provisioning attributes clearing
> (clear_provisioning_attributes/reset_provisioning) and the unused
> cancel_work() teardown step — restore_auto_provisioning is sufficient.
> Remove implicit VF removal from create_vf() (handled by the setup check).
>
> Signed-off-by: Adam Miszczak <adam.miszczak@linux.intel.com>
> ---
>   tools/vmtb/bench/drivers/driver_interface.py |  1 +
>   tools/vmtb/bench/drivers/xe.py               |  1 +
>   tools/vmtb/bench/helpers/cleanup.py          | 91 ++++++++++++++++++++
>   tools/vmtb/bench/machines/physical/device.py | 39 ++-------
>   tools/vmtb/vmm_flows/conftest.py             | 34 ++++++--
>   5 files changed, 126 insertions(+), 40 deletions(-)
>   create mode 100644 tools/vmtb/bench/helpers/cleanup.py
>
> diff --git a/tools/vmtb/bench/drivers/driver_interface.py b/tools/vmtb/bench/drivers/driver_interface.py
> index 9d1e5ab00..498afa9af 100644
> --- a/tools/vmtb/bench/drivers/driver_interface.py
> +++ b/tools/vmtb/bench/drivers/driver_interface.py
> @@ -146,6 +146,7 @@ class PfDriverInterface(DriverInterface, abc.ABC):
>       def restore_auto_provisioning(self) -> None:
>           raise NotImplementedError
>   
> +    # Deprecated - not used on xe
>       @abc.abstractmethod
>       def cancel_work(self) -> None:
>           raise NotImplementedError
> diff --git a/tools/vmtb/bench/drivers/xe.py b/tools/vmtb/bench/drivers/xe.py
> index 479c1dd87..45182aad5 100644
> --- a/tools/vmtb/bench/drivers/xe.py
> +++ b/tools/vmtb/bench/drivers/xe.py
> @@ -62,6 +62,7 @@ class XeDriver(PfDriverInterface):
>           path = self.debugfs_path / 'sriov' / 'restore_auto_provisioning'
>           self.write_debugfs(str(path), str(1))
>   
> +    # Deprecated - not used on xe
>       def cancel_work(self) -> None:
>           # Function to cancel all remaing work on GPU (for test cleanup).
>           # Forcing reset (debugfs/gtM/force_reset_sync) shouldn't be used to idle GPU.
> diff --git a/tools/vmtb/bench/helpers/cleanup.py b/tools/vmtb/bench/helpers/cleanup.py
> new file mode 100644
> index 000000000..f1d3e3f76
> --- /dev/null
> +++ b/tools/vmtb/bench/helpers/cleanup.py
> @@ -0,0 +1,91 @@
> +# SPDX-License-Identifier: MIT
> +# Copyright © 2026 Intel Corporation
> +
> +import logging
> +import subprocess
> +import time
> +from pathlib import Path
> +
> +logger = logging.getLogger('Cleanup')
> +
> +
> +class EnvironmentCleaner:
> +    """Pre-test environment cleanup utilities.
> +
> +    Ensures that leftovers from crashed, failed, or timed-out tests
> +    are removed before the next test setup phase begins.
> +    """
> +
> +    QEMU_PROCESS_NAME = 'qemu-system-x86_64'
> +    SOCKET_PATTERNS = ['qga*.sock', 'mon*.sock']
> +    QEMU_IMAGE_PATTERN = 'vm*_*_image.qcow2'
> +
> +    def __init__(self, work_dir: str = '.', remove_qemu_images: bool = False) -> None:
> +        self.work_dir = Path(work_dir)
> +        self.remove_qemu_images = remove_qemu_images
> +
> +    def cleanup(self) -> None:
> +        """Perform full pre-test environment cleanup.
> +        Handles:
> +        - Terminating orphaned QEMU processes
> +        - Removing stale QEMU sockets (Guest Agent, QMP monitor)
> +        - Removing leftover QEMU qcow2 images (optionally)
> +        """
> +        logger.debug("Pre-test environment cleanup")
> +        self.terminate_orphaned_qemu_processes()
> +        self.remove_stale_sockets()
> +        if self.remove_qemu_images:
> +            self.remove_leftover_qemu_images()
> +
> +    def terminate_orphaned_qemu_processes(self) -> None:
> +        """Find and terminate any leftover QEMU processes from previous test runs.
> +           Try SIGTERM first, then SIGKILL if necessary."""
> +        for signal in ('TERM', 'KILL'):
> +            pids = self._find_qemu_pids()
> +            if not pids:
> +                return
> +            for pid_str in pids:
> +                logger.debug("Terminating (SIG%s) orphaned QEMU process (PID: %s)", signal, pid_str)
> +                try:
> +                    subprocess.run(['kill', f'-{signal}', pid_str], check=False)
> +                except Exception as exc:
> +                    logger.warning("Failed to %s QEMU PID %s: %s", signal, pid_str, exc)
> +            time.sleep(1)  # Give the processes a moment to terminate
> +
> +    def _find_qemu_pids(self) -> list[str] | None:
> +        """Return list of QEMU PIDs, or None if none found or pgrep unavailable."""
> +        try:
> +            result = subprocess.run(
> +                ['pgrep', '-f', self.QEMU_PROCESS_NAME],
> +                capture_output=True, text=True, check=False)
> +        except FileNotFoundError:
> +            logger.warning("pgrep not available, skipping orphan QEMU check")
> +            return None
> +
> +        if result.returncode != 0:
> +            return None
> +
> +        return [pid for pid in result.stdout.strip().split('\n') if pid] or None
> +
> +    def remove_stale_sockets(self) -> None:
> +        """Remove leftover QEMU Guest Agent and QMP monitor sockets."""
> +        for pattern in self.SOCKET_PATTERNS:
> +            for sock_path in Path('/tmp').glob(pattern):
> +                try:
> +                    if not sock_path.is_socket():
> +                        continue
> +                    logger.debug("Removing stale VMTB/QEMU socket: %s", sock_path)
> +                    sock_path.unlink()
> +                except OSError as exc:
> +                    logger.warning("Failed to remove stale socket %s: %s", sock_path, exc)
> +
> +    def remove_leftover_qemu_images(self) -> None:
> +        """Remove leftover QEMU qcow2 images from previous test runs."""
> +        for image_path in self.work_dir.glob(self.QEMU_IMAGE_PATTERN):
> +            try:
> +                if not image_path.is_file():
> +                    continue
> +                logger.debug("Removing leftover VMTB/QEMU guest image: %s", image_path)
> +                image_path.unlink()
> +            except OSError as exc:
> +                logger.warning("Failed to remove leftover image %s: %s", image_path, exc)
> diff --git a/tools/vmtb/bench/machines/physical/device.py b/tools/vmtb/bench/machines/physical/device.py
> index b4eebc245..7cbbee277 100644
> --- a/tools/vmtb/bench/machines/physical/device.py
> +++ b/tools/vmtb/bench/machines/physical/device.py
> @@ -91,9 +91,6 @@ class Device(DeviceInterface):
>           Disable SRIOV drivers autoprobe to allow VFIO driver override for VFs.
>           """
>           logger.info("[%s] Enable %s VFs", self.pci_info.bdf, num)
> -        if self.get_current_vfs() != 0:
> -            self.remove_vfs()
> -
>           self.numvf = num
>   
>           # Disable driver autoprobe to avoid driver load on VF (override to vfio is required)
> @@ -233,36 +230,6 @@ class Device(DeviceInterface):
>               self.driver.set_contexts_quota(fn_num, gt_num, resources_config.vfContexts)
>               self.driver.set_doorbells_quota(fn_num, gt_num, resources_config.vfDoorbells)
>   
> -    def clear_provisioning_attributes(self, num_vfs: int) -> None:
> -        """Clear provisioning attributes for a requested number of VFs."""
> -        # Provisioning config are likely wiped out by (xe) debugfs/restore_auto_provisioning,
> -        # but explicit clear shouldn't harm.
> -        self.driver.set_bulk_sched_priority(SchedulingPriority.LOW)
> -        self.driver.set_bulk_exec_quantum_ms(0)
> -        self.driver.set_bulk_preempt_timeout_us(0)
> -
> -        for gt_num in range(self.get_num_gts()):
> -            self.driver.set_pf_policy_reset_engine(gt_num, 0)
> -            self.driver.set_doorbells_quota(0, gt_num, 0)
> -            # PF contexts cannot be set from sysfs
> -
> -            for vf_num in range(1, num_vfs + 1):
> -                self.driver.set_contexts_quota(vf_num, gt_num, 0)
> -                self.driver.set_doorbells_quota(vf_num, gt_num, 0)
> -                if not self.is_gt_media_type(gt_num):
> -                    self.driver.set_vram_quota(vf_num, 0)
> -                    self.driver.set_ggtt_quota(vf_num, gt_num, 0)
> -
> -    def reset_provisioning(self, num_vfs: int) -> None:
> -        """Clear provisioning config for a given number of VFs and restore auto provisioning mode."""
> -        logger.info("[%s] Reset %sxVF provisioning configuration", self.pci_info.bdf, num_vfs)
> -        self.clear_provisioning_attributes(num_vfs)
> -        self.driver.restore_auto_provisioning()
> -
> -    def cancel_work(self) -> None:
> -        """Drop and reset remaining GPU execution at exit."""
> -        self.driver.cancel_work()
> -
>       def get_scheduling_priority(self, fn_num: int) -> SchedulingPriority:
>           """Get scheduling priority for a given VF or PF."""
>           return self.driver.get_sched_priority(fn_num)
> @@ -274,3 +241,9 @@ class Device(DeviceInterface):
>       def set_pf_scheduling_priority(self, val: SchedulingPriority) -> None:
>           """Set scheduling priority for PF only. High prioritizes PF execution over VFs."""
>           self.driver.set_pf_sched_priority(val)
> +
> +    def reset_sriov_config(self) -> None:
> +        """Clear setup - remove enabled VFs and restore auto provisioning mode."""
> +        logger.info("[%s] Reset VFs configuration", self.pci_info.bdf)
> +        self.remove_vfs()
> +        self.driver.restore_auto_provisioning()
> diff --git a/tools/vmtb/vmm_flows/conftest.py b/tools/vmtb/vmm_flows/conftest.py
> index ba6487c84..df395794c 100644
> --- a/tools/vmtb/vmm_flows/conftest.py
> +++ b/tools/vmtb/vmm_flows/conftest.py
> @@ -16,6 +16,7 @@ from bench.configurators.vgpu_profile_config import (VfProvisioningMode,
>                                                        VfSchedulingMode,
>                                                        VgpuProfileConfigurator)
>   from bench.configurators.vmtb_config import VmtbConfigurator
> +from bench.helpers.cleanup import EnvironmentCleaner
>   from bench.helpers.log import HOST_DMESG_FILE
>   from bench.machines.host import Device, Host
>   from bench.machines.virtual.vm import VirtualMachine
> @@ -203,10 +204,7 @@ class VmmTestingSetup:
>           except Exception as exc:
>               logger.error("Error on test teardown (%s)", exc)
>           finally:
> -            num_vfs = self.get_dut().get_current_vfs()
> -            self.get_dut().remove_vfs()
> -            self.get_dut().reset_provisioning(num_vfs)
> -            self.get_dut().cancel_work()
> +            self.get_dut().reset_sriov_config()
>   
>               if self.testing_config.unload_host_drivers_on_teardown:
>                   self.host.unload_drivers()
> @@ -256,6 +254,9 @@ def fixture_setup_vms(get_vmtb_config, get_cmdline_config, get_host, request):
>       tc: VmmTestingConfig = request.param
>       logger.debug(repr(tc))
>   
> +    # Pre-test cleanup: remove leftovers from crashed/failed/timed-out tests
> +    EnvironmentCleaner().cleanup()
> +
>       host: Host = get_host
>       ts: VmmTestingSetup = VmmTestingSetup(get_vmtb_config, get_cmdline_config, host, tc)
>   
> @@ -263,6 +264,10 @@ def fixture_setup_vms(get_vmtb_config, get_cmdline_config, get_host, request):
>       num_vfs = ts.testing_config.num_vfs
>       num_vms = ts.get_num_vms()
>   
> +    if device.get_current_vfs() != 0:
> +        logger.debug("Test environment is not clean - remove VFs remains")
> +        device.reset_sriov_config()
> +
>       logger.info('[Test setup: %sVF-%sVM]', num_vfs, num_vms)
>   
>       if ts.testing_config.provisioning_mode is VfProvisioningMode.VGPU_PROFILE:
> @@ -283,9 +288,6 @@ def fixture_setup_vms(get_vmtb_config, get_cmdline_config, get_host, request):
>           if tc.wa_reduce_vf_lmem and device.has_lmem():
>               ts.vgpu_profile.resources.vfLmem = org_vgpu_profile_vfLmem
>   
> -    else:
> -        device.driver.restore_auto_provisioning()
> -
>       assert num_vfs <= ts.total_vfs, f'Requested number of VFs ({num_vfs}) exceeds total VFs ({ts.total_vfs})'
>       device.create_vf(num_vfs)
>   
> @@ -320,9 +322,18 @@ def fixture_setup_vms(get_vmtb_config, get_cmdline_config, get_host, request):
>   @pytest.fixture(scope='function')
>   def create_1host_1vm(get_vmtb_config, get_cmdline_config, get_host):
>       num_vfs, num_vms = 1, 1
> +
> +    # Pre-test cleanup: remove leftovers from crashed/failed/timed-out tests
> +    EnvironmentCleaner().cleanup()
> +
>       ts: VmmTestingSetup = VmmTestingSetup(get_vmtb_config, get_cmdline_config, get_host,
>                                             VmmTestingConfig(num_vfs, num_vms))
>   
> +    device: Device = ts.get_dut()
> +    if device.get_current_vfs() != 0:
> +        logger.debug("Test environment is not clean - remove VFs remains")
> +        device.reset_sriov_config()
> +
>       logger.info('[Test setup: %sVF-%sVM]', num_vfs, num_vms)
>       logger.debug(repr(ts.testing_config))
>   
> @@ -336,9 +347,18 @@ def create_1host_1vm(get_vmtb_config, get_cmdline_config, get_host):
>   @pytest.fixture(scope='function')
>   def create_1host_2vm(get_vmtb_config, get_cmdline_config, get_host):
>       num_vfs, num_vms = 2, 2
> +
> +    # Pre-test cleanup: remove leftovers from crashed/failed/timed-out tests
> +    EnvironmentCleaner().cleanup()
> +
>       ts: VmmTestingSetup = VmmTestingSetup(get_vmtb_config, get_cmdline_config, get_host,
>                                             VmmTestingConfig(num_vfs, num_vms))
>   
> +    device: Device = ts.get_dut()
> +    if device.get_current_vfs() != 0:
> +        logger.debug("Test environment is not clean - remove VFs remains")
> +        device.reset_sriov_config()
> +
>       logger.info('[Test setup: %sVF-%sVM]', num_vfs, num_vms)
>       logger.debug(repr(ts.testing_config))
>   

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

* Re: [PATCH i-g-t 6/7] tools/vmtb: Add VM dmesg wait support
  2026-09-28  7:25 ` [PATCH i-g-t 6/7] tools/vmtb: Add VM dmesg wait support Adam Miszczak
@ 2026-10-08 13:56   ` Bernatowicz, Marcin
  0 siblings, 0 replies; 19+ messages in thread
From: Bernatowicz, Marcin @ 2026-10-08 13:56 UTC (permalink / raw)
  To: Adam Miszczak, igt-dev; +Cc: kamil.konieczny

LGTM,

Reviewed-by: Marcin Bernatowicz <marcin.bernatowicz@linux.intel.com>

On 9/28/2026 9:25 AM, Adam Miszczak wrote:
> Introduce VirtualMachine.wait_for_dmesg() to block until a line matching
> a given regex pattern appears on the guest serial console, returning the
> matched line or raising an exception on timeout.
>
> QEMU output (including guest dmesg) is buffered in a thread-safe buffer
> guarded by a condition variable, notifying waiters as new lines arrive.
> ANSI escape (color) codes are stripped from dmesg before logging.
>
> New function provides 'from_beginning' parameter:
> default (from_beginning=True) scans the whole dmesg collected since
> power on, while from_beginning=False resumes right after the previously
> matched line (uses cursor shared for all patterns).
>
> Signed-off-by: Adam Miszczak <adam.miszczak@linux.intel.com>
> ---
>   tools/vmtb/bench/machines/virtual/vm.py | 48 ++++++++++++++++++++++++-
>   1 file changed, 47 insertions(+), 1 deletion(-)
>
> diff --git a/tools/vmtb/bench/machines/virtual/vm.py b/tools/vmtb/bench/machines/virtual/vm.py
> index e0b6fb150..6b8425d13 100644
> --- a/tools/vmtb/bench/machines/virtual/vm.py
> +++ b/tools/vmtb/bench/machines/virtual/vm.py
> @@ -26,6 +26,10 @@ from bench.machines.virtual.device import VirtualDevice
>   
>   logger = logging.getLogger('VirtualMachine')
>   
> +# Matches ANSI escape sequences (e.g. color codes like \x1b[0;32m) emitted on the
> +# guest serial console, so they can be stripped before logging dmesg lines.
> +ANSI_ESCAPE_RE = re.compile(r'\x1b\[[0-9;]*[A-Za-z]')
> +
>   
>   class VirtualMachine(MachineInterface):
>       class Decorators():
> @@ -113,6 +117,13 @@ class VirtualMachine(MachineInterface):
>           self.migrate_destination_vm: bool = False
>           self._migration_ongoing: bool = False
>   
> +        # Buffer of guest serial console (dmesg) lines captured since power on,
> +        # guarded by a condition variable to allow waiting for specific messages.
> +        self._dmesg_buffer: typing.List[str] = []
> +        self._dmesg_condition = threading.Condition()
> +        # Dmesg wait cursor (shared across patterns): first dmesg line not consumed yet
> +        self._dmesg_scan_idx: int = 0
> +
>           self.dmesg_logger = self.__setup_dmesg_logger()
>   
>       def __str__(self) -> str:
> @@ -180,7 +191,11 @@ class VirtualMachine(MachineInterface):
>   
>       def __log_qemu_output(self, out: typing.TextIO) -> None:
>           for line in iter(out.readline, ''):
> -            self.dmesg_logger.debug(line.strip())
> +            stripped_line = ANSI_ESCAPE_RE.sub('', line).strip()
> +            self.dmesg_logger.debug(stripped_line)
> +            with self._dmesg_condition:
> +                self._dmesg_buffer.append(stripped_line)
> +                self._dmesg_condition.notify_all()
>   
>       def __sockets_exists(self) -> bool:
>           return self.questagent_sockpath.exists() and self.qmp_sockpath.exists()
> @@ -587,6 +602,37 @@ class VirtualMachine(MachineInterface):
>   
>           return True
>   
> +    @Decorators.timeout_signal
> +    def wait_for_dmesg(self, pattern: str, from_beginning: bool = True, timeout: int = 300) -> str:
> +        """Wait until a line matching the given regex pattern appears in the guest dmesg.
> +
> +        Scans the guest serial console output and blocks until a matching line is observed.
> +        By default the whole dmesg collected since VM power on is scanned.
> +        Clear 'from_beginning' to start right after the line matched by a previous
> +        wait_for_dmesg() call, to match consecutive occurrences of a repeating message.
> +        Returns the matched dmesg line (e.g. for further parsing) or raises AlarmTimeoutError
> +        if the pattern does not appear within the given timeout (in seconds).
> +        """
> +        regex = re.compile(pattern)
> +        logger.debug("[VM%s] Waiting for dmesg pattern: '%s'%s", self.vmnum, pattern,
> +                     '' if from_beginning else ' (since last match)')
> +
> +        with self._dmesg_condition:
> +            scan_idx = 0 if from_beginning else self._dmesg_scan_idx
> +            while True:
> +                while scan_idx < len(self._dmesg_buffer):
> +                    line = self._dmesg_buffer[scan_idx]
> +                    scan_idx += 1
> +                    if regex.search(line):
> +                        # Do not rewind the cursor
> +                        self._dmesg_scan_idx = max(self._dmesg_scan_idx, scan_idx)
> +                        logger.debug("[VM%s] Matched dmesg pattern: '%s'", self.vmnum, pattern)
> +                        return line
> +
> +                # Poll with a short timeout so the SIGALRM raised by
> +                # Decorators.timeout_signal can interrupt the wait and propagate.
> +                self._dmesg_condition.wait(timeout=1)
> +
>       def save_state_init(self) -> None:
>           """Initiate VM snapshot-save operation (asynchronous)."""
>           logger.debug("Starting VM%s state save (snapshot)", self.vmnum)

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

end of thread, other threads:[~2026-10-08 13:59 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-28  7:25 [PATCH i-g-t 0/7] tools/vmtb: Sync VM Test Bench core with current xe SR-IOV Adam Miszczak
2026-09-28  7:25 ` [PATCH i-g-t 1/7] tools/vmtb: Introduce asynchronous VM state save/load functions Adam Miszczak
2026-10-08 13:53   ` Bernatowicz, Marcin
2026-09-28  7:25 ` [PATCH i-g-t 2/7] tools/vmtb: Rework VF scheduler provisioning Adam Miszczak
2026-10-08 13:54   ` Bernatowicz, Marcin
2026-09-28  7:25 ` [PATCH i-g-t 3/7] tools/vmtb: Align driver/device layer with current xe SR-IOV interfaces Adam Miszczak
2026-10-08 13:54   ` Bernatowicz, Marcin
2026-09-28  7:25 ` [PATCH i-g-t 4/7] tools/vmtb: Fix guest timeout handling and PCI BDF matching Adam Miszczak
2026-10-08 13:55   ` Bernatowicz, Marcin
2026-09-28  7:25 ` [PATCH i-g-t 5/7] tools/vmtb: Add pre-test environment cleanup Adam Miszczak
2026-10-08 13:55   ` Bernatowicz, Marcin
2026-09-28  7:25 ` [PATCH i-g-t 6/7] tools/vmtb: Add VM dmesg wait support Adam Miszczak
2026-10-08 13:56   ` Bernatowicz, Marcin
2026-09-28  7:26 ` [PATCH i-g-t 7/7] tools/vmtb: Extend IGT and WSIM executors Adam Miszczak
2026-10-08 12:59   ` Bernatowicz, Marcin
2026-09-28 20:28 ` ✓ i915.CI.BAT: success for tools/vmtb: Sync VM Test Bench core with current xe SR-IOV Patchwork
2026-09-28 20:47 ` ✓ Xe.CI.BAT: " Patchwork
2026-09-29  2:19 ` ✗ Xe.CI.FULL: failure " Patchwork
2026-09-29  4:08 ` ✗ i915.CI.Full: " Patchwork

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox