dev-amdgpu,arch-vega: Implement TLB invalidation logic

Add logic to collect pointers to all GPU TLBs in full system. Implement
the invalid TLBs PM4 packet. The invalidate is done functionally since
there is really no benefit to simulate it with timing and there is no
support in the TLB to do so. This allow application with much larger
data sets which may reuse device memory pages to work in gem5 without
possibly crashing due to a stale translation being leftover in the TLB.

Change-Id: Ia30cce02154d482d8f75b2280409abb8f8375c24
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/58470
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Maintainer: Jason Lowe-Power <power.jg@gmail.com>
Reviewed-by: Matt Sinclair <mattdsinclair@gmail.com>
Maintainer: Matt Sinclair <mattdsinclair@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
Matthew Poremba
2022-03-31 10:23:22 -07:00
parent 19bf5c4f33
commit e3f65393fd
5 changed files with 45 additions and 0 deletions

View File

@@ -32,6 +32,7 @@
#include "dev/amdgpu/amdgpu_vm.hh"
#include "arch/amdgpu/vega/pagetable_walker.hh"
#include "arch/amdgpu/vega/tlb.hh"
#include "arch/generic/mmu.hh"
#include "base/trace.hh"
#include "debug/AMDGPUDevice.hh"
@@ -162,6 +163,23 @@ AMDGPUVM::writeMMIO(PacketPtr pkt, Addr offset)
}
}
void
AMDGPUVM::registerTLB(VegaISA::GpuTLB *tlb)
{
DPRINTF(AMDGPUDevice, "Registered a TLB with device\n");
gpu_tlbs.push_back(tlb);
}
void
AMDGPUVM::invalidateTLBs()
{
DPRINTF(AMDGPUDevice, "Invalidating all TLBs\n");
for (auto &tlb : gpu_tlbs) {
tlb->invalidateAll();
DPRINTF(AMDGPUDevice, " ... TLB invalidated\n");
}
}
void
AMDGPUVM::serialize(CheckpointOut &cp) const
{