Skip to content

Commit 3bcab55

Browse files
authored
Merge pull request #64 from alex--m/topic/fix_v6_5
Resolve build errors on kernel 6.4 and 6.5
2 parents 61c39ef + 0c56201 commit 3bcab55

File tree

3 files changed

+21
-4
lines changed

3 files changed

+21
-4
lines changed

kernel/xpmem_attach.c

+8-1
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,7 @@ xpmem_attach(struct file *file, xpmem_apid_t apid, off_t offset, size_t size,
507507
vaddr + size);
508508
xpmem_mmap_write_unlock(current->mm);
509509
for ( ; existing_vma && existing_vma->vm_start < vaddr + size
510-
; existing_vma = existing_vma->vm_next) {
510+
; existing_vma = find_vma(current->mm, existing_vma->vm_end)) {
511511
if (xpmem_is_vm_ops_set(existing_vma)) {
512512
ret = -EINVAL;
513513
goto out_3;
@@ -527,8 +527,15 @@ xpmem_attach(struct file *file, xpmem_apid_t apid, off_t offset, size_t size,
527527
xpmem_mmap_write_unlock(current->mm);
528528

529529
vma->vm_private_data = att;
530+
531+
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 3, 0)
532+
vm_flags_set(vma,
533+
VM_DONTCOPY | VM_DONTDUMP | VM_IO | VM_DONTEXPAND | VM_PFNMAP);
534+
#else
530535
vma->vm_flags |=
531536
VM_DONTCOPY | VM_DONTDUMP | VM_IO | VM_DONTEXPAND | VM_PFNMAP;
537+
#endif
538+
532539
vma->vm_ops = &xpmem_vm_ops;
533540

534541
att->at_vma = vma;

kernel/xpmem_mmu_notifier.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ xpmem_invalidate_range(struct mmu_notifier *mn,
109109
return;
110110
}
111111

112-
for ( ; vma && vma->vm_start < end; vma = vma->vm_next) {
112+
for ( ; vma && vma->vm_start < end; vma = find_vma(mm, vma->vm_end)) {
113113
unsigned long vm_start;
114114
unsigned long vm_end;
115115

kernel/xpmem_pfn.c

+12-2
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,11 @@ xpmem_vaddr_to_pte_offset(struct mm_struct *mm, u64 vaddr, u64 *offset)
162162
}
163163
#endif
164164

165+
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 4, 0)
166+
pte = pte_offset_kernel(pmd, vaddr);
167+
#else
165168
pte = pte_offset_map(pmd, vaddr);
169+
#endif
166170
if (!pte_present(*pte))
167171
return NULL;
168172

@@ -216,7 +220,11 @@ xpmem_vaddr_to_pte_size(struct mm_struct *mm, u64 vaddr, u64 *size)
216220
return NULL;
217221
}
218222

223+
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 4, 0)
224+
pte = pte_offset_kernel(pmd, vaddr);
225+
#else
219226
pte = pte_offset_map(pmd, vaddr);
227+
#endif
220228
if (!pte_present(*pte)) {
221229
*size = PAGE_SIZE;
222230
return NULL;
@@ -268,10 +276,12 @@ xpmem_pin_page(struct xpmem_thread_group *tg, struct task_struct *src_task,
268276
foll_write = (vma->vm_flags & VM_WRITE) ? FOLL_WRITE : 0;
269277

270278
/* get_user_pages()/get_user_pages_remote() faults and pins the page */
271-
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 9, 0)
279+
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 5, 0)
280+
ret = get_user_pages_remote (src_mm, vaddr, 1, foll_write, &page, NULL);
281+
#elif LINUX_VERSION_CODE >= KERNEL_VERSION(5, 9, 0)
272282
ret = get_user_pages_remote (src_mm, vaddr, 1, foll_write, &page, NULL,
273283
NULL);
274-
#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0)
284+
#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0)
275285
ret = get_user_pages_remote (src_task, src_mm, vaddr, 1, foll_write,
276286
&page, NULL, NULL);
277287
#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0)

0 commit comments

Comments
 (0)