diff --git a/src/arch/riscv/pagetable_walker.cc b/src/arch/riscv/pagetable_walker.cc index 81d1eb2edd..cbd5bd2b22 100644 --- a/src/arch/riscv/pagetable_walker.cc +++ b/src/arch/riscv/pagetable_walker.cc @@ -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( 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) {