Skip to content

Commit 7dac0ec

Browse files
VMoolaakpm00
authored andcommitted
hugetlb: pass struct vm_fault through to hugetlb_handle_userfault()
Now that hugetlb_fault() has a struct vm_fault, have hugetlb_handle_userfault() use it instead of creating one of its own. This lets us reduce the number of arguments passed to hugetlb_handle_userfault() from 7 to 3, cleaning up the code and stack. Link: https://lkml.kernel.org/r/20240221234732.187629-4-vishal.moola@gmail.com Signed-off-by: Vishal Moola (Oracle) <vishal.moola@gmail.com> Reviewed-by: Matthew Wilcox (Oracle) <willy@infradead.org> Cc: Muchun Song <muchun.song@linux.dev> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
1 parent 0ca2272 commit 7dac0ec

File tree

1 file changed

+9
-29
lines changed

1 file changed

+9
-29
lines changed

mm/hugetlb.c

Lines changed: 9 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6085,39 +6085,21 @@ int hugetlb_add_to_page_cache(struct folio *folio, struct address_space *mapping
60856085
return 0;
60866086
}
60876087

6088-
static inline vm_fault_t hugetlb_handle_userfault(struct vm_area_struct *vma,
6088+
static inline vm_fault_t hugetlb_handle_userfault(struct vm_fault *vmf,
60896089
struct address_space *mapping,
6090-
pgoff_t idx,
6091-
unsigned int flags,
6092-
unsigned long haddr,
6093-
unsigned long addr,
60946090
unsigned long reason)
60956091
{
60966092
u32 hash;
6097-
struct vm_fault vmf = {
6098-
.vma = vma,
6099-
.address = haddr,
6100-
.real_address = addr,
6101-
.flags = flags,
6102-
6103-
/*
6104-
* Hard to debug if it ends up being
6105-
* used by a callee that assumes
6106-
* something about the other
6107-
* uninitialized fields... same as in
6108-
* memory.c
6109-
*/
6110-
};
61116093

61126094
/*
61136095
* vma_lock and hugetlb_fault_mutex must be dropped before handling
61146096
* userfault. Also mmap_lock could be dropped due to handling
61156097
* userfault, any vma operation should be careful from here.
61166098
*/
6117-
hugetlb_vma_unlock_read(vma);
6118-
hash = hugetlb_fault_mutex_hash(mapping, idx);
6099+
hugetlb_vma_unlock_read(vmf->vma);
6100+
hash = hugetlb_fault_mutex_hash(mapping, vmf->pgoff);
61196101
mutex_unlock(&hugetlb_fault_mutex_table[hash]);
6120-
return handle_userfault(&vmf, reason);
6102+
return handle_userfault(vmf, reason);
61216103
}
61226104

61236105
/*
@@ -6141,7 +6123,8 @@ static vm_fault_t hugetlb_no_page(struct mm_struct *mm,
61416123
struct vm_area_struct *vma,
61426124
struct address_space *mapping, pgoff_t idx,
61436125
unsigned long address, pte_t *ptep,
6144-
pte_t old_pte, unsigned int flags)
6126+
pte_t old_pte, unsigned int flags,
6127+
struct vm_fault *vmf)
61456128
{
61466129
struct hstate *h = hstate_vma(vma);
61476130
vm_fault_t ret = VM_FAULT_SIGBUS;
@@ -6200,8 +6183,7 @@ static vm_fault_t hugetlb_no_page(struct mm_struct *mm,
62006183
goto out;
62016184
}
62026185

6203-
return hugetlb_handle_userfault(vma, mapping, idx, flags,
6204-
haddr, address,
6186+
return hugetlb_handle_userfault(vmf, mapping,
62056187
VM_UFFD_MISSING);
62066188
}
62076189

@@ -6273,8 +6255,7 @@ static vm_fault_t hugetlb_no_page(struct mm_struct *mm,
62736255
ret = 0;
62746256
goto out;
62756257
}
6276-
return hugetlb_handle_userfault(vma, mapping, idx, flags,
6277-
haddr, address,
6258+
return hugetlb_handle_userfault(vmf, mapping,
62786259
VM_UFFD_MINOR);
62796260
}
62806261
}
@@ -6444,9 +6425,8 @@ vm_fault_t hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
64446425
* hugetlb_no_page will drop vma lock and hugetlb fault
64456426
* mutex internally, which make us return immediately.
64466427
*/
6447-
64486428
return hugetlb_no_page(mm, vma, mapping, vmf.pgoff, address,
6449-
ptep, entry, flags);
6429+
ptep, entry, flags, &vmf);
64506430
}
64516431

64526432
ret = 0;

0 commit comments

Comments
 (0)