From d584c11312113d6f8506af9461a73d623d5d7e8d Mon Sep 17 00:00:00 2001 From: Oak Zeng 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 --- 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<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