From: Joel Hestness Date: Mon, 7 Feb 2011 06:14:18 +0000 (-0800) Subject: TimingSimpleCPU: split data sender state fix X-Git-Tag: stable_2012_02_02~585 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=52b611922849d8e3ca6fb3aa0176a8d85e91e922;p=gem5.git 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. --- diff --git a/src/cpu/simple/timing.cc b/src/cpu/simple/timing.cc index 47f99cd6d..453699f84 100644 --- a/src/cpu/simple/timing.cc +++ b/src/cpu/simple/timing.cc @@ -325,26 +325,26 @@ TimingSimpleCPU::sendSplitData(RequestPtr req1, RequestPtr req2, pkt1->makeResponse(); completeDataAccess(pkt1); } else if (read) { + SplitFragmentSenderState * send_state = + dynamic_cast(pkt1->senderState); if (handleReadPacket(pkt1)) { - SplitFragmentSenderState * send_state = - dynamic_cast(pkt1->senderState); send_state->clearFromParent(); + send_state = dynamic_cast( + pkt2->senderState); if (handleReadPacket(pkt2)) { - send_state = dynamic_cast( - pkt1->senderState); send_state->clearFromParent(); } } } else { dcache_pkt = pkt1; + SplitFragmentSenderState * send_state = + dynamic_cast(pkt1->senderState); if (handleWritePacket()) { - SplitFragmentSenderState * send_state = - dynamic_cast(pkt1->senderState); send_state->clearFromParent(); dcache_pkt = pkt2; + send_state = dynamic_cast( + pkt2->senderState); if (handleWritePacket()) { - send_state = dynamic_cast( - pkt1->senderState); send_state->clearFromParent(); } }