The start, end and page_shift values are all saved in the range structure, so we might as well use that for argument passing.
Unified · Split
| @@ -222,7 +222,7 @@ The usage pattern is:: · 221 unmodified lines | ||
| 222 | 222 | range.flags = ...; |
| 223 | 223 | range.values = ...; |
| 224 | 224 | range.pfn_shift = ...; |
| 225 | − hmm_range_register(&range); | |
| 225 | + hmm_range_register(&range, mirror); | |
| 226 | 226 | |
| 227 | 227 | /* |
| 228 | 228 | * Just wait for range to be valid, safe to ignore return value as we |
| @@ -818,8 +818,11 @@ int amdgpu_ttm_tt_get_user_pages(struct amdgpu_bo *bo, struct page **pages) · 817 unmodified lines | ||
| 818 | 818 | 0 : range->flags[HMM_PFN_WRITE]; |
| 819 | 819 | range->pfn_flags_mask = 0; |
| 820 | 820 | range->pfns = pfns; |
| 821 | − hmm_range_register(range, mirror, start, | |
| 822 | − start + ttm->num_pages * PAGE_SIZE, PAGE_SHIFT); | |
| 821 | + range->page_shift = PAGE_SHIFT; | |
| 822 | + range->start = start; | |
| 823 | + range->end = start + ttm->num_pages * PAGE_SIZE; | |
| 824 | + | |
| 825 | + hmm_range_register(range, mirror); | |
| 823 | 826 | |
| 824 | 827 | /* |
| 825 | 828 | * Just wait for range to be valid, safe to ignore return value as we |
| @@ -492,9 +492,7 @@ nouveau_range_fault(struct nouveau_svmm *svmm, struct hmm_range *range) · 491 unmodified lines | ||
| 492 | 492 | range->default_flags = 0; |
| 493 | 493 | range->pfn_flags_mask = -1UL; |
| 494 | 494 | |
| 495 | − ret = hmm_range_register(range, &svmm->mirror, | |
| 496 | − range->start, range->end, | |
| 497 | − PAGE_SHIFT); | |
| 495 | + ret = hmm_range_register(range, &svmm->mirror); | |
| 498 | 496 | if (ret) { |
| 499 | 497 | up_read(&svmm->mm->mmap_sem); |
| 500 | 498 | return (int)ret; |
| @@ -682,6 +680,7 @@ nouveau_svm_fault(struct nvif_notify *notify) · 181 unmodified lines | ||
| 682 | 680 | args.i.p.addr + args.i.p.size, fn - fi); |
| 683 | 681 | |
| 684 | 682 | /* Have HMM fault pages within the fault window to the GPU. */ |
| 683 | + range.page_shift = PAGE_SHIFT; | |
| 685 | 684 | range.start = args.i.p.addr; |
| 686 | 685 | range.end = args.i.p.addr + args.i.p.size; |
| 687 | 686 | range.pfns = args.phys; |
| @@ -400,11 +400,7 @@ void hmm_mirror_unregister(struct hmm_mirror *mirror); · 399 unmodified lines | ||
| 400 | 400 | /* |
| 401 | 401 | * Please see Documentation/vm/hmm.rst for how to use the range API. |
| 402 | 402 | */ |
| 403 | −int hmm_range_register(struct hmm_range *range, | |
| 404 | − struct hmm_mirror *mirror, | |
| 405 | − unsigned long start, | |
| 406 | − unsigned long end, | |
| 407 | − unsigned page_shift); | |
| 403 | +int hmm_range_register(struct hmm_range *range, struct hmm_mirror *mirror); | |
| 408 | 404 | void hmm_range_unregister(struct hmm_range *range); |
| 409 | 405 | |
| 410 | 406 | /* |
| @@ -850,35 +850,25 @@ static void hmm_pfns_clear(struct hmm_range *range, · 849 unmodified lines | ||
| 850 | 850 | * hmm_range_register() - start tracking change to CPU page table over a range |
| 851 | 851 | * @range: range |
| 852 | 852 | * @mm: the mm struct for the range of virtual address |
| 853 | − * @start: start virtual address (inclusive) | |
| 854 | − * @end: end virtual address (exclusive) | |
| 855 | − * @page_shift: expect page shift for the range | |
| 853 | + * | |
| 856 | 854 | * Return: 0 on success, -EFAULT if the address space is no longer valid |
| 857 | 855 | * |
| 858 | 856 | * Track updates to the CPU page table see include/linux/hmm.h |
| 859 | 857 | */ |
| 860 | −int hmm_range_register(struct hmm_range *range, | |
| 861 | − struct hmm_mirror *mirror, | |
| 862 | − unsigned long start, | |
| 863 | − unsigned long end, | |
| 864 | − unsigned page_shift) | |
| 858 | +int hmm_range_register(struct hmm_range *range, struct hmm_mirror *mirror) | |
| 865 | 859 | { |
| 866 | − unsigned long mask = ((1UL << page_shift) - 1UL); | |
| 860 | + unsigned long mask = ((1UL << range->page_shift) - 1UL); | |
| 867 | 861 | struct hmm *hmm = mirror->hmm; |
| 868 | 862 | unsigned long flags; |
| 869 | 863 | |
| 870 | 864 | range->valid = false; |
| 871 | 865 | range->hmm = NULL; |
| 872 | 866 | |
| 873 | − if ((start & mask) || (end & mask)) | |
| 867 | + if ((range->start & mask) || (range->end & mask)) | |
| 874 | 868 | return -EINVAL; |
| 875 | − if (start >= end) | |
| 869 | + if (range->start >= range->end) | |
| 876 | 870 | return -EINVAL; |
| 877 | 871 | |
| 878 | − range->page_shift = page_shift; | |
| 879 | − range->start = start; | |
| 880 | − range->end = end; | |
| 881 | − | |
| 882 | 872 | /* Prevent hmm_release() from running while the range is valid */ |
| 883 | 873 | if (!mmget_not_zero(hmm->mm)) |
| 884 | 874 | return -EFAULT; |