summaryrefslogtreecommitdiff
path: root/src/mem/packet.cc
diff options
context:
space:
mode:
authorRon Dreslinski <rdreslin@umich.edu>2006-11-10 22:41:21 -0500
committerRon Dreslinski <rdreslin@umich.edu>2006-11-10 22:41:21 -0500
commit9a6e896d3bc904745f090aad1a6d40f04f5ac2ef (patch)
tree81602b0c631c9a5f2aae5ff1323f8e7f74694d0f /src/mem/packet.cc
parente89eaf8b801b39713b28f2df7e89ea8a518974ec (diff)
downloadgem5-9a6e896d3bc904745f090aad1a6d40f04f5ac2ef.tar.xz
Big fix for functional access, where we forgot to copy the last byte on write intersections.
src/mem/packet.cc: Make sure to copy the whole data (we were one byte short) src/mem/tport.cc: Fix for the proper semantics of fixPacket --HG-- extra : convert_revision : 215e05db9099d427afd4994f5b29079354c847d8
Diffstat (limited to 'src/mem/packet.cc')
-rw-r--r--src/mem/packet.cc5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/mem/packet.cc b/src/mem/packet.cc
index a342af634..938116ab5 100644
--- a/src/mem/packet.cc
+++ b/src/mem/packet.cc
@@ -168,6 +168,7 @@ fixPacket(PacketPtr func, PacketPtr timing)
memcpy(func->getPtr<uint8_t>(), timing->getPtr<uint8_t>() +
funcStart - timingStart, func->getSize());
func->result = Packet::Success;
+ func->flags |= SATISFIED;
return false;
} else {
// In this case the timing packet only partially satisfies the
@@ -182,11 +183,11 @@ fixPacket(PacketPtr func, PacketPtr timing)
if (funcStart >= timingStart) {
memcpy(timing->getPtr<uint8_t>() + (funcStart - timingStart),
func->getPtr<uint8_t>(),
- std::min(funcEnd, timingEnd) - funcStart);
+ (std::min(funcEnd, timingEnd) - funcStart) + 1);
} else { // timingStart > funcStart
memcpy(timing->getPtr<uint8_t>(),
func->getPtr<uint8_t>() + (timingStart - funcStart),
- std::min(funcEnd, timingEnd) - timingStart);
+ (std::min(funcEnd, timingEnd) - timingStart) + 1);
}
// we always want to keep going with a write
return true;