diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/2745-drm-amdkfd-Revert-codes-of-creating-SDMA-queue-on-sp.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.19.8/2745-drm-amdkfd-Revert-codes-of-creating-SDMA-queue-on-sp.patch | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/2745-drm-amdkfd-Revert-codes-of-creating-SDMA-queue-on-sp.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/2745-drm-amdkfd-Revert-codes-of-creating-SDMA-queue-on-sp.patch new file mode 100644 index 00000000..e11c8e26 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/2745-drm-amdkfd-Revert-codes-of-creating-SDMA-queue-on-sp.patch @@ -0,0 +1,155 @@ +From d584c11312113d6f8506af9461a73d623d5d7e8d Mon Sep 17 00:00:00 2001 +From: Oak Zeng <Oak.Zeng@amd.com> +Date: Mon, 21 Jan 2019 10:18:05 -0600 +Subject: [PATCH 2745/2940] drm/amdkfd: Revert codes of creating SDMA queue on + specific engine + +The design changed. + +Change-Id: I5c38462726519f99cc9280548e432ac2b676fafe +Signed-off-by: Oak Zeng <Oak.Zeng@amd.com> +--- + drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 26 +++++------------ + .../drm/amd/amdkfd/kfd_device_queue_manager.c | 29 +++---------------- + include/uapi/linux/kfd_ioctl.h | 4 --- + 3 files changed, 12 insertions(+), 47 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c +index ed19cbb618dd..a34c8cea1fb7 100644 +--- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c ++++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c +@@ -161,8 +161,7 @@ static int kfd_ioctl_get_version(struct file *filep, struct kfd_process *p, + return 0; + } + +-static int set_queue_properties_from_user(struct kfd_dev *dev, +- struct queue_properties *q_properties, ++static int set_queue_properties_from_user(struct queue_properties *q_properties, + struct kfd_ioctl_create_queue_args *args) + { + if (args->queue_percentage > KFD_MAX_QUEUE_PERCENTAGE) { +@@ -232,21 +231,12 @@ static int set_queue_properties_from_user(struct kfd_dev *dev, + q_properties->ctx_save_restore_area_size = args->ctx_save_restore_size; + q_properties->ctl_stack_size = args->ctl_stack_size; + if (args->queue_type == KFD_IOC_QUEUE_TYPE_COMPUTE || +- args->queue_type == KFD_IOC_QUEUE_TYPE_COMPUTE_AQL) { ++ args->queue_type == KFD_IOC_QUEUE_TYPE_COMPUTE_AQL) + q_properties->type = KFD_QUEUE_TYPE_COMPUTE; +- } else if (args->queue_type == KFD_IOC_QUEUE_TYPE_SDMA) { +- q_properties->sdma_engine_id = +- dev->device_info->num_sdma_engines; ++ else if (args->queue_type == KFD_IOC_QUEUE_TYPE_SDMA) + q_properties->type = KFD_QUEUE_TYPE_SDMA; +- } else if (args->queue_type >= KFD_IOC_QUEUE_TYPE_SDMA_ENGINE(0) && +- args->queue_type < KFD_IOC_QUEUE_TYPE_SDMA_ENGINE( +- dev->device_info->num_sdma_engines)) { +- q_properties->sdma_engine_id = +- args->queue_type - KFD_IOC_QUEUE_TYPE_SDMA_ENGINE(0); +- q_properties->type = KFD_QUEUE_TYPE_SDMA; +- } else { ++ else + return -ENOTSUPP; +- } + + if (args->queue_type == KFD_IOC_QUEUE_TYPE_COMPUTE_AQL) + q_properties->format = KFD_QUEUE_FORMAT_AQL; +@@ -293,6 +283,10 @@ static int kfd_ioctl_create_queue(struct file *filep, struct kfd_process *p, + + pr_debug("Creating queue ioctl\n"); + ++ err = set_queue_properties_from_user(&q_properties, args); ++ if (err) ++ return err; ++ + pr_debug("Looking for gpu id 0x%x\n", args->gpu_id); + dev = kfd_device_by_id(args->gpu_id); + if (!dev) { +@@ -300,10 +294,6 @@ static int kfd_ioctl_create_queue(struct file *filep, struct kfd_process *p, + return -EINVAL; + } + +- err = set_queue_properties_from_user(dev, &q_properties, args); +- if (err) +- return err; +- + mutex_lock(&p->mutex); + + pdd = kfd_bind_process_to_device(dev, p); +diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +index f53b8fa87b0b..ddaa64b726a0 100644 +--- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c ++++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +@@ -908,33 +908,14 @@ static int stop_nocpsch(struct device_queue_manager *dqm) + } + + static int allocate_sdma_queue(struct device_queue_manager *dqm, +- unsigned int sdma_engine_id, + unsigned int *sdma_id) + { +- int bit = -1; ++ int bit; + + if (dqm->sdma_bitmap == 0) + return -ENOMEM; + +- /* If sdma_engine_id is valid, +- * allocate queue on specific engine +- */ +- if (sdma_engine_id < get_num_sdma_engines(dqm)) { +- unsigned int i; +- +- for (i = sdma_engine_id; i < get_num_sdma_queues(dqm); +- i += get_num_sdma_engines(dqm)) { +- if (dqm->sdma_bitmap & (1<<i)) { +- bit = i; +- break; +- } +- } +- if (bit == -1) +- return -EBUSY; +- /* Otherwise allocate from any engine */ +- } else { +- bit = __ffs64(dqm->sdma_bitmap); +- } ++ bit = __ffs64(dqm->sdma_bitmap); + + dqm->sdma_bitmap &= ~(1ULL << bit); + *sdma_id = bit; +@@ -959,8 +940,7 @@ static int create_sdma_queue_nocpsch(struct device_queue_manager *dqm, + + mqd_mgr = dqm->mqd_mgrs[KFD_MQD_TYPE_SDMA]; + +- retval = allocate_sdma_queue(dqm, q->properties.sdma_engine_id, +- &q->sdma_id); ++ retval = allocate_sdma_queue(dqm, &q->sdma_id); + if (retval) + return retval; + +@@ -1180,8 +1160,7 @@ static int create_queue_cpsch(struct device_queue_manager *dqm, struct queue *q, + } + + if (q->properties.type == KFD_QUEUE_TYPE_SDMA) { +- retval = allocate_sdma_queue(dqm, q->properties.sdma_engine_id, +- &q->sdma_id); ++ retval = allocate_sdma_queue(dqm, &q->sdma_id); + if (retval) + goto out_unlock; + q->properties.sdma_queue_id = +diff --git a/include/uapi/linux/kfd_ioctl.h b/include/uapi/linux/kfd_ioctl.h +index 816dc69b8a49..d8fca2c27366 100644 +--- a/include/uapi/linux/kfd_ioctl.h ++++ b/include/uapi/linux/kfd_ioctl.h +@@ -38,10 +38,6 @@ struct kfd_ioctl_get_version_args { + #define KFD_IOC_QUEUE_TYPE_COMPUTE 0x0 + #define KFD_IOC_QUEUE_TYPE_SDMA 0x1 + #define KFD_IOC_QUEUE_TYPE_COMPUTE_AQL 0x2 +-#define KFD_IOC_QUEUE_TYPE_SDMA_ENGINE(e) (0x10000 + (e)) +-#define KFD_IOC_QUEUE_TYPE_SDMA_AQL_ENGINE(e) (0x20000 + (e)) +-#define KFD_IOC_QUEUE_TYPE_SDMA_ENGINE_MAX (KFD_IOC_QUEUE_TYPE_SDMA_ENGINE(0xffff)) +-#define KFD_IOC_QUEUE_TYPE_SDMA_AQL_ENGINE_MAX (KFD_IOC_QUEUE_TYPE_SDMA_AQL_ENGINE(0xffff)) + + #define KFD_MAX_QUEUE_PERCENTAGE 100 + #define KFD_MAX_QUEUE_PRIORITY 15 +-- +2.17.1 + |