From 9a6e896d3bc904745f090aad1a6d40f04f5ac2ef Mon Sep 17 00:00:00 2001 From: Ron Dreslinski Date: Fri, 10 Nov 2006 22:41:21 -0500 Subject: 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 --- src/mem/packet.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/mem/packet.cc') 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(), timing->getPtr() + 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() + (funcStart - timingStart), func->getPtr(), - std::min(funcEnd, timingEnd) - funcStart); + (std::min(funcEnd, timingEnd) - funcStart) + 1); } else { // timingStart > funcStart memcpy(timing->getPtr(), func->getPtr() + (timingStart - funcStart), - std::min(funcEnd, timingEnd) - timingStart); + (std::min(funcEnd, timingEnd) - timingStart) + 1); } // we always want to keep going with a write return true; -- cgit v1.2.3 From c577665040342bf27808bfdea272626e4dac786d Mon Sep 17 00:00:00 2001 From: Ron Dreslinski Date: Sun, 12 Nov 2006 06:35:39 -0500 Subject: Fix functional access errors related to delayed respnoses in cachePort src/mem/cache/base_cache.cc: On a delayed response, be sure to call the fixPacket wrapper to toggle hasData flag. src/mem/packet.cc: src/mem/packet.hh: Create a wrapper to toggle the hasData flag on delayed responses --HG-- extra : convert_revision : 1ced8d4e3dc12a059fb7636d59e429cd3dd46901 --- src/mem/packet.cc | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/mem/packet.cc') diff --git a/src/mem/packet.cc b/src/mem/packet.cc index 938116ab5..e2faf4527 100644 --- a/src/mem/packet.cc +++ b/src/mem/packet.cc @@ -143,6 +143,24 @@ Packet::intersect(PacketPtr p) return !(s1 > e2 || e1 < s2); } +bool +fixDelayedResponsePacket(PacketPtr func, PacketPtr timing) +{ + bool result; + + if (timing->isRead() || timing->isWrite()) { + timing->toggleData(); + result = fixPacket(func, timing); + timing->toggleData(); + } + else { + //Don't toggle if it isn't a read/write response + result = fixPacket(func, timing); + } + + return result; +} + bool fixPacket(PacketPtr func, PacketPtr timing) { -- cgit v1.2.3