diff options
author | Tao Zhou <tao.zhou1@amd.com> | 2022-03-15 17:07:21 +0800 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2022-03-25 12:40:25 -0400 |
commit | eed41975307a365d1c0f6ed5c388b130ffdd2664 (patch) | |
tree | c5f8551532358632488f4d4c1506ad77b341bc19 /drivers | |
parent | c5b266810c5105b6c115de6236247049c23502db (diff) |
drm/amdkfd: refine event_interrupt_poison_consumption
Combine reading and setting poison flag as one atomic operation
and add print message for the function.
Signed-off-by: Tao Zhou <tao.zhou1@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/drm/amd/amdkfd/kfd_int_process_v9.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_int_process_v9.c b/drivers/gpu/drm/amd/amdkfd/kfd_int_process_v9.c index 7eedbcd14828..a992798ff8b6 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_int_process_v9.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_int_process_v9.c @@ -93,20 +93,19 @@ enum SQ_INTERRUPT_ERROR_TYPE { static void event_interrupt_poison_consumption(struct kfd_dev *dev, uint16_t pasid, uint16_t source_id) { - int ret = -EINVAL; + int old_poison, ret = -EINVAL; struct kfd_process *p = kfd_lookup_process_by_pasid(pasid); if (!p) return; /* all queues of a process will be unmapped in one time */ - if (atomic_read(&p->poison)) { - kfd_unref_process(p); + old_poison = atomic_cmpxchg(&p->poison, 0, 1); + kfd_unref_process(p); + if (old_poison) return; - } - atomic_set(&p->poison, 1); - kfd_unref_process(p); + pr_warn("RAS poison consumption handling\n"); switch (source_id) { case SOC15_INTSRC_SQ_INTERRUPT_MSG: |