* [PATCH 1/4] drm/amdkfd: Use 64 bit sdma_bitmap
@ 2018-11-13 19:11 Oak Zeng
[not found] ` <1542136254-5561-1-git-send-email-ozeng-5C7GfCeVMHo@public.gmane.org>
0 siblings, 1 reply; 8+ messages in thread
From: Oak Zeng @ 2018-11-13 19:11 UTC (permalink / raw)
To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org; +Cc: Zeng, Oak
From: Oak Zeng <Oak.Zeng@amd.com>
Maximumly support 64 sdma queues
Change-Id: Ia34b81fe606f730cb0cddb5dfc833cfe8abcf776
Signed-off-by: Oak Zeng <Oak.Zeng@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
---
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 10 +++++-----
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h | 2 +-
2 files changed, 6 insertions(+), 6 deletions(-)
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 fb9d66e..7bf4bca 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
@@ -885,7 +885,7 @@ static int initialize_nocpsch(struct device_queue_manager *dqm)
}
dqm->vmid_bitmap = (1 << dqm->dev->vm_info.vmid_num_kfd) - 1;
- dqm->sdma_bitmap = (1 << get_num_sdma_queues(dqm)) - 1;
+ dqm->sdma_bitmap = (1ULL << get_num_sdma_queues(dqm)) - 1;
return 0;
}
@@ -923,8 +923,8 @@ static int allocate_sdma_queue(struct device_queue_manager *dqm,
if (dqm->sdma_bitmap == 0)
return -ENOMEM;
- bit = ffs(dqm->sdma_bitmap) - 1;
- dqm->sdma_bitmap &= ~(1 << bit);
+ bit = __ffs64(dqm->sdma_bitmap);
+ dqm->sdma_bitmap &= ~(1ULL << bit);
*sdma_queue_id = bit;
return 0;
@@ -935,7 +935,7 @@ static void deallocate_sdma_queue(struct device_queue_manager *dqm,
{
if (sdma_queue_id >= get_num_sdma_queues(dqm))
return;
- dqm->sdma_bitmap |= (1 << sdma_queue_id);
+ dqm->sdma_bitmap |= (1ULL << sdma_queue_id);
}
static int create_sdma_queue_nocpsch(struct device_queue_manager *dqm,
@@ -1041,7 +1041,7 @@ static int initialize_cpsch(struct device_queue_manager *dqm)
dqm->queue_count = dqm->processes_count = 0;
dqm->sdma_queue_count = 0;
dqm->active_runlist = false;
- dqm->sdma_bitmap = (1 << get_num_sdma_queues(dqm)) - 1;
+ dqm->sdma_bitmap = (1ULL << get_num_sdma_queues(dqm)) - 1;
INIT_WORK(&dqm->hw_exception_work, kfd_process_hw_exception);
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h
index 70e38a2..2770f3e 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h
@@ -188,7 +188,7 @@ struct device_queue_manager {
unsigned int total_queue_count;
unsigned int next_pipe_to_allocate;
unsigned int *allocated_queues;
- unsigned int sdma_bitmap;
+ uint64_t sdma_bitmap;
unsigned int vmid_bitmap;
uint64_t pipelines_addr;
struct kfd_mem_obj *pipeline_mem;
--
2.7.4
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/4] drm/amdkfd: Added more SDMA queue type
[not found] ` <1542136254-5561-1-git-send-email-ozeng-5C7GfCeVMHo@public.gmane.org>
@ 2018-11-13 19:11 ` Oak Zeng
[not found] ` <1542136254-5561-2-git-send-email-ozeng-5C7GfCeVMHo@public.gmane.org>
2018-11-13 19:11 ` [PATCH 3/4] drm/amdkfd: Allocate SDMA queue on specif engine Oak Zeng
2018-11-13 19:11 ` [PATCH 4/4] drm/amdkfd: Add sdma allocation debug message Oak Zeng
2 siblings, 1 reply; 8+ messages in thread
From: Oak Zeng @ 2018-11-13 19:11 UTC (permalink / raw)
To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org; +Cc: Zeng, Oak
From: Oak Zeng <Oak.Zeng@amd.com>
The new types are used to allocate SDMA queue on specific
SDMA engine
Change-Id: Ica4cd7013eb86103a92cec2f74d96ac037b5ecbd
Signed-off-by: Oak Zeng <Oak.Zeng@amd.com>
Reviewd-by: Felix Kuehling <Felix.Kuehling@amd.com>
---
include/uapi/linux/kfd_ioctl.h | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/include/uapi/linux/kfd_ioctl.h b/include/uapi/linux/kfd_ioctl.h
index b01eb50..8cc6e7d 100644
--- a/include/uapi/linux/kfd_ioctl.h
+++ b/include/uapi/linux/kfd_ioctl.h
@@ -35,9 +35,13 @@ struct kfd_ioctl_get_version_args {
};
/* For kfd_ioctl_create_queue_args.queue_type. */
-#define KFD_IOC_QUEUE_TYPE_COMPUTE 0
-#define KFD_IOC_QUEUE_TYPE_SDMA 1
-#define KFD_IOC_QUEUE_TYPE_COMPUTE_AQL 2
+#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.7.4
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 3/4] drm/amdkfd: Allocate SDMA queue on specif engine
[not found] ` <1542136254-5561-1-git-send-email-ozeng-5C7GfCeVMHo@public.gmane.org>
2018-11-13 19:11 ` [PATCH 2/4] drm/amdkfd: Added more SDMA queue type Oak Zeng
@ 2018-11-13 19:11 ` Oak Zeng
[not found] ` <1542136254-5561-3-git-send-email-ozeng-5C7GfCeVMHo@public.gmane.org>
2018-11-13 19:11 ` [PATCH 4/4] drm/amdkfd: Add sdma allocation debug message Oak Zeng
2 siblings, 1 reply; 8+ messages in thread
From: Oak Zeng @ 2018-11-13 19:11 UTC (permalink / raw)
To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org; +Cc: Zeng, Oak
From: Oak Zeng <Oak.Zeng@amd.com>
Change-Id: I32e0304cdf6ceeed12ea8d0af62f44e1ab20bffb
Signed-off-by: Oak Zeng <Oak.Zeng@amd.com>
Reviewd-by: Felix Kuehling <Felix.Kuehling@amd.com>
---
drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 26 +++++++++++++------
.../gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 30 +++++++++++++++++++---
2 files changed, 44 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
index 5f4062b..37b02ea 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
@@ -143,7 +143,8 @@ static int kfd_ioctl_get_version(struct file *filep, struct kfd_process *p,
return 0;
}
-static int set_queue_properties_from_user(struct queue_properties *q_properties,
+static int set_queue_properties_from_user(struct kfd_dev *dev,
+ struct queue_properties *q_properties,
struct kfd_ioctl_create_queue_args *args)
{
if (args->queue_percentage > KFD_MAX_QUEUE_PERCENTAGE) {
@@ -213,12 +214,21 @@ static int set_queue_properties_from_user(struct queue_properties *q_properties,
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)
+ } else if (args->queue_type == KFD_IOC_QUEUE_TYPE_SDMA) {
+ q_properties->sdma_engine_id =
+ dev->device_info->num_sdma_engines;
q_properties->type = KFD_QUEUE_TYPE_SDMA;
- else
+ } 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 {
return -ENOTSUPP;
+ }
if (args->queue_type == KFD_IOC_QUEUE_TYPE_COMPUTE_AQL)
q_properties->format = KFD_QUEUE_FORMAT_AQL;
@@ -265,10 +275,6 @@ 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) {
@@ -276,6 +282,10 @@ 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 7bf4bca..bc8f955 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
@@ -916,14 +916,34 @@ 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_queue_id)
{
- int bit;
+ int bit = -1;
if (dqm->sdma_bitmap == 0)
return -ENOMEM;
- bit = __ffs64(dqm->sdma_bitmap);
+ /* 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);
+ }
+
dqm->sdma_bitmap &= ~(1ULL << bit);
*sdma_queue_id = bit;
@@ -949,7 +969,8 @@ static int create_sdma_queue_nocpsch(struct device_queue_manager *dqm,
if (!mqd_mgr)
return -ENOMEM;
- retval = allocate_sdma_queue(dqm, &q->sdma_id);
+ retval = allocate_sdma_queue(dqm, q->properties.sdma_engine_id,
+ &q->sdma_id);
if (retval)
return retval;
@@ -1168,7 +1189,8 @@ 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->sdma_id);
+ retval = allocate_sdma_queue(dqm, q->properties.sdma_engine_id,
+ &q->sdma_id);
if (retval)
goto out_unlock;
q->properties.sdma_queue_id =
--
2.7.4
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 4/4] drm/amdkfd: Add sdma allocation debug message
[not found] ` <1542136254-5561-1-git-send-email-ozeng-5C7GfCeVMHo@public.gmane.org>
2018-11-13 19:11 ` [PATCH 2/4] drm/amdkfd: Added more SDMA queue type Oak Zeng
2018-11-13 19:11 ` [PATCH 3/4] drm/amdkfd: Allocate SDMA queue on specif engine Oak Zeng
@ 2018-11-13 19:11 ` Oak Zeng
[not found] ` <1542136254-5561-4-git-send-email-ozeng-5C7GfCeVMHo@public.gmane.org>
2 siblings, 1 reply; 8+ messages in thread
From: Oak Zeng @ 2018-11-13 19:11 UTC (permalink / raw)
To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org; +Cc: Zeng, Oak
From: Oak Zeng <Oak.Zeng@amd.com>
Change-Id: I47ec79eceac810f7031eaf88d267fc8370501c27
Signed-off-by: Oak Zeng <Oak.Zeng@amd.com>
Reviewd-by: Felix Kuehling <Felix.Kuehling@amd.com>
---
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 3 +++
1 file changed, 3 insertions(+)
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 bc8f955..116afef 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
@@ -1197,6 +1197,9 @@ static int create_queue_cpsch(struct device_queue_manager *dqm, struct queue *q,
q->sdma_id / get_num_sdma_engines(dqm);
q->properties.sdma_engine_id =
q->sdma_id % get_num_sdma_engines(dqm);
+ pr_debug("SDMA id is: %d\n", q->sdma_id);
+ pr_debug("SDMA queue id: %d\n", q->properties.sdma_queue_id);
+ pr_debug("SDMA engine id: %d\n", q->properties.sdma_engine_id);
}
retval = allocate_doorbell(qpd, q);
--
2.7.4
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 4/4] drm/amdkfd: Add sdma allocation debug message
[not found] ` <1542136254-5561-4-git-send-email-ozeng-5C7GfCeVMHo@public.gmane.org>
@ 2018-11-13 19:13 ` ozeng
2018-11-13 20:00 ` Alex Deucher
1 sibling, 0 replies; 8+ messages in thread
From: ozeng @ 2018-11-13 19:13 UTC (permalink / raw)
To: Zeng, Oak,
amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org
Hi Alex,
Those 4 patches internally passed Felix's code review. Those are
required for MI100 but are general changes so I think it is better to
check into drm-next.
Thanks,
Oak
On 11/13/2018 02:11 PM, Zeng, Oak wrote:
> From: Oak Zeng <Oak.Zeng@amd.com>
>
> Change-Id: I47ec79eceac810f7031eaf88d267fc8370501c27
> Signed-off-by: Oak Zeng <Oak.Zeng@amd.com>
> Reviewd-by: Felix Kuehling <Felix.Kuehling@amd.com>
> ---
> drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> 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 bc8f955..116afef 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
> @@ -1197,6 +1197,9 @@ static int create_queue_cpsch(struct device_queue_manager *dqm, struct queue *q,
> q->sdma_id / get_num_sdma_engines(dqm);
> q->properties.sdma_engine_id =
> q->sdma_id % get_num_sdma_engines(dqm);
> + pr_debug("SDMA id is: %d\n", q->sdma_id);
> + pr_debug("SDMA queue id: %d\n", q->properties.sdma_queue_id);
> + pr_debug("SDMA engine id: %d\n", q->properties.sdma_engine_id);
> }
>
> retval = allocate_doorbell(qpd, q);
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/4] drm/amdkfd: Added more SDMA queue type
[not found] ` <1542136254-5561-2-git-send-email-ozeng-5C7GfCeVMHo@public.gmane.org>
@ 2018-11-13 19:57 ` Alex Deucher
0 siblings, 0 replies; 8+ messages in thread
From: Alex Deucher @ 2018-11-13 19:57 UTC (permalink / raw)
To: ozeng-5C7GfCeVMHo; +Cc: Oak Zeng, amd-gfx list
On Tue, Nov 13, 2018 at 2:11 PM Oak Zeng <ozeng@amd.com> wrote:
>
> From: Oak Zeng <Oak.Zeng@amd.com>
>
> The new types are used to allocate SDMA queue on specific
> SDMA engine
>
> Change-Id: Ica4cd7013eb86103a92cec2f74d96ac037b5ecbd
> Signed-off-by: Oak Zeng <Oak.Zeng@amd.com>
> Reviewd-by: Felix Kuehling <Felix.Kuehling@amd.com>
Typo: Reviewed-by
With that fixed:
Acked-by: Alex Deucher <alexander.deucher@amd.com>
> ---
> include/uapi/linux/kfd_ioctl.h | 10 +++++++---
> 1 file changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/include/uapi/linux/kfd_ioctl.h b/include/uapi/linux/kfd_ioctl.h
> index b01eb50..8cc6e7d 100644
> --- a/include/uapi/linux/kfd_ioctl.h
> +++ b/include/uapi/linux/kfd_ioctl.h
> @@ -35,9 +35,13 @@ struct kfd_ioctl_get_version_args {
> };
>
> /* For kfd_ioctl_create_queue_args.queue_type. */
> -#define KFD_IOC_QUEUE_TYPE_COMPUTE 0
> -#define KFD_IOC_QUEUE_TYPE_SDMA 1
> -#define KFD_IOC_QUEUE_TYPE_COMPUTE_AQL 2
> +#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.7.4
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 3/4] drm/amdkfd: Allocate SDMA queue on specif engine
[not found] ` <1542136254-5561-3-git-send-email-ozeng-5C7GfCeVMHo@public.gmane.org>
@ 2018-11-13 19:59 ` Alex Deucher
0 siblings, 0 replies; 8+ messages in thread
From: Alex Deucher @ 2018-11-13 19:59 UTC (permalink / raw)
To: ozeng-5C7GfCeVMHo; +Cc: Oak Zeng, amd-gfx list
On Tue, Nov 13, 2018 at 2:11 PM Oak Zeng <ozeng@amd.com> wrote:
>
> From: Oak Zeng <Oak.Zeng@amd.com>
>
> Change-Id: I32e0304cdf6ceeed12ea8d0af62f44e1ab20bffb
> Signed-off-by: Oak Zeng <Oak.Zeng@amd.com>
> Reviewd-by: Felix Kuehling <Felix.Kuehling@amd.com>
Typo: Reviewed-by
Also, in the patch title, "specific"
With those fixed:
Acked-by: Alex Deucher <alexander.deucher@amd.com>
> ---
> drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 26 +++++++++++++------
> .../gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 30 +++++++++++++++++++---
> 2 files changed, 44 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
> index 5f4062b..37b02ea 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
> @@ -143,7 +143,8 @@ static int kfd_ioctl_get_version(struct file *filep, struct kfd_process *p,
> return 0;
> }
>
> -static int set_queue_properties_from_user(struct queue_properties *q_properties,
> +static int set_queue_properties_from_user(struct kfd_dev *dev,
> + struct queue_properties *q_properties,
> struct kfd_ioctl_create_queue_args *args)
> {
> if (args->queue_percentage > KFD_MAX_QUEUE_PERCENTAGE) {
> @@ -213,12 +214,21 @@ static int set_queue_properties_from_user(struct queue_properties *q_properties,
> 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)
> + } else if (args->queue_type == KFD_IOC_QUEUE_TYPE_SDMA) {
> + q_properties->sdma_engine_id =
> + dev->device_info->num_sdma_engines;
> q_properties->type = KFD_QUEUE_TYPE_SDMA;
> - else
> + } 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 {
> return -ENOTSUPP;
> + }
>
> if (args->queue_type == KFD_IOC_QUEUE_TYPE_COMPUTE_AQL)
> q_properties->format = KFD_QUEUE_FORMAT_AQL;
> @@ -265,10 +275,6 @@ 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) {
> @@ -276,6 +282,10 @@ 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 7bf4bca..bc8f955 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
> @@ -916,14 +916,34 @@ 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_queue_id)
> {
> - int bit;
> + int bit = -1;
>
> if (dqm->sdma_bitmap == 0)
> return -ENOMEM;
>
> - bit = __ffs64(dqm->sdma_bitmap);
> + /* 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);
> + }
> +
> dqm->sdma_bitmap &= ~(1ULL << bit);
> *sdma_queue_id = bit;
>
> @@ -949,7 +969,8 @@ static int create_sdma_queue_nocpsch(struct device_queue_manager *dqm,
> if (!mqd_mgr)
> return -ENOMEM;
>
> - retval = allocate_sdma_queue(dqm, &q->sdma_id);
> + retval = allocate_sdma_queue(dqm, q->properties.sdma_engine_id,
> + &q->sdma_id);
> if (retval)
> return retval;
>
> @@ -1168,7 +1189,8 @@ 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->sdma_id);
> + retval = allocate_sdma_queue(dqm, q->properties.sdma_engine_id,
> + &q->sdma_id);
> if (retval)
> goto out_unlock;
> q->properties.sdma_queue_id =
> --
> 2.7.4
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 4/4] drm/amdkfd: Add sdma allocation debug message
[not found] ` <1542136254-5561-4-git-send-email-ozeng-5C7GfCeVMHo@public.gmane.org>
2018-11-13 19:13 ` ozeng
@ 2018-11-13 20:00 ` Alex Deucher
1 sibling, 0 replies; 8+ messages in thread
From: Alex Deucher @ 2018-11-13 20:00 UTC (permalink / raw)
To: ozeng-5C7GfCeVMHo; +Cc: Oak Zeng, amd-gfx list
On Tue, Nov 13, 2018 at 2:11 PM Oak Zeng <ozeng@amd.com> wrote:
>
> From: Oak Zeng <Oak.Zeng@amd.com>
>
> Change-Id: I47ec79eceac810f7031eaf88d267fc8370501c27
> Signed-off-by: Oak Zeng <Oak.Zeng@amd.com>
> Reviewd-by: Felix Kuehling <Felix.Kuehling@amd.com>
Typo: Reviewed-by
Also please add a patch description.
With that fixed:
Acked-by: Alex Deucher <alexander.deucher@amd.com>
> ---
> drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> 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 bc8f955..116afef 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
> @@ -1197,6 +1197,9 @@ static int create_queue_cpsch(struct device_queue_manager *dqm, struct queue *q,
> q->sdma_id / get_num_sdma_engines(dqm);
> q->properties.sdma_engine_id =
> q->sdma_id % get_num_sdma_engines(dqm);
> + pr_debug("SDMA id is: %d\n", q->sdma_id);
> + pr_debug("SDMA queue id: %d\n", q->properties.sdma_queue_id);
> + pr_debug("SDMA engine id: %d\n", q->properties.sdma_engine_id);
> }
>
> retval = allocate_doorbell(qpd, q);
> --
> 2.7.4
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2018-11-13 20:00 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-11-13 19:11 [PATCH 1/4] drm/amdkfd: Use 64 bit sdma_bitmap Oak Zeng
[not found] ` <1542136254-5561-1-git-send-email-ozeng-5C7GfCeVMHo@public.gmane.org>
2018-11-13 19:11 ` [PATCH 2/4] drm/amdkfd: Added more SDMA queue type Oak Zeng
[not found] ` <1542136254-5561-2-git-send-email-ozeng-5C7GfCeVMHo@public.gmane.org>
2018-11-13 19:57 ` Alex Deucher
2018-11-13 19:11 ` [PATCH 3/4] drm/amdkfd: Allocate SDMA queue on specif engine Oak Zeng
[not found] ` <1542136254-5561-3-git-send-email-ozeng-5C7GfCeVMHo@public.gmane.org>
2018-11-13 19:59 ` Alex Deucher
2018-11-13 19:11 ` [PATCH 4/4] drm/amdkfd: Add sdma allocation debug message Oak Zeng
[not found] ` <1542136254-5561-4-git-send-email-ozeng-5C7GfCeVMHo@public.gmane.org>
2018-11-13 19:13 ` ozeng
2018-11-13 20:00 ` Alex Deucher
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.