* [PATCH RFC i-g-t] lib/igt_kmemleak: library to interact with kmemleak
@ 2024-12-16 18:46 Peter Senna Tschudin
2024-12-16 22:59 ` ✗ GitLab.Pipeline: warning for " Patchwork
` (4 more replies)
0 siblings, 5 replies; 9+ messages in thread
From: Peter Senna Tschudin @ 2024-12-16 18:46 UTC (permalink / raw)
To: igt-dev
Cc: Peter Senna Tschudin, ramadevi.gandi, ryszard.knop,
sameer.lattannavar, lucas.demarchi, jani.saarinen,
katarzyna.piecielska, matthew.d.roper, gregory.f.germano,
clinton.a.taylor, balasubramani.vivekanandan, jianshui.yu,
Peter Senna Tschudin
From: Peter Senna Tschudin <peter.senna@intel.com>
Adds a simple library for interacting with kmemleak ispired by
'tests/amdgpu/amd_mem_leak.c'. Also adds unit testing for the
library.
To use the library include "igt_kmemleak.h" and:
1. igt_kmemleak_init(NULL) /* Returns true if kmemleak is active */
2. igt_kmemleak_clear()
3. /* Run your test */
4. igt_kmemleak_scan()
5. if (igt_kmemleak_found_leaks())
igt_kmemleak_cp_leaks_file(*dst)
CC: ramadevi.gandi@intel.com
CC: ryszard.knop@intel.com
CC: sameer.lattannavar@intel.com
CC: lucas.demarchi@intel.com
CC: jani.saarinen@intel.com
CC: katarzyna.piecielska@intel.com
CC: matthew.d.roper@intel.com
CC: gregory.f.germano@intel.com
CC: clinton.a.taylor@intel.com
CC: balasubramani.vivekanandan@intel.com
CC: jianshui.yu@intel.com
Signed-off-by: Peter Senna Tschudin <peter.senna@linux.intel.com>
---
lib/igt_kmemleak.c | 154 +++++++++++++++++++++
lib/igt_kmemleak.h | 69 ++++++++++
lib/meson.build | 1 +
lib/tests/igt_kmemleak.c | 291 +++++++++++++++++++++++++++++++++++++++
lib/tests/meson.build | 1 +
5 files changed, 516 insertions(+)
create mode 100644 lib/igt_kmemleak.c
create mode 100644 lib/igt_kmemleak.h
create mode 100644 lib/tests/igt_kmemleak.c
diff --git a/lib/igt_kmemleak.c b/lib/igt_kmemleak.c
new file mode 100644
index 000000000..02ee0361d
--- /dev/null
+++ b/lib/igt_kmemleak.c
@@ -0,0 +1,154 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2024 Intel Corporation
+ */
+
+#include <ctype.h>
+#include <libudev.h>
+#include <stdio.h>
+#include <sys/time.h>
+#include <time.h>
+
+#include "igt_core.h"
+#include "igt_device_scan.h"
+#include "igt_kmemleak.h"
+#include "igt_kmod.h"
+#include "igt_list.h"
+
+/* We can change the path for unit testing, see igt_kmemleak_init() */
+static char igt_kmemleak_file[256] = "/sys/kernel/debug/kmemleak";
+
+/**
+ * igt_kmemeak_init:
+ * @igt_kmemleak_file: update the path to kmemleak file to enable unit testing
+ *
+ * Check if kmemleak is enabled in the kernel, if debugfs is mounted and
+ * if kmemleak file is present and readable.
+ *
+ * Returns: true if kmemleak is enabled, false otherwise.
+ */
+bool igt_kmemleak_init(const char *unit_test_kmemleak_file)
+{
+ FILE *fp;
+
+ if (unit_test_kmemleak_file)
+ snprintf(igt_kmemleak_file,
+ sizeof(igt_kmemleak_file),
+ "%s",
+ unit_test_kmemleak_file);
+
+ fp = fopen(igt_kmemleak_file, "r");
+ if (!fp)
+ return false;
+
+ fclose(fp);
+ return true;
+}
+
+/**
+ * igt_kmemeak_cmd:
+ * @cmd: command to send to kmemleak
+ *
+ * Send a command to kmemleak.
+ *
+ * Returns: true if sending the command was successful, false otherwise.
+ */
+bool igt_kmemleak_cmd(const char *cmd)
+{
+ FILE *fp;
+
+ fp = fopen(igt_kmemleak_file, "r+");
+ if (!fp)
+ return false;
+
+ if (fwrite(cmd, 1, strlen(cmd), fp) != strlen(cmd)) {
+ fclose(fp);
+ return false;
+ }
+
+ fclose(fp);
+ return true;
+}
+
+/**
+ * igt_kmemeak_scan:
+ *
+ * Trigger an immediate scan on kmemleak.
+ *
+ * Returns: true if sending the command to scan was successful, false otherwise.
+ */
+bool igt_kmemleak_scan(void)
+{
+ return igt_kmemleak_cmd("scan");
+}
+
+/**
+ * igt_kmemeak_clear:
+ *
+ * Trigger an immediate clear on kmemleak.
+ *
+ * Returns: true if sending the command to clear was successful, false
+ * otherwise.
+ */
+bool igt_kmemleak_clear(void)
+{
+ return igt_kmemleak_cmd("clear");
+}
+
+/**
+ * igt_kmemeak_found_leaks:
+ *
+ * Check if kmemleak found any leaks.
+ *
+ * Returns: true if kmemleak found any leaks, false otherwise.
+ */
+bool igt_kmemleak_found_leaks(void)
+{
+ FILE *fp;
+ char buf[1];
+
+ fp = fopen(igt_kmemleak_file, "r");
+ if (!fp)
+ return false;
+
+ if (fread(buf, 1, 1, fp) <= 0) {
+ fclose(fp);
+ return false;
+ }
+
+ /* fread() did read 1 char */
+ fclose(fp);
+ return true;
+}
+
+/**
+ * igt_kmemeak_cp_leaks_file:
+ * @dst: path of destination file including the file name
+ *
+ * Copy kmemleak file to dst.
+ *
+ * Returns: true if copy was successful, false otherwise
+ */
+bool igt_kmemleak_cp_leaks_file(const char *dst)
+{
+ FILE *src, *dest;
+ char buf[1024];
+ size_t n;
+
+ src = fopen(igt_kmemleak_file, "r");
+ if (!src)
+ return false;
+
+ dest = fopen(dst, "w");
+ if (!dest) {
+ fclose(src);
+ return false;
+ }
+
+ while ((n = fread(buf, 1, sizeof(buf), src)) > 0)
+ fwrite(buf, 1, n, dest);
+
+ fclose(src);
+ fclose(dest);
+ return true;
+}
diff --git a/lib/igt_kmemleak.h b/lib/igt_kmemleak.h
new file mode 100644
index 000000000..a65f31810
--- /dev/null
+++ b/lib/igt_kmemleak.h
@@ -0,0 +1,69 @@
+/* SPDX-License-Identifier: MIT
+ * Copyright © 2024 Intel Corporation
+ */
+
+#ifndef IGT_KMEMLEAK_H
+#define IGT_KMEMLEAK_H
+
+#include <stdbool.h>
+
+/**
+ * igt_kmemeak_init:
+ * @igt_kmemleak_file: update the path to kmemleak file to enable unit testing
+ *
+ * Check if kmemleak is enabled in the kernel, if debugfs is mounted and
+ * if kmemleak file is present and readable.
+ *
+ * Returns: true if kmemleak is enabled, false otherwise.
+ */
+bool igt_kmemleak_init(const char *unit_test_kmemleak_file);
+
+/**
+ * igt_kmemeak_cmd:
+ * @cmd: command to send to kmemleak
+ *
+ * Send a command to kmemleak.
+ *
+ * Returns: true if sending the command was successful, false otherwise.
+ */
+bool igt_kmemleak_cmd(const char *cmd);
+
+/**
+ * igt_kmemeak_scan:
+ *
+ * Trigger an immediate scan on kmemleak.
+ *
+ * Returns: true if sending the command to scan was successful, false otherwise.
+ */
+bool igt_kmemleak_scan(void);
+
+/**
+ * igt_kmemeak_clear:
+ *
+ * Trigger an immediate clear on kmemleak.
+ *
+ * Returns: true if sending the command to clear was successful, false
+ * otherwise.
+ */
+bool igt_kmemleak_clear(void);
+
+/**
+ * igt_kmemeak_found_leaks:
+ *
+ * Check if kmemleak found any leaks.
+ *
+ * Returns: true if kmemleak found any leaks, false otherwise.
+ */
+bool igt_kmemleak_found_leaks(void);
+
+/**
+ * igt_kmemeak_cp_leaks_file:
+ * @dst: path of destination file including the file name
+ *
+ * Copy kmemleak file to dst.
+ *
+ * Returns: true if copy was successful, false otherwise
+ */
+bool igt_kmemleak_cp_leaks_file(const char *dst);
+
+#endif /* IGT_KMEMLEAK_H */
diff --git a/lib/meson.build b/lib/meson.build
index 640513e6c..24423ef37 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -96,6 +96,7 @@ lib_sources = [
'igt_dummyload.c',
'igt_store.c',
'uwildmat/uwildmat.c',
+ 'igt_kmemleak.c',
'igt_kmod.c',
'igt_ktap.c',
'igt_panfrost.c',
diff --git a/lib/tests/igt_kmemleak.c b/lib/tests/igt_kmemleak.c
new file mode 100644
index 000000000..f5bf5ca07
--- /dev/null
+++ b/lib/tests/igt_kmemleak.c
@@ -0,0 +1,291 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2024 Intel Corporation
+ */
+
+#include <ctype.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <zlib.h>
+
+#include "igt_core.h"
+#include "igt_kmemleak.h"
+
+const char *kmemleak_file_example =
+"unreferenced object 0xffff888102a2e638 (size 80):\n"
+" comm \"swapper/0\", pid 1, jiffies 4294672730\n"
+" hex dump (first 32 bytes):\n"
+" 00 00 00 00 00 00 00 00 0d 01 a2 00 00 00 00 00 ................\n"
+" f0 7c 03 00 00 c9 ff ff 00 00 00 00 00 00 00 00 .|..............\n"
+" backtrace (crc 2df71a7e):\n"
+" [<ffffffff824cd71b>] kmemleak_alloc+0x4b/0x80\n"
+" [<ffffffff814e169b>] kmem_cache_alloc_noprof+0x2ab/0x370\n"
+" [<ffffffff81c2f4dc>] acpi_ps_alloc_op+0xdc/0xf0\n"
+" [<ffffffff81c2d650>] acpi_ps_create_op+0x1c0/0x400\n"
+" [<ffffffff81c2c8dc>] acpi_ps_parse_loop+0x16c/0xa60\n"
+" [<ffffffff81c2e94f>] acpi_ps_parse_aml+0x22f/0x5f0\n"
+" [<ffffffff81c2fa82>] acpi_ps_execute_method+0x152/0x380\n"
+" [<ffffffff81c233ed>] acpi_ns_evaluate+0x31d/0x5e0\n"
+" [<ffffffff81c2a606>] acpi_evaluate_object+0x206/0x490\n"
+" [<ffffffff81bf1202>] __acpi_power_off.isra.0+0x22/0x70\n"
+" [<ffffffff81bf275b>] acpi_turn_off_unused_power_resources+0xbb/0xf0\n"
+" [<ffffffff83867799>] acpi_scan_init+0x119/0x290\n"
+" [<ffffffff8386711a>] acpi_init+0x23a/0x590\n"
+" [<ffffffff81002c71>] do_one_initcall+0x61/0x3d0\n"
+" [<ffffffff837dce32>] kernel_init_freeable+0x3e2/0x680\n"
+" [<ffffffff824ca53b>] kernel_init+0x1b/0x170"
+"unreferenced object 0xffff888102a2ed18 (size 80):\n"
+" comm \"swapper/0\", pid 1, jiffies 4294672730\n"
+" hex dump (first 32 bytes):\n"
+" 38 e6 a2 02 81 88 ff ff 0d 11 2d 00 00 00 00 00 8.........-.....\n"
+" f2 7c 03 00 00 c9 ff ff 58 ea a2 02 81 88 ff ff .|......X.......\n"
+" backtrace (crc ec2a8bdc):\n"
+" [<ffffffff824cd71b>] kmemleak_alloc+0x4b/0x80\n"
+" [<ffffffff814e169b>] kmem_cache_alloc_noprof+0x2ab/0x370\n"
+" [<ffffffff81c2f4dc>] acpi_ps_alloc_op+0xdc/0xf0\n"
+" [<ffffffff81c2d650>] acpi_ps_create_op+0x1c0/0x400\n"
+" [<ffffffff81c2c8dc>] acpi_ps_parse_loop+0x16c/0xa60\n"
+" [<ffffffff81c2e94f>] acpi_ps_parse_aml+0x22f/0x5f0\n"
+" [<ffffffff81c2fa82>] acpi_ps_execute_method+0x152/0x380\n"
+" [<ffffffff81c233ed>] acpi_ns_evaluate+0x31d/0x5e0\n"
+" [<ffffffff81c2a606>] acpi_evaluate_object+0x206/0x490\n"
+" [<ffffffff81bf1202>] __acpi_power_off.isra.0+0x22/0x70\n"
+" [<ffffffff81bf275b>] acpi_turn_off_unused_power_resources+0xbb/0xf0\n"
+" [<ffffffff83867799>] acpi_scan_init+0x119/0x290\n"
+" [<ffffffff8386711a>] acpi_init+0x23a/0x590\n"
+" [<ffffffff81002c71>] do_one_initcall+0x61/0x3d0\n"
+" [<ffffffff837dce32>] kernel_init_freeable+0x3e2/0x680\n"
+" [<ffffffff824ca53b>] kernel_init+0x1b/0x170"
+"unreferenced object 0xffff888102a2ea58 (size 80):\n"
+" comm \"swapper/0\", pid 1, jiffies 4294672730\n"
+" hex dump (first 32 bytes):\n"
+" 38 e6 a2 02 81 88 ff ff 0d 01 a0 00 00 00 00 00 8...............\n"
+" f6 7c 03 00 00 c9 ff ff 00 00 00 00 00 00 00 00 .|..............\n"
+" backtrace (crc f911c0d1):\n"
+" [<ffffffff824cd71b>] kmemleak_alloc+0x4b/0x80\n"
+" [<ffffffff814e169b>] kmem_cache_alloc_noprof+0x2ab/0x370\n"
+" [<ffffffff81c2f4dc>] acpi_ps_alloc_op+0xdc/0xf0\n"
+" [<ffffffff81c2d650>] acpi_ps_create_op+0x1c0/0x400\n"
+" [<ffffffff81c2c8dc>] acpi_ps_parse_loop+0x16c/0xa60\n"
+" [<ffffffff81c2e94f>] acpi_ps_parse_aml+0x22f/0x5f0\n"
+" [<ffffffff81c2fa82>] acpi_ps_execute_method+0x152/0x380\n"
+" [<ffffffff81c233ed>] acpi_ns_evaluate+0x31d/0x5e0\n"
+" [<ffffffff81c2a606>] acpi_evaluate_object+0x206/0x490\n"
+" [<ffffffff81bf1202>] __acpi_power_off.isra.0+0x22/0x70\n"
+" [<ffffffff81bf275b>] acpi_turn_off_unused_power_resources+0xbb/0xf0\n"
+" [<ffffffff83867799>] acpi_scan_init+0x119/0x290\n"
+" [<ffffffff8386711a>] acpi_init+0x23a/0x590\n"
+" [<ffffffff81002c71>] do_one_initcall+0x61/0x3d0\n"
+" [<ffffffff837dce32>] kernel_init_freeable+0x3e2/0x680\n"
+" [<ffffffff824ca53b>] kernel_init+0x1b/0x170"
+"unreferenced object 0xffff888102a2e428 (size 80):\n"
+" comm \"swapper/0\", pid 1, jiffies 4294672730\n"
+" hex dump (first 32 bytes):\n"
+" 58 ea a2 02 81 88 ff ff 0d 01 35 00 00 00 00 00 X.........5.....\n"
+" fc 7c 03 00 00 c9 ff ff 00 00 00 00 00 00 00 00 .|..............\n"
+" backtrace (crc cb8aaffd):\n"
+" [<ffffffff824cd71b>] kmemleak_alloc+0x4b/0x80\n"
+" [<ffffffff814e169b>] kmem_cache_alloc_noprof+0x2ab/0x370\n"
+" [<ffffffff81c2f4dc>] acpi_ps_alloc_op+0xdc/0xf0\n"
+" [<ffffffff81c2d650>] acpi_ps_create_op+0x1c0/0x400\n"
+" [<ffffffff81c2c8dc>] acpi_ps_parse_loop+0x16c/0xa60\n"
+" [<ffffffff81c2e94f>] acpi_ps_parse_aml+0x22f/0x5f0\n"
+" [<ffffffff81c2fa82>] acpi_ps_execute_method+0x152/0x380\n"
+" [<ffffffff81c233ed>] acpi_ns_evaluate+0x31d/0x5e0\n"
+" [<ffffffff81c2a606>] acpi_evaluate_object+0x206/0x490\n"
+" [<ffffffff81bf1202>] __acpi_power_off.isra.0+0x22/0x70\n"
+" [<ffffffff81bf275b>] acpi_turn_off_unused_power_resources+0xbb/0xf0\n"
+" [<ffffffff83867799>] acpi_scan_init+0x119/0x290\n"
+" [<ffffffff8386711a>] acpi_init+0x23a/0x590\n"
+" [<ffffffff81002c71>] do_one_initcall+0x61/0x3d0\n"
+" [<ffffffff837dce32>] kernel_init_freeable+0x3e2/0x680\n"
+" [<ffffffff824ca53b>] kernel_init+0x1b/0x170"
+"unreferenced object 0xffff888102a2e008 (size 80):\n"
+" comm \"swapper/0\", pid 1, jiffies 4294672730\n"
+" hex dump (first 32 bytes):\n"
+" 28 e4 a2 02 81 88 ff ff 0d 01 2d 00 00 00 00 00 (.........-.....\n"
+" fc 7c 03 00 00 c9 ff ff c8 e2 a2 02 81 88 ff ff .|..............\n"
+" backtrace (crc 7f883e78):\n"
+" [<ffffffff824cd71b>] kmemleak_alloc+0x4b/0x80\n"
+" [<ffffffff814e169b>] kmem_cache_alloc_noprof+0x2ab/0x370\n"
+" [<ffffffff81c2f4dc>] acpi_ps_alloc_op+0xdc/0xf0\n"
+" [<ffffffff81c2b9e5>] acpi_ps_get_next_namepath+0x1f5/0x390\n"
+" [<ffffffff81c2cc15>] acpi_ps_parse_loop+0x4a5/0xa60\n"
+" [<ffffffff81c2e94f>] acpi_ps_parse_aml+0x22f/0x5f0\n"
+" [<ffffffff81c2fa82>] acpi_ps_execute_method+0x152/0x380\n"
+" [<ffffffff81c233ed>] acpi_ns_evaluate+0x31d/0x5e0\n"
+" [<ffffffff81c2a606>] acpi_evaluate_object+0x206/0x490\n"
+" [<ffffffff81bf1202>] __acpi_power_off.isra.0+0x22/0x70\n"
+" [<ffffffff81bf275b>] acpi_turn_off_unused_power_resources+0xbb/0xf0\n"
+" [<ffffffff83867799>] acpi_scan_init+0x119/0x290\n"
+" [<ffffffff8386711a>] acpi_init+0x23a/0x590\n"
+" [<ffffffff81002c71>] do_one_initcall+0x61/0x3d0\n"
+" [<ffffffff837dce32>] kernel_init_freeable+0x3e2/0x680\n"
+" [<ffffffff824ca53b>] kernel_init+0x1b/0x170"
+"unreferenced object 0xffff888102a2e2c8 (size 80):\n"
+" comm \"swapper/0\", pid 1, jiffies 4294672730\n"
+" hex dump (first 32 bytes):\n"
+" 28 e4 a2 02 81 88 ff ff 0d 01 73 00 00 00 00 00 (.........s.....\n"
+" 00 7d 03 00 00 c9 ff ff 00 00 00 00 00 00 00 00 .}..............\n"
+" backtrace (crc 338c016):\n"
+" [<ffffffff824cd71b>] kmemleak_alloc+0x4b/0x80\n"
+" [<ffffffff814e169b>] kmem_cache_alloc_noprof+0x2ab/0x370\n"
+" [<ffffffff81c2f4dc>] acpi_ps_alloc_op+0xdc/0xf0\n"
+" [<ffffffff81c2d650>] acpi_ps_create_op+0x1c0/0x400\n"
+" [<ffffffff81c2c8dc>] acpi_ps_parse_loop+0x16c/0xa60\n"
+" [<ffffffff81c2e94f>] acpi_ps_parse_aml+0x22f/0x5f0\n"
+" [<ffffffff81c2fa82>] acpi_ps_execute_method+0x152/0x380\n"
+" [<ffffffff81c233ed>] acpi_ns_evaluate+0x31d/0x5e0\n"
+" [<ffffffff81c2a606>] acpi_evaluate_object+0x206/0x490\n"
+" [<ffffffff81bf1202>] __acpi_power_off.isra.0+0x22/0x70\n"
+" [<ffffffff81bf275b>] acpi_turn_off_unused_power_resources+0xbb/0xf0\n"
+" [<ffffffff83867799>] acpi_scan_init+0x119/0x290\n"
+" [<ffffffff8386711a>] acpi_init+0x23a/0x590\n"
+" [<ffffffff81002c71>] do_one_initcall+0x61/0x3d0\n"
+" [<ffffffff837dce32>] kernel_init_freeable+0x3e2/0x680\n"
+" [<ffffffff824ca53b>] kernel_init+0x1b/0x170"
+"unreferenced object 0xffff888102a2e378 (size 80):\n"
+" comm \"swapper/0\", pid 1, jiffies 4294672730\n"
+" hex dump (first 32 bytes):\n"
+" c8 e2 a2 02 81 88 ff ff 0d 01 0d 00 00 00 00 00 ................\n"
+" 01 7d 03 00 00 c9 ff ff 98 e7 a2 02 81 88 ff ff .}..............\n"
+" backtrace (crc 665fb8a7):\n"
+" [<ffffffff824cd71b>] kmemleak_alloc+0x4b/0x80\n"
+" [<ffffffff814e169b>] kmem_cache_alloc_noprof+0x2ab/0x370\n"
+" [<ffffffff81c2f4dc>] acpi_ps_alloc_op+0xdc/0xf0\n"
+" [<ffffffff81c2d650>] acpi_ps_create_op+0x1c0/0x400\n"
+" [<ffffffff81c2c8dc>] acpi_ps_parse_loop+0x16c/0xa60\n"
+" [<ffffffff81c2e94f>] acpi_ps_parse_aml+0x22f/0x5f0\n"
+" [<ffffffff81c2fa82>] acpi_ps_execute_method+0x152/0x380\n"
+" [<ffffffff81c233ed>] acpi_ns_evaluate+0x31d/0x5e0\n"
+" [<ffffffff81c2a606>] acpi_evaluate_object+0x206/0x490\n"
+" [<ffffffff81bf1202>] __acpi_power_off.isra.0+0x22/0x70\n"
+" [<ffffffff81bf275b>] acpi_turn_off_unused_power_resources+0xbb/0xf0\n"
+" [<ffffffff83867799>] acpi_scan_init+0x119/0x290\n"
+" [<ffffffff8386711a>] acpi_init+0x23a/0x590\n"
+" [<ffffffff81002c71>] do_one_initcall+0x61/0x3d0\n"
+" [<ffffffff837dce32>] kernel_init_freeable+0x3e2/0x680\n"
+" [<ffffffff824ca53b>] kernel_init+0x1b/0x170"
+"unreferenced object 0xffff888102a2e798 (size 80):\n"
+" comm \"swapper/0\", pid 1, jiffies 4294672730\n"
+" hex dump (first 32 bytes):\n"
+" 7c8 e2 a2 02 81 88 ff ff 0d 01 98 00 00 00 00 00 ................\n"
+" 1b 7d 03 00 00 c9 ff ff 00 00 00 00 00 00 00 00 .}..............\n"
+" backtrace (crc b7a23a1c):\n"
+" [<ffffffff824cd71b>] kmemleak_alloc+0x4b/0x80\n"
+" [<ffffffff814e169b>] kmem_cache_alloc_noprof+0x2ab/0x370\n"
+" [<ffffffff81c2f4dc>] acpi_ps_alloc_op+0xdc/0xf0\n"
+" [<ffffffff81c2d650>] acpi_ps_create_op+0x1c0/0x400\n"
+" [<ffffffff81c2c8dc>] acpi_ps_parse_loop+0x16c/0xa60\n"
+" [<ffffffff81c2e94f>] acpi_ps_parse_aml+0x22f/0x5f0\n"
+" [<ffffffff81c2fa82>] acpi_ps_execute_method+0x152/0x380\n"
+" [<ffffffff81c233ed>] acpi_ns_evaluate+0x31d/0x5e0\n"
+" [<ffffffff81c2a606>] acpi_evaluate_object+0x206/0x490\n"
+" [<ffffffff81bf1202>] __acpi_power_off.isra.0+0x22/0x70\n"
+" [<ffffffff81bf275b>] acpi_turn_off_unused_power_resources+0xbb/0xf0\n"
+" [<ffffffff83867799>] acpi_scan_init+0x119/0x290\n"
+" [<ffffffff8386711a>] acpi_init+0x23a/0x590\n"
+" [<ffffffff81002c71>] do_one_initcall+0x61/0x3d0\n"
+" [<ffffffff837dce32>] kernel_init_freeable+0x3e2/0x680\n"
+" [<ffffffff824ca53b>] kernel_init+0x1b/0x170"
+"unreferenced object 0xffff888102a2e0b8 (size 80):\n"
+" comm \"swapper/0\", pid 1, jiffies 4294672730\n"
+" hex dump (first 32 bytes):\n"
+" 98 e7 a2 02 81 88 ff ff 0d 01 2d 00 00 00 00 00 ..........-.....\n"
+" 1c 7d 03 00 00 c9 ff ff 00 00 00 00 00 00 00 00 .}..............\n"
+" backtrace (crc 14d67a9c):\n"
+" [<ffffffff824cd71b>] kmemleak_alloc+0x4b/0x80\n"
+" [<ffffffff814e169b>] kmem_cache_alloc_noprof+0x2ab/0x370\n"
+" [<ffffffff81c2f4dc>] acpi_ps_alloc_op+0xdc/0xf0\n"
+" [<ffffffff81c2d650>] acpi_ps_create_op+0x1c0/0x400\n"
+" [<ffffffff81c2c8dc>] acpi_ps_parse_loop+0x16c/0xa60\n"
+" [<ffffffff81c2e94f>] acpi_ps_parse_aml+0x22f/0x5f0\n"
+" [<ffffffff81c2fa82>] acpi_ps_execute_method+0x152/0x380\n"
+" [<ffffffff81c233ed>] acpi_ns_evaluate+0x31d/0x5e0\n"
+" [<ffffffff81c2a606>] acpi_evaluate_object+0x206/0x490\n"
+" [<ffffffff81bf1202>] __acpi_power_off.isra.0+0x22/0x70\n"
+" [<ffffffff81bf275b>] acpi_turn_off_unused_power_resources+0xbb/0xf0\n"
+" [<ffffffff83867799>] acpi_scan_init+0x119/0x290\n"
+" [<ffffffff8386711a>] acpi_init+0x23a/0x590\n"
+" [<ffffffff81002c71>] do_one_initcall+0x61/0x3d0\n"
+" [<ffffffff837dce32>] kernel_init_freeable+0x3e2/0x680\n"
+" [<ffffffff824ca53b>] kernel_init+0x1b/0x170\n";
+
+static unsigned long crc32_file(int fd)
+{
+ unsigned long crc;
+ char buf[1024];
+ ssize_t n;
+
+ crc = crc32(0, Z_NULL, 0);
+ while ((n = read(fd, buf, sizeof(buf))) > 0)
+ crc = crc32(crc, (const Bytef *)buf, n);
+
+ return crc;
+}
+
+static void test_igt_kmemleak_cp_leaks_file(void)
+{
+ char dst_file_path[256] = "/tmp/igt_kmemleak_dstfile_XXXXXX";
+ int fd;
+ unsigned long crc;
+
+ fd = mkstemp(dst_file_path);
+ close(fd);
+
+ igt_assert(igt_kmemleak_cp_leaks_file(dst_file_path));
+
+ /* Test that both files have the same size */
+ fd = open(dst_file_path, O_RDONLY);
+ igt_assert(fd >= 0);
+ igt_assert(lseek(fd, 0, SEEK_END) == strlen(kmemleak_file_example));
+ close(fd);
+
+ /* Test that both files have the same content */
+ crc = crc32(0, Z_NULL, 0);
+ crc = crc32(crc,
+ (const Bytef *)kmemleak_file_example,
+ strlen(kmemleak_file_example));
+
+ fd = open(dst_file_path, O_RDONLY);
+ igt_assert(fd >= 0);
+ igt_info(" dst_file: %s\n", dst_file_path);
+ close(fd);
+}
+
+static void test_empty_file(void)
+{
+ char tmp_file_path[256] = "/tmp/igt_kmemleak_test_XXXXXX";
+ int fd;
+
+ fd = mkstemp(tmp_file_path);
+ igt_assert(fd >= 0);
+ close(fd);
+
+ /* Set the path for the unit testing file */
+ igt_assert(igt_kmemleak_init(tmp_file_path));
+ igt_assert(!igt_kmemleak_found_leaks());
+}
+
+static void test_non_empty_file(void)
+{
+ char tmp_file_path[256] = "/tmp/igt_kmemleak_test_XXXXXX";
+ int fd;
+
+ fd = mkstemp(tmp_file_path);
+ igt_assert(fd >= 0);
+ write(fd, kmemleak_file_example, strlen(kmemleak_file_example));
+
+ /* Set the path for the unit testing file */
+ igt_assert(igt_kmemleak_init(tmp_file_path));
+
+ /* Test igt_kmemleak_found_leaks() that should return true */
+ igt_assert(igt_kmemleak_found_leaks());
+}
+
+igt_simple_main
+{
+ test_empty_file();
+ test_non_empty_file();
+ test_igt_kmemleak_cp_leaks_file();
+}
diff --git a/lib/tests/meson.build b/lib/tests/meson.build
index df8092638..bcbea9ba4 100644
--- a/lib/tests/meson.build
+++ b/lib/tests/meson.build
@@ -15,6 +15,7 @@ lib_tests = [
'igt_ktap_parser',
'igt_list_only',
'igt_invalid_subtest_name',
+ 'igt_kmemleak',
'igt_nesting',
'igt_no_exit',
'igt_runnercomms_packets',
--
2.34.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* ✗ GitLab.Pipeline: warning for lib/igt_kmemleak: library to interact with kmemleak
2024-12-16 18:46 [PATCH RFC i-g-t] lib/igt_kmemleak: library to interact with kmemleak Peter Senna Tschudin
@ 2024-12-16 22:59 ` Patchwork
2024-12-16 23:26 ` ✗ i915.CI.BAT: failure " Patchwork
` (3 subsequent siblings)
4 siblings, 0 replies; 9+ messages in thread
From: Patchwork @ 2024-12-16 22:59 UTC (permalink / raw)
To: Peter Senna Tschudin; +Cc: igt-dev
== Series Details ==
Series: lib/igt_kmemleak: library to interact with kmemleak
URL : https://patchwork.freedesktop.org/series/142673/
State : warning
== Summary ==
Pipeline status: FAILED.
see https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/pipelines/1331059 for the overview.
build:tests-debian-meson-armhf has failed (https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/jobs/68287523):
$ /host/bin/curl -s -L --cacert /host/ca-certificates.crt --retry 4 -f --retry-delay 60 https://gitlab.freedesktop.org/freedesktop/helm-gitlab-infra/-/raw/main/runner-gating/runner-gating.sh | sh -s -- pre_get_sources_script
Checking if the user of the pipeline is allowed...
Checking if the job's project is part of a well-known group...
Thank you for contributing to freedesktop.org
Fetching changes...
Reinitialized existing Git repository in /builds/gfx-ci/igt-ci-tags/.git/
Checking out 9f8406e8 as detached HEAD (ref is intel/IGTPW_12327)...
Removing build/
Removing scripts/__pycache__/
Skipping Git submodules setup
section_end:1734389598:get_sources
section_start:1734389598:step_script
Executing "step_script" stage of the job script
Using docker image sha256:4a4103f1a476d355d866b481ff96ac05a32a3a715cefcc1cbc1356a8959fb5f8 for registry.freedesktop.org/gfx-ci/igt-ci-tags/build-debian-armhf:commit-9f8406e86d1d9fdce5fea06e856390c7c968cb48 with digest registry.freedesktop.org/gfx-ci/igt-ci-tags/build-debian-armhf@sha256:3a0ffeb305cdc6ef081dde81d86afee76102e74f76c0f7bd5685fc2457ec707b ...
section_end:1734389601:step_script
section_start:1734389601:cleanup_file_variables
Cleaning up project directory and file based variables
section_end:1734389602:cleanup_file_variables
ERROR: Job failed (system failure): Error response from daemon: no such image: docker.io/library/sha256:4a4103f1a476d355d866b481ff96ac05a32a3a715cefcc1cbc1356a8959fb5f8: image not known (docker.go:650:0s)
== Logs ==
For more details see: https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/pipelines/1331059
^ permalink raw reply [flat|nested] 9+ messages in thread
* ✗ i915.CI.BAT: failure for lib/igt_kmemleak: library to interact with kmemleak
2024-12-16 18:46 [PATCH RFC i-g-t] lib/igt_kmemleak: library to interact with kmemleak Peter Senna Tschudin
2024-12-16 22:59 ` ✗ GitLab.Pipeline: warning for " Patchwork
@ 2024-12-16 23:26 ` Patchwork
2024-12-17 1:29 ` ✓ Xe.CI.BAT: success " Patchwork
` (2 subsequent siblings)
4 siblings, 0 replies; 9+ messages in thread
From: Patchwork @ 2024-12-16 23:26 UTC (permalink / raw)
To: Peter Senna Tschudin; +Cc: igt-dev
== Series Details ==
Series: lib/igt_kmemleak: library to interact with kmemleak
URL : https://patchwork.freedesktop.org/series/142673/
State : failure
== Summary ==
CI Bug Log - changes from IGT_8157 -> IGTPW_12327
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with IGTPW_12327 absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in IGTPW_12327, 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_12327/index.html
Participating hosts (45 -> 44)
------------------------------
Missing (1): fi-snb-2520m
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in IGTPW_12327:
### IGT changes ###
#### Possible regressions ####
* igt@i915_selftest@live:
- bat-mtlp-8: [PASS][1] -> [ABORT][2]
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8157/bat-mtlp-8/igt@i915_selftest@live.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12327/bat-mtlp-8/igt@i915_selftest@live.html
Known issues
------------
Here are the changes found in IGTPW_12327 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@i915_module_load@reload:
- fi-cfl-guc: [PASS][3] -> [DMESG-WARN][4] ([i915#1982])
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8157/fi-cfl-guc/igt@i915_module_load@reload.html
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12327/fi-cfl-guc/igt@i915_module_load@reload.html
* igt@i915_selftest@live:
- bat-arls-5: NOTRUN -> [ABORT][5] ([i915#12061])
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12327/bat-arls-5/igt@i915_selftest@live.html
* igt@i915_selftest@live@workarounds:
- bat-arls-5: [PASS][6] -> [ABORT][7] ([i915#12061])
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8157/bat-arls-5/igt@i915_selftest@live@workarounds.html
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12327/bat-arls-5/igt@i915_selftest@live@workarounds.html
- bat-mtlp-8: [PASS][8] -> [ABORT][9] ([i915#12061])
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8157/bat-mtlp-8/igt@i915_selftest@live@workarounds.html
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12327/bat-mtlp-8/igt@i915_selftest@live@workarounds.html
#### Possible fixes ####
* igt@i915_selftest@live@gt_mocs:
- bat-twl-2: [ABORT][10] ([i915#12919]) -> [PASS][11]
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8157/bat-twl-2/igt@i915_selftest@live@gt_mocs.html
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12327/bat-twl-2/igt@i915_selftest@live@gt_mocs.html
* igt@i915_selftest@live@workarounds:
- bat-mtlp-6: [ABORT][12] ([i915#12061]) -> [PASS][13] +1 other test pass
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8157/bat-mtlp-6/igt@i915_selftest@live@workarounds.html
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12327/bat-mtlp-6/igt@i915_selftest@live@workarounds.html
[i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
[i915#12919]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12919
[i915#1982]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1982
Build changes
-------------
* CI: CI-20190529 -> None
* IGT: IGT_8157 -> IGTPW_12327
* Linux: CI_DRM_15848 -> CI_DRM_15855
CI-20190529: 20190529
CI_DRM_15848: 63be16e210b1c3e43b43d8ca9b7e17f15142d2c3 @ git://anongit.freedesktop.org/gfx-ci/linux
CI_DRM_15855: 8bfb48c045396305771aaea35f06d5ef3bf3a191 @ git://anongit.freedesktop.org/gfx-ci/linux
IGTPW_12327: 9f8406e86d1d9fdce5fea06e856390c7c968cb48 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
IGT_8157: 48a70f6795e6d68b9fae275261ae3b09d3401fe1 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12327/index.html
^ permalink raw reply [flat|nested] 9+ messages in thread
* ✓ Xe.CI.BAT: success for lib/igt_kmemleak: library to interact with kmemleak
2024-12-16 18:46 [PATCH RFC i-g-t] lib/igt_kmemleak: library to interact with kmemleak Peter Senna Tschudin
2024-12-16 22:59 ` ✗ GitLab.Pipeline: warning for " Patchwork
2024-12-16 23:26 ` ✗ i915.CI.BAT: failure " Patchwork
@ 2024-12-17 1:29 ` Patchwork
2024-12-17 7:35 ` ✗ Xe.CI.Full: failure " Patchwork
2025-01-07 20:17 ` [PATCH RFC i-g-t] " Cavitt, Jonathan
4 siblings, 0 replies; 9+ messages in thread
From: Patchwork @ 2024-12-17 1:29 UTC (permalink / raw)
To: Peter Senna Tschudin; +Cc: igt-dev
[-- Attachment #1: Type: text/plain, Size: 2542 bytes --]
== Series Details ==
Series: lib/igt_kmemleak: library to interact with kmemleak
URL : https://patchwork.freedesktop.org/series/142673/
State : success
== Summary ==
CI Bug Log - changes from XEIGT_8157_BAT -> XEIGTPW_12327_BAT
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (9 -> 9)
------------------------------
No changes in participating hosts
Known issues
------------
Here are the changes found in XEIGTPW_12327_BAT that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@core_hotunplug@unbind-rebind:
- bat-adlp-7: [PASS][1] -> [DMESG-WARN][2] ([Intel XE#3517]) +2 other tests dmesg-warn
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/bat-adlp-7/igt@core_hotunplug@unbind-rebind.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/bat-adlp-7/igt@core_hotunplug@unbind-rebind.html
* igt@kms_frontbuffer_tracking@basic:
- bat-adlp-7: [PASS][3] -> [FAIL][4] ([Intel XE#1861])
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/bat-adlp-7/igt@kms_frontbuffer_tracking@basic.html
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/bat-adlp-7/igt@kms_frontbuffer_tracking@basic.html
* igt@kms_psr@psr-cursor-plane-move:
- bat-adlp-7: [PASS][5] -> [SKIP][6] ([Intel XE#455]) +3 other tests skip
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/bat-adlp-7/igt@kms_psr@psr-cursor-plane-move.html
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/bat-adlp-7/igt@kms_psr@psr-cursor-plane-move.html
[Intel XE#1861]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1861
[Intel XE#3517]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3517
[Intel XE#455]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/455
Build changes
-------------
* IGT: IGT_8157 -> IGTPW_12327
* Linux: xe-2380-63be16e210b1c3e43b43d8ca9b7e17f15142d2c3 -> xe-2386-49cc582754c205bbe43d4ef2b1fd3894bee1f3bd
IGTPW_12327: 9f8406e86d1d9fdce5fea06e856390c7c968cb48 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
IGT_8157: 48a70f6795e6d68b9fae275261ae3b09d3401fe1 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-2380-63be16e210b1c3e43b43d8ca9b7e17f15142d2c3: 63be16e210b1c3e43b43d8ca9b7e17f15142d2c3
xe-2386-49cc582754c205bbe43d4ef2b1fd3894bee1f3bd: 49cc582754c205bbe43d4ef2b1fd3894bee1f3bd
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/index.html
[-- Attachment #2: Type: text/html, Size: 3178 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* ✗ Xe.CI.Full: failure for lib/igt_kmemleak: library to interact with kmemleak
2024-12-16 18:46 [PATCH RFC i-g-t] lib/igt_kmemleak: library to interact with kmemleak Peter Senna Tschudin
` (2 preceding siblings ...)
2024-12-17 1:29 ` ✓ Xe.CI.BAT: success " Patchwork
@ 2024-12-17 7:35 ` Patchwork
2025-01-07 20:17 ` [PATCH RFC i-g-t] " Cavitt, Jonathan
4 siblings, 0 replies; 9+ messages in thread
From: Patchwork @ 2024-12-17 7:35 UTC (permalink / raw)
To: Peter Senna Tschudin; +Cc: igt-dev
[-- Attachment #1: Type: text/plain, Size: 70128 bytes --]
== Series Details ==
Series: lib/igt_kmemleak: library to interact with kmemleak
URL : https://patchwork.freedesktop.org/series/142673/
State : failure
== Summary ==
CI Bug Log - changes from XEIGT_8157_full -> XEIGTPW_12327_full
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with XEIGTPW_12327_full absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in XEIGTPW_12327_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 (4 -> 4)
------------------------------
No changes in participating hosts
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in XEIGTPW_12327_full:
### IGT changes ###
#### Possible regressions ####
* igt@kms_async_flips@crc-atomic@pipe-a-hdmi-a-6:
- shard-dg2-set2: NOTRUN -> [INCOMPLETE][1] +3 other tests incomplete
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-463/igt@kms_async_flips@crc-atomic@pipe-a-hdmi-a-6.html
* igt@kms_flip@2x-flip-vs-suspend-interruptible@ac-dp2-hdmi-a3:
- shard-bmg: NOTRUN -> [INCOMPLETE][2]
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-5/igt@kms_flip@2x-flip-vs-suspend-interruptible@ac-dp2-hdmi-a3.html
* igt@kms_flip@dpms-vs-vblank-race@a-hdmi-a6:
- shard-dg2-set2: [PASS][3] -> [INCOMPLETE][4]
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-dg2-433/igt@kms_flip@dpms-vs-vblank-race@a-hdmi-a6.html
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-464/igt@kms_flip@dpms-vs-vblank-race@a-hdmi-a6.html
* igt@kms_flip@flip-vs-suspend@c-dp2:
- shard-bmg: [PASS][5] -> [INCOMPLETE][6] +5 other tests incomplete
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-5/igt@kms_flip@flip-vs-suspend@c-dp2.html
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-5/igt@kms_flip@flip-vs-suspend@c-dp2.html
* igt@kms_flip@modeset-vs-vblank-race-interruptible:
- shard-bmg: [PASS][7] -> [FAIL][8] +3 other tests fail
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-8/igt@kms_flip@modeset-vs-vblank-race-interruptible.html
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-8/igt@kms_flip@modeset-vs-vblank-race-interruptible.html
* igt@kms_psr@psr2-primary-blt@edp-1:
- shard-lnl: [PASS][9] -> [FAIL][10] +1 other test fail
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-lnl-5/igt@kms_psr@psr2-primary-blt@edp-1.html
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-5/igt@kms_psr@psr2-primary-blt@edp-1.html
Known issues
------------
Here are the changes found in XEIGTPW_12327_full that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@intel_hwmon@hwmon-write:
- shard-lnl: NOTRUN -> [SKIP][11] ([Intel XE#1125])
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-5/igt@intel_hwmon@hwmon-write.html
* igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-6-4-mc-ccs:
- shard-dg2-set2: NOTRUN -> [SKIP][12] ([Intel XE#2550]) +23 other tests skip
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-435/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-6-4-mc-ccs.html
* igt@kms_async_flips@crc@pipe-a-dp-2:
- shard-bmg: NOTRUN -> [INCOMPLETE][13] ([Intel XE#3781]) +2 other tests incomplete
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-3/igt@kms_async_flips@crc@pipe-a-dp-2.html
* igt@kms_big_fb@4-tiled-32bpp-rotate-90:
- shard-bmg: NOTRUN -> [SKIP][14] ([Intel XE#2327]) +1 other test skip
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-6/igt@kms_big_fb@4-tiled-32bpp-rotate-90.html
* igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip:
- shard-lnl: NOTRUN -> [SKIP][15] ([Intel XE#3658])
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-8/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip.html
* igt@kms_big_fb@x-tiled-8bpp-rotate-90:
- shard-dg2-set2: NOTRUN -> [SKIP][16] ([Intel XE#316]) +3 other tests skip
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-433/igt@kms_big_fb@x-tiled-8bpp-rotate-90.html
* igt@kms_big_fb@yf-tiled-64bpp-rotate-180:
- shard-dg2-set2: NOTRUN -> [SKIP][17] ([Intel XE#1124]) +15 other tests skip
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-434/igt@kms_big_fb@yf-tiled-64bpp-rotate-180.html
* igt@kms_big_fb@yf-tiled-addfb-size-overflow:
- shard-bmg: NOTRUN -> [SKIP][18] ([Intel XE#610])
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-3/igt@kms_big_fb@yf-tiled-addfb-size-overflow.html
- shard-dg2-set2: NOTRUN -> [SKIP][19] ([Intel XE#610])
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-433/igt@kms_big_fb@yf-tiled-addfb-size-overflow.html
* igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip:
- shard-lnl: NOTRUN -> [SKIP][20] ([Intel XE#1124]) +2 other tests skip
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-6/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip.html
* igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180:
- shard-bmg: NOTRUN -> [SKIP][21] ([Intel XE#1124]) +8 other tests skip
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-6/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180.html
* igt@kms_bw@connected-linear-tiling-4-displays-2160x1440p:
- shard-dg2-set2: NOTRUN -> [SKIP][22] ([Intel XE#2191]) +1 other test skip
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-434/igt@kms_bw@connected-linear-tiling-4-displays-2160x1440p.html
* igt@kms_bw@linear-tiling-1-displays-2560x1440p:
- shard-bmg: NOTRUN -> [SKIP][23] ([Intel XE#367]) +2 other tests skip
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-5/igt@kms_bw@linear-tiling-1-displays-2560x1440p.html
* igt@kms_bw@linear-tiling-3-displays-3840x2160p:
- shard-dg2-set2: NOTRUN -> [SKIP][24] ([Intel XE#367]) +4 other tests skip
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-464/igt@kms_bw@linear-tiling-3-displays-3840x2160p.html
* igt@kms_ccs@bad-aux-stride-4-tiled-mtl-rc-ccs-cc:
- shard-bmg: NOTRUN -> [SKIP][25] ([Intel XE#2887]) +9 other tests skip
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-3/igt@kms_ccs@bad-aux-stride-4-tiled-mtl-rc-ccs-cc.html
* igt@kms_ccs@crc-primary-basic-4-tiled-lnl-ccs@pipe-b-dp-2:
- shard-bmg: NOTRUN -> [SKIP][26] ([Intel XE#2652] / [Intel XE#787]) +3 other tests skip
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-5/igt@kms_ccs@crc-primary-basic-4-tiled-lnl-ccs@pipe-b-dp-2.html
* igt@kms_ccs@crc-primary-basic-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-6:
- shard-dg2-set2: NOTRUN -> [SKIP][27] ([Intel XE#787]) +139 other tests skip
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-436/igt@kms_ccs@crc-primary-basic-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-6.html
* igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs:
- shard-dg2-set2: NOTRUN -> [SKIP][28] ([Intel XE#3442])
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-464/igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs.html
* igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs-cc:
- shard-bmg: NOTRUN -> [SKIP][29] ([Intel XE#3432])
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-4/igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs-cc.html
* igt@kms_ccs@crc-sprite-planes-basic-y-tiled-gen12-rc-ccs@pipe-d-dp-4:
- shard-dg2-set2: NOTRUN -> [SKIP][30] ([Intel XE#455] / [Intel XE#787]) +39 other tests skip
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-434/igt@kms_ccs@crc-sprite-planes-basic-y-tiled-gen12-rc-ccs@pipe-d-dp-4.html
* igt@kms_ccs@random-ccs-data-4-tiled-mtl-mc-ccs:
- shard-lnl: NOTRUN -> [SKIP][31] ([Intel XE#2887]) +2 other tests skip
[31]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-8/igt@kms_ccs@random-ccs-data-4-tiled-mtl-mc-ccs.html
* igt@kms_cdclk@mode-transition:
- shard-bmg: NOTRUN -> [SKIP][32] ([Intel XE#2724])
[32]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-3/igt@kms_cdclk@mode-transition.html
* igt@kms_cdclk@mode-transition@pipe-d-dp-4:
- shard-dg2-set2: NOTRUN -> [SKIP][33] ([Intel XE#314]) +3 other tests skip
[33]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-463/igt@kms_cdclk@mode-transition@pipe-d-dp-4.html
* igt@kms_chamelium_color@ctm-green-to-red:
- shard-bmg: NOTRUN -> [SKIP][34] ([Intel XE#2325]) +1 other test skip
[34]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-3/igt@kms_chamelium_color@ctm-green-to-red.html
- shard-dg2-set2: NOTRUN -> [SKIP][35] ([Intel XE#306]) +2 other tests skip
[35]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-464/igt@kms_chamelium_color@ctm-green-to-red.html
* igt@kms_chamelium_color@ctm-limited-range:
- shard-lnl: NOTRUN -> [SKIP][36] ([Intel XE#306])
[36]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-5/igt@kms_chamelium_color@ctm-limited-range.html
* igt@kms_chamelium_edid@hdmi-edid-change-during-hibernate:
- shard-bmg: NOTRUN -> [SKIP][37] ([Intel XE#2252]) +5 other tests skip
[37]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-7/igt@kms_chamelium_edid@hdmi-edid-change-during-hibernate.html
* igt@kms_chamelium_frames@hdmi-cmp-planar-formats:
- shard-lnl: NOTRUN -> [SKIP][38] ([Intel XE#373])
[38]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-7/igt@kms_chamelium_frames@hdmi-cmp-planar-formats.html
* igt@kms_chamelium_hpd@vga-hpd:
- shard-dg2-set2: NOTRUN -> [SKIP][39] ([Intel XE#373]) +11 other tests skip
[39]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-463/igt@kms_chamelium_hpd@vga-hpd.html
* igt@kms_content_protection@atomic@pipe-a-dp-2:
- shard-bmg: NOTRUN -> [FAIL][40] ([Intel XE#1178]) +3 other tests fail
[40]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-7/igt@kms_content_protection@atomic@pipe-a-dp-2.html
* igt@kms_content_protection@dp-mst-type-0:
- shard-bmg: NOTRUN -> [SKIP][41] ([Intel XE#2390])
[41]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-5/igt@kms_content_protection@dp-mst-type-0.html
- shard-dg2-set2: NOTRUN -> [SKIP][42] ([Intel XE#307]) +1 other test skip
[42]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-436/igt@kms_content_protection@dp-mst-type-0.html
* igt@kms_content_protection@legacy:
- shard-dg2-set2: NOTRUN -> [FAIL][43] ([Intel XE#1178]) +1 other test fail
[43]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-436/igt@kms_content_protection@legacy.html
* igt@kms_content_protection@lic-type-0:
- shard-lnl: NOTRUN -> [SKIP][44] ([Intel XE#3278])
[44]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-6/igt@kms_content_protection@lic-type-0.html
* igt@kms_cursor_crc@cursor-offscreen-512x512:
- shard-dg2-set2: NOTRUN -> [SKIP][45] ([Intel XE#308]) +2 other tests skip
[45]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-463/igt@kms_cursor_crc@cursor-offscreen-512x512.html
* igt@kms_cursor_crc@cursor-random-512x170:
- shard-bmg: NOTRUN -> [SKIP][46] ([Intel XE#2321]) +2 other tests skip
[46]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-4/igt@kms_cursor_crc@cursor-random-512x170.html
* igt@kms_cursor_crc@cursor-random-max-size:
- shard-lnl: NOTRUN -> [SKIP][47] ([Intel XE#1424])
[47]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-1/igt@kms_cursor_crc@cursor-random-max-size.html
* igt@kms_cursor_crc@cursor-rapid-movement-512x512:
- shard-lnl: NOTRUN -> [SKIP][48] ([Intel XE#2321])
[48]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-6/igt@kms_cursor_crc@cursor-rapid-movement-512x512.html
* igt@kms_cursor_crc@cursor-rapid-movement-max-size:
- shard-bmg: NOTRUN -> [SKIP][49] ([Intel XE#2320]) +1 other test skip
[49]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-4/igt@kms_cursor_crc@cursor-rapid-movement-max-size.html
* igt@kms_cursor_crc@cursor-suspend:
- shard-lnl: [PASS][50] -> [INCOMPLETE][51] ([Intel XE#1616]) +1 other test incomplete
[50]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-lnl-2/igt@kms_cursor_crc@cursor-suspend.html
[51]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-8/igt@kms_cursor_crc@cursor-suspend.html
* igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy:
- shard-bmg: NOTRUN -> [SKIP][52] ([Intel XE#2291]) +1 other test skip
[52]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-6/igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy.html
* igt@kms_cursor_legacy@2x-nonblocking-modeset-vs-cursor-atomic:
- shard-lnl: NOTRUN -> [SKIP][53] ([Intel XE#309])
[53]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-3/igt@kms_cursor_legacy@2x-nonblocking-modeset-vs-cursor-atomic.html
* igt@kms_cursor_legacy@cursorb-vs-flipa-atomic-transitions-varying-size:
- shard-bmg: [PASS][54] -> [DMESG-WARN][55] ([Intel XE#877])
[54]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-4/igt@kms_cursor_legacy@cursorb-vs-flipa-atomic-transitions-varying-size.html
[55]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-3/igt@kms_cursor_legacy@cursorb-vs-flipa-atomic-transitions-varying-size.html
* igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size:
- shard-bmg: [PASS][56] -> [SKIP][57] ([Intel XE#2291]) +1 other test skip
[56]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-2/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size.html
[57]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-6/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size.html
* igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions:
- shard-dg2-set2: NOTRUN -> [SKIP][58] ([Intel XE#323])
[58]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-434/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions.html
* igt@kms_display_modes@mst-extended-mode-negative:
- shard-bmg: NOTRUN -> [SKIP][59] ([Intel XE#2323])
[59]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-7/igt@kms_display_modes@mst-extended-mode-negative.html
* igt@kms_fbcon_fbt@psr-suspend:
- shard-dg2-set2: NOTRUN -> [SKIP][60] ([Intel XE#776])
[60]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-436/igt@kms_fbcon_fbt@psr-suspend.html
* igt@kms_feature_discovery@display-3x:
- shard-dg2-set2: NOTRUN -> [SKIP][61] ([Intel XE#703])
[61]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-433/igt@kms_feature_discovery@display-3x.html
* igt@kms_feature_discovery@display-4x:
- shard-dg2-set2: NOTRUN -> [SKIP][62] ([Intel XE#1138])
[62]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-434/igt@kms_feature_discovery@display-4x.html
* igt@kms_flip@2x-absolute-wf_vblank:
- shard-bmg: [PASS][63] -> [SKIP][64] ([Intel XE#2316]) +1 other test skip
[63]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-8/igt@kms_flip@2x-absolute-wf_vblank.html
[64]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-6/igt@kms_flip@2x-absolute-wf_vblank.html
* igt@kms_flip@2x-flip-vs-expired-vblank@ad-hdmi-a6-dp4:
- shard-dg2-set2: [PASS][65] -> [FAIL][66] ([Intel XE#301]) +7 other tests fail
[65]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-dg2-435/igt@kms_flip@2x-flip-vs-expired-vblank@ad-hdmi-a6-dp4.html
[66]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-436/igt@kms_flip@2x-flip-vs-expired-vblank@ad-hdmi-a6-dp4.html
* igt@kms_flip@2x-flip-vs-expired-vblank@bc-dp2-hdmi-a3:
- shard-bmg: NOTRUN -> [FAIL][67] ([Intel XE#2882]) +1 other test fail
[67]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-3/igt@kms_flip@2x-flip-vs-expired-vblank@bc-dp2-hdmi-a3.html
* igt@kms_flip@2x-flip-vs-suspend-interruptible:
- shard-lnl: NOTRUN -> [SKIP][68] ([Intel XE#1421]) +3 other tests skip
[68]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-6/igt@kms_flip@2x-flip-vs-suspend-interruptible.html
- shard-bmg: NOTRUN -> [INCOMPLETE][69] ([Intel XE#2597])
[69]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-5/igt@kms_flip@2x-flip-vs-suspend-interruptible.html
* igt@kms_flip@dpms-vs-vblank-race:
- shard-dg2-set2: [PASS][70] -> [INCOMPLETE][71] ([Intel XE#2049])
[70]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-dg2-433/igt@kms_flip@dpms-vs-vblank-race.html
[71]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-464/igt@kms_flip@dpms-vs-vblank-race.html
* igt@kms_flip@flip-vs-suspend:
- shard-bmg: [PASS][72] -> [INCOMPLETE][73] ([Intel XE#2597]) +3 other tests incomplete
[72]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-5/igt@kms_flip@flip-vs-suspend.html
[73]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-5/igt@kms_flip@flip-vs-suspend.html
* igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling:
- shard-bmg: NOTRUN -> [SKIP][74] ([Intel XE#2293] / [Intel XE#2380]) +2 other tests skip
[74]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-4/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling.html
* igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling@pipe-a-valid-mode:
- shard-bmg: NOTRUN -> [SKIP][75] ([Intel XE#2293]) +2 other tests skip
[75]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-4/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling@pipe-a-valid-mode.html
* igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-downscaling:
- shard-lnl: NOTRUN -> [SKIP][76] ([Intel XE#1397] / [Intel XE#1745])
[76]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-2/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-downscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-downscaling@pipe-a-default-mode:
- shard-lnl: NOTRUN -> [SKIP][77] ([Intel XE#1397])
[77]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-2/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-downscaling@pipe-a-default-mode.html
* igt@kms_frontbuffer_tracking@drrs-2p-primscrn-indfb-pgflip-blt:
- shard-bmg: NOTRUN -> [SKIP][78] ([Intel XE#2311]) +17 other tests skip
[78]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-7/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-indfb-pgflip-blt.html
* igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-fullscreen:
- shard-dg2-set2: NOTRUN -> [SKIP][79] ([Intel XE#651]) +41 other tests skip
[79]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-433/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-fullscreen.html
* igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-blt:
- shard-bmg: NOTRUN -> [FAIL][80] ([Intel XE#2333]) +8 other tests fail
[80]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-4/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-fullscreen:
- shard-lnl: NOTRUN -> [SKIP][81] ([Intel XE#651]) +1 other test skip
[81]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-5/igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-fullscreen.html
* igt@kms_frontbuffer_tracking@fbcdrrs-tiling-y:
- shard-dg2-set2: NOTRUN -> [SKIP][82] ([Intel XE#658])
[82]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-464/igt@kms_frontbuffer_tracking@fbcdrrs-tiling-y.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-onoff:
- shard-lnl: NOTRUN -> [SKIP][83] ([Intel XE#656]) +6 other tests skip
[83]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-onoff.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-indfb-pgflip-blt:
- shard-bmg: NOTRUN -> [SKIP][84] ([Intel XE#2312]) +1 other test skip
[84]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-indfb-pgflip-blt.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-plflip-blt:
- shard-bmg: NOTRUN -> [SKIP][85] ([Intel XE#2313]) +19 other tests skip
[85]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-3/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-plflip-blt.html
* igt@kms_frontbuffer_tracking@fbcpsr-tiling-4:
- shard-dg2-set2: NOTRUN -> [SKIP][86] ([Intel XE#653]) +46 other tests skip
[86]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-463/igt@kms_frontbuffer_tracking@fbcpsr-tiling-4.html
* igt@kms_getfb@getfb-reject-ccs:
- shard-dg2-set2: NOTRUN -> [SKIP][87] ([Intel XE#605])
[87]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-434/igt@kms_getfb@getfb-reject-ccs.html
* igt@kms_getfb@getfb2-accept-ccs:
- shard-bmg: NOTRUN -> [SKIP][88] ([Intel XE#2340])
[88]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-5/igt@kms_getfb@getfb2-accept-ccs.html
* igt@kms_joiner@basic-big-joiner:
- shard-dg2-set2: NOTRUN -> [SKIP][89] ([Intel XE#346])
[89]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-434/igt@kms_joiner@basic-big-joiner.html
* igt@kms_joiner@basic-ultra-joiner:
- shard-dg2-set2: NOTRUN -> [SKIP][90] ([Intel XE#2927])
[90]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-434/igt@kms_joiner@basic-ultra-joiner.html
* igt@kms_joiner@invalid-modeset-force-ultra-joiner:
- shard-bmg: NOTRUN -> [SKIP][91] ([Intel XE#2934])
[91]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-3/igt@kms_joiner@invalid-modeset-force-ultra-joiner.html
* igt@kms_multipipe_modeset@basic-max-pipe-crc-check:
- shard-dg2-set2: NOTRUN -> [SKIP][92] ([Intel XE#356])
[92]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-436/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html
* igt@kms_panel_fitting@legacy:
- shard-bmg: NOTRUN -> [SKIP][93] ([Intel XE#2486])
[93]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-5/igt@kms_panel_fitting@legacy.html
* igt@kms_pipe_crc_basic@suspend-read-crc:
- shard-bmg: [PASS][94] -> [INCOMPLETE][95] ([Intel XE#3663])
[94]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-2/igt@kms_pipe_crc_basic@suspend-read-crc.html
[95]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-6/igt@kms_pipe_crc_basic@suspend-read-crc.html
* igt@kms_plane_scaling@intel-max-src-size:
- shard-bmg: [PASS][96] -> [SKIP][97] ([Intel XE#2685] / [Intel XE#3307])
[96]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-4/igt@kms_plane_scaling@intel-max-src-size.html
[97]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-3/igt@kms_plane_scaling@intel-max-src-size.html
* igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format@pipe-b:
- shard-dg2-set2: NOTRUN -> [SKIP][98] ([Intel XE#2763]) +14 other tests skip
[98]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-433/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format@pipe-b.html
* igt@kms_plane_scaling@plane-downscale-factor-0-5-with-rotation@pipe-c:
- shard-lnl: NOTRUN -> [SKIP][99] ([Intel XE#2763]) +3 other tests skip
[99]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-6/igt@kms_plane_scaling@plane-downscale-factor-0-5-with-rotation@pipe-c.html
* igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-25@pipe-d:
- shard-dg2-set2: NOTRUN -> [SKIP][100] ([Intel XE#2763] / [Intel XE#455]) +9 other tests skip
[100]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-436/igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-25@pipe-d.html
* igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-75@pipe-a:
- shard-bmg: NOTRUN -> [SKIP][101] ([Intel XE#2763]) +14 other tests skip
[101]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-3/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-75@pipe-a.html
* igt@kms_pm_backlight@fade-with-dpms:
- shard-bmg: NOTRUN -> [SKIP][102] ([Intel XE#870])
[102]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-7/igt@kms_pm_backlight@fade-with-dpms.html
- shard-dg2-set2: NOTRUN -> [SKIP][103] ([Intel XE#870])
[103]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-434/igt@kms_pm_backlight@fade-with-dpms.html
* igt@kms_pm_dc@dc5-psr:
- shard-lnl: [PASS][104] -> [FAIL][105] ([Intel XE#718])
[104]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-lnl-1/igt@kms_pm_dc@dc5-psr.html
[105]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-5/igt@kms_pm_dc@dc5-psr.html
* igt@kms_pm_dc@dc5-retention-flops:
- shard-dg2-set2: NOTRUN -> [SKIP][106] ([Intel XE#3309])
[106]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-436/igt@kms_pm_dc@dc5-retention-flops.html
* igt@kms_pm_rpm@modeset-lpsp:
- shard-bmg: NOTRUN -> [SKIP][107] ([Intel XE#1439] / [Intel XE#3141] / [Intel XE#836])
[107]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-3/igt@kms_pm_rpm@modeset-lpsp.html
* igt@kms_psr2_sf@fbc-pr-plane-move-sf-dmg-area:
- shard-dg2-set2: NOTRUN -> [SKIP][108] ([Intel XE#1489]) +12 other tests skip
[108]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-434/igt@kms_psr2_sf@fbc-pr-plane-move-sf-dmg-area.html
* igt@kms_psr2_sf@fbc-psr2-overlay-plane-update-sf-dmg-area:
- shard-bmg: NOTRUN -> [SKIP][109] ([Intel XE#1489]) +3 other tests skip
[109]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-7/igt@kms_psr2_sf@fbc-psr2-overlay-plane-update-sf-dmg-area.html
* igt@kms_psr2_su@page_flip-nv12:
- shard-dg2-set2: NOTRUN -> [SKIP][110] ([Intel XE#1122]) +2 other tests skip
[110]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-436/igt@kms_psr2_su@page_flip-nv12.html
* igt@kms_psr@pr-sprite-plane-move:
- shard-lnl: NOTRUN -> [SKIP][111] ([Intel XE#1406])
[111]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-2/igt@kms_psr@pr-sprite-plane-move.html
* igt@kms_psr@psr-dpms:
- shard-dg2-set2: NOTRUN -> [SKIP][112] ([Intel XE#2850] / [Intel XE#929]) +21 other tests skip
[112]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-463/igt@kms_psr@psr-dpms.html
* igt@kms_psr@psr-primary-page-flip:
- shard-bmg: NOTRUN -> [SKIP][113] ([Intel XE#2234] / [Intel XE#2850]) +8 other tests skip
[113]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-8/igt@kms_psr@psr-primary-page-flip.html
* igt@kms_psr_stress_test@flip-primary-invalidate-overlay:
- shard-dg2-set2: NOTRUN -> [SKIP][114] ([Intel XE#2939])
[114]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-435/igt@kms_psr_stress_test@flip-primary-invalidate-overlay.html
* igt@kms_rotation_crc@primary-rotation-90:
- shard-dg2-set2: NOTRUN -> [SKIP][115] ([Intel XE#3414]) +2 other tests skip
[115]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-433/igt@kms_rotation_crc@primary-rotation-90.html
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180:
- shard-lnl: NOTRUN -> [SKIP][116] ([Intel XE#1127])
[116]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-2/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180.html
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90:
- shard-bmg: NOTRUN -> [SKIP][117] ([Intel XE#3414])
[117]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-5/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90.html
* igt@kms_setmode@invalid-clone-single-crtc:
- shard-bmg: [PASS][118] -> [SKIP][119] ([Intel XE#1435])
[118]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-7/igt@kms_setmode@invalid-clone-single-crtc.html
[119]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-6/igt@kms_setmode@invalid-clone-single-crtc.html
* igt@kms_tiled_display@basic-test-pattern-with-chamelium:
- shard-dg2-set2: NOTRUN -> [SKIP][120] ([Intel XE#1500])
[120]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-434/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
* igt@kms_vrr@cmrr:
- shard-dg2-set2: NOTRUN -> [SKIP][121] ([Intel XE#2168])
[121]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-435/igt@kms_vrr@cmrr.html
* igt@kms_vrr@flipline:
- shard-dg2-set2: NOTRUN -> [SKIP][122] ([Intel XE#455]) +21 other tests skip
[122]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-463/igt@kms_vrr@flipline.html
* igt@kms_vrr@negative-basic:
- shard-bmg: NOTRUN -> [SKIP][123] ([Intel XE#1499])
[123]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-6/igt@kms_vrr@negative-basic.html
* igt@kms_writeback@writeback-fb-id-xrgb2101010:
- shard-dg2-set2: NOTRUN -> [SKIP][124] ([Intel XE#756]) +1 other test skip
[124]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-463/igt@kms_writeback@writeback-fb-id-xrgb2101010.html
* igt@xe_copy_basic@mem-copy-linear-0xfffe:
- shard-dg2-set2: NOTRUN -> [SKIP][125] ([Intel XE#1123])
[125]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-434/igt@xe_copy_basic@mem-copy-linear-0xfffe.html
* igt@xe_copy_basic@mem-set-linear-0x3fff:
- shard-dg2-set2: NOTRUN -> [SKIP][126] ([Intel XE#1126]) +1 other test skip
[126]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-433/igt@xe_copy_basic@mem-set-linear-0x3fff.html
* igt@xe_eudebug@basic-connect:
- shard-lnl: NOTRUN -> [SKIP][127] ([Intel XE#2905]) +3 other tests skip
[127]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-5/igt@xe_eudebug@basic-connect.html
* igt@xe_eudebug@basic-read-event:
- shard-bmg: NOTRUN -> [SKIP][128] ([Intel XE#2905]) +5 other tests skip
[128]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-4/igt@xe_eudebug@basic-read-event.html
* igt@xe_eudebug_online@interrupt-all-set-breakpoint:
- shard-dg2-set2: NOTRUN -> [SKIP][129] ([Intel XE#2905]) +12 other tests skip
[129]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-463/igt@xe_eudebug_online@interrupt-all-set-breakpoint.html
* igt@xe_evict@evict-beng-mixed-many-threads-small:
- shard-dg2-set2: [PASS][130] -> [TIMEOUT][131] ([Intel XE#1473] / [Intel XE#402])
[130]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-dg2-463/igt@xe_evict@evict-beng-mixed-many-threads-small.html
[131]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-464/igt@xe_evict@evict-beng-mixed-many-threads-small.html
* igt@xe_evict@evict-beng-threads-large:
- shard-bmg: NOTRUN -> [TIMEOUT][132] ([Intel XE#1473])
[132]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-8/igt@xe_evict@evict-beng-threads-large.html
* igt@xe_evict@evict-large-multi-vm-cm:
- shard-dg2-set2: NOTRUN -> [FAIL][133] ([Intel XE#1600])
[133]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-464/igt@xe_evict@evict-large-multi-vm-cm.html
* igt@xe_evict@evict-mixed-many-threads-small:
- shard-dg2-set2: [PASS][134] -> [TIMEOUT][135] ([Intel XE#1473])
[134]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-dg2-463/igt@xe_evict@evict-mixed-many-threads-small.html
[135]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-435/igt@xe_evict@evict-mixed-many-threads-small.html
* igt@xe_evict_ccs@evict-overcommit-standalone-nofree-samefd:
- shard-lnl: NOTRUN -> [SKIP][136] ([Intel XE#688]) +2 other tests skip
[136]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-7/igt@xe_evict_ccs@evict-overcommit-standalone-nofree-samefd.html
* igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr-invalidate:
- shard-bmg: NOTRUN -> [SKIP][137] ([Intel XE#2322]) +6 other tests skip
[137]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-4/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr-invalidate.html
* igt@xe_exec_basic@multigpu-once-userptr-invalidate:
- shard-lnl: NOTRUN -> [SKIP][138] ([Intel XE#1392]) +1 other test skip
[138]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-5/igt@xe_exec_basic@multigpu-once-userptr-invalidate.html
* igt@xe_exec_fault_mode@twice-userptr-rebind-imm:
- shard-dg2-set2: NOTRUN -> [SKIP][139] ([Intel XE#288]) +33 other tests skip
[139]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-435/igt@xe_exec_fault_mode@twice-userptr-rebind-imm.html
* igt@xe_exec_mix_modes@exec-simple-batch-store-dma-fence:
- shard-dg2-set2: NOTRUN -> [SKIP][140] ([Intel XE#2360]) +1 other test skip
[140]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-436/igt@xe_exec_mix_modes@exec-simple-batch-store-dma-fence.html
* igt@xe_live_ktest@xe_bo:
- shard-bmg: [PASS][141] -> [SKIP][142] ([Intel XE#1192])
[141]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-6/igt@xe_live_ktest@xe_bo.html
[142]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-3/igt@xe_live_ktest@xe_bo.html
* igt@xe_live_ktest@xe_migrate:
- shard-lnl: [PASS][143] -> [SKIP][144] ([Intel XE#1192]) +2 other tests skip
[143]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-lnl-5/igt@xe_live_ktest@xe_migrate.html
[144]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-7/igt@xe_live_ktest@xe_migrate.html
* igt@xe_live_ktest@xe_mocs@xe_live_mocs_kernel_kunit:
- shard-dg2-set2: NOTRUN -> [FAIL][145] ([Intel XE#1999]) +2 other tests fail
[145]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-434/igt@xe_live_ktest@xe_mocs@xe_live_mocs_kernel_kunit.html
* igt@xe_oa@closed-fd-and-unmapped-access:
- shard-dg2-set2: NOTRUN -> [SKIP][146] ([Intel XE#2541] / [Intel XE#3573]) +9 other tests skip
[146]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-435/igt@xe_oa@closed-fd-and-unmapped-access.html
* igt@xe_pat@pat-index-xehpc:
- shard-dg2-set2: NOTRUN -> [SKIP][147] ([Intel XE#2838] / [Intel XE#979])
[147]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-433/igt@xe_pat@pat-index-xehpc.html
* igt@xe_pm@d3cold-mmap-vram:
- shard-dg2-set2: NOTRUN -> [SKIP][148] ([Intel XE#2284] / [Intel XE#366]) +1 other test skip
[148]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-435/igt@xe_pm@d3cold-mmap-vram.html
* igt@xe_pm@s4-d3cold-basic-exec:
- shard-lnl: NOTRUN -> [SKIP][149] ([Intel XE#2284] / [Intel XE#366])
[149]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-8/igt@xe_pm@s4-d3cold-basic-exec.html
- shard-bmg: NOTRUN -> [SKIP][150] ([Intel XE#2284])
[150]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-4/igt@xe_pm@s4-d3cold-basic-exec.html
* igt@xe_pm@s4-exec-after:
- shard-lnl: [PASS][151] -> [ABORT][152] ([Intel XE#1358] / [Intel XE#1607])
[151]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-lnl-8/igt@xe_pm@s4-exec-after.html
[152]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-2/igt@xe_pm@s4-exec-after.html
* igt@xe_pm@s4-multiple-execs:
- shard-bmg: [PASS][153] -> [INCOMPLETE][154] ([Intel XE#1607])
[153]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-7/igt@xe_pm@s4-multiple-execs.html
[154]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-6/igt@xe_pm@s4-multiple-execs.html
* igt@xe_pm_residency@toggle-gt-c6:
- shard-lnl: [PASS][155] -> [FAIL][156] ([Intel XE#958])
[155]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-lnl-1/igt@xe_pm_residency@toggle-gt-c6.html
[156]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-8/igt@xe_pm_residency@toggle-gt-c6.html
* igt@xe_query@multigpu-query-engines:
- shard-dg2-set2: NOTRUN -> [SKIP][157] ([Intel XE#944]) +2 other tests skip
[157]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-433/igt@xe_query@multigpu-query-engines.html
* igt@xe_wedged@wedged-at-any-timeout:
- shard-dg2-set2: NOTRUN -> [ABORT][158] ([Intel XE#3421])
[158]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-433/igt@xe_wedged@wedged-at-any-timeout.html
* igt@xe_wedged@wedged-mode-toggle:
- shard-dg2-set2: NOTRUN -> [ABORT][159] ([Intel XE#3075] / [Intel XE#3084])
[159]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-435/igt@xe_wedged@wedged-mode-toggle.html
#### Possible fixes ####
* igt@kms_async_flips@async-flip-with-page-flip-events@pipe-a-edp-1-linear:
- shard-lnl: [FAIL][160] ([Intel XE#911]) -> [PASS][161] +3 other tests pass
[160]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-lnl-6/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-a-edp-1-linear.html
[161]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-6/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-a-edp-1-linear.html
* igt@kms_bw@connected-linear-tiling-2-displays-2560x1440p:
- shard-bmg: [SKIP][162] ([Intel XE#2314] / [Intel XE#2894]) -> [PASS][163]
[162]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-6/igt@kms_bw@connected-linear-tiling-2-displays-2560x1440p.html
[163]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-7/igt@kms_bw@connected-linear-tiling-2-displays-2560x1440p.html
* igt@kms_cursor_crc@cursor-onscreen-64x64:
- shard-dg2-set2: [INCOMPLETE][164] -> [PASS][165] +1 other test pass
[164]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-dg2-435/igt@kms_cursor_crc@cursor-onscreen-64x64.html
[165]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-464/igt@kms_cursor_crc@cursor-onscreen-64x64.html
* igt@kms_cursor_legacy@cursora-vs-flipb-toggle:
- shard-bmg: [SKIP][166] ([Intel XE#2291]) -> [PASS][167]
[166]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-6/igt@kms_cursor_legacy@cursora-vs-flipb-toggle.html
[167]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-7/igt@kms_cursor_legacy@cursora-vs-flipb-toggle.html
* igt@kms_feature_discovery@display-2x:
- shard-bmg: [SKIP][168] ([Intel XE#2373]) -> [PASS][169]
[168]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-6/igt@kms_feature_discovery@display-2x.html
[169]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-3/igt@kms_feature_discovery@display-2x.html
* igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@ab-hdmi-a6-dp4:
- shard-dg2-set2: [FAIL][170] ([Intel XE#3321]) -> [PASS][171]
[170]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-dg2-433/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@ab-hdmi-a6-dp4.html
[171]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-434/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@ab-hdmi-a6-dp4.html
* igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@ad-hdmi-a6-dp4:
- shard-dg2-set2: [FAIL][172] ([Intel XE#301]) -> [PASS][173] +1 other test pass
[172]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-dg2-433/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@ad-hdmi-a6-dp4.html
[173]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-434/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@ad-hdmi-a6-dp4.html
* igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@bd-dp2-hdmi-a3:
- shard-bmg: [FAIL][174] ([Intel XE#3321]) -> [PASS][175] +4 other tests pass
[174]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-5/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@bd-dp2-hdmi-a3.html
[175]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-8/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@bd-dp2-hdmi-a3.html
* igt@kms_flip@2x-plain-flip-fb-recreate:
- shard-bmg: [FAIL][176] ([Intel XE#2882]) -> [PASS][177] +3 other tests pass
[176]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-4/igt@kms_flip@2x-plain-flip-fb-recreate.html
[177]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-4/igt@kms_flip@2x-plain-flip-fb-recreate.html
- shard-dg2-set2: [FAIL][178] ([Intel XE#886]) -> [PASS][179] +1 other test pass
[178]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-dg2-463/igt@kms_flip@2x-plain-flip-fb-recreate.html
[179]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-434/igt@kms_flip@2x-plain-flip-fb-recreate.html
* igt@kms_flip@2x-plain-flip-fb-recreate@bc-hdmi-a6-dp4:
- shard-dg2-set2: [FAIL][180] -> [PASS][181] +2 other tests pass
[180]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-dg2-463/igt@kms_flip@2x-plain-flip-fb-recreate@bc-hdmi-a6-dp4.html
[181]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-434/igt@kms_flip@2x-plain-flip-fb-recreate@bc-hdmi-a6-dp4.html
* igt@kms_flip@2x-wf_vblank-ts-check-interruptible:
- shard-bmg: [SKIP][182] ([Intel XE#2316]) -> [PASS][183] +5 other tests pass
[182]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-6/igt@kms_flip@2x-wf_vblank-ts-check-interruptible.html
[183]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-3/igt@kms_flip@2x-wf_vblank-ts-check-interruptible.html
* igt@kms_flip@flip-vs-suspend:
- shard-dg2-set2: [INCOMPLETE][184] ([Intel XE#2049] / [Intel XE#2597]) -> [PASS][185]
[184]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-dg2-434/igt@kms_flip@flip-vs-suspend.html
[185]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-433/igt@kms_flip@flip-vs-suspend.html
* igt@kms_flip@flip-vs-suspend@d-dp4:
- shard-dg2-set2: [INCOMPLETE][186] ([Intel XE#2049]) -> [PASS][187]
[186]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-dg2-434/igt@kms_flip@flip-vs-suspend@d-dp4.html
[187]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-433/igt@kms_flip@flip-vs-suspend@d-dp4.html
* igt@kms_hdr@invalid-hdr:
- shard-bmg: [SKIP][188] ([Intel XE#1503]) -> [PASS][189]
[188]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-6/igt@kms_hdr@invalid-hdr.html
[189]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-4/igt@kms_hdr@invalid-hdr.html
* igt@kms_joiner@invalid-modeset-force-big-joiner:
- shard-bmg: [SKIP][190] ([Intel XE#3012]) -> [PASS][191] +1 other test pass
[190]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-6/igt@kms_joiner@invalid-modeset-force-big-joiner.html
[191]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-5/igt@kms_joiner@invalid-modeset-force-big-joiner.html
* igt@kms_setmode@basic@pipe-a-hdmi-a-6:
- shard-dg2-set2: [FAIL][192] ([Intel XE#2883]) -> [PASS][193] +6 other tests pass
[192]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-dg2-463/igt@kms_setmode@basic@pipe-a-hdmi-a-6.html
[193]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-463/igt@kms_setmode@basic@pipe-a-hdmi-a-6.html
* igt@kms_setmode@basic@pipe-b-edp-1:
- shard-lnl: [FAIL][194] ([Intel XE#2883]) -> [PASS][195] +1 other test pass
[194]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-lnl-1/igt@kms_setmode@basic@pipe-b-edp-1.html
[195]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-2/igt@kms_setmode@basic@pipe-b-edp-1.html
* igt@kms_vrr@cmrr@pipe-a-edp-1:
- shard-lnl: [FAIL][196] ([Intel XE#2159]) -> [PASS][197] +1 other test pass
[196]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-lnl-7/igt@kms_vrr@cmrr@pipe-a-edp-1.html
[197]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-5/igt@kms_vrr@cmrr@pipe-a-edp-1.html
* igt@xe_exec_basic@many-basic:
- shard-bmg: [INCOMPLETE][198] -> [PASS][199]
[198]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-4/igt@xe_exec_basic@many-basic.html
[199]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-5/igt@xe_exec_basic@many-basic.html
* igt@xe_module_load@load:
- shard-bmg: ([PASS][200], [PASS][201], [PASS][202], [PASS][203], [PASS][204], [PASS][205], [PASS][206], [PASS][207], [PASS][208], [PASS][209], [PASS][210], [PASS][211], [PASS][212], [PASS][213], [PASS][214], [PASS][215], [PASS][216], [PASS][217], [PASS][218], [PASS][219], [PASS][220], [PASS][221], [SKIP][222]) ([Intel XE#2457]) -> ([PASS][223], [PASS][224], [PASS][225], [PASS][226], [PASS][227], [PASS][228], [PASS][229], [PASS][230], [PASS][231], [PASS][232], [PASS][233], [PASS][234], [PASS][235], [PASS][236], [PASS][237], [PASS][238], [PASS][239], [PASS][240], [PASS][241], [PASS][242], [PASS][243], [PASS][244], [PASS][245], [PASS][246], [PASS][247])
[200]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-4/igt@xe_module_load@load.html
[201]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-8/igt@xe_module_load@load.html
[202]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-8/igt@xe_module_load@load.html
[203]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-8/igt@xe_module_load@load.html
[204]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-5/igt@xe_module_load@load.html
[205]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-7/igt@xe_module_load@load.html
[206]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-7/igt@xe_module_load@load.html
[207]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-5/igt@xe_module_load@load.html
[208]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-6/igt@xe_module_load@load.html
[209]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-8/igt@xe_module_load@load.html
[210]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-2/igt@xe_module_load@load.html
[211]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-2/igt@xe_module_load@load.html
[212]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-2/igt@xe_module_load@load.html
[213]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-6/igt@xe_module_load@load.html
[214]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-6/igt@xe_module_load@load.html
[215]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-6/igt@xe_module_load@load.html
[216]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-4/igt@xe_module_load@load.html
[217]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-2/igt@xe_module_load@load.html
[218]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-4/igt@xe_module_load@load.html
[219]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-6/igt@xe_module_load@load.html
[220]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-5/igt@xe_module_load@load.html
[221]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-5/igt@xe_module_load@load.html
[222]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-7/igt@xe_module_load@load.html
[223]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-4/igt@xe_module_load@load.html
[224]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-3/igt@xe_module_load@load.html
[225]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-3/igt@xe_module_load@load.html
[226]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-6/igt@xe_module_load@load.html
[227]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-8/igt@xe_module_load@load.html
[228]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-3/igt@xe_module_load@load.html
[229]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-3/igt@xe_module_load@load.html
[230]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-6/igt@xe_module_load@load.html
[231]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-6/igt@xe_module_load@load.html
[232]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-6/igt@xe_module_load@load.html
[233]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-3/igt@xe_module_load@load.html
[234]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-3/igt@xe_module_load@load.html
[235]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-8/igt@xe_module_load@load.html
[236]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-8/igt@xe_module_load@load.html
[237]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-8/igt@xe_module_load@load.html
[238]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-7/igt@xe_module_load@load.html
[239]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-7/igt@xe_module_load@load.html
[240]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-7/igt@xe_module_load@load.html
[241]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-4/igt@xe_module_load@load.html
[242]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-4/igt@xe_module_load@load.html
[243]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-4/igt@xe_module_load@load.html
[244]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-5/igt@xe_module_load@load.html
[245]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-4/igt@xe_module_load@load.html
[246]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-5/igt@xe_module_load@load.html
[247]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-5/igt@xe_module_load@load.html
#### Warnings ####
* igt@kms_content_protection@legacy:
- shard-bmg: [SKIP][248] ([Intel XE#2341]) -> [FAIL][249] ([Intel XE#1178]) +1 other test fail
[248]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-6/igt@kms_content_protection@legacy.html
[249]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-3/igt@kms_content_protection@legacy.html
* igt@kms_content_protection@srm:
- shard-bmg: [FAIL][250] ([Intel XE#1178]) -> [SKIP][251] ([Intel XE#2341])
[250]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-2/igt@kms_content_protection@srm.html
[251]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-6/igt@kms_content_protection@srm.html
* igt@kms_flip@bo-too-big-interruptible@a-edp1:
- shard-lnl: [TIMEOUT][252] ([Intel XE#1504]) -> [INCOMPLETE][253] ([Intel XE#1504]) +1 other test incomplete
[252]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-lnl-6/igt@kms_flip@bo-too-big-interruptible@a-edp1.html
[253]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-7/igt@kms_flip@bo-too-big-interruptible@a-edp1.html
* igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-render:
- shard-bmg: [SKIP][254] ([Intel XE#2312]) -> [SKIP][255] ([Intel XE#2311]) +12 other tests skip
[254]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-6/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-render.html
[255]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-8/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-mmap-wc:
- shard-bmg: [SKIP][256] ([Intel XE#2312]) -> [FAIL][257] ([Intel XE#2333]) +5 other tests fail
[256]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-mmap-wc.html
[257]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-5/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-fullscreen:
- shard-bmg: [FAIL][258] ([Intel XE#2333]) -> [SKIP][259] ([Intel XE#2312]) +2 other tests skip
[258]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-8/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-fullscreen.html
[259]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-fullscreen.html
* igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-move:
- shard-bmg: [SKIP][260] ([Intel XE#2311]) -> [SKIP][261] ([Intel XE#2312]) +6 other tests skip
[260]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-8/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-move.html
[261]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-move.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-pgflip-blt:
- shard-bmg: [SKIP][262] ([Intel XE#2312]) -> [SKIP][263] ([Intel XE#2313]) +15 other tests skip
[262]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-pgflip-blt.html
[263]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-4/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-pgflip-blt.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-onoff:
- shard-bmg: [SKIP][264] ([Intel XE#2313]) -> [SKIP][265] ([Intel XE#2312]) +4 other tests skip
[264]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-5/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-onoff.html
[265]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-onoff.html
* igt@kms_plane_scaling@intel-max-src-size:
- shard-dg2-set2: [FAIL][266] ([Intel XE#361]) -> [SKIP][267] ([Intel XE#455])
[266]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-dg2-436/igt@kms_plane_scaling@intel-max-src-size.html
[267]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-464/igt@kms_plane_scaling@intel-max-src-size.html
* igt@kms_tiled_display@basic-test-pattern:
- shard-dg2-set2: [SKIP][268] ([Intel XE#362]) -> [FAIL][269] ([Intel XE#1729])
[268]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-dg2-463/igt@kms_tiled_display@basic-test-pattern.html
[269]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-dg2-434/igt@kms_tiled_display@basic-test-pattern.html
* igt@xe_evict@evict-beng-mixed-many-threads-small:
- shard-bmg: [TIMEOUT][270] ([Intel XE#1473]) -> [INCOMPLETE][271] ([Intel XE#1473])
[270]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-7/igt@xe_evict@evict-beng-mixed-many-threads-small.html
[271]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-3/igt@xe_evict@evict-beng-mixed-many-threads-small.html
* igt@xe_evict@evict-mixed-many-threads-small:
- shard-bmg: [TIMEOUT][272] ([Intel XE#1473] / [Intel XE#2472]) -> [INCOMPLETE][273] ([Intel XE#1473]) +1 other test incomplete
[272]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-5/igt@xe_evict@evict-mixed-many-threads-small.html
[273]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-6/igt@xe_evict@evict-mixed-many-threads-small.html
* igt@xe_evict@evict-mixed-threads-large:
- shard-bmg: [FAIL][274] ([Intel XE#1000]) -> [INCOMPLETE][275] ([Intel XE#1473])
[274]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-5/igt@xe_evict@evict-mixed-threads-large.html
[275]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-4/igt@xe_evict@evict-mixed-threads-large.html
* igt@xe_live_ktest@xe_eudebug:
- shard-bmg: [SKIP][276] ([Intel XE#2833]) -> [SKIP][277] ([Intel XE#1192])
[276]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-8/igt@xe_live_ktest@xe_eudebug.html
[277]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-4/igt@xe_live_ktest@xe_eudebug.html
- shard-lnl: [SKIP][278] ([Intel XE#2833]) -> [SKIP][279] ([Intel XE#1192] / [Intel XE#3026])
[278]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-lnl-8/igt@xe_live_ktest@xe_eudebug.html
[279]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-lnl-7/igt@xe_live_ktest@xe_eudebug.html
* igt@xe_wedged@wedged-at-any-timeout:
- shard-bmg: [SKIP][280] ([Intel XE#1130]) -> [ABORT][281] ([Intel XE#3765])
[280]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8157/shard-bmg-5/igt@xe_wedged@wedged-at-any-timeout.html
[281]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/shard-bmg-3/igt@xe_wedged@wedged-at-any-timeout.html
[Intel XE#1000]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1000
[Intel XE#1122]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1122
[Intel XE#1123]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1123
[Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
[Intel XE#1125]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1125
[Intel XE#1126]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1126
[Intel XE#1127]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1127
[Intel XE#1130]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1130
[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#1192]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1192
[Intel XE#1358]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1358
[Intel XE#1392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1392
[Intel XE#1397]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1397
[Intel XE#1406]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1406
[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#1435]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1435
[Intel XE#1439]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1439
[Intel XE#1473]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1473
[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#1500]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1500
[Intel XE#1503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1503
[Intel XE#1504]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1504
[Intel XE#1600]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1600
[Intel XE#1607]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1607
[Intel XE#1616]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1616
[Intel XE#1729]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1729
[Intel XE#1745]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1745
[Intel XE#1999]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1999
[Intel XE#2049]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2049
[Intel XE#2159]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2159
[Intel XE#2168]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2168
[Intel XE#2191]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2191
[Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
[Intel XE#2252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2252
[Intel XE#2284]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2284
[Intel XE#2291]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2291
[Intel XE#2293]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2293
[Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
[Intel XE#2312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2312
[Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
[Intel XE#2314]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2314
[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#2321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2321
[Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
[Intel XE#2323]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2323
[Intel XE#2325]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2325
[Intel XE#2327]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2327
[Intel XE#2333]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2333
[Intel XE#2340]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2340
[Intel XE#2341]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2341
[Intel XE#2360]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2360
[Intel XE#2373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2373
[Intel XE#2380]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2380
[Intel XE#2390]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2390
[Intel XE#2457]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2457
[Intel XE#2472]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2472
[Intel XE#2486]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2486
[Intel XE#2541]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2541
[Intel XE#2550]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2550
[Intel XE#2597]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2597
[Intel XE#2652]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2652
[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#2838]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2838
[Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
[Intel XE#288]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/288
[Intel XE#2882]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2882
[Intel XE#2883]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2883
[Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887
[Intel XE#2894]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2894
[Intel XE#2905]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2905
[Intel XE#2927]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2927
[Intel XE#2934]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2934
[Intel XE#2939]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2939
[Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
[Intel XE#3012]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3012
[Intel XE#3026]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3026
[Intel XE#306]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/306
[Intel XE#307]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/307
[Intel XE#3075]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3075
[Intel XE#308]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/308
[Intel XE#3084]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3084
[Intel XE#309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/309
[Intel XE#314]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/314
[Intel XE#3141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3141
[Intel XE#316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/316
[Intel XE#323]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/323
[Intel XE#3278]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3278
[Intel XE#3307]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3307
[Intel XE#3309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3309
[Intel XE#3321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3321
[Intel XE#3414]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3414
[Intel XE#3421]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3421
[Intel XE#3432]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3432
[Intel XE#3442]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3442
[Intel XE#346]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/346
[Intel XE#356]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/356
[Intel XE#3573]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3573
[Intel XE#361]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/361
[Intel XE#362]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/362
[Intel XE#3658]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3658
[Intel XE#366]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/366
[Intel XE#3663]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3663
[Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
[Intel XE#373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/373
[Intel XE#3765]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3765
[Intel XE#3781]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3781
[Intel XE#402]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/402
[Intel XE#455]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/455
[Intel XE#605]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/605
[Intel XE#610]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/610
[Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651
[Intel XE#653]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/653
[Intel XE#656]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/656
[Intel XE#658]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/658
[Intel XE#688]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/688
[Intel XE#703]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/703
[Intel XE#718]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/718
[Intel XE#756]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/756
[Intel XE#776]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/776
[Intel XE#787]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/787
[Intel XE#836]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/836
[Intel XE#870]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/870
[Intel XE#877]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/877
[Intel XE#886]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/886
[Intel XE#911]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/911
[Intel XE#929]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/929
[Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944
[Intel XE#958]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/958
[Intel XE#979]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/979
Build changes
-------------
* IGT: IGT_8157 -> IGTPW_12327
* Linux: xe-2380-63be16e210b1c3e43b43d8ca9b7e17f15142d2c3 -> xe-2386-49cc582754c205bbe43d4ef2b1fd3894bee1f3bd
IGTPW_12327: 9f8406e86d1d9fdce5fea06e856390c7c968cb48 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
IGT_8157: 48a70f6795e6d68b9fae275261ae3b09d3401fe1 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-2380-63be16e210b1c3e43b43d8ca9b7e17f15142d2c3: 63be16e210b1c3e43b43d8ca9b7e17f15142d2c3
xe-2386-49cc582754c205bbe43d4ef2b1fd3894bee1f3bd: 49cc582754c205bbe43d4ef2b1fd3894bee1f3bd
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12327/index.html
[-- Attachment #2: Type: text/html, Size: 79989 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* RE: [PATCH RFC i-g-t] lib/igt_kmemleak: library to interact with kmemleak
2024-12-16 18:46 [PATCH RFC i-g-t] lib/igt_kmemleak: library to interact with kmemleak Peter Senna Tschudin
` (3 preceding siblings ...)
2024-12-17 7:35 ` ✗ Xe.CI.Full: failure " Patchwork
@ 2025-01-07 20:17 ` Cavitt, Jonathan
2025-01-08 5:23 ` Vivekanandan, Balasubramani
2025-01-09 18:18 ` Peter Senna Tschudin
4 siblings, 2 replies; 9+ messages in thread
From: Cavitt, Jonathan @ 2025-01-07 20:17 UTC (permalink / raw)
To: Peter Senna Tschudin, igt-dev@lists.freedesktop.org
Cc: Senna, Peter, Gandi, Ramadevi, Knop, Ryszard, Lattannavar, Sameer,
De Marchi, Lucas, Saarinen, Jani, Piecielska, Katarzyna,
Roper, Matthew D, gregory.f.germano@intel.com, Taylor, Clinton A,
Vivekanandan, Balasubramani, Yu, Jianshui, Cavitt, Jonathan
-----Original Message-----
From: igt-dev <igt-dev-bounces@lists.freedesktop.org> On Behalf Of Peter Senna Tschudin
Sent: Monday, December 16, 2024 10:47 AM
To: igt-dev@lists.freedesktop.org
Cc: Senna, Peter <peter.senna@intel.com>; Gandi, Ramadevi <ramadevi.gandi@intel.com>; Knop, Ryszard <ryszard.knop@intel.com>; Lattannavar, Sameer <sameer.lattannavar@intel.com>; De Marchi, Lucas <lucas.demarchi@intel.com>; Saarinen, Jani <jani.saarinen@intel.com>; Piecielska, Katarzyna <katarzyna.piecielska@intel.com>; Roper, Matthew D <matthew.d.roper@intel.com>; gregory.f.germano@intel.com; Taylor, Clinton A <clinton.a.taylor@intel.com>; Vivekanandan, Balasubramani <balasubramani.vivekanandan@intel.com>; Yu, Jianshui <jianshui.yu@intel.com>; Peter Senna Tschudin <peter.senna@linux.intel.com>
Subject: [PATCH RFC i-g-t] lib/igt_kmemleak: library to interact with kmemleak
>
> From: Peter Senna Tschudin <peter.senna@intel.com>
>
> Adds a simple library for interacting with kmemleak ispired by
> 'tests/amdgpu/amd_mem_leak.c'. Also adds unit testing for the
> library.
>
> To use the library include "igt_kmemleak.h" and:
> 1. igt_kmemleak_init(NULL) /* Returns true if kmemleak is active */
> 2. igt_kmemleak_clear()
> 3. /* Run your test */
> 4. igt_kmemleak_scan()
> 5. if (igt_kmemleak_found_leaks())
> igt_kmemleak_cp_leaks_file(*dst)
>
> CC: ramadevi.gandi@intel.com
> CC: ryszard.knop@intel.com
> CC: sameer.lattannavar@intel.com
> CC: lucas.demarchi@intel.com
> CC: jani.saarinen@intel.com
> CC: katarzyna.piecielska@intel.com
> CC: matthew.d.roper@intel.com
> CC: gregory.f.germano@intel.com
> CC: clinton.a.taylor@intel.com
> CC: balasubramani.vivekanandan@intel.com
> CC: jianshui.yu@intel.com
> Signed-off-by: Peter Senna Tschudin <peter.senna@linux.intel.com>
I'm not particularly well-versed in kmemleak, but nothing about this patch seems out of the
ordinary. Though I can still offer some small style-related suggestions.
Also, do you want a reviewed-by for this? I'd give one right now but I don't think I should be
Acking RFC patches.
> ---
> lib/igt_kmemleak.c | 154 +++++++++++++++++++++
> lib/igt_kmemleak.h | 69 ++++++++++
> lib/meson.build | 1 +
> lib/tests/igt_kmemleak.c | 291 +++++++++++++++++++++++++++++++++++++++
> lib/tests/meson.build | 1 +
> 5 files changed, 516 insertions(+)
> create mode 100644 lib/igt_kmemleak.c
> create mode 100644 lib/igt_kmemleak.h
> create mode 100644 lib/tests/igt_kmemleak.c
>
> diff --git a/lib/igt_kmemleak.c b/lib/igt_kmemleak.c
> new file mode 100644
> index 000000000..02ee0361d
> --- /dev/null
> +++ b/lib/igt_kmemleak.c
> @@ -0,0 +1,154 @@
> +// SPDX-License-Identifier: MIT
> +/*
> + * Copyright © 2024 Intel Corporation
> + */
> +
> +#include <ctype.h>
> +#include <libudev.h>
> +#include <stdio.h>
> +#include <sys/time.h>
> +#include <time.h>
> +
> +#include "igt_core.h"
> +#include "igt_device_scan.h"
> +#include "igt_kmemleak.h"
> +#include "igt_kmod.h"
> +#include "igt_list.h"
> +
> +/* We can change the path for unit testing, see igt_kmemleak_init() */
> +static char igt_kmemleak_file[256] = "/sys/kernel/debug/kmemleak";
> +
> +/**
> + * igt_kmemeak_init:
> + * @igt_kmemleak_file: update the path to kmemleak file to enable unit testing
> + *
> + * Check if kmemleak is enabled in the kernel, if debugfs is mounted and
> + * if kmemleak file is present and readable.
> + *
> + * Returns: true if kmemleak is enabled, false otherwise.
> + */
> +bool igt_kmemleak_init(const char *unit_test_kmemleak_file)
> +{
> + FILE *fp;
> +
> + if (unit_test_kmemleak_file)
> + snprintf(igt_kmemleak_file,
> + sizeof(igt_kmemleak_file),
> + "%s",
> + unit_test_kmemleak_file);
> +
> + fp = fopen(igt_kmemleak_file, "r");
> + if (!fp)
> + return false;
> +
> + fclose(fp);
> + return true;
> +}
> +
> +/**
> + * igt_kmemeak_cmd:
> + * @cmd: command to send to kmemleak
> + *
> + * Send a command to kmemleak.
> + *
> + * Returns: true if sending the command was successful, false otherwise.
> + */
> +bool igt_kmemleak_cmd(const char *cmd)
> +{
> + FILE *fp;
> +
> + fp = fopen(igt_kmemleak_file, "r+");
> + if (!fp)
> + return false;
> +
> + if (fwrite(cmd, 1, strlen(cmd), fp) != strlen(cmd)) {
> + fclose(fp);
> + return false;
> + }
Maybe we can reduce the number of fclose calls by capturing the fwrite return value:
"""
bool igt_kmemleak_cmd(const char *cmd)
{
FILE *fp;
size_t wlen;
fp = fopen(igt_kmemleak_file, "r+");
if (!fp)
return false;
wlen = fwrite(cmd, 1, strlen(cmd), fp);
fclose(fp);
return wlen == strlen(cmd);
}
"""
Though that's not strictly necessary here.
> +
> + fclose(fp);
> + return true;
> +}
> +
> +/**
> + * igt_kmemeak_scan:
> + *
> + * Trigger an immediate scan on kmemleak.
> + *
> + * Returns: true if sending the command to scan was successful, false otherwise.
> + */
> +bool igt_kmemleak_scan(void)
> +{
> + return igt_kmemleak_cmd("scan");
> +}
> +
> +/**
> + * igt_kmemeak_clear:
> + *
> + * Trigger an immediate clear on kmemleak.
> + *
> + * Returns: true if sending the command to clear was successful, false
> + * otherwise.
> + */
> +bool igt_kmemleak_clear(void)
> +{
> + return igt_kmemleak_cmd("clear");
> +}
> +
> +/**
> + * igt_kmemeak_found_leaks:
> + *
> + * Check if kmemleak found any leaks.
> + *
> + * Returns: true if kmemleak found any leaks, false otherwise.
> + */
> +bool igt_kmemleak_found_leaks(void)
> +{
> + FILE *fp;
> + char buf[1];
> +
> + fp = fopen(igt_kmemleak_file, "r");
> + if (!fp)
> + return false;
> +
> + if (fread(buf, 1, 1, fp) <= 0) {
> + fclose(fp);
> + return false;
> + }
Same comment as with igt_kmemleak_cmd above:
"""
bool igt_kmemleak_found_leak(void)
{
FILE *fp;
char buf[1];
size_t rlen;
fp = fopen(igt_kmemleak_file, "r");
if (!fp)
return false;
rlen = fread(buf, 1, 1, fp);
fclose(fp);
return rlen > 0;
}
"""
Though, again, this isn't strictly necessary.
> +
> + /* fread() did read 1 char */
> + fclose(fp);
> + return true;
> +}
> +
> +/**
> + * igt_kmemeak_cp_leaks_file:
> + * @dst: path of destination file including the file name
> + *
> + * Copy kmemleak file to dst.
> + *
> + * Returns: true if copy was successful, false otherwise
> + */
> +bool igt_kmemleak_cp_leaks_file(const char *dst)
> +{
> + FILE *src, *dest;
> + char buf[1024];
> + size_t n;
> +
> + src = fopen(igt_kmemleak_file, "r");
> + if (!src)
> + return false;
> +
> + dest = fopen(dst, "w");
> + if (!dest) {
> + fclose(src);
> + return false;
> + }
> +
> + while ((n = fread(buf, 1, sizeof(buf), src)) > 0)
> + fwrite(buf, 1, n, dest);
> +
> + fclose(src);
> + fclose(dest);
I think these two fclose calls should swap places for style reasons, but it's also
not particularly important.
> + return true;
> +}
> diff --git a/lib/igt_kmemleak.h b/lib/igt_kmemleak.h
> new file mode 100644
> index 000000000..a65f31810
> --- /dev/null
> +++ b/lib/igt_kmemleak.h
> @@ -0,0 +1,69 @@
> +/* SPDX-License-Identifier: MIT
> + * Copyright © 2024 Intel Corporation
> + */
> +
> +#ifndef IGT_KMEMLEAK_H
> +#define IGT_KMEMLEAK_H
> +
> +#include <stdbool.h>
> +
> +/**
> + * igt_kmemeak_init:
> + * @igt_kmemleak_file: update the path to kmemleak file to enable unit testing
> + *
> + * Check if kmemleak is enabled in the kernel, if debugfs is mounted and
> + * if kmemleak file is present and readable.
> + *
> + * Returns: true if kmemleak is enabled, false otherwise.
> + */
I don't think we need comments like this for both the implementation
and the header file. The former should be sufficient.
> +bool igt_kmemleak_init(const char *unit_test_kmemleak_file);
> +
> +/**
> + * igt_kmemeak_cmd:
> + * @cmd: command to send to kmemleak
> + *
> + * Send a command to kmemleak.
> + *
> + * Returns: true if sending the command was successful, false otherwise.
> + */
> +bool igt_kmemleak_cmd(const char *cmd);
> +
> +/**
> + * igt_kmemeak_scan:
> + *
> + * Trigger an immediate scan on kmemleak.
> + *
> + * Returns: true if sending the command to scan was successful, false otherwise.
> + */
> +bool igt_kmemleak_scan(void);
> +
> +/**
> + * igt_kmemeak_clear:
> + *
> + * Trigger an immediate clear on kmemleak.
> + *
> + * Returns: true if sending the command to clear was successful, false
> + * otherwise.
> + */
> +bool igt_kmemleak_clear(void);
> +
> +/**
> + * igt_kmemeak_found_leaks:
> + *
> + * Check if kmemleak found any leaks.
> + *
> + * Returns: true if kmemleak found any leaks, false otherwise.
> + */
> +bool igt_kmemleak_found_leaks(void);
> +
> +/**
> + * igt_kmemeak_cp_leaks_file:
> + * @dst: path of destination file including the file name
> + *
> + * Copy kmemleak file to dst.
> + *
> + * Returns: true if copy was successful, false otherwise
> + */
> +bool igt_kmemleak_cp_leaks_file(const char *dst);
> +
> +#endif /* IGT_KMEMLEAK_H */
> diff --git a/lib/meson.build b/lib/meson.build
> index 640513e6c..24423ef37 100644
> --- a/lib/meson.build
> +++ b/lib/meson.build
> @@ -96,6 +96,7 @@ lib_sources = [
> 'igt_dummyload.c',
> 'igt_store.c',
> 'uwildmat/uwildmat.c',
> + 'igt_kmemleak.c',
> 'igt_kmod.c',
> 'igt_ktap.c',
> 'igt_panfrost.c',
> diff --git a/lib/tests/igt_kmemleak.c b/lib/tests/igt_kmemleak.c
> new file mode 100644
> index 000000000..f5bf5ca07
> --- /dev/null
> +++ b/lib/tests/igt_kmemleak.c
> @@ -0,0 +1,291 @@
> +// SPDX-License-Identifier: MIT
> +/*
> + * Copyright © 2024 Intel Corporation
> + */
> +
> +#include <ctype.h>
> +#include <fcntl.h>
> +#include <stdio.h>
> +#include <zlib.h>
> +
> +#include "igt_core.h"
> +#include "igt_kmemleak.h"
> +
> +const char *kmemleak_file_example =
> +"unreferenced object 0xffff888102a2e638 (size 80):\n"
> +" comm \"swapper/0\", pid 1, jiffies 4294672730\n"
> +" hex dump (first 32 bytes):\n"
> +" 00 00 00 00 00 00 00 00 0d 01 a2 00 00 00 00 00 ................\n"
> +" f0 7c 03 00 00 c9 ff ff 00 00 00 00 00 00 00 00 .|..............\n"
> +" backtrace (crc 2df71a7e):\n"
> +" [<ffffffff824cd71b>] kmemleak_alloc+0x4b/0x80\n"
> +" [<ffffffff814e169b>] kmem_cache_alloc_noprof+0x2ab/0x370\n"
> +" [<ffffffff81c2f4dc>] acpi_ps_alloc_op+0xdc/0xf0\n"
> +" [<ffffffff81c2d650>] acpi_ps_create_op+0x1c0/0x400\n"
> +" [<ffffffff81c2c8dc>] acpi_ps_parse_loop+0x16c/0xa60\n"
> +" [<ffffffff81c2e94f>] acpi_ps_parse_aml+0x22f/0x5f0\n"
> +" [<ffffffff81c2fa82>] acpi_ps_execute_method+0x152/0x380\n"
> +" [<ffffffff81c233ed>] acpi_ns_evaluate+0x31d/0x5e0\n"
> +" [<ffffffff81c2a606>] acpi_evaluate_object+0x206/0x490\n"
> +" [<ffffffff81bf1202>] __acpi_power_off.isra.0+0x22/0x70\n"
> +" [<ffffffff81bf275b>] acpi_turn_off_unused_power_resources+0xbb/0xf0\n"
> +" [<ffffffff83867799>] acpi_scan_init+0x119/0x290\n"
> +" [<ffffffff8386711a>] acpi_init+0x23a/0x590\n"
> +" [<ffffffff81002c71>] do_one_initcall+0x61/0x3d0\n"
> +" [<ffffffff837dce32>] kernel_init_freeable+0x3e2/0x680\n"
> +" [<ffffffff824ca53b>] kernel_init+0x1b/0x170"
> +"unreferenced object 0xffff888102a2ed18 (size 80):\n"
> +" comm \"swapper/0\", pid 1, jiffies 4294672730\n"
> +" hex dump (first 32 bytes):\n"
> +" 38 e6 a2 02 81 88 ff ff 0d 11 2d 00 00 00 00 00 8.........-.....\n"
> +" f2 7c 03 00 00 c9 ff ff 58 ea a2 02 81 88 ff ff .|......X.......\n"
> +" backtrace (crc ec2a8bdc):\n"
> +" [<ffffffff824cd71b>] kmemleak_alloc+0x4b/0x80\n"
> +" [<ffffffff814e169b>] kmem_cache_alloc_noprof+0x2ab/0x370\n"
> +" [<ffffffff81c2f4dc>] acpi_ps_alloc_op+0xdc/0xf0\n"
> +" [<ffffffff81c2d650>] acpi_ps_create_op+0x1c0/0x400\n"
> +" [<ffffffff81c2c8dc>] acpi_ps_parse_loop+0x16c/0xa60\n"
> +" [<ffffffff81c2e94f>] acpi_ps_parse_aml+0x22f/0x5f0\n"
> +" [<ffffffff81c2fa82>] acpi_ps_execute_method+0x152/0x380\n"
> +" [<ffffffff81c233ed>] acpi_ns_evaluate+0x31d/0x5e0\n"
> +" [<ffffffff81c2a606>] acpi_evaluate_object+0x206/0x490\n"
> +" [<ffffffff81bf1202>] __acpi_power_off.isra.0+0x22/0x70\n"
> +" [<ffffffff81bf275b>] acpi_turn_off_unused_power_resources+0xbb/0xf0\n"
> +" [<ffffffff83867799>] acpi_scan_init+0x119/0x290\n"
> +" [<ffffffff8386711a>] acpi_init+0x23a/0x590\n"
> +" [<ffffffff81002c71>] do_one_initcall+0x61/0x3d0\n"
> +" [<ffffffff837dce32>] kernel_init_freeable+0x3e2/0x680\n"
> +" [<ffffffff824ca53b>] kernel_init+0x1b/0x170"
> +"unreferenced object 0xffff888102a2ea58 (size 80):\n"
> +" comm \"swapper/0\", pid 1, jiffies 4294672730\n"
> +" hex dump (first 32 bytes):\n"
> +" 38 e6 a2 02 81 88 ff ff 0d 01 a0 00 00 00 00 00 8...............\n"
> +" f6 7c 03 00 00 c9 ff ff 00 00 00 00 00 00 00 00 .|..............\n"
> +" backtrace (crc f911c0d1):\n"
> +" [<ffffffff824cd71b>] kmemleak_alloc+0x4b/0x80\n"
> +" [<ffffffff814e169b>] kmem_cache_alloc_noprof+0x2ab/0x370\n"
> +" [<ffffffff81c2f4dc>] acpi_ps_alloc_op+0xdc/0xf0\n"
> +" [<ffffffff81c2d650>] acpi_ps_create_op+0x1c0/0x400\n"
> +" [<ffffffff81c2c8dc>] acpi_ps_parse_loop+0x16c/0xa60\n"
> +" [<ffffffff81c2e94f>] acpi_ps_parse_aml+0x22f/0x5f0\n"
> +" [<ffffffff81c2fa82>] acpi_ps_execute_method+0x152/0x380\n"
> +" [<ffffffff81c233ed>] acpi_ns_evaluate+0x31d/0x5e0\n"
> +" [<ffffffff81c2a606>] acpi_evaluate_object+0x206/0x490\n"
> +" [<ffffffff81bf1202>] __acpi_power_off.isra.0+0x22/0x70\n"
> +" [<ffffffff81bf275b>] acpi_turn_off_unused_power_resources+0xbb/0xf0\n"
> +" [<ffffffff83867799>] acpi_scan_init+0x119/0x290\n"
> +" [<ffffffff8386711a>] acpi_init+0x23a/0x590\n"
> +" [<ffffffff81002c71>] do_one_initcall+0x61/0x3d0\n"
> +" [<ffffffff837dce32>] kernel_init_freeable+0x3e2/0x680\n"
> +" [<ffffffff824ca53b>] kernel_init+0x1b/0x170"
> +"unreferenced object 0xffff888102a2e428 (size 80):\n"
> +" comm \"swapper/0\", pid 1, jiffies 4294672730\n"
> +" hex dump (first 32 bytes):\n"
> +" 58 ea a2 02 81 88 ff ff 0d 01 35 00 00 00 00 00 X.........5.....\n"
> +" fc 7c 03 00 00 c9 ff ff 00 00 00 00 00 00 00 00 .|..............\n"
> +" backtrace (crc cb8aaffd):\n"
> +" [<ffffffff824cd71b>] kmemleak_alloc+0x4b/0x80\n"
> +" [<ffffffff814e169b>] kmem_cache_alloc_noprof+0x2ab/0x370\n"
> +" [<ffffffff81c2f4dc>] acpi_ps_alloc_op+0xdc/0xf0\n"
> +" [<ffffffff81c2d650>] acpi_ps_create_op+0x1c0/0x400\n"
> +" [<ffffffff81c2c8dc>] acpi_ps_parse_loop+0x16c/0xa60\n"
> +" [<ffffffff81c2e94f>] acpi_ps_parse_aml+0x22f/0x5f0\n"
> +" [<ffffffff81c2fa82>] acpi_ps_execute_method+0x152/0x380\n"
> +" [<ffffffff81c233ed>] acpi_ns_evaluate+0x31d/0x5e0\n"
> +" [<ffffffff81c2a606>] acpi_evaluate_object+0x206/0x490\n"
> +" [<ffffffff81bf1202>] __acpi_power_off.isra.0+0x22/0x70\n"
> +" [<ffffffff81bf275b>] acpi_turn_off_unused_power_resources+0xbb/0xf0\n"
> +" [<ffffffff83867799>] acpi_scan_init+0x119/0x290\n"
> +" [<ffffffff8386711a>] acpi_init+0x23a/0x590\n"
> +" [<ffffffff81002c71>] do_one_initcall+0x61/0x3d0\n"
> +" [<ffffffff837dce32>] kernel_init_freeable+0x3e2/0x680\n"
> +" [<ffffffff824ca53b>] kernel_init+0x1b/0x170"
> +"unreferenced object 0xffff888102a2e008 (size 80):\n"
> +" comm \"swapper/0\", pid 1, jiffies 4294672730\n"
> +" hex dump (first 32 bytes):\n"
> +" 28 e4 a2 02 81 88 ff ff 0d 01 2d 00 00 00 00 00 (.........-.....\n"
> +" fc 7c 03 00 00 c9 ff ff c8 e2 a2 02 81 88 ff ff .|..............\n"
> +" backtrace (crc 7f883e78):\n"
> +" [<ffffffff824cd71b>] kmemleak_alloc+0x4b/0x80\n"
> +" [<ffffffff814e169b>] kmem_cache_alloc_noprof+0x2ab/0x370\n"
> +" [<ffffffff81c2f4dc>] acpi_ps_alloc_op+0xdc/0xf0\n"
> +" [<ffffffff81c2b9e5>] acpi_ps_get_next_namepath+0x1f5/0x390\n"
> +" [<ffffffff81c2cc15>] acpi_ps_parse_loop+0x4a5/0xa60\n"
> +" [<ffffffff81c2e94f>] acpi_ps_parse_aml+0x22f/0x5f0\n"
> +" [<ffffffff81c2fa82>] acpi_ps_execute_method+0x152/0x380\n"
> +" [<ffffffff81c233ed>] acpi_ns_evaluate+0x31d/0x5e0\n"
> +" [<ffffffff81c2a606>] acpi_evaluate_object+0x206/0x490\n"
> +" [<ffffffff81bf1202>] __acpi_power_off.isra.0+0x22/0x70\n"
> +" [<ffffffff81bf275b>] acpi_turn_off_unused_power_resources+0xbb/0xf0\n"
> +" [<ffffffff83867799>] acpi_scan_init+0x119/0x290\n"
> +" [<ffffffff8386711a>] acpi_init+0x23a/0x590\n"
> +" [<ffffffff81002c71>] do_one_initcall+0x61/0x3d0\n"
> +" [<ffffffff837dce32>] kernel_init_freeable+0x3e2/0x680\n"
> +" [<ffffffff824ca53b>] kernel_init+0x1b/0x170"
> +"unreferenced object 0xffff888102a2e2c8 (size 80):\n"
> +" comm \"swapper/0\", pid 1, jiffies 4294672730\n"
> +" hex dump (first 32 bytes):\n"
> +" 28 e4 a2 02 81 88 ff ff 0d 01 73 00 00 00 00 00 (.........s.....\n"
> +" 00 7d 03 00 00 c9 ff ff 00 00 00 00 00 00 00 00 .}..............\n"
> +" backtrace (crc 338c016):\n"
> +" [<ffffffff824cd71b>] kmemleak_alloc+0x4b/0x80\n"
> +" [<ffffffff814e169b>] kmem_cache_alloc_noprof+0x2ab/0x370\n"
> +" [<ffffffff81c2f4dc>] acpi_ps_alloc_op+0xdc/0xf0\n"
> +" [<ffffffff81c2d650>] acpi_ps_create_op+0x1c0/0x400\n"
> +" [<ffffffff81c2c8dc>] acpi_ps_parse_loop+0x16c/0xa60\n"
> +" [<ffffffff81c2e94f>] acpi_ps_parse_aml+0x22f/0x5f0\n"
> +" [<ffffffff81c2fa82>] acpi_ps_execute_method+0x152/0x380\n"
> +" [<ffffffff81c233ed>] acpi_ns_evaluate+0x31d/0x5e0\n"
> +" [<ffffffff81c2a606>] acpi_evaluate_object+0x206/0x490\n"
> +" [<ffffffff81bf1202>] __acpi_power_off.isra.0+0x22/0x70\n"
> +" [<ffffffff81bf275b>] acpi_turn_off_unused_power_resources+0xbb/0xf0\n"
> +" [<ffffffff83867799>] acpi_scan_init+0x119/0x290\n"
> +" [<ffffffff8386711a>] acpi_init+0x23a/0x590\n"
> +" [<ffffffff81002c71>] do_one_initcall+0x61/0x3d0\n"
> +" [<ffffffff837dce32>] kernel_init_freeable+0x3e2/0x680\n"
> +" [<ffffffff824ca53b>] kernel_init+0x1b/0x170"
> +"unreferenced object 0xffff888102a2e378 (size 80):\n"
> +" comm \"swapper/0\", pid 1, jiffies 4294672730\n"
> +" hex dump (first 32 bytes):\n"
> +" c8 e2 a2 02 81 88 ff ff 0d 01 0d 00 00 00 00 00 ................\n"
> +" 01 7d 03 00 00 c9 ff ff 98 e7 a2 02 81 88 ff ff .}..............\n"
> +" backtrace (crc 665fb8a7):\n"
> +" [<ffffffff824cd71b>] kmemleak_alloc+0x4b/0x80\n"
> +" [<ffffffff814e169b>] kmem_cache_alloc_noprof+0x2ab/0x370\n"
> +" [<ffffffff81c2f4dc>] acpi_ps_alloc_op+0xdc/0xf0\n"
> +" [<ffffffff81c2d650>] acpi_ps_create_op+0x1c0/0x400\n"
> +" [<ffffffff81c2c8dc>] acpi_ps_parse_loop+0x16c/0xa60\n"
> +" [<ffffffff81c2e94f>] acpi_ps_parse_aml+0x22f/0x5f0\n"
> +" [<ffffffff81c2fa82>] acpi_ps_execute_method+0x152/0x380\n"
> +" [<ffffffff81c233ed>] acpi_ns_evaluate+0x31d/0x5e0\n"
> +" [<ffffffff81c2a606>] acpi_evaluate_object+0x206/0x490\n"
> +" [<ffffffff81bf1202>] __acpi_power_off.isra.0+0x22/0x70\n"
> +" [<ffffffff81bf275b>] acpi_turn_off_unused_power_resources+0xbb/0xf0\n"
> +" [<ffffffff83867799>] acpi_scan_init+0x119/0x290\n"
> +" [<ffffffff8386711a>] acpi_init+0x23a/0x590\n"
> +" [<ffffffff81002c71>] do_one_initcall+0x61/0x3d0\n"
> +" [<ffffffff837dce32>] kernel_init_freeable+0x3e2/0x680\n"
> +" [<ffffffff824ca53b>] kernel_init+0x1b/0x170"
> +"unreferenced object 0xffff888102a2e798 (size 80):\n"
> +" comm \"swapper/0\", pid 1, jiffies 4294672730\n"
> +" hex dump (first 32 bytes):\n"
> +" 7c8 e2 a2 02 81 88 ff ff 0d 01 98 00 00 00 00 00 ................\n"
> +" 1b 7d 03 00 00 c9 ff ff 00 00 00 00 00 00 00 00 .}..............\n"
> +" backtrace (crc b7a23a1c):\n"
> +" [<ffffffff824cd71b>] kmemleak_alloc+0x4b/0x80\n"
> +" [<ffffffff814e169b>] kmem_cache_alloc_noprof+0x2ab/0x370\n"
> +" [<ffffffff81c2f4dc>] acpi_ps_alloc_op+0xdc/0xf0\n"
> +" [<ffffffff81c2d650>] acpi_ps_create_op+0x1c0/0x400\n"
> +" [<ffffffff81c2c8dc>] acpi_ps_parse_loop+0x16c/0xa60\n"
> +" [<ffffffff81c2e94f>] acpi_ps_parse_aml+0x22f/0x5f0\n"
> +" [<ffffffff81c2fa82>] acpi_ps_execute_method+0x152/0x380\n"
> +" [<ffffffff81c233ed>] acpi_ns_evaluate+0x31d/0x5e0\n"
> +" [<ffffffff81c2a606>] acpi_evaluate_object+0x206/0x490\n"
> +" [<ffffffff81bf1202>] __acpi_power_off.isra.0+0x22/0x70\n"
> +" [<ffffffff81bf275b>] acpi_turn_off_unused_power_resources+0xbb/0xf0\n"
> +" [<ffffffff83867799>] acpi_scan_init+0x119/0x290\n"
> +" [<ffffffff8386711a>] acpi_init+0x23a/0x590\n"
> +" [<ffffffff81002c71>] do_one_initcall+0x61/0x3d0\n"
> +" [<ffffffff837dce32>] kernel_init_freeable+0x3e2/0x680\n"
> +" [<ffffffff824ca53b>] kernel_init+0x1b/0x170"
> +"unreferenced object 0xffff888102a2e0b8 (size 80):\n"
> +" comm \"swapper/0\", pid 1, jiffies 4294672730\n"
> +" hex dump (first 32 bytes):\n"
> +" 98 e7 a2 02 81 88 ff ff 0d 01 2d 00 00 00 00 00 ..........-.....\n"
> +" 1c 7d 03 00 00 c9 ff ff 00 00 00 00 00 00 00 00 .}..............\n"
> +" backtrace (crc 14d67a9c):\n"
> +" [<ffffffff824cd71b>] kmemleak_alloc+0x4b/0x80\n"
> +" [<ffffffff814e169b>] kmem_cache_alloc_noprof+0x2ab/0x370\n"
> +" [<ffffffff81c2f4dc>] acpi_ps_alloc_op+0xdc/0xf0\n"
> +" [<ffffffff81c2d650>] acpi_ps_create_op+0x1c0/0x400\n"
> +" [<ffffffff81c2c8dc>] acpi_ps_parse_loop+0x16c/0xa60\n"
> +" [<ffffffff81c2e94f>] acpi_ps_parse_aml+0x22f/0x5f0\n"
> +" [<ffffffff81c2fa82>] acpi_ps_execute_method+0x152/0x380\n"
> +" [<ffffffff81c233ed>] acpi_ns_evaluate+0x31d/0x5e0\n"
> +" [<ffffffff81c2a606>] acpi_evaluate_object+0x206/0x490\n"
> +" [<ffffffff81bf1202>] __acpi_power_off.isra.0+0x22/0x70\n"
> +" [<ffffffff81bf275b>] acpi_turn_off_unused_power_resources+0xbb/0xf0\n"
> +" [<ffffffff83867799>] acpi_scan_init+0x119/0x290\n"
> +" [<ffffffff8386711a>] acpi_init+0x23a/0x590\n"
> +" [<ffffffff81002c71>] do_one_initcall+0x61/0x3d0\n"
> +" [<ffffffff837dce32>] kernel_init_freeable+0x3e2/0x680\n"
> +" [<ffffffff824ca53b>] kernel_init+0x1b/0x170\n";
> +
> +static unsigned long crc32_file(int fd)
> +{
> + unsigned long crc;
> + char buf[1024];
> + ssize_t n;
> +
> + crc = crc32(0, Z_NULL, 0);
> + while ((n = read(fd, buf, sizeof(buf))) > 0)
> + crc = crc32(crc, (const Bytef *)buf, n);
> +
> + return crc;
> +}
> +
> +static void test_igt_kmemleak_cp_leaks_file(void)
> +{
> + char dst_file_path[256] = "/tmp/igt_kmemleak_dstfile_XXXXXX";
> + int fd;
> + unsigned long crc;
> +
> + fd = mkstemp(dst_file_path);
> + close(fd);
> +
> + igt_assert(igt_kmemleak_cp_leaks_file(dst_file_path));
> +
> + /* Test that both files have the same size */
> + fd = open(dst_file_path, O_RDONLY);
> + igt_assert(fd >= 0);
> + igt_assert(lseek(fd, 0, SEEK_END) == strlen(kmemleak_file_example));
> + close(fd);
> +
> + /* Test that both files have the same content */
> + crc = crc32(0, Z_NULL, 0);
> + crc = crc32(crc,
> + (const Bytef *)kmemleak_file_example,
> + strlen(kmemleak_file_example));
> +
> + fd = open(dst_file_path, O_RDONLY);
> + igt_assert(fd >= 0);
> + igt_info(" dst_file: %s\n", dst_file_path);
> + close(fd);
> +}
> +
> +static void test_empty_file(void)
> +{
> + char tmp_file_path[256] = "/tmp/igt_kmemleak_test_XXXXXX";
> + int fd;
> +
> + fd = mkstemp(tmp_file_path);
> + igt_assert(fd >= 0);
> + close(fd);
> +
> + /* Set the path for the unit testing file */
> + igt_assert(igt_kmemleak_init(tmp_file_path));
> + igt_assert(!igt_kmemleak_found_leaks());
> +}
> +
> +static void test_non_empty_file(void)
> +{
> + char tmp_file_path[256] = "/tmp/igt_kmemleak_test_XXXXXX";
> + int fd;
> +
> + fd = mkstemp(tmp_file_path);
> + igt_assert(fd >= 0);
> + write(fd, kmemleak_file_example, strlen(kmemleak_file_example));
> +
> + /* Set the path for the unit testing file */
> + igt_assert(igt_kmemleak_init(tmp_file_path));
> +
> + /* Test igt_kmemleak_found_leaks() that should return true */
> + igt_assert(igt_kmemleak_found_leaks());
test_empty_file and test_non_empty_file could probably be consolidated into a single
"test_file" or "test_kmemleak_file" test with a Boolean determining if we want to write
to the test file or not:
"""
static void test_kmemleak_file(bool write)
{
char tmp_file_path[256] = "/tmp/igt_kmemleak_test_XXXXXX";
int fd = mkstemp(tmp_file_path);
igt_assert(fd >= 0);
if (write)
write(fd, kmemleak_file_example, strlen(kmemleak_file_example));
/* Set the path for the unit testing file */
igt_assert(igt_kmemleak_init(tmp_file_path));
/* Test igt_kmemleak_found_leaks() returns true if written */
igt_assert(igt_kmemleak_found_leaks() == write);
close(fd);
}
...
igt_simple_main
{
test_kmemleak_file(false);
test_kmemleak_file(true);
test_igt_kmemleak_cp_leaks_file();
}
"""
> +}
> +
> +igt_simple_main
> +{
> + test_empty_file();
> + test_non_empty_file();
> + test_igt_kmemleak_cp_leaks_file();
It might be better to separate these out into their own subtests:
"""
igt_subtest_f("empty-file")
test_empty_file();
igt_subtest_f("non-empty-file")
test_non_empty_file();
igt_subtest_f("cp-leaks-file")
test_igt_kmemleak_cp_leaks_file();
"""
Though looking at it a bit closer, I see that test_igt_kmemleak_cp_leaks_file depends
on the completion of test_non_empty_file to run properly? Maybe we should separate
the test out into chunks?
Let me try prototyping it here:
"""
--- Original file up to end of crc32_file function is unchanged ---
static void init_kmemleak_file(bool write)
{
--- Same as test_kmemleak_file from earlier suggestion ---
}
static void test_kmemleak_cp_leaks_file(void)
{
char dst_file_path[256] = "/tmp/igt_kmemleak_dstfile_XXXXXX";
int fd;
unsigned long crc;
init_kmemleak_file(true);
fd = mkstemp(dst_file_path);
--- Rest of test is unchanged after this point ---
}
igt_main
{
igt_subtest_f("empty")
init_kmemleak_file(false);
igt_subtest_f("non-empty")
init_kmemleak_file(true);
igt_subtest_f("cp-leaks-file")
test_kmemleak_cp_leaks_file();
}
"""
-Jonathan Cavitt
> +}
> diff --git a/lib/tests/meson.build b/lib/tests/meson.build
> index df8092638..bcbea9ba4 100644
> --- a/lib/tests/meson.build
> +++ b/lib/tests/meson.build
> @@ -15,6 +15,7 @@ lib_tests = [
> 'igt_ktap_parser',
> 'igt_list_only',
> 'igt_invalid_subtest_name',
> + 'igt_kmemleak',
> 'igt_nesting',
> 'igt_no_exit',
> 'igt_runnercomms_packets',
> --
> 2.34.1
>
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH RFC i-g-t] lib/igt_kmemleak: library to interact with kmemleak
2025-01-07 20:17 ` [PATCH RFC i-g-t] " Cavitt, Jonathan
@ 2025-01-08 5:23 ` Vivekanandan, Balasubramani
2025-01-09 18:21 ` Peter Senna Tschudin
2025-01-09 18:18 ` Peter Senna Tschudin
1 sibling, 1 reply; 9+ messages in thread
From: Vivekanandan, Balasubramani @ 2025-01-08 5:23 UTC (permalink / raw)
To: Cavitt, Jonathan, Peter Senna Tschudin,
igt-dev@lists.freedesktop.org
Cc: Senna, Peter, Gandi, Ramadevi, Knop, Ryszard, Lattannavar, Sameer,
De Marchi, Lucas, Saarinen, Jani, Piecielska, Katarzyna,
Roper, Matthew D, gregory.f.germano@intel.com, Taylor, Clinton A,
Yu, Jianshui
On 08.01.2025 01:47, Cavitt, Jonathan wrote:
> -----Original Message-----
> From: igt-dev <igt-dev-bounces@lists.freedesktop.org> On Behalf Of Peter Senna Tschudin
> Sent: Monday, December 16, 2024 10:47 AM
> To: igt-dev@lists.freedesktop.org
> Cc: Senna, Peter <peter.senna@intel.com>; Gandi, Ramadevi <ramadevi.gandi@intel.com>; Knop, Ryszard <ryszard.knop@intel.com>; Lattannavar, Sameer <sameer.lattannavar@intel.com>; De Marchi, Lucas <lucas.demarchi@intel.com>; Saarinen, Jani <jani.saarinen@intel.com>; Piecielska, Katarzyna <katarzyna.piecielska@intel.com>; Roper, Matthew D <matthew.d.roper@intel.com>; gregory.f.germano@intel.com; Taylor, Clinton A <clinton.a.taylor@intel.com>; Vivekanandan, Balasubramani <balasubramani.vivekanandan@intel.com>; Yu, Jianshui <jianshui.yu@intel.com>; Peter Senna Tschudin <peter.senna@linux.intel.com>
> Subject: [PATCH RFC i-g-t] lib/igt_kmemleak: library to interact with kmemleak
> >
> > From: Peter Senna Tschudin <peter.senna@intel.com>
> >
> > Adds a simple library for interacting with kmemleak ispired by
> > 'tests/amdgpu/amd_mem_leak.c'. Also adds unit testing for the
> > library.
> >
> > To use the library include "igt_kmemleak.h" and:
> > 1. igt_kmemleak_init(NULL) /* Returns true if kmemleak is active */
> > 2. igt_kmemleak_clear()
> > 3. /* Run your test */
> > 4. igt_kmemleak_scan()
> > 5. if (igt_kmemleak_found_leaks())
> > igt_kmemleak_cp_leaks_file(*dst)
> >
> > CC: ramadevi.gandi@intel.com
> > CC: ryszard.knop@intel.com
> > CC: sameer.lattannavar@intel.com
> > CC: lucas.demarchi@intel.com
> > CC: jani.saarinen@intel.com
> > CC: katarzyna.piecielska@intel.com
> > CC: matthew.d.roper@intel.com
> > CC: gregory.f.germano@intel.com
> > CC: clinton.a.taylor@intel.com
> > CC: balasubramani.vivekanandan@intel.com
> > CC: jianshui.yu@intel.com
> > Signed-off-by: Peter Senna Tschudin <peter.senna@linux.intel.com>
>
> I'm not particularly well-versed in kmemleak, but nothing about this patch seems out of the
> ordinary. Though I can still offer some small style-related suggestions.
> Also, do you want a reviewed-by for this? I'd give one right now but I don't think I should be
> Acking RFC patches.
>
> > ---
> > lib/igt_kmemleak.c | 154 +++++++++++++++++++++
> > lib/igt_kmemleak.h | 69 ++++++++++
> > lib/meson.build | 1 +
> > lib/tests/igt_kmemleak.c | 291 +++++++++++++++++++++++++++++++++++++++
> > lib/tests/meson.build | 1 +
> > 5 files changed, 516 insertions(+)
> > create mode 100644 lib/igt_kmemleak.c
> > create mode 100644 lib/igt_kmemleak.h
> > create mode 100644 lib/tests/igt_kmemleak.c
> >
> > diff --git a/lib/igt_kmemleak.c b/lib/igt_kmemleak.c
> > new file mode 100644
> > index 000000000..02ee0361d
> > --- /dev/null
> > +++ b/lib/igt_kmemleak.c
> > @@ -0,0 +1,154 @@
> > +// SPDX-License-Identifier: MIT
> > +/*
> > + * Copyright © 2024 Intel Corporation
> > + */
> > +
> > +#include <ctype.h>
> > +#include <libudev.h>
> > +#include <stdio.h>
> > +#include <sys/time.h>
> > +#include <time.h>
> > +
> > +#include "igt_core.h"
> > +#include "igt_device_scan.h"
> > +#include "igt_kmemleak.h"
> > +#include "igt_kmod.h"
> > +#include "igt_list.h"
> > +
> > +/* We can change the path for unit testing, see igt_kmemleak_init() */
> > +static char igt_kmemleak_file[256] = "/sys/kernel/debug/kmemleak";
> > +
> > +/**
> > + * igt_kmemeak_init:
> > + * @igt_kmemleak_file: update the path to kmemleak file to enable unit testing
> > + *
> > + * Check if kmemleak is enabled in the kernel, if debugfs is mounted and
> > + * if kmemleak file is present and readable.
> > + *
> > + * Returns: true if kmemleak is enabled, false otherwise.
> > + */
> > +bool igt_kmemleak_init(const char *unit_test_kmemleak_file)
> > +{
> > + FILE *fp;
> > +
> > + if (unit_test_kmemleak_file)
> > + snprintf(igt_kmemleak_file,
> > + sizeof(igt_kmemleak_file),
> > + "%s",
> > + unit_test_kmemleak_file);
> > +
> > + fp = fopen(igt_kmemleak_file, "r");
> > + if (!fp)
> > + return false;
> > +
> > + fclose(fp);
> > + return true;
> > +}
> > +
> > +/**
> > + * igt_kmemeak_cmd:
> > + * @cmd: command to send to kmemleak
> > + *
> > + * Send a command to kmemleak.
> > + *
> > + * Returns: true if sending the command was successful, false otherwise.
> > + */
> > +bool igt_kmemleak_cmd(const char *cmd)
> > +{
> > + FILE *fp;
> > +
> > + fp = fopen(igt_kmemleak_file, "r+");
> > + if (!fp)
> > + return false;
> > +
> > + if (fwrite(cmd, 1, strlen(cmd), fp) != strlen(cmd)) {
> > + fclose(fp);
> > + return false;
> > + }
>
> Maybe we can reduce the number of fclose calls by capturing the fwrite return value:
> """
> bool igt_kmemleak_cmd(const char *cmd)
> {
> FILE *fp;
> size_t wlen;
>
> fp = fopen(igt_kmemleak_file, "r+");
> if (!fp)
> return false;
>
> wlen = fwrite(cmd, 1, strlen(cmd), fp);
> fclose(fp);
>
> return wlen == strlen(cmd);
> }
> """
> Though that's not strictly necessary here.
>
> > +
> > + fclose(fp);
> > + return true;
> > +}
> > +
> > +/**
> > + * igt_kmemeak_scan:
> > + *
> > + * Trigger an immediate scan on kmemleak.
> > + *
> > + * Returns: true if sending the command to scan was successful, false otherwise.
> > + */
> > +bool igt_kmemleak_scan(void)
> > +{
> > + return igt_kmemleak_cmd("scan");
> > +}
> > +
> > +/**
> > + * igt_kmemeak_clear:
> > + *
> > + * Trigger an immediate clear on kmemleak.
> > + *
> > + * Returns: true if sending the command to clear was successful, false
> > + * otherwise.
> > + */
> > +bool igt_kmemleak_clear(void)
> > +{
> > + return igt_kmemleak_cmd("clear");
> > +}
> > +
> > +/**
> > + * igt_kmemeak_found_leaks:
> > + *
> > + * Check if kmemleak found any leaks.
> > + *
> > + * Returns: true if kmemleak found any leaks, false otherwise.
> > + */
> > +bool igt_kmemleak_found_leaks(void)
> > +{
> > + FILE *fp;
> > + char buf[1];
> > +
> > + fp = fopen(igt_kmemleak_file, "r");
> > + if (!fp)
> > + return false;
> > +
> > + if (fread(buf, 1, 1, fp) <= 0) {
> > + fclose(fp);
> > + return false;
> > + }
>
> Same comment as with igt_kmemleak_cmd above:
> """
> bool igt_kmemleak_found_leak(void)
> {
> FILE *fp;
> char buf[1];
> size_t rlen;
>
> fp = fopen(igt_kmemleak_file, "r");
> if (!fp)
> return false;
>
> rlen = fread(buf, 1, 1, fp);
> fclose(fp);
>
> return rlen > 0;
> }
> """
> Though, again, this isn't strictly necessary.
>
> > +
> > + /* fread() did read 1 char */
> > + fclose(fp);
> > + return true;
> > +}
> > +
> > +/**
> > + * igt_kmemeak_cp_leaks_file:
> > + * @dst: path of destination file including the file name
> > + *
> > + * Copy kmemleak file to dst.
> > + *
> > + * Returns: true if copy was successful, false otherwise
> > + */
> > +bool igt_kmemleak_cp_leaks_file(const char *dst)
> > +{
> > + FILE *src, *dest;
> > + char buf[1024];
> > + size_t n;
> > +
> > + src = fopen(igt_kmemleak_file, "r");
> > + if (!src)
> > + return false;
> > +
> > + dest = fopen(dst, "w");
> > + if (!dest) {
> > + fclose(src);
> > + return false;
> > + }
> > +
> > + while ((n = fread(buf, 1, sizeof(buf), src)) > 0)
> > + fwrite(buf, 1, n, dest);
> > +
> > + fclose(src);
> > + fclose(dest);
>
> I think these two fclose calls should swap places for style reasons, but it's also
> not particularly important.
>
> > + return true;
> > +}
> > diff --git a/lib/igt_kmemleak.h b/lib/igt_kmemleak.h
> > new file mode 100644
> > index 000000000..a65f31810
> > --- /dev/null
> > +++ b/lib/igt_kmemleak.h
> > @@ -0,0 +1,69 @@
> > +/* SPDX-License-Identifier: MIT
> > + * Copyright © 2024 Intel Corporation
> > + */
> > +
> > +#ifndef IGT_KMEMLEAK_H
> > +#define IGT_KMEMLEAK_H
> > +
> > +#include <stdbool.h>
> > +
> > +/**
> > + * igt_kmemeak_init:
> > + * @igt_kmemleak_file: update the path to kmemleak file to enable unit testing
> > + *
> > + * Check if kmemleak is enabled in the kernel, if debugfs is mounted and
> > + * if kmemleak file is present and readable.
> > + *
> > + * Returns: true if kmemleak is enabled, false otherwise.
> > + */
>
> I don't think we need comments like this for both the implementation
> and the header file. The former should be sufficient.
>
> > +bool igt_kmemleak_init(const char *unit_test_kmemleak_file);
> > +
> > +/**
> > + * igt_kmemeak_cmd:
> > + * @cmd: command to send to kmemleak
> > + *
> > + * Send a command to kmemleak.
> > + *
> > + * Returns: true if sending the command was successful, false otherwise.
> > + */
> > +bool igt_kmemleak_cmd(const char *cmd);
> > +
> > +/**
> > + * igt_kmemeak_scan:
> > + *
> > + * Trigger an immediate scan on kmemleak.
> > + *
> > + * Returns: true if sending the command to scan was successful, false otherwise.
> > + */
> > +bool igt_kmemleak_scan(void);
> > +
> > +/**
> > + * igt_kmemeak_clear:
> > + *
> > + * Trigger an immediate clear on kmemleak.
> > + *
> > + * Returns: true if sending the command to clear was successful, false
> > + * otherwise.
> > + */
> > +bool igt_kmemleak_clear(void);
> > +
> > +/**
> > + * igt_kmemeak_found_leaks:
> > + *
> > + * Check if kmemleak found any leaks.
> > + *
> > + * Returns: true if kmemleak found any leaks, false otherwise.
> > + */
> > +bool igt_kmemleak_found_leaks(void);
> > +
> > +/**
> > + * igt_kmemeak_cp_leaks_file:
> > + * @dst: path of destination file including the file name
> > + *
> > + * Copy kmemleak file to dst.
> > + *
> > + * Returns: true if copy was successful, false otherwise
> > + */
> > +bool igt_kmemleak_cp_leaks_file(const char *dst);
> > +
> > +#endif /* IGT_KMEMLEAK_H */
> > diff --git a/lib/meson.build b/lib/meson.build
> > index 640513e6c..24423ef37 100644
> > --- a/lib/meson.build
> > +++ b/lib/meson.build
> > @@ -96,6 +96,7 @@ lib_sources = [
> > 'igt_dummyload.c',
> > 'igt_store.c',
> > 'uwildmat/uwildmat.c',
> > + 'igt_kmemleak.c',
> > 'igt_kmod.c',
> > 'igt_ktap.c',
> > 'igt_panfrost.c',
> > diff --git a/lib/tests/igt_kmemleak.c b/lib/tests/igt_kmemleak.c
> > new file mode 100644
> > index 000000000..f5bf5ca07
> > --- /dev/null
> > +++ b/lib/tests/igt_kmemleak.c
> > @@ -0,0 +1,291 @@
> > +// SPDX-License-Identifier: MIT
> > +/*
> > + * Copyright © 2024 Intel Corporation
> > + */
> > +
> > +#include <ctype.h>
> > +#include <fcntl.h>
> > +#include <stdio.h>
> > +#include <zlib.h>
> > +
> > +#include "igt_core.h"
> > +#include "igt_kmemleak.h"
> > +
> > +const char *kmemleak_file_example =
> > +"unreferenced object 0xffff888102a2e638 (size 80):\n"
> > +" comm \"swapper/0\", pid 1, jiffies 4294672730\n"
> > +" hex dump (first 32 bytes):\n"
> > +" 00 00 00 00 00 00 00 00 0d 01 a2 00 00 00 00 00 ................\n"
> > +" f0 7c 03 00 00 c9 ff ff 00 00 00 00 00 00 00 00 .|..............\n"
> > +" backtrace (crc 2df71a7e):\n"
> > +" [<ffffffff824cd71b>] kmemleak_alloc+0x4b/0x80\n"
> > +" [<ffffffff814e169b>] kmem_cache_alloc_noprof+0x2ab/0x370\n"
> > +" [<ffffffff81c2f4dc>] acpi_ps_alloc_op+0xdc/0xf0\n"
> > +" [<ffffffff81c2d650>] acpi_ps_create_op+0x1c0/0x400\n"
> > +" [<ffffffff81c2c8dc>] acpi_ps_parse_loop+0x16c/0xa60\n"
> > +" [<ffffffff81c2e94f>] acpi_ps_parse_aml+0x22f/0x5f0\n"
> > +" [<ffffffff81c2fa82>] acpi_ps_execute_method+0x152/0x380\n"
> > +" [<ffffffff81c233ed>] acpi_ns_evaluate+0x31d/0x5e0\n"
> > +" [<ffffffff81c2a606>] acpi_evaluate_object+0x206/0x490\n"
> > +" [<ffffffff81bf1202>] __acpi_power_off.isra.0+0x22/0x70\n"
> > +" [<ffffffff81bf275b>] acpi_turn_off_unused_power_resources+0xbb/0xf0\n"
> > +" [<ffffffff83867799>] acpi_scan_init+0x119/0x290\n"
> > +" [<ffffffff8386711a>] acpi_init+0x23a/0x590\n"
> > +" [<ffffffff81002c71>] do_one_initcall+0x61/0x3d0\n"
> > +" [<ffffffff837dce32>] kernel_init_freeable+0x3e2/0x680\n"
> > +" [<ffffffff824ca53b>] kernel_init+0x1b/0x170"
> > +"unreferenced object 0xffff888102a2ed18 (size 80):\n"
> > +" comm \"swapper/0\", pid 1, jiffies 4294672730\n"
> > +" hex dump (first 32 bytes):\n"
> > +" 38 e6 a2 02 81 88 ff ff 0d 11 2d 00 00 00 00 00 8.........-.....\n"
> > +" f2 7c 03 00 00 c9 ff ff 58 ea a2 02 81 88 ff ff .|......X.......\n"
> > +" backtrace (crc ec2a8bdc):\n"
> > +" [<ffffffff824cd71b>] kmemleak_alloc+0x4b/0x80\n"
> > +" [<ffffffff814e169b>] kmem_cache_alloc_noprof+0x2ab/0x370\n"
> > +" [<ffffffff81c2f4dc>] acpi_ps_alloc_op+0xdc/0xf0\n"
> > +" [<ffffffff81c2d650>] acpi_ps_create_op+0x1c0/0x400\n"
> > +" [<ffffffff81c2c8dc>] acpi_ps_parse_loop+0x16c/0xa60\n"
> > +" [<ffffffff81c2e94f>] acpi_ps_parse_aml+0x22f/0x5f0\n"
> > +" [<ffffffff81c2fa82>] acpi_ps_execute_method+0x152/0x380\n"
> > +" [<ffffffff81c233ed>] acpi_ns_evaluate+0x31d/0x5e0\n"
> > +" [<ffffffff81c2a606>] acpi_evaluate_object+0x206/0x490\n"
> > +" [<ffffffff81bf1202>] __acpi_power_off.isra.0+0x22/0x70\n"
> > +" [<ffffffff81bf275b>] acpi_turn_off_unused_power_resources+0xbb/0xf0\n"
> > +" [<ffffffff83867799>] acpi_scan_init+0x119/0x290\n"
> > +" [<ffffffff8386711a>] acpi_init+0x23a/0x590\n"
> > +" [<ffffffff81002c71>] do_one_initcall+0x61/0x3d0\n"
> > +" [<ffffffff837dce32>] kernel_init_freeable+0x3e2/0x680\n"
> > +" [<ffffffff824ca53b>] kernel_init+0x1b/0x170"
> > +"unreferenced object 0xffff888102a2ea58 (size 80):\n"
> > +" comm \"swapper/0\", pid 1, jiffies 4294672730\n"
> > +" hex dump (first 32 bytes):\n"
> > +" 38 e6 a2 02 81 88 ff ff 0d 01 a0 00 00 00 00 00 8...............\n"
> > +" f6 7c 03 00 00 c9 ff ff 00 00 00 00 00 00 00 00 .|..............\n"
> > +" backtrace (crc f911c0d1):\n"
> > +" [<ffffffff824cd71b>] kmemleak_alloc+0x4b/0x80\n"
> > +" [<ffffffff814e169b>] kmem_cache_alloc_noprof+0x2ab/0x370\n"
> > +" [<ffffffff81c2f4dc>] acpi_ps_alloc_op+0xdc/0xf0\n"
> > +" [<ffffffff81c2d650>] acpi_ps_create_op+0x1c0/0x400\n"
> > +" [<ffffffff81c2c8dc>] acpi_ps_parse_loop+0x16c/0xa60\n"
> > +" [<ffffffff81c2e94f>] acpi_ps_parse_aml+0x22f/0x5f0\n"
> > +" [<ffffffff81c2fa82>] acpi_ps_execute_method+0x152/0x380\n"
> > +" [<ffffffff81c233ed>] acpi_ns_evaluate+0x31d/0x5e0\n"
> > +" [<ffffffff81c2a606>] acpi_evaluate_object+0x206/0x490\n"
> > +" [<ffffffff81bf1202>] __acpi_power_off.isra.0+0x22/0x70\n"
> > +" [<ffffffff81bf275b>] acpi_turn_off_unused_power_resources+0xbb/0xf0\n"
> > +" [<ffffffff83867799>] acpi_scan_init+0x119/0x290\n"
> > +" [<ffffffff8386711a>] acpi_init+0x23a/0x590\n"
> > +" [<ffffffff81002c71>] do_one_initcall+0x61/0x3d0\n"
> > +" [<ffffffff837dce32>] kernel_init_freeable+0x3e2/0x680\n"
> > +" [<ffffffff824ca53b>] kernel_init+0x1b/0x170"
> > +"unreferenced object 0xffff888102a2e428 (size 80):\n"
> > +" comm \"swapper/0\", pid 1, jiffies 4294672730\n"
> > +" hex dump (first 32 bytes):\n"
> > +" 58 ea a2 02 81 88 ff ff 0d 01 35 00 00 00 00 00 X.........5.....\n"
> > +" fc 7c 03 00 00 c9 ff ff 00 00 00 00 00 00 00 00 .|..............\n"
> > +" backtrace (crc cb8aaffd):\n"
> > +" [<ffffffff824cd71b>] kmemleak_alloc+0x4b/0x80\n"
> > +" [<ffffffff814e169b>] kmem_cache_alloc_noprof+0x2ab/0x370\n"
> > +" [<ffffffff81c2f4dc>] acpi_ps_alloc_op+0xdc/0xf0\n"
> > +" [<ffffffff81c2d650>] acpi_ps_create_op+0x1c0/0x400\n"
> > +" [<ffffffff81c2c8dc>] acpi_ps_parse_loop+0x16c/0xa60\n"
> > +" [<ffffffff81c2e94f>] acpi_ps_parse_aml+0x22f/0x5f0\n"
> > +" [<ffffffff81c2fa82>] acpi_ps_execute_method+0x152/0x380\n"
> > +" [<ffffffff81c233ed>] acpi_ns_evaluate+0x31d/0x5e0\n"
> > +" [<ffffffff81c2a606>] acpi_evaluate_object+0x206/0x490\n"
> > +" [<ffffffff81bf1202>] __acpi_power_off.isra.0+0x22/0x70\n"
> > +" [<ffffffff81bf275b>] acpi_turn_off_unused_power_resources+0xbb/0xf0\n"
> > +" [<ffffffff83867799>] acpi_scan_init+0x119/0x290\n"
> > +" [<ffffffff8386711a>] acpi_init+0x23a/0x590\n"
> > +" [<ffffffff81002c71>] do_one_initcall+0x61/0x3d0\n"
> > +" [<ffffffff837dce32>] kernel_init_freeable+0x3e2/0x680\n"
> > +" [<ffffffff824ca53b>] kernel_init+0x1b/0x170"
> > +"unreferenced object 0xffff888102a2e008 (size 80):\n"
> > +" comm \"swapper/0\", pid 1, jiffies 4294672730\n"
> > +" hex dump (first 32 bytes):\n"
> > +" 28 e4 a2 02 81 88 ff ff 0d 01 2d 00 00 00 00 00 (.........-.....\n"
> > +" fc 7c 03 00 00 c9 ff ff c8 e2 a2 02 81 88 ff ff .|..............\n"
> > +" backtrace (crc 7f883e78):\n"
> > +" [<ffffffff824cd71b>] kmemleak_alloc+0x4b/0x80\n"
> > +" [<ffffffff814e169b>] kmem_cache_alloc_noprof+0x2ab/0x370\n"
> > +" [<ffffffff81c2f4dc>] acpi_ps_alloc_op+0xdc/0xf0\n"
> > +" [<ffffffff81c2b9e5>] acpi_ps_get_next_namepath+0x1f5/0x390\n"
> > +" [<ffffffff81c2cc15>] acpi_ps_parse_loop+0x4a5/0xa60\n"
> > +" [<ffffffff81c2e94f>] acpi_ps_parse_aml+0x22f/0x5f0\n"
> > +" [<ffffffff81c2fa82>] acpi_ps_execute_method+0x152/0x380\n"
> > +" [<ffffffff81c233ed>] acpi_ns_evaluate+0x31d/0x5e0\n"
> > +" [<ffffffff81c2a606>] acpi_evaluate_object+0x206/0x490\n"
> > +" [<ffffffff81bf1202>] __acpi_power_off.isra.0+0x22/0x70\n"
> > +" [<ffffffff81bf275b>] acpi_turn_off_unused_power_resources+0xbb/0xf0\n"
> > +" [<ffffffff83867799>] acpi_scan_init+0x119/0x290\n"
> > +" [<ffffffff8386711a>] acpi_init+0x23a/0x590\n"
> > +" [<ffffffff81002c71>] do_one_initcall+0x61/0x3d0\n"
> > +" [<ffffffff837dce32>] kernel_init_freeable+0x3e2/0x680\n"
> > +" [<ffffffff824ca53b>] kernel_init+0x1b/0x170"
> > +"unreferenced object 0xffff888102a2e2c8 (size 80):\n"
> > +" comm \"swapper/0\", pid 1, jiffies 4294672730\n"
> > +" hex dump (first 32 bytes):\n"
> > +" 28 e4 a2 02 81 88 ff ff 0d 01 73 00 00 00 00 00 (.........s.....\n"
> > +" 00 7d 03 00 00 c9 ff ff 00 00 00 00 00 00 00 00 .}..............\n"
> > +" backtrace (crc 338c016):\n"
> > +" [<ffffffff824cd71b>] kmemleak_alloc+0x4b/0x80\n"
> > +" [<ffffffff814e169b>] kmem_cache_alloc_noprof+0x2ab/0x370\n"
> > +" [<ffffffff81c2f4dc>] acpi_ps_alloc_op+0xdc/0xf0\n"
> > +" [<ffffffff81c2d650>] acpi_ps_create_op+0x1c0/0x400\n"
> > +" [<ffffffff81c2c8dc>] acpi_ps_parse_loop+0x16c/0xa60\n"
> > +" [<ffffffff81c2e94f>] acpi_ps_parse_aml+0x22f/0x5f0\n"
> > +" [<ffffffff81c2fa82>] acpi_ps_execute_method+0x152/0x380\n"
> > +" [<ffffffff81c233ed>] acpi_ns_evaluate+0x31d/0x5e0\n"
> > +" [<ffffffff81c2a606>] acpi_evaluate_object+0x206/0x490\n"
> > +" [<ffffffff81bf1202>] __acpi_power_off.isra.0+0x22/0x70\n"
> > +" [<ffffffff81bf275b>] acpi_turn_off_unused_power_resources+0xbb/0xf0\n"
> > +" [<ffffffff83867799>] acpi_scan_init+0x119/0x290\n"
> > +" [<ffffffff8386711a>] acpi_init+0x23a/0x590\n"
> > +" [<ffffffff81002c71>] do_one_initcall+0x61/0x3d0\n"
> > +" [<ffffffff837dce32>] kernel_init_freeable+0x3e2/0x680\n"
> > +" [<ffffffff824ca53b>] kernel_init+0x1b/0x170"
> > +"unreferenced object 0xffff888102a2e378 (size 80):\n"
> > +" comm \"swapper/0\", pid 1, jiffies 4294672730\n"
> > +" hex dump (first 32 bytes):\n"
> > +" c8 e2 a2 02 81 88 ff ff 0d 01 0d 00 00 00 00 00 ................\n"
> > +" 01 7d 03 00 00 c9 ff ff 98 e7 a2 02 81 88 ff ff .}..............\n"
> > +" backtrace (crc 665fb8a7):\n"
> > +" [<ffffffff824cd71b>] kmemleak_alloc+0x4b/0x80\n"
> > +" [<ffffffff814e169b>] kmem_cache_alloc_noprof+0x2ab/0x370\n"
> > +" [<ffffffff81c2f4dc>] acpi_ps_alloc_op+0xdc/0xf0\n"
> > +" [<ffffffff81c2d650>] acpi_ps_create_op+0x1c0/0x400\n"
> > +" [<ffffffff81c2c8dc>] acpi_ps_parse_loop+0x16c/0xa60\n"
> > +" [<ffffffff81c2e94f>] acpi_ps_parse_aml+0x22f/0x5f0\n"
> > +" [<ffffffff81c2fa82>] acpi_ps_execute_method+0x152/0x380\n"
> > +" [<ffffffff81c233ed>] acpi_ns_evaluate+0x31d/0x5e0\n"
> > +" [<ffffffff81c2a606>] acpi_evaluate_object+0x206/0x490\n"
> > +" [<ffffffff81bf1202>] __acpi_power_off.isra.0+0x22/0x70\n"
> > +" [<ffffffff81bf275b>] acpi_turn_off_unused_power_resources+0xbb/0xf0\n"
> > +" [<ffffffff83867799>] acpi_scan_init+0x119/0x290\n"
> > +" [<ffffffff8386711a>] acpi_init+0x23a/0x590\n"
> > +" [<ffffffff81002c71>] do_one_initcall+0x61/0x3d0\n"
> > +" [<ffffffff837dce32>] kernel_init_freeable+0x3e2/0x680\n"
> > +" [<ffffffff824ca53b>] kernel_init+0x1b/0x170"
> > +"unreferenced object 0xffff888102a2e798 (size 80):\n"
> > +" comm \"swapper/0\", pid 1, jiffies 4294672730\n"
> > +" hex dump (first 32 bytes):\n"
> > +" 7c8 e2 a2 02 81 88 ff ff 0d 01 98 00 00 00 00 00 ................\n"
> > +" 1b 7d 03 00 00 c9 ff ff 00 00 00 00 00 00 00 00 .}..............\n"
> > +" backtrace (crc b7a23a1c):\n"
> > +" [<ffffffff824cd71b>] kmemleak_alloc+0x4b/0x80\n"
> > +" [<ffffffff814e169b>] kmem_cache_alloc_noprof+0x2ab/0x370\n"
> > +" [<ffffffff81c2f4dc>] acpi_ps_alloc_op+0xdc/0xf0\n"
> > +" [<ffffffff81c2d650>] acpi_ps_create_op+0x1c0/0x400\n"
> > +" [<ffffffff81c2c8dc>] acpi_ps_parse_loop+0x16c/0xa60\n"
> > +" [<ffffffff81c2e94f>] acpi_ps_parse_aml+0x22f/0x5f0\n"
> > +" [<ffffffff81c2fa82>] acpi_ps_execute_method+0x152/0x380\n"
> > +" [<ffffffff81c233ed>] acpi_ns_evaluate+0x31d/0x5e0\n"
> > +" [<ffffffff81c2a606>] acpi_evaluate_object+0x206/0x490\n"
> > +" [<ffffffff81bf1202>] __acpi_power_off.isra.0+0x22/0x70\n"
> > +" [<ffffffff81bf275b>] acpi_turn_off_unused_power_resources+0xbb/0xf0\n"
> > +" [<ffffffff83867799>] acpi_scan_init+0x119/0x290\n"
> > +" [<ffffffff8386711a>] acpi_init+0x23a/0x590\n"
> > +" [<ffffffff81002c71>] do_one_initcall+0x61/0x3d0\n"
> > +" [<ffffffff837dce32>] kernel_init_freeable+0x3e2/0x680\n"
> > +" [<ffffffff824ca53b>] kernel_init+0x1b/0x170"
> > +"unreferenced object 0xffff888102a2e0b8 (size 80):\n"
> > +" comm \"swapper/0\", pid 1, jiffies 4294672730\n"
> > +" hex dump (first 32 bytes):\n"
> > +" 98 e7 a2 02 81 88 ff ff 0d 01 2d 00 00 00 00 00 ..........-.....\n"
> > +" 1c 7d 03 00 00 c9 ff ff 00 00 00 00 00 00 00 00 .}..............\n"
> > +" backtrace (crc 14d67a9c):\n"
> > +" [<ffffffff824cd71b>] kmemleak_alloc+0x4b/0x80\n"
> > +" [<ffffffff814e169b>] kmem_cache_alloc_noprof+0x2ab/0x370\n"
> > +" [<ffffffff81c2f4dc>] acpi_ps_alloc_op+0xdc/0xf0\n"
> > +" [<ffffffff81c2d650>] acpi_ps_create_op+0x1c0/0x400\n"
> > +" [<ffffffff81c2c8dc>] acpi_ps_parse_loop+0x16c/0xa60\n"
> > +" [<ffffffff81c2e94f>] acpi_ps_parse_aml+0x22f/0x5f0\n"
> > +" [<ffffffff81c2fa82>] acpi_ps_execute_method+0x152/0x380\n"
> > +" [<ffffffff81c233ed>] acpi_ns_evaluate+0x31d/0x5e0\n"
> > +" [<ffffffff81c2a606>] acpi_evaluate_object+0x206/0x490\n"
> > +" [<ffffffff81bf1202>] __acpi_power_off.isra.0+0x22/0x70\n"
> > +" [<ffffffff81bf275b>] acpi_turn_off_unused_power_resources+0xbb/0xf0\n"
> > +" [<ffffffff83867799>] acpi_scan_init+0x119/0x290\n"
> > +" [<ffffffff8386711a>] acpi_init+0x23a/0x590\n"
> > +" [<ffffffff81002c71>] do_one_initcall+0x61/0x3d0\n"
> > +" [<ffffffff837dce32>] kernel_init_freeable+0x3e2/0x680\n"
> > +" [<ffffffff824ca53b>] kernel_init+0x1b/0x170\n";
> > +
> > +static unsigned long crc32_file(int fd)
> > +{
> > + unsigned long crc;
> > + char buf[1024];
> > + ssize_t n;
> > +
> > + crc = crc32(0, Z_NULL, 0);
> > + while ((n = read(fd, buf, sizeof(buf))) > 0)
> > + crc = crc32(crc, (const Bytef *)buf, n);
> > +
> > + return crc;
> > +}
> > +
> > +static void test_igt_kmemleak_cp_leaks_file(void)
> > +{
> > + char dst_file_path[256] = "/tmp/igt_kmemleak_dstfile_XXXXXX";
> > + int fd;
> > + unsigned long crc;
> > +
> > + fd = mkstemp(dst_file_path);
> > + close(fd);
> > +
> > + igt_assert(igt_kmemleak_cp_leaks_file(dst_file_path));
> > +
> > + /* Test that both files have the same size */
> > + fd = open(dst_file_path, O_RDONLY);
> > + igt_assert(fd >= 0);
> > + igt_assert(lseek(fd, 0, SEEK_END) == strlen(kmemleak_file_example));
> > + close(fd);
> > +
> > + /* Test that both files have the same content */
> > + crc = crc32(0, Z_NULL, 0);
> > + crc = crc32(crc,
> > + (const Bytef *)kmemleak_file_example,
> > + strlen(kmemleak_file_example));
Did you miss the changes to compare the CRC?
Regards,
Bala
> > +
> > + fd = open(dst_file_path, O_RDONLY);
> > + igt_assert(fd >= 0);
> > + igt_info(" dst_file: %s\n", dst_file_path);
> > + close(fd);
> > +}
> > +
> > +static void test_empty_file(void)
> > +{
> > + char tmp_file_path[256] = "/tmp/igt_kmemleak_test_XXXXXX";
> > + int fd;
> > +
> > + fd = mkstemp(tmp_file_path);
> > + igt_assert(fd >= 0);
> > + close(fd);
> > +
> > + /* Set the path for the unit testing file */
> > + igt_assert(igt_kmemleak_init(tmp_file_path));
> > + igt_assert(!igt_kmemleak_found_leaks());
> > +}
> > +
> > +static void test_non_empty_file(void)
> > +{
> > + char tmp_file_path[256] = "/tmp/igt_kmemleak_test_XXXXXX";
> > + int fd;
> > +
> > + fd = mkstemp(tmp_file_path);
> > + igt_assert(fd >= 0);
> > + write(fd, kmemleak_file_example, strlen(kmemleak_file_example));
> > +
> > + /* Set the path for the unit testing file */
> > + igt_assert(igt_kmemleak_init(tmp_file_path));
> > +
> > + /* Test igt_kmemleak_found_leaks() that should return true */
> > + igt_assert(igt_kmemleak_found_leaks());
>
> test_empty_file and test_non_empty_file could probably be consolidated into a single
> "test_file" or "test_kmemleak_file" test with a Boolean determining if we want to write
> to the test file or not:
> """
> static void test_kmemleak_file(bool write)
> {
> char tmp_file_path[256] = "/tmp/igt_kmemleak_test_XXXXXX";
> int fd = mkstemp(tmp_file_path);
> igt_assert(fd >= 0);
>
> if (write)
> write(fd, kmemleak_file_example, strlen(kmemleak_file_example));
>
> /* Set the path for the unit testing file */
> igt_assert(igt_kmemleak_init(tmp_file_path));
>
> /* Test igt_kmemleak_found_leaks() returns true if written */
> igt_assert(igt_kmemleak_found_leaks() == write);
>
> close(fd);
> }
> ...
> igt_simple_main
> {
> test_kmemleak_file(false);
> test_kmemleak_file(true);
> test_igt_kmemleak_cp_leaks_file();
> }
> """
>
> > +}
> > +
> > +igt_simple_main
> > +{
> > + test_empty_file();
> > + test_non_empty_file();
> > + test_igt_kmemleak_cp_leaks_file();
>
> It might be better to separate these out into their own subtests:
> """
> igt_subtest_f("empty-file")
> test_empty_file();
> igt_subtest_f("non-empty-file")
> test_non_empty_file();
> igt_subtest_f("cp-leaks-file")
> test_igt_kmemleak_cp_leaks_file();
> """
>
> Though looking at it a bit closer, I see that test_igt_kmemleak_cp_leaks_file depends
> on the completion of test_non_empty_file to run properly? Maybe we should separate
> the test out into chunks?
>
> Let me try prototyping it here:
> """
> --- Original file up to end of crc32_file function is unchanged ---
>
> static void init_kmemleak_file(bool write)
> {
> --- Same as test_kmemleak_file from earlier suggestion ---
> }
>
> static void test_kmemleak_cp_leaks_file(void)
> {
> char dst_file_path[256] = "/tmp/igt_kmemleak_dstfile_XXXXXX";
> int fd;
> unsigned long crc;
>
> init_kmemleak_file(true);
>
> fd = mkstemp(dst_file_path);
> --- Rest of test is unchanged after this point ---
> }
>
> igt_main
> {
> igt_subtest_f("empty")
> init_kmemleak_file(false);
> igt_subtest_f("non-empty")
> init_kmemleak_file(true);
> igt_subtest_f("cp-leaks-file")
> test_kmemleak_cp_leaks_file();
> }
> """
>
> -Jonathan Cavitt
>
> > +}
> > diff --git a/lib/tests/meson.build b/lib/tests/meson.build
> > index df8092638..bcbea9ba4 100644
> > --- a/lib/tests/meson.build
> > +++ b/lib/tests/meson.build
> > @@ -15,6 +15,7 @@ lib_tests = [
> > 'igt_ktap_parser',
> > 'igt_list_only',
> > 'igt_invalid_subtest_name',
> > + 'igt_kmemleak',
> > 'igt_nesting',
> > 'igt_no_exit',
> > 'igt_runnercomms_packets',
> > --
> > 2.34.1
> >
> >
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH RFC i-g-t] lib/igt_kmemleak: library to interact with kmemleak
2025-01-07 20:17 ` [PATCH RFC i-g-t] " Cavitt, Jonathan
2025-01-08 5:23 ` Vivekanandan, Balasubramani
@ 2025-01-09 18:18 ` Peter Senna Tschudin
1 sibling, 0 replies; 9+ messages in thread
From: Peter Senna Tschudin @ 2025-01-09 18:18 UTC (permalink / raw)
To: Cavitt, Jonathan, igt-dev@lists.freedesktop.org
Cc: Senna, Peter, Gandi, Ramadevi, Knop, Ryszard, Lattannavar, Sameer,
De Marchi, Lucas, Saarinen, Jani, Piecielska, Katarzyna,
Roper, Matthew D, gregory.f.germano@intel.com, Taylor, Clinton A,
Vivekanandan, Balasubramani, Yu, Jianshui
Dear Jonathan,
Please see my comments below.
[...]
>
> I'm not particularly well-versed in kmemleak, but nothing about this patch seems out of the
> ordinary. Though I can still offer some small style-related suggestions.
> Also, do you want a reviewed-by for this? I'd give one right now but I don't think I should be
> Acking RFC patches.
I sent V1 a few instants ago, I guess it is a better place for a RB.
[...]
>
> Maybe we can reduce the number of fclose calls by capturing the fwrite return value:
> """
> bool igt_kmemleak_cmd(const char *cmd)
> {
> FILE *fp;
> size_t wlen;
>
> fp = fopen(igt_kmemleak_file, "r+");
> if (!fp)
> return false;
>
> wlen = fwrite(cmd, 1, strlen(cmd), fp);
> fclose(fp);
>
> return wlen == strlen(cmd);
> }
> """
> Though that's not strictly necessary here.
Thank you for that! This change is on V1.
[...]
>
> Same comment as with igt_kmemleak_cmd above:
> """
> bool igt_kmemleak_found_leak(void)
> {
> FILE *fp;
> char buf[1];
> size_t rlen;
>
> fp = fopen(igt_kmemleak_file, "r");
> if (!fp)
> return false;
>
> rlen = fread(buf, 1, 1, fp);
> fclose(fp);
>
> return rlen > 0;
> }
> """
> Though, again, this isn't strictly necessary.
Thank you for that! This change is on V1.
[...]
>
> I don't think we need comments like this for both the implementation
> and the header file. The former should be sufficient.
Removed comments from the header file on V1.
[...]
>
> test_empty_file and test_non_empty_file could probably be consolidated into a single
> "test_file" or "test_kmemleak_file" test with a Boolean determining if we want to write
> to the test file or not:
> """
> static void test_kmemleak_file(bool write)
> {
> char tmp_file_path[256] = "/tmp/igt_kmemleak_test_XXXXXX";
> int fd = mkstemp(tmp_file_path);
> igt_assert(fd >= 0);
>
> if (write)
> write(fd, kmemleak_file_example, strlen(kmemleak_file_example));
>
> /* Set the path for the unit testing file */
> igt_assert(igt_kmemleak_init(tmp_file_path));
>
> /* Test igt_kmemleak_found_leaks() returns true if written */
> igt_assert(igt_kmemleak_found_leaks() == write);
>
> close(fd);
I moved the shared part to test_kmemleak_file() but kept the two separate functions
for the differences between them.
[...]
>
> It might be better to separate these out into their own subtests:
> """
> igt_subtest_f("empty-file")
> test_empty_file();
> igt_subtest_f("non-empty-file")
> test_non_empty_file();
> igt_subtest_f("cp-leaks-file")
> test_igt_kmemleak_cp_leaks_file();
> """
Unfortunately this does not work. These are unit testing tests, and `meson test -C build`
gets confused by the macro igt_subtest_f. That or I am doing something wrong.
>
> Though looking at it a bit closer, I see that test_igt_kmemleak_cp_leaks_file depends
> on the completion of test_non_empty_file to run properly? Maybe we should separate
> the test out into chunks?
Oh, test_igt_kmemleak_cp_leaks_file() was broken. I changed it so that it has no dependencies,
and that it uses crc32_file()...
>
> Let me try prototyping it here:
> """
> --- Original file up to end of crc32_file function is unchanged ---
>
> static void init_kmemleak_file(bool write)
> {
> --- Same as test_kmemleak_file from earlier suggestion ---
> }
>
> static void test_kmemleak_cp_leaks_file(void)
> {
> char dst_file_path[256] = "/tmp/igt_kmemleak_dstfile_XXXXXX";
> int fd;
> unsigned long crc;
>
> init_kmemleak_file(true);
>
> fd = mkstemp(dst_file_path);
> --- Rest of test is unchanged after this point ---
> }
>
> igt_main
> {
> igt_subtest_f("empty")
> init_kmemleak_file(false);
> igt_subtest_f("non-empty")
> init_kmemleak_file(true);
> igt_subtest_f("cp-leaks-file")
> test_kmemleak_cp_leaks_file();
> }
> """
It ended slightly different than that. Let me know what you think.
Thank you!
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH RFC i-g-t] lib/igt_kmemleak: library to interact with kmemleak
2025-01-08 5:23 ` Vivekanandan, Balasubramani
@ 2025-01-09 18:21 ` Peter Senna Tschudin
0 siblings, 0 replies; 9+ messages in thread
From: Peter Senna Tschudin @ 2025-01-09 18:21 UTC (permalink / raw)
To: Vivekanandan, Balasubramani, Cavitt, Jonathan,
igt-dev@lists.freedesktop.org
Cc: Senna, Peter, Gandi, Ramadevi, Knop, Ryszard, Lattannavar, Sameer,
De Marchi, Lucas, Saarinen, Jani, Piecielska, Katarzyna,
Roper, Matthew D, gregory.f.germano@intel.com, Taylor, Clinton A,
Yu, Jianshui
Dear Bala,
Thank you for your review!
[...]
>>> +static void test_igt_kmemleak_cp_leaks_file(void)
>>> +{
>>> + char dst_file_path[256] = "/tmp/igt_kmemleak_dstfile_XXXXXX";
>>> + int fd;
>>> + unsigned long crc;
>>> +
>>> + fd = mkstemp(dst_file_path);
>>> + close(fd);
>>> +
>>> + igt_assert(igt_kmemleak_cp_leaks_file(dst_file_path));
>>> +
>>> + /* Test that both files have the same size */
>>> + fd = open(dst_file_path, O_RDONLY);
>>> + igt_assert(fd >= 0);
>>> + igt_assert(lseek(fd, 0, SEEK_END) == strlen(kmemleak_file_example));
>>> + close(fd);
>>> +
>>> + /* Test that both files have the same content */
>>> + crc = crc32(0, Z_NULL, 0);
>>> + crc = crc32(crc,
>>> + (const Bytef *)kmemleak_file_example,
>>> + strlen(kmemleak_file_example));
>
> Did you miss the changes to compare the CRC?
Not only that, but I did not use crc32_file()... Thank you for catching this!
Fixed on V1.
>
> Regards,
> Bala
>
[...]
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2025-01-09 18:21 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-16 18:46 [PATCH RFC i-g-t] lib/igt_kmemleak: library to interact with kmemleak Peter Senna Tschudin
2024-12-16 22:59 ` ✗ GitLab.Pipeline: warning for " Patchwork
2024-12-16 23:26 ` ✗ i915.CI.BAT: failure " Patchwork
2024-12-17 1:29 ` ✓ Xe.CI.BAT: success " Patchwork
2024-12-17 7:35 ` ✗ Xe.CI.Full: failure " Patchwork
2025-01-07 20:17 ` [PATCH RFC i-g-t] " Cavitt, Jonathan
2025-01-08 5:23 ` Vivekanandan, Balasubramani
2025-01-09 18:21 ` Peter Senna Tschudin
2025-01-09 18:18 ` Peter Senna Tschudin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox