OSDN Git Service

drm/amdkfd: Improve concurrency of event handling
authorFelix Kuehling <Felix.Kuehling@amd.com>
Wed, 2 Mar 2022 01:40:45 +0000 (20:40 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 7 Apr 2022 20:34:24 +0000 (16:34 -0400)
commit5273e82c5f47fff94058ff8ee002650476e24719
treeb68b3966c57db97d7fefcb88089fca891b3f307d
parent8d2aad983de2a332bf8c22798ab6799f06864fed
drm/amdkfd: Improve concurrency of event handling

Use rcu_read_lock to read p->event_idr concurrently with other readers
and writers. Use p->event_mutex only for creating and destroying events
and in kfd_wait_on_events.

Protect the contents of the kfd_event structure with a per-event
spinlock that can be taken inside the rcu_read_lock critical section.

This eliminates contention of p->event_mutex in set_event, which tends
to be on the critical path for dispatch latency even when busy waiting
is used. It also eliminates lock contention in event interrupt handlers.
Since the p->event_mutex is now used much less, the impact of requiring
it in kfd_wait_on_events should also be much smaller.

This should improve event handling latency for processes using multiple
GPUs concurrently.

v2: Reschedule the worker periodically to avoid soft lockup warnings

Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
Reviewed-by: Sean Keely <Sean.Keely@amd.com> # v1
Tested-by: Sanjay Tripathi <sanjay.tripathi@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdkfd/kfd_events.c
drivers/gpu/drm/amd/amdkfd/kfd_events.h
drivers/gpu/drm/amd/amdkfd/kfd_interrupt.c