arch-riscv: fix memory leak problem in page table walker

Valgrind detects memory leak problems in RISC-V's page table
walker(`Walker::WalkerState::stepWalk()`). In some situation,
the response packet is not freed. This patch partially fix
these memory leak problems.

Change-Id: I86d4c69c3c502bd92856a3d8863bfa1722a94512
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/56609
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Maintainer: Jason Lowe-Power <power.jg@gmail.com>
Reviewed-by: Ayaz Akram <yazakram@ucdavis.edu>
Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
Luming Wang
2022-01-24 08:32:36 +00:00
parent 0d59a8417a
commit 211c7df045

View File

@@ -426,6 +426,10 @@ Walker::WalkerState::stepWalk(PacketPtr &write)
//If we didn't return, we're setting up another read.
RequestPtr request = std::make_shared<Request>(
nextRead, oldRead->getSize(), flags, walker->requestorId);
delete oldRead;
oldRead = nullptr;
read = new Packet(request, MemCmd::ReadReq);
read->allocate();
@@ -501,6 +505,8 @@ Walker::WalkerState::recvPacket(PacketPtr pkt)
}
sendPackets();
} else {
delete pkt;
sendPackets();
}
if (inflight == 0 && read == NULL && writes.size() == 0) {