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
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev