aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1699-Change-fence-references-to-dma_fence.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1699-Change-fence-references-to-dma_fence.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1699-Change-fence-references-to-dma_fence.patch507
1 files changed, 507 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1699-Change-fence-references-to-dma_fence.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1699-Change-fence-references-to-dma_fence.patch
new file mode 100644
index 00000000..a0de7ee0
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1699-Change-fence-references-to-dma_fence.patch
@@ -0,0 +1,507 @@
+From a9937dbdf6de238f4fb16ff5ce79b5afc2a86404 Mon Sep 17 00:00:00 2001
+From: Kent Russell <kent.russell@amd.com>
+Date: Tue, 25 Apr 2017 13:00:47 -0400
+Subject: [PATCH 1699/4131] Change fence references to dma_fence
+
+Required now that we're based on drm-next
+[4.11]
+
+Change-Id: I43d3ac96525d231fb2771c964969c787bc091449
+
+ Conflicts:
+ drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
+ drivers/gpu/drm/amd/include/kgd_kfd_interface.h
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 6 ++--
+ drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h | 8 +++---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.c | 36 ++++++++++++------------
+ drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 26 ++++++++---------
+ drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 2 +-
+ drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 12 ++++----
+ drivers/gpu/drm/amd/amdkfd/kfd_device.c | 14 ++++-----
+ drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 4 +--
+ drivers/gpu/drm/amd/include/kgd_kfd_interface.h | 8 +++---
+ 9 files changed, 58 insertions(+), 58 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
+index dcd8296..46e1954 100755
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
+@@ -211,7 +211,7 @@ int amdgpu_amdkfd_submit_ib(struct kgd_dev *kgd, enum kgd_engine_type engine,
+ struct amdgpu_job *job;
+ struct amdgpu_ib *ib;
+ struct amdgpu_ring *ring;
+- struct fence *f = NULL;
++ struct dma_fence *f = NULL;
+ int ret;
+
+ switch (engine) {
+@@ -249,10 +249,10 @@ int amdgpu_amdkfd_submit_ib(struct kgd_dev *kgd, enum kgd_engine_type engine,
+ goto err_ib_sched;
+ }
+
+- ret = fence_wait(f, false);
++ ret = dma_fence_wait(f, false);
+
+ err_ib_sched:
+- fence_put(f);
++ dma_fence_put(f);
+ amdgpu_job_free(job);
+ err:
+ return ret;
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
+index 81b8bc1..ba1e24c9 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
+@@ -74,7 +74,7 @@ struct kgd_mem {
+
+ /* KFD Memory Eviction */
+ struct amdgpu_amdkfd_fence {
+- struct fence base;
++ struct dma_fence base;
+ void *mm;
+ spinlock_t lock;
+ char timeline_name[TASK_COMM_LEN];
+@@ -82,8 +82,8 @@ struct amdgpu_amdkfd_fence {
+
+ struct amdgpu_amdkfd_fence *amdgpu_amdkfd_fence_create(u64 context,
+ void *mm);
+-bool amd_kfd_fence_check_mm(struct fence *f, void *mm);
+-struct amdgpu_amdkfd_fence *to_amdgpu_amdkfd_fence(struct fence *f);
++bool amd_kfd_fence_check_mm(struct dma_fence *f, void *mm);
++struct amdgpu_amdkfd_fence *to_amdgpu_amdkfd_fence(struct dma_fence *f);
+
+ struct amdkfd_process_info {
+ /* List head of all VMs that belong to a KFD process */
+@@ -149,7 +149,7 @@ struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void);
+ struct kfd2kgd_calls *amdgpu_amdkfd_gfx_9_0_get_functions(void);
+ int amdgpu_amdkfd_copy_mem_to_mem(struct kgd_dev *kgd, struct kgd_mem *src_mem,
+ uint64_t src_offset, struct kgd_mem *dst_mem,
+- uint64_t dest_offset, uint64_t size, struct fence **f,
++ uint64_t dest_offset, uint64_t size, struct dma_fence **f,
+ uint64_t *actual_size);
+
+ bool amdgpu_amdkfd_is_kfd_vmid(struct amdgpu_device *adev,
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.c
+index 811c315..d509748 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.c
+@@ -20,7 +20,7 @@
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+-#include <linux/fence.h>
++#include <linux/dma-fence.h>
+ #include <linux/spinlock.h>
+ #include <linux/atomic.h>
+ #include <linux/stacktrace.h>
+@@ -28,10 +28,10 @@
+ #include <linux/slab.h>
+ #include "amdgpu_amdkfd.h"
+
+-const struct fence_ops amd_kfd_fence_ops;
++const struct dma_fence_ops amd_kfd_fence_ops;
+ static atomic_t fence_seq = ATOMIC_INIT(0);
+
+-static int amd_kfd_fence_signal(struct fence *f);
++static int amd_kfd_fence_signal(struct dma_fence *f);
+
+ /* Eviction Fence
+ * Fence helper functions to deal with KFD memory eviction.
+@@ -77,13 +77,13 @@ struct amdgpu_amdkfd_fence *amdgpu_amdkfd_fence_create(u64 context,
+ get_task_comm(fence->timeline_name, current);
+ spin_lock_init(&fence->lock);
+
+- fence_init(&fence->base, &amd_kfd_fence_ops, &fence->lock,
++ dma_fence_init(&fence->base, &amd_kfd_fence_ops, &fence->lock,
+ context, atomic_inc_return(&fence_seq));
+
+ return fence;
+ }
+
+-struct amdgpu_amdkfd_fence *to_amdgpu_amdkfd_fence(struct fence *f)
++struct amdgpu_amdkfd_fence *to_amdgpu_amdkfd_fence(struct dma_fence *f)
+ {
+ struct amdgpu_amdkfd_fence *fence;
+
+@@ -97,12 +97,12 @@ struct amdgpu_amdkfd_fence *to_amdgpu_amdkfd_fence(struct fence *f)
+ return NULL;
+ }
+
+-static const char *amd_kfd_fence_get_driver_name(struct fence *f)
++static const char *amd_kfd_fence_get_driver_name(struct dma_fence *f)
+ {
+ return "amdgpu_amdkfd_fence";
+ }
+
+-static const char *amd_kfd_fence_get_timeline_name(struct fence *f)
++static const char *amd_kfd_fence_get_timeline_name(struct dma_fence *f)
+ {
+ struct amdgpu_amdkfd_fence *fence = to_amdgpu_amdkfd_fence(f);
+
+@@ -115,14 +115,14 @@ static const char *amd_kfd_fence_get_timeline_name(struct fence *f)
+ * If fence is already signaled return true.
+ * If fence is not signaled schedule a evict KFD process work item.
+ */
+-static bool amd_kfd_fence_enable_signaling(struct fence *f)
++static bool amd_kfd_fence_enable_signaling(struct dma_fence *f)
+ {
+ struct amdgpu_amdkfd_fence *fence = to_amdgpu_amdkfd_fence(f);
+
+ if (!fence)
+ return false;
+
+- if (fence_is_signaled(f))
++ if (dma_fence_is_signaled(f))
+ return true;
+
+ if (!kgd2kfd->schedule_evict_and_restore_process(
+@@ -132,15 +132,15 @@ static bool amd_kfd_fence_enable_signaling(struct fence *f)
+ return false;
+ }
+
+-static int amd_kfd_fence_signal(struct fence *f)
++static int amd_kfd_fence_signal(struct dma_fence *f)
+ {
+ unsigned long flags;
+ int ret;
+
+ spin_lock_irqsave(f->lock, flags);
+ /* Set enabled bit so cb will called */
+- set_bit(FENCE_FLAG_ENABLE_SIGNAL_BIT, &f->flags);
+- ret = fence_signal_locked(f);
++ set_bit(DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT, &f->flags);
++ ret = dma_fence_signal_locked(f);
+ spin_unlock_irqrestore(f->lock, flags);
+
+ return ret;
+@@ -153,8 +153,8 @@ static int amd_kfd_fence_signal(struct fence *f)
+ *
+ * This function is called when the reference count becomes zero.
+ * It just RCU schedules freeing up the fence.
+- */
+-static void amd_kfd_fence_release(struct fence *f)
++*/
++static void amd_kfd_fence_release(struct dma_fence *f)
+ {
+ struct amdgpu_amdkfd_fence *fence = to_amdgpu_amdkfd_fence(f);
+ /* Unconditionally signal the fence. The process is getting
+@@ -173,8 +173,8 @@ static void amd_kfd_fence_release(struct fence *f)
+ *
+ * @f: [IN] fence
+ * @mm: [IN] mm that needs to be verified
+- */
+-bool amd_kfd_fence_check_mm(struct fence *f, void *mm)
++*/
++bool amd_kfd_fence_check_mm(struct dma_fence *f, void *mm)
+ {
+ struct amdgpu_amdkfd_fence *fence = to_amdgpu_amdkfd_fence(f);
+
+@@ -186,12 +186,12 @@ bool amd_kfd_fence_check_mm(struct fence *f, void *mm)
+ return false;
+ }
+
+-const struct fence_ops amd_kfd_fence_ops = {
++const struct dma_fence_ops amd_kfd_fence_ops = {
+ .get_driver_name = amd_kfd_fence_get_driver_name,
+ .get_timeline_name = amd_kfd_fence_get_timeline_name,
+ .enable_signaling = amd_kfd_fence_enable_signaling,
+ .signaled = NULL,
+- .wait = fence_default_wait,
++ .wait = dma_fence_default_wait,
+ .release = amd_kfd_fence_release,
+ };
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+index f14deb6..2646597 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+@@ -245,14 +245,14 @@ static int amdgpu_amdkfd_remove_eviction_fence(struct amdgpu_bo *bo,
+ */
+ shared_count = fobj->shared_count;
+ for (i = 0; i < shared_count; ++i) {
+- struct fence *f;
++ struct dma_fence *f;
+
+ f = rcu_dereference_protected(fobj->shared[i],
+ reservation_object_held(resv));
+
+ if (ef) {
+ if (f->context == ef->base.context) {
+- fence_put(f);
++ dma_fence_put(f);
+ fobj->shared_count--;
+ } else
+ RCU_INIT_POINTER(fobj->shared[j++], f);
+@@ -280,7 +280,7 @@ static int amdgpu_amdkfd_remove_eviction_fence(struct amdgpu_bo *bo,
+
+ j = 0;
+ for (i = 0; i < shared_count; ++i) {
+- struct fence *f;
++ struct dma_fence *f;
+ struct amdgpu_amdkfd_fence *efence;
+
+ f = rcu_dereference_protected(fobj->shared[i],
+@@ -327,7 +327,7 @@ static void amdgpu_amdkfd_add_eviction_fence(struct amdgpu_bo *bo,
+ /* Readding the fence takes an additional reference. Drop that
+ * reference.
+ */
+- fence_put(&ef_list[i]->base);
++ dma_fence_put(&ef_list[i]->base);
+ }
+
+ kfree(ef_list);
+@@ -911,7 +911,7 @@ static int unmap_bo_from_gpuvm(struct amdgpu_device *adev,
+ * KFD's purposes, so we can just drop that fence.
+ */
+ if (sync->last_vm_update) {
+- fence_put(sync->last_vm_update);
++ dma_fence_put(sync->last_vm_update);
+ sync->last_vm_update = NULL;
+ }
+
+@@ -957,7 +957,7 @@ static int update_gpuvm_pte(struct amdgpu_device *adev,
+ * KFD's purposes, so we can just drop that fence.
+ */
+ if (sync->last_vm_update) {
+- fence_put(sync->last_vm_update);
++ dma_fence_put(sync->last_vm_update);
+ sync->last_vm_update = NULL;
+ }
+
+@@ -1403,7 +1403,7 @@ int amdgpu_amdkfd_gpuvm_create_process_vm(struct kgd_dev *kgd, void **vm,
+ INIT_LIST_HEAD(&info->userptr_inval_list);
+
+ info->eviction_fence =
+- amdgpu_amdkfd_fence_create(fence_context_alloc(1),
++ amdgpu_amdkfd_fence_create(dma_fence_context_alloc(1),
+ current->mm);
+ if (info->eviction_fence == NULL) {
+ pr_err("Failed to create eviction fence\n");
+@@ -1474,7 +1474,7 @@ void amdgpu_amdkfd_gpuvm_destroy_process_vm(struct kgd_dev *kgd, void *vm)
+ WARN_ON(!list_empty(&process_info->userptr_valid_list));
+ WARN_ON(!list_empty(&process_info->userptr_inval_list));
+
+- fence_put(&process_info->eviction_fence->base);
++ dma_fence_put(&process_info->eviction_fence->base);
+ cancel_delayed_work_sync(&process_info->work);
+ put_pid(process_info->pid);
+ kfree(process_info);
+@@ -2246,7 +2246,7 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info)
+ process_info->eviction_fence =
+ amdgpu_amdkfd_fence_create(old_fence->base.context,
+ old_fence->mm);
+- fence_put(&old_fence->base);
++ dma_fence_put(&old_fence->base);
+ if (!process_info->eviction_fence) {
+ pr_err("Failed to create eviction fence\n");
+ goto evict_fence_fail;
+@@ -2354,7 +2354,7 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info)
+ int amdgpu_amdkfd_copy_mem_to_mem(struct kgd_dev *kgd, struct kgd_mem *src_mem,
+ uint64_t src_offset, struct kgd_mem *dst_mem,
+ uint64_t dst_offset, uint64_t size,
+- struct fence **f, uint64_t *actual_size)
++ struct dma_fence **f, uint64_t *actual_size)
+ {
+ struct amdgpu_device *adev = NULL;
+ struct ttm_mem_reg *src = NULL, *dst = NULL;
+@@ -2366,7 +2366,7 @@ int amdgpu_amdkfd_copy_mem_to_mem(struct kgd_dev *kgd, struct kgd_mem *src_mem,
+ struct ttm_validate_buffer resv_list[2];
+ uint64_t src_start, dst_start;
+ uint64_t src_left, dst_left, cur_copy_size, total_copy_size = 0;
+- struct fence *fence = NULL;
++ struct dma_fence *fence = NULL;
+ int r;
+
+ if (!kgd || !src_mem || !dst_mem)
+@@ -2458,7 +2458,7 @@ int amdgpu_amdkfd_copy_mem_to_mem(struct kgd_dev *kgd, struct kgd_mem *src_mem,
+ dst_left = (dst_mm->size << PAGE_SHIFT) - dst_offset;
+
+ do {
+- struct fence *next;
++ struct dma_fence *next;
+
+ /* src_left/dst_left: amount of space left in the current node
+ * Copy minimum of (src_left, dst_left, amount of bytes left to
+@@ -2473,7 +2473,7 @@ int amdgpu_amdkfd_copy_mem_to_mem(struct kgd_dev *kgd, struct kgd_mem *src_mem,
+ break;
+
+ /* Just keep the last fence */
+- fence_put(fence);
++ dma_fence_put(fence);
+ fence = next;
+
+ total_copy_size += cur_copy_size;
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+index af526a8..b16ad14 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+@@ -1192,7 +1192,7 @@ static bool amdgpu_ttm_bo_eviction_valuable(struct ttm_buffer_object *bo,
+ const struct ttm_place *place)
+ {
+ struct reservation_object_list *flist;
+- struct fence *f;
++ struct dma_fence *f;
+ int i;
+ unsigned long num_pages = bo->mem.num_pages;
+ struct drm_mm_node *node = bo->mem.mm_node;
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
+index 6a41746..97a8070 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
+@@ -1765,7 +1765,7 @@ static int kfd_ioctl_cross_memory_copy(struct file *filep,
+ struct task_struct *remote_task;
+ struct mm_struct *remote_mm;
+ struct pid *remote_pid;
+- struct fence *fence = NULL, *lfence = NULL;
++ struct dma_fence *fence = NULL, *lfence = NULL;
+ uint64_t dst_va_addr;
+ uint64_t copied, total_copied = 0;
+ uint64_t src_offset, dst_offset;
+@@ -1931,7 +1931,7 @@ static int kfd_ioctl_cross_memory_copy(struct file *filep,
+
+ /* Later fence available. Release old fence */
+ if (fence && lfence) {
+- fence_put(lfence);
++ dma_fence_put(lfence);
+ lfence = NULL;
+ }
+
+@@ -1971,14 +1971,14 @@ static int kfd_ioctl_cross_memory_copy(struct file *filep,
+
+ /* Wait for the last fence irrespective of error condition */
+ if (fence) {
+- if (fence_wait_timeout(fence, false, msecs_to_jiffies(1000))
++ if (dma_fence_wait_timeout(fence, false, msecs_to_jiffies(1000))
+ < 0)
+ pr_err("Cross mem copy failed. BO timed out\n");
+- fence_put(fence);
++ dma_fence_put(fence);
+ } else if (lfence) {
+ pr_debug("GPU copy fail. But wait for prev DMA to finish\n");
+- fence_wait_timeout(lfence, true, msecs_to_jiffies(1000));
+- fence_put(lfence);
++ dma_fence_wait_timeout(lfence, true, msecs_to_jiffies(1000));
++ dma_fence_put(lfence);
+ }
+
+ kfd_process_fail:
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
+index 45a234d..43ccf18 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
+@@ -26,7 +26,7 @@
+ #include <linux/pci.h>
+ #include <linux/slab.h>
+ #include <linux/highmem.h>
+-#include <linux/fence.h>
++#include <linux/dma-fence.h>
+ #include "kfd_priv.h"
+ #include "kfd_device_queue_manager.h"
+ #include "kfd_pm4_headers_vi.h"
+@@ -905,7 +905,7 @@ void kfd_restore_bo_worker(struct work_struct *work)
+ *
+ */
+ int kgd2kfd_schedule_evict_and_restore_process(struct mm_struct *mm,
+- struct fence *fence)
++ struct dma_fence *fence)
+ {
+ struct kfd_process *p;
+ unsigned long active_time;
+@@ -914,7 +914,7 @@ int kgd2kfd_schedule_evict_and_restore_process(struct mm_struct *mm,
+ if (!fence)
+ return -EINVAL;
+
+- if (fence_is_signaled(fence))
++ if (dma_fence_is_signaled(fence))
+ return 0;
+
+ p = kfd_lookup_process_by_mm(mm);
+@@ -931,11 +931,11 @@ int kgd2kfd_schedule_evict_and_restore_process(struct mm_struct *mm,
+ else {
+ WARN(1, "Starting new evict with previous evict is not completed\n");
+ if (cancel_delayed_work_sync(&p->eviction_work.dwork))
+- fence_put(p->eviction_work.quiesce_fence);
++ dma_fence_put(p->eviction_work.quiesce_fence);
+ }
+ }
+
+- p->eviction_work.quiesce_fence = fence_get(fence);
++ p->eviction_work.quiesce_fence = dma_fence_get(fence);
+
+ /* Avoid KFD process starvation. Wait for at least
+ * PROCESS_ACTIVE_TIME_MS before evicting the process again
+@@ -982,13 +982,13 @@ void kfd_evict_bo_worker(struct work_struct *work)
+ pr_info("Started evicting process of pasid %d\n", p->pasid);
+ ret = quiesce_process_mm(p);
+ if (!ret) {
+- fence_signal(eviction_work->quiesce_fence);
++ dma_fence_signal(eviction_work->quiesce_fence);
+ schedule_delayed_work(&p->restore_work,
+ PROCESS_RESTORE_TIME_MS);
+ } else
+ pr_err("Failed to quiesce user queues. Cannot evict BOs\n");
+
+- fence_put(eviction_work->quiesce_fence);
++ dma_fence_put(eviction_work->quiesce_fence);
+
+ pr_info("Finished evicting process of pasid %d\n", p->pasid);
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+index a774152..0ea3e2c 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+@@ -588,7 +588,7 @@ struct qcm_process_device {
+ /* KFD Memory Eviction */
+ struct kfd_eviction_work {
+ struct delayed_work dwork;
+- struct fence *quiesce_fence;
++ struct dma_fence *quiesce_fence;
+ };
+
+ /* Approx. wait time before attempting to restore evicted BOs */
+@@ -601,7 +601,7 @@ struct kfd_eviction_work {
+ void kfd_evict_bo_worker(struct work_struct *work);
+ void kfd_restore_bo_worker(struct work_struct *work);
+ int kgd2kfd_schedule_evict_and_restore_process(struct mm_struct *mm,
+- struct fence *fence);
++ struct dma_fence *fence);
+
+
+ /* 8 byte handle containing GPU ID in the most significant 4 bytes and
+diff --git a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
+index 132a801..7fff662 100644
+--- a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
++++ b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
+@@ -30,7 +30,7 @@
+
+ #include <linux/types.h>
+ #include <linux/bitmap.h>
+-#include <linux/fence.h>
++#include <linux/dma-fence.h>
+ #include <linux/dma-buf.h>
+
+ struct pci_dev;
+@@ -393,8 +393,8 @@ struct kfd2kgd_calls {
+ int (*restore_process_bos)(void *process_info);
+ int (*copy_mem_to_mem)(struct kgd_dev *kgd, struct kgd_mem *src_mem,
+ uint64_t src_offset, struct kgd_mem *dst_mem,
+- uint64_t dest_offset, uint64_t size, struct fence **f,
+- uint64_t *actual_size);
++ uint64_t dest_offset, uint64_t size,
++ struct dma_fence **f, uint64_t *actual_size);
+ };
+
+ /**
+@@ -437,7 +437,7 @@ struct kgd2kfd_calls {
+ int (*quiesce_mm)(struct kfd_dev *kfd, struct mm_struct *mm);
+ int (*resume_mm)(struct kfd_dev *kfd, struct mm_struct *mm);
+ int (*schedule_evict_and_restore_process)(struct mm_struct *mm,
+- struct fence *fence);
++ struct dma_fence *fence);
+ };
+
+ int kgd2kfd_init(unsigned interface_version,
+--
+2.7.4
+