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