Lily Tsuru
89d0c5e0ab
Also, add an option to disable them to gracefully still allow the module to build on 6.8 and earlier kernels.
33 lines
938 B
Diff
33 lines
938 B
Diff
diff --git a/kernel-orig/nvidia/os-mlock.c b/kernel/nvidia/os-mlock.c
|
|
index e378245..37c5daf 100644
|
|
--- a/kernel-orig/nvidia/os-mlock.c
|
|
+++ b/kernel/nvidia/os-mlock.c
|
|
@@ -30,11 +30,22 @@ static inline int nv_follow_pfn(struct vm_area_struct *vma,
|
|
unsigned long address,
|
|
unsigned long *pfn)
|
|
{
|
|
-#if defined(NV_UNSAFE_FOLLOW_PFN_PRESENT)
|
|
- return unsafe_follow_pfn(vma, address, pfn);
|
|
-#else
|
|
- return follow_pfn(vma, address, pfn);
|
|
-#endif
|
|
+ /* follow_pfn was removed in Linux 6.10. */
|
|
+ int status = 0;
|
|
+ spinlock_t *ptl;
|
|
+ pte_t *ptep;
|
|
+
|
|
+ if (!(vma->vm_flags & (VM_IO | VM_PFNMAP)))
|
|
+ return status;
|
|
+
|
|
+ status = follow_pte(vma, address, &ptep, &ptl);
|
|
+ if (status)
|
|
+ return status;
|
|
+ *pfn = pte_pfn(ptep_get(ptep));
|
|
+
|
|
+ // The lock is acquired inside follow_pte()
|
|
+ pte_unmap_unlock(ptep, ptl);
|
|
+ return 0;
|
|
}
|
|
|
|
/*!
|