From 3e91a4c15396353f40899cc0b4ca41096be51005 Mon Sep 17 00:00:00 2001 From: Eric Naim 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 --- 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 +#include #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 cbe2ad18..6dc5bc9f 100644 --- a/kernel-open/nvidia-modeset/nvidia-modeset-linux.c +++ b/kernel-open/nvidia-modeset/nvidia-modeset-linux.c @@ -37,6 +37,7 @@ #include #include #include +#include #include @@ -738,7 +739,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 } /* @@ -1922,7 +1927,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 6549c82f..c5d61418 100644 --- a/kernel-open/nvidia/nv-nano-timer.c +++ b/kernel-open/nvidia/nv-nano-timer.c @@ -27,6 +27,7 @@ #include #include #include +#include #include "os-interface.h" #include "nv-linux.h" @@ -50,7 +51,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 */ @@ -154,8 +155,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); @@ -207,7 +213,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 8edc4919..e8e1fc09 100644 --- a/kernel-open/nvidia/nv.c +++ b/kernel-open/nvidia/nv.c @@ -22,6 +22,7 @@ */ #include // for MODULE_FIRMWARE +#include // must precede "nv.h" and "nv-firmware.h" includes #define NV_FIRMWARE_FOR_NAME(name) "nvidia/" NV_VERSION_STRING "/" name ".bin" @@ -4106,7 +4107,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; @@ -4150,7 +4155,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.49.0.391.g4bbb303af6