Fix GPU destruction when user disabled
GPUs excluded by RVD are not expected to have scratch, memory, trap
handling nor memory regions set up. Now that these GPUs are added to
a new list, early return on agent destruction to prevent bad function
calls on destroy.
Also fix up broken memory releases between the gpu lists and ugly braces.
Change-Id: I52fc6e86ceba0a0383cedc63310eb409515eaf9f
[ROCm/ROCR-Runtime commit: 9d2fe1ac2a]
이 커밋은 다음에 포함됨:
1 부모
da0ca94219
커밋
cae4ed0056
2 파일이 변경됨
+9
-3
검색과 일치하는 파일 없음
@@ -198,6 +198,8 @@ GpuAgent::GpuAgent(HSAuint32 node, const HsaNodeProperties& node_props, bool xna
|
||||
}
|
||||
|
||||
GpuAgent::~GpuAgent() {
|
||||
if (!(this)->Enabled()) return;
|
||||
|
||||
for (auto& blit : blits_) {
|
||||
if (!blit.empty()) {
|
||||
hsa_status_t status = blit->Destroy(*this);
|
||||
|
||||
@@ -204,12 +204,13 @@ void Runtime::RegisterAgent(Agent* agent, bool Enabled) {
|
||||
if (Enabled) {
|
||||
gpu_agents_.push_back(agent);
|
||||
gpu_ids_.push_back(agent->node_id());
|
||||
agents_by_gpuid_[((AMD::GpuAgent*)agent)->KfdGpuID()] = agent;
|
||||
agents_by_gpuid_[((AMD::GpuAgent*)agent)->KfdGpuID()] = agent;
|
||||
|
||||
// Assign the first discovered gpu agent as region gpu.
|
||||
if (region_gpu_ == NULL) region_gpu_ = agent;
|
||||
} else
|
||||
} else {
|
||||
disabled_gpu_agents_.push_back(agent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -220,7 +221,7 @@ void Runtime::DestroyAgents() {
|
||||
gpu_agents_.clear();
|
||||
|
||||
std::for_each(disabled_gpu_agents_.begin(), disabled_gpu_agents_.end(), DeleteObject());
|
||||
gpu_agents_.clear();
|
||||
disabled_gpu_agents_.clear();
|
||||
|
||||
gpu_ids_.clear();
|
||||
|
||||
@@ -1397,6 +1398,9 @@ void Runtime::Unload() {
|
||||
std::for_each(gpu_agents_.begin(), gpu_agents_.end(), DeleteObject());
|
||||
gpu_agents_.clear();
|
||||
|
||||
std::for_each(disabled_gpu_agents_.begin(), disabled_gpu_agents_.end(), DeleteObject());
|
||||
disabled_gpu_agents_.clear();
|
||||
|
||||
async_events_control_.Shutdown();
|
||||
|
||||
if (vm_fault_signal_ != nullptr) {
|
||||
|
||||
새 이슈에서 참조
사용자 차단