File 0004-kernel-config-handle-del_timer_sync-kABI-rename.patch of Package mhvtl
From ad0ad22e21a470981a801ddf2a14e5165431f88a Mon Sep 17 00:00:00 2001
From: Lee Duncan <lduncan@suse.com>
Date: Wed, 4 Jun 2025 09:45:39 -0700
Subject: [PATCH 4/4] kernel config: handle del_timer_sync() kABI rename
In newer kernels (starting with 6.10), the del_timer_sync()
kABI has been replaced/renamed to timer_delete_sync().
Signed-off-by: Lee Duncan <lduncan@suse.com>
---
kernel/config.sh | 11 +++++++++++
kernel/mhvtl.c | 15 ++++++++++++++-
2 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/kernel/config.sh b/kernel/config.sh
index 1bb32d2918e7..2c9da68d6eb6 100755
--- a/kernel/config.sh
+++ b/kernel/config.sh
@@ -167,4 +167,15 @@ else
echo "#undef DEFINE_QUEUE_LIMITS_SCSI_DEV_CONFIGURE"
fi >> "${output}"
+#
+# check if del_timer_sync() has been renamed to timer_delete()
+#
+if grep -F -q 'int timer_delete_sync(' "${hdrs}/linux/timer.h"; then
+ echo "#ifndef USE_TIMER_DELETE_NOT_DEL_TIMER"
+ echo "#define USE_TIMER_DELETE_NOT_DEL_TIMER"
+ echo "#endif"
+else
+ echo "#undef USE_TIMER_DELETE_NOT_DEL_TIMER"
+fi >> "${output}"
+
printf '\n\n#endif /* _MHVTL_KERNEL_CONFIG_H */\n' >> "${output}"
diff --git a/kernel/mhvtl.c b/kernel/mhvtl.c
index 983d7db91e23..8bfee8770221 100644
--- a/kernel/mhvtl.c
+++ b/kernel/mhvtl.c
@@ -1002,7 +1002,11 @@ static int mhvtl_stop_queued_cmnd(struct scsi_cmnd *SCpnt)
spin_lock_irqsave(&lu->cmd_list_lock, iflags);
list_for_each_entry_safe(sqcp, n, &lu->cmd_list, queued_sibling) {
if (sqcp->state && (SCpnt == sqcp->a_cmnd)) {
+#ifdef USE_TIMER_DELETE_NOT_DEL_TIMER
+ timer_delete_sync(&sqcp->cmnd_timer);
+#else
del_timer_sync(&sqcp->cmnd_timer);
+#endif
sqcp->state = CMD_STATE_FREE;
sqcp->a_cmnd = NULL;
found = 1;
@@ -1031,7 +1035,11 @@ static void mhvtl_stop_all_queued(void)
list_for_each_entry_safe(sqcp, n, &lu->cmd_list,
queued_sibling) {
if (sqcp->state && sqcp->a_cmnd) {
+#ifdef USE_TIMER_DELETE_NOT_DEL_TIMER
+ timer_delete_sync(&sqcp->cmnd_timer);
+#else
del_timer_sync(&sqcp->cmnd_timer);
+#endif
sqcp->state = CMD_STATE_FREE;
sqcp->a_cmnd = NULL;
__mhvtl_remove_sqcp(sqcp);
@@ -1599,9 +1607,14 @@ static int mhvtl_put_user_data(unsigned int minor, char __user *arg)
s[2],
s[12],
s[13]);
- } else
+ } else {
sqcp->a_cmnd->result = DID_OK << 16;
+ }
+#ifdef USE_TIMER_DELETE_NOT_DEL_TIMER
+ timer_delete_sync(&sqcp->cmnd_timer);
+#else
del_timer_sync(&sqcp->cmnd_timer);
+#endif
if (sqcp->done_funct)
sqcp->done_funct(sqcp->a_cmnd);
else
--
2.43.0