diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3543-drm-amdkfd-add-new-queue-status.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3543-drm-amdkfd-add-new-queue-status.patch | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3543-drm-amdkfd-add-new-queue-status.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3543-drm-amdkfd-add-new-queue-status.patch new file mode 100644 index 00000000..b3cc259a --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3543-drm-amdkfd-add-new-queue-status.patch @@ -0,0 +1,100 @@ +From e247f8244befaab5656bf6f5ec0dc873bc1f809b Mon Sep 17 00:00:00 2001 +From: Jonathan Kim <jonathan.kim@amd.com> +Date: Wed, 7 Aug 2019 11:22:18 -0400 +Subject: [PATCH 3543/4256] drm/amdkfd: add new queue status + +add new queue status to avoid aba problem for debugger + +Change-Id: Ibf1c07758512b56cf5ad2a49b46006cffab0f905 +Signed-off-by: Jonathan Kim <jonathan.kim@amd.com> +Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com> +--- + drivers/gpu/drm/amd/amdkfd/kfd_debug_events.c | 16 ++++++++++++++-- + drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 1 + + .../drm/amd/amdkfd/kfd_process_queue_manager.c | 1 + + include/uapi/linux/kfd_ioctl.h | 1 + + 4 files changed, 17 insertions(+), 2 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_debug_events.c b/drivers/gpu/drm/amd/amdkfd/kfd_debug_events.c +index df42b1dd8b4b..1681107a2aa6 100644 +--- a/drivers/gpu/drm/amd/amdkfd/kfd_debug_events.c ++++ b/drivers/gpu/drm/amd/amdkfd/kfd_debug_events.c +@@ -97,6 +97,10 @@ static int kfd_dbg_ev_release(struct inode *inode, struct file *filep) + ((x) = ((x) & ~(KFD_DBG_EV_STATUS_TRAP \ + | KFD_DBG_EV_STATUS_VMFAULT)) | (e)) + ++#define KFD_DBG_EV_SET_NEW_QUEUE_STATE(x, n) \ ++ ((x) = (n) ? (x) | KFD_DBG_EV_STATUS_NEW_QUEUE : \ ++ (x) & ~KFD_DBG_EV_STATUS_NEW_QUEUE) ++ + int kfd_dbg_ev_query_debug_event(struct kfd_process_device *pdd, + unsigned int *queue_id, + unsigned int flags, +@@ -126,8 +130,12 @@ int kfd_dbg_ev_query_debug_event(struct kfd_process_device *pdd, + q->properties.debug_event_type); + KFD_DBG_EV_SET_SUSPEND_STATE(*event_status, + q->properties.is_suspended); +- if (flags & KFD_DBG_EV_FLAG_CLEAR_STATUS) ++ KFD_DBG_EV_SET_NEW_QUEUE_STATE(*event_status, ++ q->properties.is_new); ++ if (flags & KFD_DBG_EV_FLAG_CLEAR_STATUS) { ++ q->properties.is_new = false; + q->properties.debug_event_type = 0; ++ } + goto out; + + } else { +@@ -142,9 +150,13 @@ int kfd_dbg_ev_query_debug_event(struct kfd_process_device *pdd, + pqn->q->properties.debug_event_type); + KFD_DBG_EV_SET_SUSPEND_STATE(*event_status, + pqn->q->properties.is_suspended); +- if (flags & KFD_DBG_EV_FLAG_CLEAR_STATUS) ++ KFD_DBG_EV_SET_NEW_QUEUE_STATE(*event_status, ++ pqn->q->properties.is_new); ++ if (flags & KFD_DBG_EV_FLAG_CLEAR_STATUS) { ++ pqn->q->properties.is_new = false; + pqn->q->properties.debug_event_type + = 0; ++ } + goto out; + } + } +diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h +index 73aa6a3330eb..5d3cffc9d0ec 100644 +--- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h ++++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h +@@ -493,6 +493,7 @@ struct queue_properties { + bool is_evicted; + bool is_suspended; + bool is_active; ++ bool is_new; + /* Not relevant for user mode queues in cp scheduling */ + unsigned int vmid; + /* Relevant only for sdma queues*/ +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 7a61a5b09ed8..d47ab53d613b 100644 +--- a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c ++++ b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c +@@ -318,6 +318,7 @@ int pqm_create_queue(struct process_queue_manager *pqm, + + if (q) { + pr_debug("PQM done creating queue\n"); ++ q->properties.is_new = true; + print_queue_properties(&q->properties); + } + +diff --git a/include/uapi/linux/kfd_ioctl.h b/include/uapi/linux/kfd_ioctl.h +index 42551e2c6d59..86805463e1d3 100644 +--- a/include/uapi/linux/kfd_ioctl.h ++++ b/include/uapi/linux/kfd_ioctl.h +@@ -191,6 +191,7 @@ struct kfd_ioctl_dbg_wave_control_args { + #define KFD_DBG_EV_STATUS_TRAP 1 + #define KFD_DBG_EV_STATUS_VMFAULT 2 + #define KFD_DBG_EV_STATUS_SUSPENDED 4 ++#define KFD_DBG_EV_STATUS_NEW_QUEUE 8 + #define KFD_DBG_EV_FLAG_CLEAR_STATUS 1 + + #define KFD_INVALID_QUEUEID 0xffffffff +-- +2.17.1 + |