1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
|
From 7306759dd38f19d3ed7411e8fe23fa7a4c40b228 Mon Sep 17 00:00:00 2001
From: Eric Naim <dnaim@cachyos.org>
Date: Mon, 7 Apr 2025 16:32:31 +0800
Subject: [PATCH 4/8] kernel-open/nvidia: Use new timer functions for 6.15
Signed-off-by: Eric Naim <dnaim@cachyos.org>
---
kernel-open/nvidia-drm/nvidia-drm-os-interface.c | 5 +++++
kernel-open/nvidia-modeset/nvidia-modeset-linux.c | 9 +++++++++
kernel-open/nvidia/nv-nano-timer.c | 12 +++++++++++-
kernel-open/nvidia/nv.c | 9 +++++++++
4 files changed, 34 insertions(+), 1 deletion(-)
diff --git a/kernel-open/nvidia-drm/nvidia-drm-os-interface.c b/kernel-open/nvidia-drm/nvidia-drm-os-interface.c
index f22afd77..59ecaf2d 100644
--- a/kernel-open/nvidia-drm/nvidia-drm-os-interface.c
+++ b/kernel-open/nvidia-drm/nvidia-drm-os-interface.c
@@ -21,6 +21,7 @@
*/
#include <linux/slab.h>
+#include <linux/version.h>
#include "nvidia-drm-os-interface.h"
@@ -238,7 +239,11 @@ unsigned long nv_drm_timeout_from_ms(NvU64 relative_timeout_ms)
bool nv_drm_del_timer_sync(nv_drm_timer *timer)
{
+#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 15, 0)
if (del_timer_sync(&timer->kernel_timer)) {
+#else
+ if (timer_delete_sync(&timer->kernel_timer)) {
+#endif
return true;
} else {
return false;
diff --git a/kernel-open/nvidia-modeset/nvidia-modeset-linux.c b/kernel-open/nvidia-modeset/nvidia-modeset-linux.c
index 29fbf016..351e2475 100644
--- a/kernel-open/nvidia-modeset/nvidia-modeset-linux.c
+++ b/kernel-open/nvidia-modeset/nvidia-modeset-linux.c
@@ -37,6 +37,7 @@
#include <linux/freezer.h>
#include <linux/poll.h>
#include <linux/cdev.h>
+#include <linux/version.h>
#include <acpi/video.h>
@@ -748,7 +749,11 @@ static void nvkms_kthread_q_callback(void *arg)
* pending timers and than waiting for workqueue callbacks.
*/
if (timer->kernel_timer_created) {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 15, 0)
del_timer_sync(&timer->kernel_timer);
+#else
+ timer_delete_sync(&timer->kernel_timer);
+#endif
}
/*
@@ -1932,7 +1937,11 @@ restart:
* completion, and we wait for queue completion with
* nv_kthread_q_stop below.
*/
+#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 15, 0)
if (del_timer_sync(&timer->kernel_timer) == 1) {
+#else
+ if (timer_delete_sync(&timer->kernel_timer) == 1) {
+#endif
/* We've deactivated timer so we need to clean after it */
list_del(&timer->timers_list);
diff --git a/kernel-open/nvidia/nv-nano-timer.c b/kernel-open/nvidia/nv-nano-timer.c
index 0ca78e1f..1a300ba3 100644
--- a/kernel-open/nvidia/nv-nano-timer.c
+++ b/kernel-open/nvidia/nv-nano-timer.c
@@ -27,6 +27,7 @@
#include <linux/hrtimer.h>
#include <linux/ktime.h>
#include <linux/timer.h>
+#include <linux/version.h>
#include "os-interface.h"
#include "nv-linux.h"
@@ -46,7 +47,7 @@ struct nv_nano_timer
};
/*!
- * @brief runs nano second resolution timer callback
+ * @brief runs nano second resolution timer callback
*
* @param[in] nv_nstimer Pointer to nv_nano_timer_t object
*/
@@ -150,8 +151,13 @@ void NV_API_CALL nv_create_nano_timer(
nv_nstimer->nv_nano_timer_callback = nvidia_nano_timer_callback;
#if NV_NANO_TIMER_USE_HRTIMER
+#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 15, 0)
hrtimer_init(&nv_nstimer->hr_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
nv_nstimer->hr_timer.function = nv_nano_timer_callback_typed_data;
+#else
+ hrtimer_setup(&nv_nstimer->hr_timer, nv_nano_timer_callback_typed_data,
+ CLOCK_MONOTONIC, HRTIMER_MODE_REL);
+#endif /* Kernel < 6.15 */
#else
#if defined(NV_TIMER_SETUP_PRESENT)
timer_setup(&nv_nstimer->jiffy_timer, nv_jiffy_timer_callback_typed_data, 0);
@@ -203,7 +209,11 @@ void NV_API_CALL nv_cancel_nano_timer(
#if NV_NANO_TIMER_USE_HRTIMER
hrtimer_cancel(&nv_nstimer->hr_timer);
#else
+#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 15, 0)
del_timer_sync(&nv_nstimer->jiffy_timer);
+#else
+ timer_delete_sync(&nv_nstimer->jiffy_timer);
+#endif
#endif
}
diff --git a/kernel-open/nvidia/nv.c b/kernel-open/nvidia/nv.c
index a3a36d3c..915604f6 100644
--- a/kernel-open/nvidia/nv.c
+++ b/kernel-open/nvidia/nv.c
@@ -22,6 +22,7 @@
*/
#include <linux/module.h> // for MODULE_FIRMWARE
+#include <linux/version.h>
// must precede "nv.h" and "nv-firmware.h" includes
#define NV_FIRMWARE_FOR_NAME(name) "nvidia/" NV_VERSION_STRING "/" name ".bin"
@@ -4189,7 +4190,11 @@ int NV_API_CALL nv_stop_rc_timer(
nv_printf(NV_DBG_INFO, "NVRM: stopping rc timer\n");
nv->rc_timer_enabled = 0;
+#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 15, 0)
del_timer_sync(&nvl->rc_timer.kernel_timer);
+#else
+ timer_delete_sync(&nvl->rc_timer.kernel_timer);
+#endif
nv_printf(NV_DBG_INFO, "NVRM: rc timer stopped\n");
return 0;
@@ -4233,7 +4238,11 @@ void NV_API_CALL nv_stop_snapshot_timer(void)
NV_SPIN_UNLOCK_IRQRESTORE(&nvl->snapshot_timer_lock, flags);
if (timer_active)
+#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 15, 0)
del_timer_sync(&nvl->snapshot_timer.kernel_timer);
+#else
+ timer_delete_sync(&nvl->snapshot_timer.kernel_timer);
+#endif
}
void NV_API_CALL nv_flush_snapshot_timer(void)
--
2.48.0.rc1
|