drm/amdkfd: Remove GWS from process during uninit

Submitted by Greathouse, Joseph on July 17, 2019, 2:58 p.m.

Details

Message ID 20190717145830.9004-1-Joseph.Greathouse@amd.com
State Accepted
Commit 6a5d4877544b9014c70533200ad4a5f9d6e005c5
Headers show
Series "drm/amdkfd: Remove GWS from process during uninit" ( rev: 1 ) in AMD X.Org drivers

Not browsing as part of any series.

Commit Message

Greathouse, Joseph July 17, 2019, 2:58 p.m.
If we shut down a process without having destroyed its GWS-using
queues, it is possible that GWS BO will still be in the process
BO list during the gpuvm destruction. This list should be empty
at that time, so we should remove the GWS allocation at the
process uninit point if it is still around.

Change-Id: I098e7b315070dd5b0165bb7905aef643450f27f2
Signed-off-by: Joseph Greathouse <Joseph.Greathouse@amd.com>
---
 drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c | 3 +++
 1 file changed, 3 insertions(+)

Patch hide | download patch | download mbox

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
index da0958625861..7e6c3ee82f5b 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
@@ -150,6 +150,9 @@  void pqm_uninit(struct process_queue_manager *pqm)
 	struct process_queue_node *pqn, *next;
 
 	list_for_each_entry_safe(pqn, next, &pqm->queues, process_queue_list) {
+		if (pqn->q && pqn->q->gws)
+			amdgpu_amdkfd_remove_gws_from_process(pqm->process->kgd_process_info,
+				pqn->q->gws);
 		uninit_queue(pqn->q);
 		list_del(&pqn->process_queue_list);
 		kfree(pqn);

Comments

On 2019-07-17 10:58, Greathouse, Joseph wrote:
> If we shut down a process without having destroyed its GWS-using

> queues, it is possible that GWS BO will still be in the process

> BO list during the gpuvm destruction. This list should be empty

> at that time, so we should remove the GWS allocation at the

> process uninit point if it is still around.

>

> Change-Id: I098e7b315070dd5b0165bb7905aef643450f27f2

> Signed-off-by: Joseph Greathouse <Joseph.Greathouse@amd.com>


Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>



> ---

>   drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c | 3 +++

>   1 file changed, 3 insertions(+)

>

> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c

> index da0958625861..7e6c3ee82f5b 100644

> --- a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c

> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c

> @@ -150,6 +150,9 @@ void pqm_uninit(struct process_queue_manager *pqm)

>   	struct process_queue_node *pqn, *next;

>   

>   	list_for_each_entry_safe(pqn, next, &pqm->queues, process_queue_list) {

> +		if (pqn->q && pqn->q->gws)

> +			amdgpu_amdkfd_remove_gws_from_process(pqm->process->kgd_process_info,

> +				pqn->q->gws);

>   		uninit_queue(pqn->q);

>   		list_del(&pqn->process_queue_list);

>   		kfree(pqn);