From ca5dce41e03cf017405214aca548ab3ae2618aea Mon Sep 17 00:00:00 2001 From: Mathias Krause Date: Thu, 20 Nov 2025 16:40:41 +0000 Subject: [PATCH 1/9] conftest: Fix drm_connector_helper_funcs_mode_valid_has_const_mode_arg The return type is expected to be 'enum drm_mode_status', fix that. Signed-off-by: Mathias Krause --- kernel-open/conftest.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/kernel-open/conftest.sh b/kernel-open/conftest.sh index cb4da277a..8ca86db4b 100755 --- a/kernel-open/conftest.sh +++ b/kernel-open/conftest.sh @@ -5033,8 +5033,9 @@ compile_test() { CODE=" #include - static int conftest_drm_connector_mode_valid(struct drm_connector *connector, - const struct drm_display_mode *mode) { + static enum drm_mode_status + conftest_drm_connector_mode_valid(struct drm_connector *connector, + const struct drm_display_mode *mode) { return 0; } From 256e6dfb17c07c544d0aca0e31b7f3120952f511 Mon Sep 17 00:00:00 2001 From: Mathias Krause Date: Thu, 20 Nov 2025 16:49:51 +0000 Subject: [PATCH 2/9] nvidia: Fix nvswitch_task_dispatch() prototype nvswitch_task_dispatch() is supposed to be of type nv_q_func_t which expects a void pointer argument. Fix that to make it compatible with strongly type-based CFI implementations like RAP, as found in grsecurity. Signed-off-by: Mathias Krause --- kernel-open/nvidia/linux_nvswitch.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/kernel-open/nvidia/linux_nvswitch.c b/kernel-open/nvidia/linux_nvswitch.c index 015de1ca6..be2e0be70 100644 --- a/kernel-open/nvidia/linux_nvswitch.c +++ b/kernel-open/nvidia/linux_nvswitch.c @@ -259,7 +259,7 @@ struct file_operations ctl_fops = static int nvswitch_initialize_device_interrupt(NVSWITCH_DEV *nvswitch_dev); static void nvswitch_shutdown_device_interrupt(NVSWITCH_DEV *nvswitch_dev); static void nvswitch_load_bar_info(NVSWITCH_DEV *nvswitch_dev); -static void nvswitch_task_dispatch(NVSWITCH_DEV *nvswitch_dev); +static void nvswitch_task_dispatch(void *nvswitch_dev); static NvBool nvswitch_is_device_blacklisted @@ -313,7 +313,7 @@ nvswitch_init_background_tasks NV_ATOMIC_SET(nvswitch_dev->task_q_ready, 1); nv_kthread_q_item_init(&nvswitch_dev->task_item, - (nv_q_func_t) &nvswitch_task_dispatch, + &nvswitch_task_dispatch, nvswitch_dev); if (!nv_kthread_q_schedule_q_item(&nvswitch_dev->task_q, @@ -1208,9 +1208,10 @@ nvswitch_isr_thread static void nvswitch_task_dispatch ( - NVSWITCH_DEV *nvswitch_dev + void *_nvswitch_dev ) { + NVSWITCH_DEV *nvswitch_dev = _nvswitch_dev; NvU64 nsec; NvU64 timeout; NvS64 rc; From d6f709c2108e813a89fda9687424540d459262a2 Mon Sep 17 00:00:00 2001 From: Mathias Krause Date: Wed, 4 Mar 2026 10:05:59 +0000 Subject: [PATCH 3/9] nvidia: Fix TMR_CALLBACK_FUNCTION type The retun type should be 'void' as all users of tmrCtrlCmdEventCreate() pass a 'void (*)(void *)' function pointer. Signed-off-by: Mathias Krause --- src/nvidia/src/kernel/gpu/timer/timer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nvidia/src/kernel/gpu/timer/timer.c b/src/nvidia/src/kernel/gpu/timer/timer.c index 360be5b05..c55e13cb9 100644 --- a/src/nvidia/src/kernel/gpu/timer/timer.c +++ b/src/nvidia/src/kernel/gpu/timer/timer.c @@ -1771,7 +1771,7 @@ tmrapiDeregisterEvents_IMPL(TimerApi *pTimerApi) // inner callback and calls it correctly from itself. Hacky but it should work around the // limitations in the SDK (all RM derived types undefined, so TIMEPROC type is impossible). // -typedef NvU32 (*TMR_CALLBACK_FUNCTION)(void *pCallbackData); +typedef void (*TMR_CALLBACK_FUNCTION)(void *pCallbackData); typedef struct { From eadbce107b692a696b81b695cf0cb75e5519cbdb Mon Sep 17 00:00:00 2001 From: Mathias Krause Date: Thu, 5 Feb 2026 10:18:03 +0000 Subject: [PATCH 4/9] nvidia: maxwell - Fix aperture type MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit gcc warns about the use of the wrong enum type, fix that! .../src/nvidia/src/kernel/gpu/mem_mgr/arch/maxwell/virt_mem_allocator_gm107.c:1720:76: warning: implicit conversion from ‘GMMU_APERTURE’ to ‘FB_CACHE_MEMTYPE’ [-Wenum-conversion] 1720 | kmemsysCacheOp_HAL(pGpu, GPU_GET_KERNEL_MEMORY_SYSTEM(pGpu), NULL, aperture, FB_CACHE_INVALIDATE); | ^~~~~~~~ .../src/nvidia/generated/g_kern_mem_sys_nvoc.h:632:135: note: in definition of macro ‘kmemsysCacheOp_HAL’ 632 | #define kmemsysCacheOp_HAL(pGpu, pKernelMemorySystem, arg3, arg4, operation) kmemsysCacheOp_DISPATCH(pGpu, pKernelMemorySystem, arg3, arg4, operation) | ^~~~ Signed-off-by: Mathias Krause --- .../kernel/gpu/mem_mgr/arch/maxwell/virt_mem_allocator_gm107.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nvidia/src/kernel/gpu/mem_mgr/arch/maxwell/virt_mem_allocator_gm107.c b/src/nvidia/src/kernel/gpu/mem_mgr/arch/maxwell/virt_mem_allocator_gm107.c index 76de82dad..ad822c091 100644 --- a/src/nvidia/src/kernel/gpu/mem_mgr/arch/maxwell/virt_mem_allocator_gm107.c +++ b/src/nvidia/src/kernel/gpu/mem_mgr/arch/maxwell/virt_mem_allocator_gm107.c @@ -1653,7 +1653,7 @@ dmaFreeMapping_GM107 if (pCliMapInfo != NULL && pCliMapInfo->pDmaMappingInfo->bNeedL2InvalidateAtUnmap) { - GMMU_APERTURE aperture = (pCliMapInfo->pDmaMappingInfo->aperture == GMMU_APERTURE_PEER) ? + FB_CACHE_MEMTYPE aperture = (pCliMapInfo->pDmaMappingInfo->aperture == GMMU_APERTURE_PEER) ? FB_CACHE_PEER_MEMORY : FB_CACHE_SYSTEM_MEMORY; kmemsysCacheOp_HAL(pGpu, GPU_GET_KERNEL_MEMORY_SYSTEM(pGpu), NULL, aperture, FB_CACHE_INVALIDATE); From 931febcbdbabe489dbc70e09c583221752369b8c Mon Sep 17 00:00:00 2001 From: Mathias Krause Date: Wed, 4 Mar 2026 10:09:34 +0000 Subject: [PATCH 5/9] nvidia: Fix stack info leak in tmrCtrlCmdEventCreate() In case tmrEventCreate() fails, we will copy the uninitialized value of the stack local variable 'pEvent' and expose it to the caller. Prevent that by initializing it to NULL, as all other users do. Signed-off-by: Mathias Krause --- src/nvidia/src/kernel/gpu/timer/timer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nvidia/src/kernel/gpu/timer/timer.c b/src/nvidia/src/kernel/gpu/timer/timer.c index c55e13cb9..0ab16788b 100644 --- a/src/nvidia/src/kernel/gpu/timer/timer.c +++ b/src/nvidia/src/kernel/gpu/timer/timer.c @@ -1824,7 +1824,7 @@ tmrCtrlCmdEventCreate ) { NV_STATUS rc; - TMR_EVENT *pEvent; + TMR_EVENT *pEvent = NULL; wrapperStorage_t *pWrapper; OBJTMR *pTmr = GPU_GET_TIMER(pGpu); From 18b578e97a0d143c1677afd6b38bebcf5f0317f0 Mon Sep 17 00:00:00 2001 From: Mathias Krause Date: Wed, 11 Mar 2026 21:19:58 +0100 Subject: [PATCH 6/9] nvidia: Fix cleaning of nv_compiler.h Targets added to 'clean-files' shouldn't have the '$(obj)/' prefix or won't be found for the 'make clean' target. Fix that to ensure 'nv_compiler.h' will be removed on 'make clean'. Signed-off-by: Mathias Krause --- kernel-open/nvidia/nvidia.Kbuild | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kernel-open/nvidia/nvidia.Kbuild b/kernel-open/nvidia/nvidia.Kbuild index 6996bad11..f12964541 100644 --- a/kernel-open/nvidia/nvidia.Kbuild +++ b/kernel-open/nvidia/nvidia.Kbuild @@ -75,12 +75,12 @@ $(call ASSIGN_PER_OBJ_CFLAGS, $(NVIDIA_OBJECTS), $(NVIDIA_CFLAGS)) # nv-procfs.c requires nv-compiler.h # -NV_COMPILER_VERSION_HEADER = $(obj)/nv_compiler.h +NV_COMPILER_VERSION_HEADER = nv_compiler.h -$(NV_COMPILER_VERSION_HEADER): +$(obj)/$(NV_COMPILER_VERSION_HEADER): @echo \#define NV_COMPILER \"`$(CC) -v 2>&1 | tail -n 1`\" > $@ -$(obj)/nvidia/nv-procfs.o: $(NV_COMPILER_VERSION_HEADER) +$(obj)/nvidia/nv-procfs.o: $(obj)/$(NV_COMPILER_VERSION_HEADER) clean-files += $(NV_COMPILER_VERSION_HEADER) From 0cdb6efeeebf6d49a16f5e109a54d88ea0455df4 Mon Sep 17 00:00:00 2001 From: Mathias Krause Date: Thu, 20 Nov 2025 16:16:20 +0000 Subject: [PATCH 7/9] nvidia-drm: Fix prototype of nv_drm_connector_mode_valid() The drm_connector_helper_funcs.mode_valid() hook is expected to return a 'enum drm_mode_status' since Linux commit 0993f1d0d8a1 ("drm: Make the connector mode_valid() func return a drm_mode_status enum") merged in v3.14. Fix that! Signed-off-by: Mathias Krause --- kernel-open/nvidia-drm/nvidia-drm-connector.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/kernel-open/nvidia-drm/nvidia-drm-connector.c b/kernel-open/nvidia-drm/nvidia-drm-connector.c index 2d5483a74..ec7941959 100644 --- a/kernel-open/nvidia-drm/nvidia-drm-connector.c +++ b/kernel-open/nvidia-drm/nvidia-drm-connector.c @@ -359,11 +359,12 @@ static int nv_drm_connector_get_modes(struct drm_connector *connector) return count; } -static int nv_drm_connector_mode_valid(struct drm_connector *connector, +static enum drm_mode_status +nv_drm_connector_mode_valid(struct drm_connector *connector, #if defined(NV_DRM_CONNECTOR_HELPER_FUNCS_MODE_VALID_HAS_CONST_MODE_ARG) - const struct drm_display_mode *mode) + const struct drm_display_mode *mode) #else - struct drm_display_mode *mode) + struct drm_display_mode *mode) #endif { struct drm_device *dev = connector->dev; From a71d3e1a084885c77ef194631c17593b817ac1f6 Mon Sep 17 00:00:00 2001 From: Mathias Krause Date: Thu, 20 Nov 2025 16:52:36 +0000 Subject: [PATCH 8/9] nvidia-uvm: Statically initialize g_exported_uvm_events There is no need to initialize 'g_exported_uvm_events' at runtime, initialize at compile time. Signed-off-by: Mathias Krause --- kernel-open/nvidia-uvm/uvm_global.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/kernel-open/nvidia-uvm/uvm_global.c b/kernel-open/nvidia-uvm/uvm_global.c index 0fb1716eb..bcef894d9 100644 --- a/kernel-open/nvidia-uvm/uvm_global.c +++ b/kernel-open/nvidia-uvm/uvm_global.c @@ -42,19 +42,19 @@ #include "nv_uvm_interface.h" uvm_global_t g_uvm_global; -static struct UvmEventsLinux g_exported_uvm_events; +static struct UvmEventsLinux g_exported_uvm_events = { + .isrTopHalf = uvm_isr_top_half_entry, + .suspend = uvm_suspend_entry, + .resume = uvm_resume_entry, + .drainP2P = uvm_suspend_and_drainP2P_entry, + .resumeP2P = uvm_resumeP2P_entry, +}; static bool g_ops_registered = false; static NV_STATUS uvm_register_callbacks(void) { NV_STATUS status = NV_OK; - g_exported_uvm_events.isrTopHalf = uvm_isr_top_half_entry; - g_exported_uvm_events.suspend = uvm_suspend_entry; - g_exported_uvm_events.resume = uvm_resume_entry; - g_exported_uvm_events.drainP2P = uvm_suspend_and_drainP2P_entry; - g_exported_uvm_events.resumeP2P = uvm_resumeP2P_entry; - // Register the UVM callbacks with the main GPU driver: status = uvm_rm_locked_call(nvUvmInterfaceRegisterUvmEvents(&g_exported_uvm_events)); if (status != NV_OK) From 51844d779972ff4cc1b6cc68b0dcee2ebd3bf915 Mon Sep 17 00:00:00 2001 From: Mathias Krause Date: Thu, 5 Feb 2026 09:54:13 +0000 Subject: [PATCH 9/9] nvidia-modeset: Fix prototype of NVEvoSubDevRec.scanLockState() Actual implementations of the NVEvoSubDevRec.scanLockState hook want an 'NVEvoLockAction'-typed 'action' argument. Fix that. Signed-off-by: Mathias Krause --- src/nvidia-modeset/include/nvkms-evo-states.h | 19 ----------------- src/nvidia-modeset/include/nvkms-types.h | 21 ++++++++++++++++++- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/nvidia-modeset/include/nvkms-evo-states.h b/src/nvidia-modeset/include/nvkms-evo-states.h index ab34f2a67..cd9a82632 100644 --- a/src/nvidia-modeset/include/nvkms-evo-states.h +++ b/src/nvidia-modeset/include/nvkms-evo-states.h @@ -39,25 +39,6 @@ typedef enum NVEvoLockSignal { NV_EVO_LOCK_SIGNAL_STEREO, } NVEvoLockSignal; -typedef enum NVEvoLockAction { - NV_EVO_PROHIBIT_LOCK, - NV_EVO_PROHIBIT_LOCK_DISABLE, - NV_EVO_LOCK_HEADS, - NV_EVO_UNLOCK_HEADS, - NV_EVO_ADD_FRAME_LOCK_SERVER, - NV_EVO_REM_FRAME_LOCK_SERVER, - NV_EVO_ADD_FRAME_LOCK_HOUSE_SYNC, - NV_EVO_REM_FRAME_LOCK_HOUSE_SYNC, - NV_EVO_ADD_FRAME_LOCK_CLIENT, - NV_EVO_REM_FRAME_LOCK_CLIENT, - NV_EVO_ADD_FRAME_LOCK_REF, - NV_EVO_REM_FRAME_LOCK_REF, - NV_EVO_ADD_SLI_SECONDARY, - NV_EVO_ADD_SLI_LAST_SECONDARY, - NV_EVO_ADD_SLI_PRIMARY, - NV_EVO_REM_SLI, -} NVEvoLockAction; - /* nv_evo.c */ NVEvoLockPin nvEvoGetPinForSignal(const NVDispEvoRec *, diff --git a/src/nvidia-modeset/include/nvkms-types.h b/src/nvidia-modeset/include/nvkms-types.h index 8a22ec950..ba9406768 100644 --- a/src/nvidia-modeset/include/nvkms-types.h +++ b/src/nvidia-modeset/include/nvkms-types.h @@ -794,6 +794,25 @@ typedef struct { NvU32 surfaceCount; } NVHsStateOneHeadAllDisps; +typedef enum NVEvoLockAction { + NV_EVO_PROHIBIT_LOCK, + NV_EVO_PROHIBIT_LOCK_DISABLE, + NV_EVO_LOCK_HEADS, + NV_EVO_UNLOCK_HEADS, + NV_EVO_ADD_FRAME_LOCK_SERVER, + NV_EVO_REM_FRAME_LOCK_SERVER, + NV_EVO_ADD_FRAME_LOCK_HOUSE_SYNC, + NV_EVO_REM_FRAME_LOCK_HOUSE_SYNC, + NV_EVO_ADD_FRAME_LOCK_CLIENT, + NV_EVO_REM_FRAME_LOCK_CLIENT, + NV_EVO_ADD_FRAME_LOCK_REF, + NV_EVO_REM_FRAME_LOCK_REF, + NV_EVO_ADD_SLI_SECONDARY, + NV_EVO_ADD_SLI_LAST_SECONDARY, + NV_EVO_ADD_SLI_PRIMARY, + NV_EVO_REM_SLI, +} NVEvoLockAction; + /* Subdevice-specific, channel-independent state */ typedef struct _NVEvoSubDevRec { NvU32 subDeviceInstance; @@ -810,7 +829,7 @@ typedef struct _NVEvoSubDevRec { void *cursorPio[NVKMS_MAX_HEADS_PER_DISP]; NvBool (*scanLockState)(NVDispEvoPtr pDispEvo, NVEvoSubDevPtr pEvoSubDev, - NvU32 action, + NVEvoLockAction action, /* NV_INVALID_HEAD-terminated * array of head indices */ const NvU32 *pHeads);