Index: kernel/common/inc/nv-timer.h =================================================================== --- kernel.orig/common/inc/nv-timer.h +++ kernel/common/inc/nv-timer.h @@ -24,6 +24,7 @@ #include #include // For container_of +#include #include "conftest.h" @@ -65,7 +66,7 @@ static inline void nv_timer_setup(struct static inline void nv_timer_delete_sync(struct timer_list *timer) { -#if !defined(NV_BSD) && NV_IS_EXPORT_SYMBOL_PRESENT_timer_delete_sync +#if !defined(NV_BSD) && (defined(NV_IS_EXPORT_SYMBOL_PRESENT_timer_delete_sync) || LINUX_VERSION_CODE >= KERNEL_VERSION(6, 12, 0)) timer_delete_sync(timer); #else del_timer_sync(timer); Index: kernel/nvidia-drm/nvidia-dma-fence-helper.h =================================================================== --- kernel.orig/nvidia-drm/nvidia-dma-fence-helper.h +++ kernel/nvidia-drm/nvidia-dma-fence-helper.h @@ -97,7 +97,8 @@ static inline int nv_dma_fence_signal(nv #if defined(NV_LINUX_FENCE_H_PRESENT) return fence_signal(fence); #else - return dma_fence_signal(fence); + dma_fence_signal(fence); + return 0; #endif } @@ -105,7 +106,8 @@ static inline int nv_dma_fence_signal_lo #if defined(NV_LINUX_FENCE_H_PRESENT) return fence_signal_locked(fence); #else - return dma_fence_signal_locked(fence); + dma_fence_signal_locked(fence); + return 0; #endif } Index: kernel/nvidia-drm/nvidia-drm-priv.h =================================================================== --- kernel.orig/nvidia-drm/nvidia-drm-priv.h +++ kernel/nvidia-drm/nvidia-drm-priv.h @@ -47,6 +47,26 @@ #include "nvkms-kapi.h" +#if !defined(DRM_ERROR) +#define DRM_ERROR(fmt, ...) pr_err(fmt, ##__VA_ARGS__) +#endif + +#if !defined(DRM_INFO) +#define DRM_INFO(fmt, ...) pr_info(fmt, ##__VA_ARGS__) +#endif + +#if !defined(DRM_DEBUG) +#define DRM_DEBUG(fmt, ...) pr_debug(fmt, ##__VA_ARGS__) +#endif + +#if !defined(DRM_DEBUG_DRIVER) +#define DRM_DEBUG_DRIVER(fmt, ...) pr_debug(fmt, ##__VA_ARGS__) +#endif + +#if !defined(DRIVER_PRIME) +#define DRIVER_PRIME 0 +#endif + #define NV_DRM_LOG_ERR(__fmt, ...) \ DRM_ERROR("[nvidia-drm] " __fmt "\n", ##__VA_ARGS__) Index: kernel/nvidia/nv-mmap.c =================================================================== --- kernel.orig/nvidia/nv-mmap.c +++ kernel/nvidia/nv-mmap.c @@ -839,6 +839,28 @@ void NV_API_CALL nv_set_safe_to_mmap_loc } #if !NV_CAN_CALL_VMA_START_WRITE + +#ifndef VMA_LOCK_OFFSET +#define VMA_LOCK_OFFSET VM_REFCNT_EXCLUDE_READERS_FLAG +#endif + +#if !defined(NV_VM_AREA_STRUCT_HAS___VM_FLAGS) +/* v6.15+: one-argument form; retrieve seqnum via __vma_raw_mm_seqnum() */ +static inline bool nv___is_vma_write_locked(struct vm_area_struct *vma, + NvU32 *mm_lock_seq) +{ + *mm_lock_seq = __vma_raw_mm_seqnum(vma); + return __is_vma_write_locked(vma); +} +#else +/* v6.3–v6.14: two-argument form stores the current mm_lock_seq */ +static inline bool nv___is_vma_write_locked(struct vm_area_struct *vma, + NvU32 *mm_lock_seq) +{ + return __is_vma_write_locked(vma, mm_lock_seq); +} +#endif + static NvBool nv_vma_enter_locked(struct vm_area_struct *vma, NvBool detaching) { NvU32 tgt_refcnt = VMA_LOCK_OFFSET; @@ -893,7 +915,7 @@ void nv_vma_start_write(struct vm_area_s { NvU32 mm_lock_seq; NvBool locked; - if (__is_vma_write_locked(vma, &mm_lock_seq)) + if (nv___is_vma_write_locked(vma, &mm_lock_seq)) return; locked = nv_vma_enter_locked(vma, NV_FALSE); Index: kernel/conftest.sh =================================================================== --- kernel.orig/conftest.sh +++ kernel/conftest.sh @@ -98,8 +98,16 @@ build_cflags() { ISYSTEM=`$CC -print-file-name=include 2> /dev/null` BASE_CFLAGS="-O2 -D__KERNEL__ \ -DKBUILD_BASENAME=\"#conftest$$\" -DKBUILD_MODNAME=\"#conftest$$\" \ --nostdinc -isystem $ISYSTEM \ +-nostdinc -isystem $ISYSTEM -std=gnu11 \ -Wno-implicit-function-declaration -Wno-strict-prototypes" + + # Add UAPI headers and kconfig.h for Kernel 7.0 compatibility. + BASE_CFLAGS="$BASE_CFLAGS -I$SOURCES/include/uapi" + BASE_CFLAGS="$BASE_CFLAGS -I$OUTPUT/include/generated/uapi" + BASE_CFLAGS="$BASE_CFLAGS -I$SOURCES/arch/$ARCH/include/uapi" + BASE_CFLAGS="$BASE_CFLAGS -I$OUTPUT/arch/$ARCH/include/generated/uapi" + BASE_CFLAGS="$BASE_CFLAGS -include $SOURCES/include/linux/kconfig.h" if [ "$OUTPUT" != "$SOURCES" ]; then OUTPUT_CFLAGS="-I$OUTPUT/include2 -I$OUTPUT/include" @@ -148,6 +156,15 @@ build_cflags() { fi fi + # Ensure architecture-specific headers are also found in common headers for split builds + # and add all necessary paths to BASE_CFLAGS so they are used by all conftests. + BASE_CFLAGS="$BASE_CFLAGS -I$SOURCE_HEADERS" + BASE_CFLAGS="$BASE_CFLAGS -I$SOURCE_HEADERS/uapi" + BASE_CFLAGS="$BASE_CFLAGS -I$SOURCE_ARCH_HEADERS" + BASE_CFLAGS="$BASE_CFLAGS -I$SOURCE_ARCH_HEADERS/uapi" + BASE_CFLAGS="$BASE_CFLAGS -I$OUTPUT_ARCH_HEADERS/generated" + BASE_CFLAGS="$BASE_CFLAGS -I$OUTPUT_ARCH_HEADERS/generated/uapi" + SOURCE_HEADERS="$HEADERS" SOURCE_ARCH_HEADERS="$SOURCES/arch/$KERNEL_ARCH/include" OUTPUT_HEADERS="$OUTPUT/include" @@ -6537,7 +6554,7 @@ compile_test() { CODE=" #include void conftest_vm_flags_set(void) { - vm_flags_set(); + vm_flags_set(NULL, 0); }" compile_check_conftest "$CODE" "NV_VM_FLAGS_SET_PRESENT" "" "functions" @@ -6552,7 +6574,7 @@ compile_test() { CODE=" #include void conftest_vma_flags_set_word(void) { - vma_flags_set_word(); + vma_flags_set_word(NULL, 0); }" compile_check_conftest "$CODE" "NV_VMA_FLAGS_SET_WORD_PRESENT" "" "functions" Index: kernel/Makefile =================================================================== --- kernel.orig/Makefile +++ kernel/Makefile @@ -91,7 +91,7 @@ else # } # system(pahole_cmd) # } - PAHOLE_AWK_PROGRAM = BEGIN { pahole_cmd = \"pahole\"; for (i = 1; i < ARGC; i++) { if (ARGV[i] ~ /--lang_exclude=/) { pahole_cmd = pahole_cmd sprintf(\" %s,c++,c++11\", ARGV[i]); } else { pahole_cmd = pahole_cmd sprintf(\" %s\", ARGV[i]); } } system(pahole_cmd); } + PAHOLE_AWK_PROGRAM = BEGIN { pahole_cmd = "pahole"; for (i = 1; i < ARGC; i++) { if (ARGV[i] ~ /--lang_exclude=/) { pahole_cmd = pahole_cmd sprintf(" %s,c++,c++11", ARGV[i]); } else { pahole_cmd = pahole_cmd sprintf(" %s", ARGV[i]); } } system(pahole_cmd); } # If scripts/pahole-flags.sh is not present in the kernel tree, add PAHOLE and # PAHOLE_AWK_PROGRAM assignments to PAHOLE_VARIABLES; otherwise assign the # empty string to PAHOLE_VARIABLES.