summaryrefslogtreecommitdiff
path: root/src/mem/protocol/MOESI_hammer-cache.sm
diff options
context:
space:
mode:
authorBrad Beckmann <Brad.Beckmann@amd.com>2011-07-06 18:44:42 -0700
committerBrad Beckmann <Brad.Beckmann@amd.com>2011-07-06 18:44:42 -0700
commit4f833907812b50e8c6cce761d2f3c1f6fd07ae7b (patch)
tree0378ee06206a3be2bbc9569d60e155e5e93dd8a2 /src/mem/protocol/MOESI_hammer-cache.sm
parentda1eaaca0ec7f65525dd2706f4b6b207bf9ee691 (diff)
downloadgem5-4f833907812b50e8c6cce761d2f3c1f6fd07ae7b.tar.xz
MOESI_hammer: Fixed uniprocessor DMA bug
Diffstat (limited to 'src/mem/protocol/MOESI_hammer-cache.sm')
-rw-r--r--src/mem/protocol/MOESI_hammer-cache.sm17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/mem/protocol/MOESI_hammer-cache.sm b/src/mem/protocol/MOESI_hammer-cache.sm
index edb1587e3..9576ba1af 100644
--- a/src/mem/protocol/MOESI_hammer-cache.sm
+++ b/src/mem/protocol/MOESI_hammer-cache.sm
@@ -545,6 +545,21 @@ machine(L1Cache, "AMD Hammer-like protocol")
}
}
+ action(b_issueGETXIfMoreThanOne, "bo", desc="Issue GETX") {
+ if (machineCount(MachineType:L1Cache) > 1) {
+ enqueue(requestNetwork_out, RequestMsg, latency=issue_latency) {
+ assert(is_valid(tbe));
+ out_msg.Address := address;
+ out_msg.Type := CoherenceRequestType:GETX;
+ out_msg.Requestor := machineID;
+ out_msg.Destination.add(map_Address_to_Directory(address));
+ out_msg.MessageSize := MessageSizeType:Request_Control;
+ out_msg.InitialRequestTime := get_time();
+ }
+ }
+ tbe.NumPendingMsgs := machineCount(MachineType:L1Cache); // One from each other cache (n-1) plus the memory (+1)
+ }
+
action(bf_issueGETF, "bf", desc="Issue GETF") {
enqueue(requestNetwork_out, RequestMsg, latency=issue_latency) {
assert(is_valid(tbe));
@@ -921,7 +936,7 @@ machine(L1Cache, "AMD Hammer-like protocol")
action(m_decrementNumberOfMessages, "m", desc="Decrement the number of messages for which we're waiting") {
peek(responseToCache_in, ResponseMsg) {
- assert(in_msg.Acks > 0);
+ assert(in_msg.Acks >= 0);
assert(is_valid(tbe));
DPRINTF(RubySlicc, "Sender = %s\n", in_msg.Sender);
DPRINTF(RubySlicc, "SilentAcks = %d\n", in_msg.SilentAcks);