diff --git a/src/dev/amdgpu/amdgpu_device.cc b/src/dev/amdgpu/amdgpu_device.cc index f58d1f7242..7037e6fb1c 100644 --- a/src/dev/amdgpu/amdgpu_device.cc +++ b/src/dev/amdgpu/amdgpu_device.cc @@ -604,7 +604,7 @@ AMDGPUDevice::serialize(CheckpointOut &cp) const idx = 0; for (auto & it : sdmaEngs) { sdma_engs_offset[idx] = it.first; - sdma_engs[idx] = idx; + sdma_engs[idx] = it.second->getId(); ++idx; } @@ -675,8 +675,9 @@ AMDGPUDevice::unserialize(CheckpointIn &cp) UNSERIALIZE_ARRAY(sdma_engs, sizeof(sdma_engs)/sizeof(sdma_engs[0])); for (int idx = 0; idx < sdma_engs_size; ++idx) { - assert(sdmaIds.count(idx)); - SDMAEngine *sdma = sdmaIds[idx]; + int sdma_id = sdma_engs[idx]; + assert(sdmaIds.count(sdma_id)); + SDMAEngine *sdma = sdmaIds[sdma_id]; sdmaEngs.insert(std::make_pair(sdma_engs_offset[idx], sdma)); } } diff --git a/src/dev/amdgpu/sdma_engine.hh b/src/dev/amdgpu/sdma_engine.hh index 1e4f965920..bcbd497e8a 100644 --- a/src/dev/amdgpu/sdma_engine.hh +++ b/src/dev/amdgpu/sdma_engine.hh @@ -165,6 +165,7 @@ class SDMAEngine : public DmaVirtDevice void setGPUDevice(AMDGPUDevice *gpu_device); void setId(int _id) { id = _id; } + int getId() const { return id; } /** * Returns the client id for the Interrupt Handler. */