drm/amdkfd: Document and fix GTT BO kmap API
authorFelix Kuehling <Felix.Kuehling@amd.com>
Tue, 31 May 2022 14:35:53 +0000 (10:35 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 8 Jun 2022 15:40:59 +0000 (11:40 -0400)
Removed an unused parameter from two functions and added kernel-doc
comments.

Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
Reviewed-by: Philip Yang <Philip.Yang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
drivers/gpu/drm/amd/amdkfd/kfd_events.c
drivers/gpu/drm/amd/amdkfd/kfd_process.c

index 5c00ea1df21ccacc2eae26793977b5f68a67f4b6..bbe7d81bb0df857451818626667dc522ddd429c7 100644 (file)
@@ -280,10 +280,9 @@ int amdgpu_amdkfd_gpuvm_unmap_memory_from_gpu(
                struct amdgpu_device *adev, struct kgd_mem *mem, void *drm_priv);
 int amdgpu_amdkfd_gpuvm_sync_memory(
                struct amdgpu_device *adev, struct kgd_mem *mem, bool intr);
-int amdgpu_amdkfd_gpuvm_map_gtt_bo_to_kernel(struct amdgpu_device *adev,
-               struct kgd_mem *mem, void **kptr, uint64_t *size);
-void amdgpu_amdkfd_gpuvm_unmap_gtt_bo_from_kernel(struct amdgpu_device *adev,
-               struct kgd_mem *mem);
+int amdgpu_amdkfd_gpuvm_map_gtt_bo_to_kernel(struct kgd_mem *mem,
+                                            void **kptr, uint64_t *size);
+void amdgpu_amdkfd_gpuvm_unmap_gtt_bo_from_kernel(struct kgd_mem *mem);
 
 int amdgpu_amdkfd_gpuvm_restore_process_bos(void *process_info,
                                            struct dma_fence **ef);
index 9798551900314ef681a898a671e4849661b20c58..f386b0d256d2564e604fc4f46c34fa395fda7957 100644 (file)
@@ -2083,8 +2083,21 @@ int amdgpu_amdkfd_gpuvm_sync_memory(
        return ret;
 }
 
-int amdgpu_amdkfd_gpuvm_map_gtt_bo_to_kernel(struct amdgpu_device *adev,
-               struct kgd_mem *mem, void **kptr, uint64_t *size)
+/** amdgpu_amdkfd_gpuvm_map_gtt_bo_to_kernel() - Map a GTT BO for kernel CPU access
+ *
+ * @mem: Buffer object to be mapped for CPU access
+ * @kptr[out]: pointer in kernel CPU address space
+ * @size[out]: size of the buffer
+ *
+ * Pins the BO and maps it for kernel CPU access. The eviction fence is removed
+ * from the BO, since pinned BOs cannot be evicted. The bo must remain on the
+ * validate_list, so the GPU mapping can be restored after a page table was
+ * evicted.
+ *
+ * Return: 0 on success, error code on failure
+ */
+int amdgpu_amdkfd_gpuvm_map_gtt_bo_to_kernel(struct kgd_mem *mem,
+                                            void **kptr, uint64_t *size)
 {
        int ret;
        struct amdgpu_bo *bo = mem->bo;
@@ -2135,8 +2148,15 @@ bo_reserve_failed:
        return ret;
 }
 
-void amdgpu_amdkfd_gpuvm_unmap_gtt_bo_from_kernel(struct amdgpu_device *adev,
-                                                 struct kgd_mem *mem)
+/** amdgpu_amdkfd_gpuvm_map_gtt_bo_to_kernel() - Unmap a GTT BO for kernel CPU access
+ *
+ * @mem: Buffer object to be unmapped for CPU access
+ *
+ * Removes the kernel CPU mapping and unpins the BO. It does not restore the
+ * eviction fence, so this function should only be used for cleanup before the
+ * BO is destroyed.
+ */
+void amdgpu_amdkfd_gpuvm_unmap_gtt_bo_from_kernel(struct kgd_mem *mem)
 {
        struct amdgpu_bo *bo = mem->bo;
 
index 4df9c36146ba9befb7077e6420342325e7ecca6d..3942a56c28bbbcce5a2f90e86b522ac7db4ce1b2 100644 (file)
@@ -377,8 +377,7 @@ int kfd_kmap_event_page(struct kfd_process *p, uint64_t event_page_offset)
                return -EINVAL;
        }
 
-       err = amdgpu_amdkfd_gpuvm_map_gtt_bo_to_kernel(kfd->adev,
-                                       mem, &kern_addr, &size);
+       err = amdgpu_amdkfd_gpuvm_map_gtt_bo_to_kernel(mem, &kern_addr, &size);
        if (err) {
                pr_err("Failed to map event page to kernel\n");
                return err;
@@ -387,7 +386,7 @@ int kfd_kmap_event_page(struct kfd_process *p, uint64_t event_page_offset)
        err = kfd_event_page_set(p, kern_addr, size, event_page_offset);
        if (err) {
                pr_err("Failed to set event page\n");
-               amdgpu_amdkfd_gpuvm_unmap_gtt_bo_from_kernel(kfd->adev, mem);
+               amdgpu_amdkfd_gpuvm_unmap_gtt_bo_from_kernel(mem);
                return err;
        }
        return err;
index e3d64ec8c353718a31949175fb57925751414fa2..a13e60d48b735c9bb57bbe489a77935691d102dc 100644 (file)
@@ -693,7 +693,7 @@ static void kfd_process_free_gpuvm(struct kgd_mem *mem,
        struct kfd_dev *dev = pdd->dev;
 
        if (kptr) {
-               amdgpu_amdkfd_gpuvm_unmap_gtt_bo_from_kernel(dev->adev, mem);
+               amdgpu_amdkfd_gpuvm_unmap_gtt_bo_from_kernel(mem);
                kptr = NULL;
        }
 
@@ -733,7 +733,7 @@ static int kfd_process_alloc_gpuvm(struct kfd_process_device *pdd,
        }
 
        if (kptr) {
-               err = amdgpu_amdkfd_gpuvm_map_gtt_bo_to_kernel(kdev->adev,
+               err = amdgpu_amdkfd_gpuvm_map_gtt_bo_to_kernel(
                                (struct kgd_mem *)*mem, kptr, NULL);
                if (err) {
                        pr_debug("Map GTT BO to kernel failed\n");
@@ -999,7 +999,7 @@ static void kfd_process_kunmap_signal_bo(struct kfd_process *p)
        if (!mem)
                goto out;
 
-       amdgpu_amdkfd_gpuvm_unmap_gtt_bo_from_kernel(kdev->adev, mem);
+       amdgpu_amdkfd_gpuvm_unmap_gtt_bo_from_kernel(mem);
 
 out:
        mutex_unlock(&p->mutex);