OSDN Git Service

Merge tag 'drm-next-5.5-2019-10-09' of git://people.freedesktop.org/~agd5f/linux...
[tomoyo/tomoyo-test1.git] / drivers / gpu / drm / amd / amdgpu / amdgpu_ttm.c
index 74a9bd9..0976fff 100644 (file)
@@ -795,7 +795,6 @@ int amdgpu_ttm_tt_get_user_pages(struct amdgpu_bo *bo, struct page **pages)
        struct hmm_range *range;
        unsigned long i;
        uint64_t *pfns;
-       int retry = 0;
        int r = 0;
 
        if (!mm) /* Happens during process shutdown */
@@ -836,10 +835,11 @@ int amdgpu_ttm_tt_get_user_pages(struct amdgpu_bo *bo, struct page **pages)
                                0 : range->flags[HMM_PFN_WRITE];
        range->pfn_flags_mask = 0;
        range->pfns = pfns;
-       hmm_range_register(range, mirror, start,
-                          start + ttm->num_pages * PAGE_SIZE, PAGE_SHIFT);
+       range->start = start;
+       range->end = start + ttm->num_pages * PAGE_SIZE;
+
+       hmm_range_register(range, mirror);
 
-retry:
        /*
         * Just wait for range to be valid, safe to ignore return value as we
         * will use the return value of hmm_range_fault() below under the
@@ -848,24 +848,12 @@ retry:
        hmm_range_wait_until_valid(range, HMM_RANGE_DEFAULT_TIMEOUT);
 
        down_read(&mm->mmap_sem);
-
-       r = hmm_range_fault(range, true);
-       if (unlikely(r < 0)) {
-               if (likely(r == -EAGAIN)) {
-                       /*
-                        * return -EAGAIN, mmap_sem is dropped
-                        */
-                       if (retry++ < MAX_RETRY_HMM_RANGE_FAULT)
-                               goto retry;
-                       else
-                               pr_err("Retry hmm fault too many times\n");
-               }
-
-               goto out_up_read;
-       }
-
+       r = hmm_range_fault(range, 0);
        up_read(&mm->mmap_sem);
 
+       if (unlikely(r < 0))
+               goto out_free_pfns;
+
        for (i = 0; i < ttm->num_pages; i++) {
                pages[i] = hmm_device_entry_to_page(range, pfns[i]);
                if (unlikely(!pages[i])) {
@@ -881,9 +869,6 @@ retry:
 
        return 0;
 
-out_up_read:
-       if (likely(r != -EAGAIN))
-               up_read(&mm->mmap_sem);
 out_free_pfns:
        hmm_range_unregister(range);
        kvfree(pfns);
@@ -1689,6 +1674,7 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)
        r = ttm_bo_device_init(&adev->mman.bdev,
                               &amdgpu_bo_driver,
                               adev->ddev->anon_inode->i_mapping,
+                              adev->ddev->vma_offset_manager,
                               dma_addressing_limited(adev->dev));
        if (r) {
                DRM_ERROR("failed initializing buffer object driver(%d).\n", r);