aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/4621-drm-amd-Update-KFD-Thunk-ioctl-ABI-to-match-upstream.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4621-drm-amd-Update-KFD-Thunk-ioctl-ABI-to-match-upstream.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/4621-drm-amd-Update-KFD-Thunk-ioctl-ABI-to-match-upstream.patch578
1 files changed, 578 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4621-drm-amd-Update-KFD-Thunk-ioctl-ABI-to-match-upstream.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4621-drm-amd-Update-KFD-Thunk-ioctl-ABI-to-match-upstream.patch
new file mode 100644
index 00000000..cea8c76b
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4621-drm-amd-Update-KFD-Thunk-ioctl-ABI-to-match-upstream.patch
@@ -0,0 +1,578 @@
+From aee31c54b48529865f078a01d3210b5cf66b2f89 Mon Sep 17 00:00:00 2001
+From: Felix Kuehling <Felix.Kuehling@amd.com>
+Date: Thu, 24 May 2018 14:53:40 -0400
+Subject: [PATCH 4621/5725] drm/amd: Update KFD-Thunk ioctl ABI to match
+ upstream
+
+- Clean up and renumber scratch memory ioctl
+- Renumber get_tile_config ioctl
+- Renumber set_trap_handler ioctl
+- Update KFD_IOC_ALLOC_MEM_FLAGS
+- Renumber GPUVM memory management ioctls
+- Remove unused SEP_PROCESS_DGPU_APERTURE ioctl
+- Update memory management ioctls
+ Replace device_ids_array_size (in bytes) with n_devices. Fix error
+ handling and use n_success to update device_id arrays in objects.
+
+This commit breaks the ABI and requires a corresponding Thunk change.
+
+Change-Id: I62149841f1603ec36143836d2eb5ab0fcaf37cf5
+Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
+Signed-off-by: Kalyan Alle <kalyan.alle@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 4 +-
+ drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 133 ++++++++---------------
+ drivers/gpu/drm/amd/amdkfd/kfd_flat_memory.c | 10 --
+ drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 2 -
+ drivers/gpu/drm/amd/amdkfd/kfd_process.c | 11 +-
+ drivers/gpu/drm/amd/include/kgd_kfd_interface.h | 24 ++--
+ include/uapi/linux/kfd_ioctl.h | 91 ++++++++--------
+ 7 files changed, 116 insertions(+), 159 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+index d43473e..85d0bfb 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+@@ -1246,9 +1246,9 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
+ VI_BO_SIZE_ALIGN : 1;
+
+ mapping_flags = AMDGPU_VM_PAGE_READABLE;
+- if (!(flags & ALLOC_MEM_FLAGS_READONLY))
++ if (flags & ALLOC_MEM_FLAGS_WRITABLE)
+ mapping_flags |= AMDGPU_VM_PAGE_WRITEABLE;
+- if (flags & ALLOC_MEM_FLAGS_EXECUTE_ACCESS)
++ if (flags & ALLOC_MEM_FLAGS_EXECUTABLE)
+ mapping_flags |= AMDGPU_VM_PAGE_EXECUTABLE;
+ if (flags & ALLOC_MEM_FLAGS_COHERENT)
+ mapping_flags |= AMDGPU_VM_MTYPE_UC;
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
+index 01a253c..0eab007 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
+@@ -1085,17 +1085,14 @@ static int kfd_ioctl_wait_events(struct file *filp, struct kfd_process *p,
+
+ return err;
+ }
+-static int kfd_ioctl_alloc_scratch_memory(struct file *filep,
++static int kfd_ioctl_set_scratch_backing_va(struct file *filep,
+ struct kfd_process *p, void *data)
+ {
+- struct kfd_ioctl_alloc_memory_of_scratch_args *args = data;
++ struct kfd_ioctl_set_scratch_backing_va_args *args = data;
+ struct kfd_process_device *pdd;
+ struct kfd_dev *dev;
+ long err;
+
+- if (args->size == 0)
+- return -EINVAL;
+-
+ dev = kfd_device_by_id(args->gpu_id);
+ if (!dev)
+ return -EINVAL;
+@@ -1383,31 +1380,30 @@ static int kfd_ioctl_map_memory_to_gpu(struct file *filep,
+ void *mem;
+ struct kfd_dev *dev, *peer;
+ long err = 0;
+- int i, num_dev = 0;
++ int i;
+ uint32_t *devices_arr = NULL;
+
+ dev = kfd_device_by_id(GET_GPU_ID(args->handle));
+ if (!dev)
+ return -EINVAL;
+
+- if (args->device_ids_array_size == 0) {
+- pr_debug("Device ID array size is 0\n");
++ if (!args->n_devices) {
++ pr_debug("Device IDs array empty\n");
+ return -EINVAL;
+ }
+-
+- if (args->device_ids_array_size % sizeof(uint32_t)) {
+- pr_debug("Node IDs array size %u\n",
+- args->device_ids_array_size);
++ if (args->n_success > args->n_devices) {
++ pr_debug("n_success exceeds n_devices\n");
+ return -EINVAL;
+ }
+
+- devices_arr = kmalloc(args->device_ids_array_size, GFP_KERNEL);
++ devices_arr = kmalloc_array(args->n_devices, sizeof(*devices_arr),
++ GFP_KERNEL);
+ if (!devices_arr)
+ return -ENOMEM;
+
+ err = copy_from_user(devices_arr,
+- (void __user *)args->device_ids_array_ptr,
+- args->device_ids_array_size);
++ (void __user *)args->device_ids_array_ptr,
++ args->n_devices * sizeof(*devices_arr));
+ if (err != 0) {
+ err = -EFAULT;
+ goto copy_from_user_failed;
+@@ -1428,12 +1424,11 @@ static int kfd_ioctl_map_memory_to_gpu(struct file *filep,
+ goto get_mem_obj_from_handle_failed;
+ }
+
+- num_dev = args->device_ids_array_size / sizeof(uint32_t);
+- for (i = 0 ; i < num_dev; i++) {
++ for (i = args->n_success; i < args->n_devices; i++) {
+ peer = kfd_device_by_id(devices_arr[i]);
+ if (!peer) {
+ pr_debug("Getting device by id failed for 0x%x\n",
+- devices_arr[i]);
++ devices_arr[i]);
+ err = -EINVAL;
+ goto get_mem_obj_from_handle_failed;
+ }
+@@ -1444,12 +1439,13 @@ static int kfd_ioctl_map_memory_to_gpu(struct file *filep,
+ goto get_mem_obj_from_handle_failed;
+ }
+ err = peer->kfd2kgd->map_memory_to_gpu(
+- peer->kgd, (struct kgd_mem *)mem, peer_pdd->vm);
+- if (err != 0) {
+- pr_err("Failed to map to gpu %d, num_dev=%d\n",
+- i, num_dev);
++ peer->kgd, (struct kgd_mem *)mem, peer_pdd->vm);
++ if (err) {
++ pr_err("Failed to map to gpu %d/%d\n",
++ i, args->n_devices);
+ goto map_memory_to_gpu_failed;
+ }
++ args->n_success = i+1;
+ }
+
+ mutex_unlock(&p->mutex);
+@@ -1461,7 +1457,7 @@ static int kfd_ioctl_map_memory_to_gpu(struct file *filep,
+ }
+
+ /* Flush TLBs after waiting for the page table updates to complete */
+- for (i = 0; i < num_dev; i++) {
++ for (i = 0; i < args->n_devices; i++) {
+ peer = kfd_device_by_id(devices_arr[i]);
+ if (WARN_ON_ONCE(!peer))
+ continue;
+@@ -1494,30 +1490,29 @@ static int kfd_ioctl_unmap_memory_from_gpu(struct file *filep,
+ void *mem;
+ struct kfd_dev *dev, *peer;
+ long err = 0;
+- uint32_t *devices_arr = NULL, num_dev, i;
++ uint32_t *devices_arr = NULL, i;
+
+ dev = kfd_device_by_id(GET_GPU_ID(args->handle));
+ if (!dev)
+ return -EINVAL;
+
+- if (args->device_ids_array_size == 0) {
+- pr_debug("Device ID array size is 0\n");
++ if (!args->n_devices) {
++ pr_debug("Device IDs array empty\n");
+ return -EINVAL;
+ }
+-
+- if (args->device_ids_array_size % sizeof(uint32_t)) {
+- pr_debug("Node IDs array size %u\n",
+- args->device_ids_array_size);
++ if (args->n_success > args->n_devices) {
++ pr_debug("n_success exceeds n_devices\n");
+ return -EINVAL;
+ }
+
+- devices_arr = kmalloc(args->device_ids_array_size, GFP_KERNEL);
++ devices_arr = kmalloc_array(args->n_devices, sizeof(*devices_arr),
++ GFP_KERNEL);
+ if (!devices_arr)
+ return -ENOMEM;
+
+ err = copy_from_user(devices_arr,
+- (void __user *)args->device_ids_array_ptr,
+- args->device_ids_array_size);
++ (void __user *)args->device_ids_array_ptr,
++ args->n_devices * sizeof(*devices_arr));
+ if (err != 0) {
+ err = -EFAULT;
+ goto copy_from_user_failed;
+@@ -1527,8 +1522,7 @@ static int kfd_ioctl_unmap_memory_from_gpu(struct file *filep,
+
+ pdd = kfd_get_process_device_data(dev, p);
+ if (!pdd) {
+- pr_debug("Process device data doesn't exist\n");
+- err = -ENODEV;
++ err = -EINVAL;
+ goto bind_process_to_device_failed;
+ }
+
+@@ -1539,8 +1533,7 @@ static int kfd_ioctl_unmap_memory_from_gpu(struct file *filep,
+ goto get_mem_obj_from_handle_failed;
+ }
+
+- num_dev = args->device_ids_array_size / sizeof(uint32_t);
+- for (i = 0 ; i < num_dev; i++) {
++ for (i = args->n_success; i < args->n_devices; i++) {
+ peer = kfd_device_by_id(devices_arr[i]);
+ if (!peer) {
+ err = -EINVAL;
+@@ -1556,9 +1549,10 @@ static int kfd_ioctl_unmap_memory_from_gpu(struct file *filep,
+ peer->kgd, (struct kgd_mem *)mem, peer_pdd->vm);
+ if (err) {
+ pr_err("Failed to unmap from gpu %d/%d\n",
+- i, num_dev);
++ i, args->n_devices);
+ goto unmap_memory_from_gpu_failed;
+ }
++ args->n_success = i+1;
+ }
+ kfree(devices_arr);
+
+@@ -1575,34 +1569,6 @@ static int kfd_ioctl_unmap_memory_from_gpu(struct file *filep,
+ return err;
+ }
+
+-static int kfd_ioctl_set_process_dgpu_aperture(struct file *filep,
+- struct kfd_process *p, void *data)
+-{
+- struct kfd_ioctl_set_process_dgpu_aperture_args *args = data;
+- struct kfd_dev *dev;
+- struct kfd_process_device *pdd;
+- long err;
+-
+- dev = kfd_device_by_id(args->gpu_id);
+- if (!dev)
+- return -EINVAL;
+-
+- mutex_lock(&p->mutex);
+-
+- pdd = kfd_bind_process_to_device(dev, p);
+- if (IS_ERR(pdd)) {
+- err = PTR_ERR(pdd);
+- goto exit;
+- }
+-
+- err = kfd_set_process_dgpu_aperture(pdd, args->dgpu_base,
+- args->dgpu_limit);
+-
+-exit:
+- mutex_unlock(&p->mutex);
+- return err;
+-}
+-
+ static int kfd_ioctl_get_dmabuf_info(struct file *filep,
+ struct kfd_process *p, void *data)
+ {
+@@ -1894,7 +1860,7 @@ static int kfd_create_cma_system_bo(struct kfd_dev *kdev, struct kfd_bo *bo,
+ uint64_t bo_size = 0;
+ struct dma_fence *f;
+
+- uint32_t flags = ALLOC_MEM_FLAGS_GTT | ALLOC_MEM_FLAGS_NONPAGED |
++ uint32_t flags = ALLOC_MEM_FLAGS_GTT | ALLOC_MEM_FLAGS_WRITABLE |
+ ALLOC_MEM_FLAGS_NO_SUBSTITUTE;
+
+ *cma_bo = NULL;
+@@ -2564,6 +2530,21 @@ static const struct amdkfd_ioctl_desc amdkfd_ioctls[] = {
+ AMDKFD_IOCTL_DEF(AMDKFD_IOC_DBG_WAVE_CONTROL,
+ kfd_ioctl_dbg_wave_control, 0),
+
++ AMDKFD_IOCTL_DEF(AMDKFD_IOC_SET_SCRATCH_BACKING_VA,
++ kfd_ioctl_set_scratch_backing_va, 0),
++
++ AMDKFD_IOCTL_DEF(AMDKFD_IOC_GET_TILE_CONFIG,
++ kfd_ioctl_get_tile_config, 0),
++
++ AMDKFD_IOCTL_DEF(AMDKFD_IOC_SET_TRAP_HANDLER,
++ kfd_ioctl_set_trap_handler, 0),
++
++ AMDKFD_IOCTL_DEF(AMDKFD_IOC_GET_PROCESS_APERTURES_NEW,
++ kfd_ioctl_get_process_apertures_new, 0),
++
++ AMDKFD_IOCTL_DEF(AMDKFD_IOC_ACQUIRE_VM,
++ kfd_ioctl_acquire_vm, 0),
++
+ AMDKFD_IOCTL_DEF(AMDKFD_IOC_ALLOC_MEMORY_OF_GPU,
+ kfd_ioctl_alloc_memory_of_gpu, 0),
+
+@@ -2576,30 +2557,15 @@ static const struct amdkfd_ioctl_desc amdkfd_ioctls[] = {
+ AMDKFD_IOCTL_DEF(AMDKFD_IOC_UNMAP_MEMORY_FROM_GPU,
+ kfd_ioctl_unmap_memory_from_gpu, 0),
+
+- AMDKFD_IOCTL_DEF(AMDKFD_IOC_ALLOC_MEMORY_OF_SCRATCH,
+- kfd_ioctl_alloc_scratch_memory, 0),
+-
+ AMDKFD_IOCTL_DEF(AMDKFD_IOC_SET_CU_MASK,
+ kfd_ioctl_set_cu_mask, 0),
+
+- AMDKFD_IOCTL_DEF(AMDKFD_IOC_SET_PROCESS_DGPU_APERTURE,
+- kfd_ioctl_set_process_dgpu_aperture, 0),
+-
+- AMDKFD_IOCTL_DEF(AMDKFD_IOC_SET_TRAP_HANDLER,
+- kfd_ioctl_set_trap_handler, 0),
+-
+- AMDKFD_IOCTL_DEF(AMDKFD_IOC_GET_PROCESS_APERTURES_NEW,
+- kfd_ioctl_get_process_apertures_new, 0),
+-
+ AMDKFD_IOCTL_DEF(AMDKFD_IOC_GET_DMABUF_INFO,
+ kfd_ioctl_get_dmabuf_info, 0),
+
+ AMDKFD_IOCTL_DEF(AMDKFD_IOC_IMPORT_DMABUF,
+ kfd_ioctl_import_dmabuf, 0),
+
+- AMDKFD_IOCTL_DEF(AMDKFD_IOC_GET_TILE_CONFIG,
+- kfd_ioctl_get_tile_config, 0),
+-
+ AMDKFD_IOCTL_DEF(AMDKFD_IOC_IPC_IMPORT_HANDLE,
+ kfd_ioctl_ipc_import_handle, 0),
+
+@@ -2612,9 +2578,6 @@ static const struct amdkfd_ioctl_desc amdkfd_ioctls[] = {
+ AMDKFD_IOCTL_DEF(AMDKFD_IOC_GET_QUEUE_WAVE_STATE,
+ kfd_ioctl_get_queue_wave_state, 0),
+
+- AMDKFD_IOCTL_DEF(AMDKFD_IOC_ACQUIRE_VM,
+- kfd_ioctl_acquire_vm, 0)
+-
+ };
+
+ #define AMDKFD_CORE_IOCTL_COUNT ARRAY_SIZE(amdkfd_ioctls)
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_flat_memory.c b/drivers/gpu/drm/amd/amdkfd/kfd_flat_memory.c
+index 0cae2e9..f7de732 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_flat_memory.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_flat_memory.c
+@@ -312,16 +312,6 @@
+ #define SVM_CWSR_BASE (SVM_USER_BASE - KFD_CWSR_TBA_TMA_SIZE)
+ #define SVM_IB_BASE (SVM_CWSR_BASE - PAGE_SIZE)
+
+-int kfd_set_process_dgpu_aperture(struct kfd_process_device *pdd,
+- uint64_t base, uint64_t limit)
+-{
+- if (base < SVM_USER_BASE) {
+- pr_err("Set dgpu vm base 0x%llx failed.\n", base);
+- return -EINVAL;
+- }
+- return 0;
+-}
+-
+ static void kfd_init_apertures_vi(struct kfd_process_device *pdd, uint8_t id)
+ {
+ /*
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+index c63a6b0..7bb56e2 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+@@ -918,8 +918,6 @@ int kgd2kfd_post_reset(struct kfd_dev *kfd);
+
+ /* amdkfd Apertures */
+ int kfd_init_apertures(struct kfd_process *process);
+-int kfd_set_process_dgpu_aperture(struct kfd_process_device *pdd,
+- uint64_t base, uint64_t limit);
+
+ /* Queue Context Management */
+ int init_queue(struct queue **q, const struct queue_properties *properties);
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
+index 9477e50..e79479b 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
+@@ -191,8 +191,10 @@ static int kfd_process_alloc_gpuvm(struct kfd_process_device *pdd,
+ static int kfd_process_device_reserve_ib_mem(struct kfd_process_device *pdd)
+ {
+ struct qcm_process_device *qpd = &pdd->qpd;
+- uint32_t flags = ALLOC_MEM_FLAGS_GTT | ALLOC_MEM_FLAGS_NONPAGED |
+- ALLOC_MEM_FLAGS_NO_SUBSTITUTE | ALLOC_MEM_FLAGS_EXECUTE_ACCESS;
++ uint32_t flags = ALLOC_MEM_FLAGS_GTT |
++ ALLOC_MEM_FLAGS_NO_SUBSTITUTE |
++ ALLOC_MEM_FLAGS_WRITABLE |
++ ALLOC_MEM_FLAGS_EXECUTABLE;
+ void *kaddr;
+ int ret;
+
+@@ -512,9 +514,8 @@ static int kfd_process_device_init_cwsr_dgpu(struct kfd_process_device *pdd)
+ {
+ struct kfd_dev *dev = pdd->dev;
+ struct qcm_process_device *qpd = &pdd->qpd;
+- uint32_t flags = ALLOC_MEM_FLAGS_GTT | ALLOC_MEM_FLAGS_NONPAGED |
+- ALLOC_MEM_FLAGS_NO_SUBSTITUTE | ALLOC_MEM_FLAGS_READONLY |
+- ALLOC_MEM_FLAGS_EXECUTE_ACCESS;
++ uint32_t flags = ALLOC_MEM_FLAGS_GTT |
++ ALLOC_MEM_FLAGS_NO_SUBSTITUTE | ALLOC_MEM_FLAGS_EXECUTABLE;
+ void *kaddr;
+ int ret;
+
+diff --git a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
+index d26bba5..fabcf1ef 100644
+--- a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
++++ b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
+@@ -156,24 +156,26 @@ struct tile_config {
+ uint32_t num_ranks;
+ };
+
++
+ /*
+- * Allocation flag domains currently only VRAM and GTT domain supported
++ * Allocation flag domains
++ * NOTE: This must match the corresponding definitions in kfd_ioctl.h.
+ */
+-#define ALLOC_MEM_FLAGS_VRAM (1 << 0)
+-#define ALLOC_MEM_FLAGS_GTT (1 << 1)
+-#define ALLOC_MEM_FLAGS_USERPTR (1 << 2)
+-#define ALLOC_MEM_FLAGS_DOORBELL (1 << 3)
++#define ALLOC_MEM_FLAGS_VRAM (1 << 0)
++#define ALLOC_MEM_FLAGS_GTT (1 << 1)
++#define ALLOC_MEM_FLAGS_USERPTR (1 << 2)
++#define ALLOC_MEM_FLAGS_DOORBELL (1 << 3)
+
+ /*
+ * Allocation flags attributes/access options.
++ * NOTE: This must match the corresponding definitions in kfd_ioctl.h.
+ */
+-#define ALLOC_MEM_FLAGS_NONPAGED (1 << 31)
+-#define ALLOC_MEM_FLAGS_READONLY (1 << 30)
+-#define ALLOC_MEM_FLAGS_PUBLIC (1 << 29)
+-#define ALLOC_MEM_FLAGS_NO_SUBSTITUTE (1 << 28)
++#define ALLOC_MEM_FLAGS_WRITABLE (1 << 31)
++#define ALLOC_MEM_FLAGS_EXECUTABLE (1 << 30)
++#define ALLOC_MEM_FLAGS_PUBLIC (1 << 29)
++#define ALLOC_MEM_FLAGS_NO_SUBSTITUTE (1 << 28) /* TODO */
+ #define ALLOC_MEM_FLAGS_AQL_QUEUE_MEM (1 << 27)
+-#define ALLOC_MEM_FLAGS_EXECUTE_ACCESS (1 << 26)
+-#define ALLOC_MEM_FLAGS_COHERENT (1 << 25)
++#define ALLOC_MEM_FLAGS_COHERENT (1 << 26) /* For GFXv9 or later */
+
+ /**
+ * struct kfd2kgd_calls
+diff --git a/include/uapi/linux/kfd_ioctl.h b/include/uapi/linux/kfd_ioctl.h
+index 85d833e..7a6bb85 100644
+--- a/include/uapi/linux/kfd_ioctl.h
++++ b/include/uapi/linux/kfd_ioctl.h
+@@ -279,6 +279,12 @@ struct kfd_ioctl_wait_events_args {
+ uint32_t wait_result; /* from KFD */
+ };
+
++struct kfd_ioctl_set_scratch_backing_va_args {
++ __u64 va_addr; /* to KFD */
++ __u32 gpu_id; /* to KFD */
++ __u32 pad;
++};
++
+ struct kfd_ioctl_alloc_memory_of_scratch_args {
+ uint64_t va_addr; /* to KFD */
+ uint64_t size; /* to KFD */
+@@ -321,15 +327,15 @@ struct kfd_ioctl_free_memory_of_gpu_args {
+ struct kfd_ioctl_map_memory_to_gpu_args {
+ uint64_t handle; /* to KFD */
+ uint64_t device_ids_array_ptr; /* to KFD */
+- uint32_t device_ids_array_size; /* to KFD */
+- uint32_t pad;
++ uint32_t n_devices; /* to KFD */
++ uint32_t n_success; /* to/from KFD */
+ };
+
+ struct kfd_ioctl_unmap_memory_from_gpu_args {
+ uint64_t handle; /* to KFD */
+ uint64_t device_ids_array_ptr; /* to KFD */
+- uint32_t device_ids_array_size; /* to KFD */
+- uint32_t pad;
++ uint32_t n_devices; /* to KFD */
++ uint32_t n_success; /* to/from KFD */
+ };
+
+ struct kfd_ioctl_set_process_dgpu_aperture_args {
+@@ -478,62 +484,59 @@ struct kfd_ioctl_cross_memory_copy_args {
+ #define AMDKFD_IOC_DBG_ADDRESS_WATCH \
+ AMDKFD_IOW(0x0F, struct kfd_ioctl_dbg_address_watch_args)
+
+-#define AMDKFD_IOC_DBG_WAVE_CONTROL \
+- AMDKFD_IOW(0x10, struct kfd_ioctl_dbg_wave_control_args)
+-
+-#define AMDKFD_IOC_ALLOC_MEMORY_OF_GPU \
+- AMDKFD_IOWR(0x11, struct kfd_ioctl_alloc_memory_of_gpu_args)
++#define AMDKFD_IOC_DBG_WAVE_CONTROL \
++ AMDKFD_IOW(0x10, struct kfd_ioctl_dbg_wave_control_args)
+
+-#define AMDKFD_IOC_FREE_MEMORY_OF_GPU \
+- AMDKFD_IOWR(0x12, struct kfd_ioctl_free_memory_of_gpu_args)
++#define AMDKFD_IOC_SET_SCRATCH_BACKING_VA \
++ AMDKFD_IOWR(0x11, struct kfd_ioctl_set_scratch_backing_va_args)
+
+-#define AMDKFD_IOC_MAP_MEMORY_TO_GPU \
+- AMDKFD_IOWR(0x13, struct kfd_ioctl_map_memory_to_gpu_args)
++#define AMDKFD_IOC_GET_TILE_CONFIG \
++ AMDKFD_IOWR(0x12, struct kfd_ioctl_get_tile_config_args)
+
+-#define AMDKFD_IOC_UNMAP_MEMORY_FROM_GPU \
+- AMDKFD_IOWR(0x14, struct kfd_ioctl_unmap_memory_from_gpu_args)
++#define AMDKFD_IOC_SET_TRAP_HANDLER \
++ AMDKFD_IOW(0x13, struct kfd_ioctl_set_trap_handler_args)
+
+-#define AMDKFD_IOC_ALLOC_MEMORY_OF_SCRATCH \
+- AMDKFD_IOWR(0x15, struct kfd_ioctl_alloc_memory_of_scratch_args)
++#define AMDKFD_IOC_GET_PROCESS_APERTURES_NEW \
++ AMDKFD_IOWR(0x14, \
++ struct kfd_ioctl_get_process_apertures_new_args)
+
+-#define AMDKFD_IOC_SET_CU_MASK \
+- AMDKFD_IOW(0x16, struct kfd_ioctl_set_cu_mask_args)
++#define AMDKFD_IOC_ACQUIRE_VM \
++ AMDKFD_IOW(0x15, struct kfd_ioctl_acquire_vm_args)
+
+-#define AMDKFD_IOC_SET_PROCESS_DGPU_APERTURE \
+- AMDKFD_IOW(0x17, \
+- struct kfd_ioctl_set_process_dgpu_aperture_args)
++#define AMDKFD_IOC_ALLOC_MEMORY_OF_GPU \
++ AMDKFD_IOWR(0x16, struct kfd_ioctl_alloc_memory_of_gpu_args)
+
+-#define AMDKFD_IOC_SET_TRAP_HANDLER \
+- AMDKFD_IOW(0x18, struct kfd_ioctl_set_trap_handler_args)
++#define AMDKFD_IOC_FREE_MEMORY_OF_GPU \
++ AMDKFD_IOW(0x17, struct kfd_ioctl_free_memory_of_gpu_args)
+
+-#define AMDKFD_IOC_GET_PROCESS_APERTURES_NEW \
+- AMDKFD_IOWR(0x19, struct kfd_ioctl_get_process_apertures_new_args)
++#define AMDKFD_IOC_MAP_MEMORY_TO_GPU \
++ AMDKFD_IOWR(0x18, struct kfd_ioctl_map_memory_to_gpu_args)
+
+-#define AMDKFD_IOC_GET_DMABUF_INFO \
+- AMDKFD_IOWR(0x1A, struct kfd_ioctl_get_dmabuf_info_args)
++#define AMDKFD_IOC_UNMAP_MEMORY_FROM_GPU \
++ AMDKFD_IOWR(0x19, struct kfd_ioctl_unmap_memory_from_gpu_args)
+
+-#define AMDKFD_IOC_IMPORT_DMABUF \
+- AMDKFD_IOWR(0x1B, struct kfd_ioctl_import_dmabuf_args)
++#define AMDKFD_IOC_SET_CU_MASK \
++ AMDKFD_IOW(0x1A, struct kfd_ioctl_set_cu_mask_args)
+
+-#define AMDKFD_IOC_GET_TILE_CONFIG \
+- AMDKFD_IOWR(0x1C, struct kfd_ioctl_get_tile_config_args)
++#define AMDKFD_IOC_GET_QUEUE_WAVE_STATE \
++ AMDKFD_IOWR(0x1B, struct kfd_ioctl_get_queue_wave_state_args)
+
+-#define AMDKFD_IOC_IPC_IMPORT_HANDLE \
+- AMDKFD_IOWR(0x1D, struct kfd_ioctl_ipc_import_handle_args)
++#define AMDKFD_IOC_GET_DMABUF_INFO \
++ AMDKFD_IOWR(0x1C, struct kfd_ioctl_get_dmabuf_info_args)
+
+-#define AMDKFD_IOC_IPC_EXPORT_HANDLE \
+- AMDKFD_IOWR(0x1E, struct kfd_ioctl_ipc_export_handle_args)
++#define AMDKFD_IOC_IMPORT_DMABUF \
++ AMDKFD_IOWR(0x1D, struct kfd_ioctl_import_dmabuf_args)
+
+-#define AMDKFD_IOC_CROSS_MEMORY_COPY \
+- AMDKFD_IOWR(0x1F, struct kfd_ioctl_cross_memory_copy_args)
++#define AMDKFD_IOC_IPC_IMPORT_HANDLE \
++ AMDKFD_IOWR(0x1E, struct kfd_ioctl_ipc_import_handle_args)
+
+-#define AMDKFD_IOC_GET_QUEUE_WAVE_STATE \
+- AMDKFD_IOWR(0x20, struct kfd_ioctl_get_queue_wave_state_args)
++#define AMDKFD_IOC_IPC_EXPORT_HANDLE \
++ AMDKFD_IOWR(0x1F, struct kfd_ioctl_ipc_export_handle_args)
+
+-#define AMDKFD_IOC_ACQUIRE_VM \
+- AMDKFD_IOW(0x21, struct kfd_ioctl_acquire_vm_args)
++#define AMDKFD_IOC_CROSS_MEMORY_COPY \
++ AMDKFD_IOWR(0x20, struct kfd_ioctl_cross_memory_copy_args)
+
+-#define AMDKFD_COMMAND_START 0x01
+-#define AMDKFD_COMMAND_END 0x22
++#define AMDKFD_COMMAND_START 0x01
++#define AMDKFD_COMMAND_END 0x21
+
+ #endif
+--
+2.7.4
+