changeset 267e1e16e51b in /z/repo/m5 details: http://repo.m5sim.org/m5?cmd=changeset;node=267e1e16e51b description: TimingSimpleCPU: split data sender state fix
In sendSplitData, keep a pointer to the senderState that may be updated after the call to handle*Packet. This way, if the receiver updates the packet senderState, it can still be accessed in sendSplitData. diffstat: src/cpu/simple/timing.cc | 16 ++++++++-------- 1 files changed, 8 insertions(+), 8 deletions(-) diffs (38 lines): diff -r 8a92b39be50e -r 267e1e16e51b src/cpu/simple/timing.cc --- a/src/cpu/simple/timing.cc Sun Feb 06 22:14:18 2011 -0800 +++ b/src/cpu/simple/timing.cc Sun Feb 06 22:14:18 2011 -0800 @@ -325,26 +325,26 @@ pkt1->makeResponse(); completeDataAccess(pkt1); } else if (read) { + SplitFragmentSenderState * send_state = + dynamic_cast<SplitFragmentSenderState *>(pkt1->senderState); if (handleReadPacket(pkt1)) { - SplitFragmentSenderState * send_state = - dynamic_cast<SplitFragmentSenderState *>(pkt1->senderState); send_state->clearFromParent(); + send_state = dynamic_cast<SplitFragmentSenderState *>( + pkt2->senderState); if (handleReadPacket(pkt2)) { - send_state = dynamic_cast<SplitFragmentSenderState *>( - pkt1->senderState); send_state->clearFromParent(); } } } else { dcache_pkt = pkt1; + SplitFragmentSenderState * send_state = + dynamic_cast<SplitFragmentSenderState *>(pkt1->senderState); if (handleWritePacket()) { - SplitFragmentSenderState * send_state = - dynamic_cast<SplitFragmentSenderState *>(pkt1->senderState); send_state->clearFromParent(); dcache_pkt = pkt2; + send_state = dynamic_cast<SplitFragmentSenderState *>( + pkt2->senderState); if (handleWritePacket()) { - send_state = dynamic_cast<SplitFragmentSenderState *>( - pkt1->senderState); send_state->clearFromParent(); } } _______________________________________________ m5-dev mailing list m5-dev@m5sim.org http://m5sim.org/mailman/listinfo/m5-dev