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;
|
||
|
}
|
||
|
|
||
|
/*!
|