diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2785-drm-amdkfd-New-IOCTL-to-allocate-queue-GWS.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2785-drm-amdkfd-New-IOCTL-to-allocate-queue-GWS.patch | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2785-drm-amdkfd-New-IOCTL-to-allocate-queue-GWS.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2785-drm-amdkfd-New-IOCTL-to-allocate-queue-GWS.patch new file mode 100644 index 00000000..b5dfebef --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2785-drm-amdkfd-New-IOCTL-to-allocate-queue-GWS.patch @@ -0,0 +1,109 @@ +From 39beb722642c428d4f7ca3b3b44031ab21a431d0 Mon Sep 17 00:00:00 2001 +From: Oak Zeng <Oak.Zeng@amd.com> +Date: Mon, 6 May 2019 22:11:14 -0500 +Subject: [PATCH 2785/2940] drm/amdkfd: New IOCTL to allocate queue GWS + +Add a new kfd ioctl to allocate queue GWS. Queue +GWS is released on queue destroy. + +Change-Id: I60153c26a577992ad873e4292e759e5c3d5bbd15 +Signed-off-by: Oak Zeng <Oak.Zeng@amd.com> +Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com> +--- + drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 29 +++++++++++++++++++++++- + include/uapi/linux/kfd_ioctl.h | 18 +++++++++++++++ + 2 files changed, 46 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c +index 94e5f33ae9d9..aa5243546ae1 100644 +--- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c ++++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c +@@ -1606,6 +1606,31 @@ static int kfd_ioctl_unmap_memory_from_gpu(struct file *filep, + return err; + } + ++static int kfd_ioctl_alloc_queue_gws(struct file *filep, ++ struct kfd_process *p, void *data) ++{ ++ int retval; ++ struct kfd_ioctl_alloc_queue_gws_args *args = data; ++ struct kfd_dev *dev = NULL; ++ ++ if (!hws_gws_support || ++ dev->dqm->sched_policy == KFD_SCHED_POLICY_NO_HWS) ++ return -EINVAL; ++ ++ dev = kfd_device_by_id(args->gpu_id); ++ if (!dev) { ++ pr_debug("Could not find gpu id 0x%x\n", args->gpu_id); ++ return -EINVAL; ++ } ++ ++ mutex_lock(&p->mutex); ++ retval = pqm_set_gws(&p->pqm, args->queue_id, args->num_gws ? dev->gws : NULL); ++ mutex_unlock(&p->mutex); ++ ++ args->first_gws = 0; ++ return retval; ++} ++ + static int kfd_ioctl_get_dmabuf_info(struct file *filep, + struct kfd_process *p, void *data) + { +@@ -2870,6 +2895,9 @@ static const struct amdkfd_ioctl_desc amdkfd_ioctls[] = { + AMDKFD_IOCTL_DEF(AMDKFD_IOC_IMPORT_DMABUF, + kfd_ioctl_import_dmabuf, 0), + ++ AMDKFD_IOCTL_DEF(AMDKFD_IOC_ALLOC_QUEUE_GWS, ++ kfd_ioctl_alloc_queue_gws, 0), ++ + AMDKFD_IOCTL_DEF(AMDKFD_IOC_IPC_IMPORT_HANDLE, + kfd_ioctl_ipc_import_handle, 0), + +@@ -2881,7 +2909,6 @@ static const struct amdkfd_ioctl_desc amdkfd_ioctls[] = { + + AMDKFD_IOCTL_DEF(AMDKFD_IOC_DBG_TRAP, + kfd_ioctl_dbg_set_debug_trap, 0), +- + }; + + #define AMDKFD_CORE_IOCTL_COUNT ARRAY_SIZE(amdkfd_ioctls) +diff --git a/include/uapi/linux/kfd_ioctl.h b/include/uapi/linux/kfd_ioctl.h +index 8f19d8524b4f..b2e1aca6eca0 100644 +--- a/include/uapi/linux/kfd_ioctl.h ++++ b/include/uapi/linux/kfd_ioctl.h +@@ -475,6 +475,21 @@ enum kfd_mmio_remap { + KFD_MMIO_REMAP_HDP_REG_FLUSH_CNTL = 4, + }; + ++/* Allocate GWS for specific queue ++ * ++ * @gpu_id: device identifier ++ * @queue_id: queue's id that GWS is allocated for ++ * @num_gws: how many GWS to allocate ++ * @first_gws: index of the first GWS allocated. ++ * only support contiguous GWS allocation ++ */ ++struct kfd_ioctl_alloc_queue_gws_args { ++ __u32 gpu_id; /* to KFD */ ++ __u32 queue_id; /* to KFD */ ++ __u32 num_gws; /* to KFD */ ++ __u32 first_gws; /* from KFD */ ++}; ++ + struct kfd_ioctl_get_dmabuf_info_args { + __u64 size; /* from KFD */ + __u64 metadata_ptr; /* to KFD */ +@@ -634,6 +649,9 @@ struct kfd_ioctl_cross_memory_copy_args { + #define AMDKFD_IOC_IMPORT_DMABUF \ + AMDKFD_IOWR(0x1D, struct kfd_ioctl_import_dmabuf_args) + ++#define AMDKFD_IOC_ALLOC_QUEUE_GWS \ ++ AMDKFD_IOWR(0x1E, struct kfd_ioctl_alloc_queue_gws_args) ++ + #define AMDKFD_IOC_IPC_IMPORT_HANDLE \ + AMDKFD_IOWR(0x1E, struct kfd_ioctl_ipc_import_handle_args) + +-- +2.17.1 + |