projects
/
gem5.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
refactor code for the packet, get rid of packet_impl.hh
[gem5.git]
/
src
/
mem
/
cache
/
cache_impl.hh
diff --git
a/src/mem/cache/cache_impl.hh
b/src/mem/cache/cache_impl.hh
index c4acc03e7b34f34f29366d4340b2dbc0fba3e16f..ea30dbba67d7cb62b9d52426751e05e97a86f0b0 100644
(file)
--- a/
src/mem/cache/cache_impl.hh
+++ b/
src/mem/cache/cache_impl.hh
@@
-585,7
+585,7
@@
Cache<TagStore,Buffering,Coherence>::probe(Packet * &pkt, bool update,
pkt_data = pkt->getPtr<uint8_t>() + offset;
write_data = target->getPtr<uint8_t>();
data_size = pkt->getSize() - offset;
pkt_data = pkt->getPtr<uint8_t>() + offset;
write_data = target->getPtr<uint8_t>();
data_size = pkt->getSize() - offset;
- assert(data_size > pkt->getSize());
+ assert(data_size >
=
pkt->getSize());
if (data_size > target->getSize())
data_size = target->getSize();
}
if (data_size > target->getSize())
data_size = target->getSize();
}
@@
-593,6
+593,8
@@
Cache<TagStore,Buffering,Coherence>::probe(Packet * &pkt, bool update,
if (pkt->isWrite()) {
memcpy(pkt_data, write_data, data_size);
} else {
if (pkt->isWrite()) {
memcpy(pkt_data, write_data, data_size);
} else {
+ pkt->flags |= SATISFIED;
+ pkt->result = Packet::Success;
memcpy(write_data, pkt_data, data_size);
}
}
memcpy(write_data, pkt_data, data_size);
}
}
@@
-618,7
+620,7
@@
Cache<TagStore,Buffering,Coherence>::probe(Packet * &pkt, bool update,
pkt_data = pkt->getPtr<uint8_t>() + offset;
write_data = write->getPtr<uint8_t>();
data_size = pkt->getSize() - offset;
pkt_data = pkt->getPtr<uint8_t>() + offset;
write_data = write->getPtr<uint8_t>();
data_size = pkt->getSize() - offset;
- assert(data_size > pkt->getSize());
+ assert(data_size >
=
pkt->getSize());
if (data_size > write->getSize())
data_size = write->getSize();
}
if (data_size > write->getSize())
data_size = write->getSize();
}
@@
-626,11
+628,19
@@
Cache<TagStore,Buffering,Coherence>::probe(Packet * &pkt, bool update,
if (pkt->isWrite()) {
memcpy(pkt_data, write_data, data_size);
} else {
if (pkt->isWrite()) {
memcpy(pkt_data, write_data, data_size);
} else {
+ pkt->flags |= SATISFIED;
+ pkt->result = Packet::Success;
memcpy(write_data, pkt_data, data_size);
}
}
}
memcpy(write_data, pkt_data, data_size);
}
}
}
+ if (pkt->isRead()
+ && pkt->result != Packet::Success
+ && otherSidePort == memSidePort) {
+ otherSidePort->sendFunctional(pkt);
+ assert(pkt->result == Packet::Success);
+ }
return 0;
} else if (!blk) {
// update the cache state and statistics
return 0;
} else if (!blk) {
// update the cache state and statistics