Correct data race in GpuAgent::GetXgmiBlit.

Threads may race against xgmi_peer_list_ when dynamically assigning
peers to sdma engines.

Change-Id: I300c10f0cfa0ff7d6a5515364070a0895e2f4644
이 커밋은 다음에 포함됨:
Sean Keely가 2021-07-30 16:10:59 -04:00를 커밋했습니다
1 부모 e3a01690a5
커밋 bb4dfbba1e
2 파일이 변경됨
+5

검색과 일치하는 파일 없음

+3
파일 보기
@@ -400,6 +400,9 @@ class GpuAgent : public GpuAgentInt {
// List of agents connected via xGMI
std::vector<const core::Agent*> xgmi_peer_list_;
// Protects xgmi_peer_list_
KernelMutex xgmi_peer_list_lock_;
// @brief AQL queues for cache management and blit compute usage.
enum QueueEnum {
QueueUtility, // Cache management and device to {host,device} blit compute
+2
파일 보기
@@ -1483,6 +1483,8 @@ lazy_ptr<core::Blit>& GpuAgent::GetXgmiBlit(const core::Agent& dst_agent) {
uint32_t xgmi_engine_cnt = properties_.NumSdmaXgmiEngines;
assert((xgmi_engine_cnt > 0) && ("Illegal condition, should not happen"));
ScopedAcquire<KernelMutex> lock(&xgmi_peer_list_lock_);
for (uint32_t idx = 0; idx < xgmi_peer_list_.size(); idx++) {
uint64_t dst_handle = dst_agent.public_handle().handle;
uint64_t peer_handle = xgmi_peer_list_[idx]->public_handle().handle;