From: Peter Senna Tschudin <peter.senna@linux.intel.com>
To: igt-dev@lists.freedesktop.org
Cc: Peter Senna Tschudin <peter.senna@linux.intel.com>,
Gustavo Souza <gustavo.souza@linux.intel.com>
Subject: [PATCH v2 i-g-t 2/2] lib/igt_kmod: Add IGT_HOOK_POST_GPUKMOD_UNBIND
Date: Sun, 13 Jul 2025 13:23:54 +0200 [thread overview]
Message-ID: <20250713112354.32032-3-peter.senna@linux.intel.com> (raw)
In-Reply-To: <20250713112354.32032-1-peter.senna@linux.intel.com>
Adds an igt_hook after the unbind operation of the GPU kmod intended as
a strategice entry point for kmemleak scans.
Can be used with --hook 'post-gpukmod-unbind:...'
Cc: Gustavo Souza <gustavo.souza@linux.intel.com>
Signed-off-by: Peter Senna Tschudin <peter.senna@linux.intel.com>
---
v2:
- Added code ducumentation for new hook
- Added env var IGT_HOOK_KMOD_UNBIND_MODULE_NAME and extended help text
lib/igt_hook.c | 10 ++++++++++
lib/igt_hook.h | 3 +++
lib/igt_kmod.c | 8 ++++++++
3 files changed, 21 insertions(+)
diff --git a/lib/igt_hook.c b/lib/igt_hook.c
index 8932d118d..a5a55a659 100644
--- a/lib/igt_hook.c
+++ b/lib/igt_hook.c
@@ -74,6 +74,8 @@ static const char *igt_hook_evt_type_to_name(enum igt_hook_evt_type evt_type)
return "post-subtest";
case IGT_HOOK_POST_TEST:
return "post-test";
+ case IGT_HOOK_POST_GPUKMOD_UNBIND:
+ return "post-gpukmod-unbind";
case IGT_HOOK_NUM_EVENTS:
break;
/* No "default:" case, to force a warning from -Wswitch in case we miss
@@ -335,6 +337,7 @@ static void igt_hook_update_env_vars(struct igt_hook *igt_hook, struct igt_hook_
setenv("IGT_HOOK_TEST", igt_hook->test_name, 1);
setenv("IGT_HOOK_SUBTEST", igt_hook->subtest_name, 1);
setenv("IGT_HOOK_DYN_SUBTEST", igt_hook->dyn_subtest_name, 1);
+ setenv("IGT_HOOK_KMOD_UNBIND_MODULE_NAME", evt->target_name ?: "", 1);
setenv("IGT_HOOK_RESULT", evt->result ?: "", 1);
}
@@ -470,6 +473,9 @@ below:\n\
case IGT_HOOK_POST_TEST:
desc = "Occurs after a test case has finished.";
break;
+ case IGT_HOOK_POST_GPUKMOD_UNBIND:
+ desc = "Occurs after the GPU kernel module is unbound from the device.";
+ break;
default:
desc = "MISSING DESCRIPTION";
}
@@ -504,6 +510,10 @@ available to the command:\n\
values are: SUCCESS, SKIP or FAIL. This is only applicable on \"post-*\"\n\
events and will be the empty string for other types of events.\n\
\n\
+ IGT_HOOK_KMOD_UNBIND_MODULE_NAME\n\
+ Name of the GPU kernel module that was unbound from the device. This is only\n\
+ applicable on the `IGT_HOOK_POST_GPUKMOD_UNBIND` event and will be the empty\n\
+ string for other types of events.\n\
\n\
Note that %s can be passed multiple times. Each descriptor is evaluated in turn\n\
when matching events and running hook commands.\n\
diff --git a/lib/igt_hook.h b/lib/igt_hook.h
index e9f97b79b..d80a012f4 100644
--- a/lib/igt_hook.h
+++ b/lib/igt_hook.h
@@ -26,6 +26,8 @@ struct igt_hook;
* @IGT_HOOK_POST_SUBTEST: Occurs after the execution of a subtest..
* @IGT_HOOK_POST_TEST: Occurs after a test case (executable) is finished with
* the test code.
+ * @IGT_HOOK_POST_GPUKMOD_UNBIND: Occurs after the GPU kernel module is
+ * unbound from the device.
* @IGT_HOOK_NUM_EVENTS: This is not really an event and represents the number
* of possible events tracked by igt_hook.
*
@@ -39,6 +41,7 @@ enum igt_hook_evt_type {
IGT_HOOK_POST_DYN_SUBTEST,
IGT_HOOK_POST_SUBTEST,
IGT_HOOK_POST_TEST,
+ IGT_HOOK_POST_GPUKMOD_UNBIND,
IGT_HOOK_NUM_EVENTS /* This must always be the last one. */
};
diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
index 6d7f5705c..9b95a2288 100644
--- a/lib/igt_kmod.c
+++ b/lib/igt_kmod.c
@@ -41,6 +41,7 @@
#include "igt_aux.h"
#include "igt_core.h"
#include "igt_debugfs.h"
+#include "igt_hook.h"
#include "igt_kmod.h"
#include "igt_ktap.h"
#include "igt_sysfs.h"
@@ -604,6 +605,7 @@ int __igt_intel_driver_unload(char **who, const char *driver)
*/
int igt_kmod_unbind(const char *mod_name, const char *pci_device)
{
+ struct igt_hook *igt_hook = NULL;
char path[PATH_MAX];
struct dirent *de;
int dirlen;
@@ -634,6 +636,12 @@ int igt_kmod_unbind(const char *mod_name, const char *pci_device)
closedir(dir);
+ igt_hook = igt_core_get_igt_hook();
+ igt_hook_event_notify(igt_hook, &(struct igt_hook_evt){
+ .evt_type = IGT_HOOK_POST_GPUKMOD_UNBIND,
+ .target_name = mod_name,
+ });
+
return 0;
}
--
2.43.0
next prev parent reply other threads:[~2025-07-13 11:24 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-13 11:23 [PATCH v2 i-g-t 0/2] Add post-gpukmod-unbind igt_hook Peter Senna Tschudin
2025-07-13 11:23 ` [PATCH v2 i-g-t 1/2] igt_core_get_igt_hook: igt_hook pointer for other libs Peter Senna Tschudin
2025-07-14 13:32 ` Gustavo Sousa
2025-07-13 11:23 ` Peter Senna Tschudin [this message]
2025-07-14 13:51 ` [PATCH v2 i-g-t 2/2] lib/igt_kmod: Add IGT_HOOK_POST_GPUKMOD_UNBIND Gustavo Sousa
2025-07-13 11:55 ` ✓ Xe.CI.BAT: success for Add post-gpukmod-unbind igt_hook (rev2) Patchwork
2025-07-13 12:01 ` ✗ i915.CI.BAT: failure " Patchwork
2025-07-13 12:58 ` ✗ Xe.CI.Full: " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250713112354.32032-3-peter.senna@linux.intel.com \
--to=peter.senna@linux.intel.com \
--cc=gustavo.souza@linux.intel.com \
--cc=igt-dev@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox