diff --git a/src/mem/protocol/MOESI_CMP_token-dir.sm b/src/mem/protocol/MOESI_CMP_token-dir.sm --- a/src/mem/protocol/MOESI_CMP_token-dir.sm +++ b/src/mem/protocol/MOESI_CMP_token-dir.sm @@ -450,6 +450,7 @@ out_msg.Destination.add(in_msg.Requestor); out_msg.Tokens := getDirectoryEntry(in_msg.addr).Tokens; out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } getDirectoryEntry(address).Tokens := 0; @@ -598,6 +599,7 @@ out_msg.Destination.add(persistentTable.findSmallest(address)); out_msg.Tokens := getDirectoryEntry(address).Tokens; out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } getDirectoryEntry(address).Tokens := 0; } @@ -841,6 +843,7 @@ out_msg.Tokens := in_msg.Tokens; out_msg.Dirty := in_msg.Dirty; out_msg.MessageSize := MessageSizeType:Response_Data; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -852,6 +855,7 @@ out_msg.Type := DMAResponseType:ACK; out_msg.Destination.add(tbe.DmaRequestor); out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } diff --git a/src/mem/protocol/MOESI_hammer-cache.sm b/src/mem/protocol/MOESI_hammer-cache.sm --- a/src/mem/protocol/MOESI_hammer-cache.sm +++ b/src/mem/protocol/MOESI_hammer-cache.sm @@ -800,6 +800,7 @@ out_msg.MessageSize := MessageSizeType:Response_Control; out_msg.InitialRequestTime := in_msg.InitialRequestTime; out_msg.ForwardRequestTime := in_msg.ForwardRequestTime; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -817,6 +818,7 @@ out_msg.MessageSize := MessageSizeType:Response_Control; out_msg.InitialRequestTime := in_msg.InitialRequestTime; out_msg.ForwardRequestTime := in_msg.ForwardRequestTime; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -828,6 +830,7 @@ out_msg.Sender := machineID; out_msg.Destination.add(map_Address_to_Directory(address)); out_msg.MessageSize := MessageSizeType:Unblock_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -838,6 +841,7 @@ out_msg.Sender := machineID; out_msg.Destination.add(map_Address_to_Directory(address)); out_msg.MessageSize := MessageSizeType:Unblock_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -850,6 +854,7 @@ out_msg.CurOwner := tbe.CurOwner; out_msg.Destination.add(map_Address_to_Directory(address)); out_msg.MessageSize := MessageSizeType:Unblock_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } diff --git a/src/mem/protocol/MOESI_hammer-dir.sm b/src/mem/protocol/MOESI_hammer-dir.sm --- a/src/mem/protocol/MOESI_hammer-dir.sm +++ b/src/mem/protocol/MOESI_hammer-dir.sm @@ -801,6 +801,7 @@ out_msg.Type := DMAResponseType:ACK; out_msg.Destination.add(tbe.DmaRequestor); out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -980,6 +981,7 @@ out_msg.SilentAcks := 0; DPRINTF(RubySlicc, "%d\n", out_msg.Acks); out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } diff --git a/src/mem/protocol/Network_test-cache.sm b/src/mem/protocol/Network_test-cache.sm --- a/src/mem/protocol/Network_test-cache.sm +++ b/src/mem/protocol/Network_test-cache.sm @@ -59,7 +59,7 @@ } // STRUCTURE DEFINITIONS - DataBlock dummyData; + DataBlock * dummyData, constructor="m_block_size_bytes"; // CacheEntry structure(Entry, desc="...", interface="AbstractCacheEntry") { @@ -151,6 +151,7 @@ out_msg.Destination.add(map_Address_to_Directory(address)); //out_msg.Destination := broadcast(MachineType:Directory); out_msg.MessageSize := MessageSizeType:Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -161,6 +162,7 @@ out_msg.Requestor := machineID; out_msg.Destination.add(map_Address_to_Directory(address)); out_msg.MessageSize := MessageSizeType:Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -171,6 +173,7 @@ out_msg.Requestor := machineID; out_msg.Destination.add(map_Address_to_Directory(address)); out_msg.MessageSize := MessageSizeType:Data; + out_msg.DataBlk.alloc(block_size_bytes); } } diff --git a/src/mem/protocol/RubySlicc_Exports.sm b/src/mem/protocol/RubySlicc_Exports.sm --- a/src/mem/protocol/RubySlicc_Exports.sm +++ b/src/mem/protocol/RubySlicc_Exports.sm @@ -51,7 +51,8 @@ structure(DataBlock, external = "yes", desc="..."){ void clear(); - void copyPartial(DataBlock, int, int); + void alloc(uint32_t); + void copyPartial(DataBlock, Addr, int); void copyPartial(DataBlock, WriteMask); void atomicPartial(DataBlock, WriteMask); } diff --git a/src/mem/ruby/common/DataBlock.hh b/src/mem/ruby/common/DataBlock.hh --- a/src/mem/ruby/common/DataBlock.hh +++ b/src/mem/ruby/common/DataBlock.hh @@ -34,17 +34,17 @@ #include #include #include +#include + +#include "base/types.hh" class WriteMask; class DataBlock { public: - DataBlock() - { - alloc(); - } - + DataBlock(); + DataBlock(uint32_t block_size_bytes); DataBlock(const DataBlock &cp); ~DataBlock() @@ -55,7 +55,8 @@ DataBlock& operator=(const DataBlock& obj); - void assign(uint8_t *data); + void alloc(uint32_t block_size_bytes); + void assign(uint8_t *data, uint32_t block_size_bytes); void clear(); uint8_t getByte(int whichByte) const; @@ -68,20 +69,25 @@ void atomicPartial(const DataBlock & dblk, const WriteMask & mask); bool equal(const DataBlock& obj) const; void print(std::ostream& out) const; + uint32_t getSize() const { return m_block_size_bytes; } private: - void alloc(); uint8_t *m_data; + //! true if the block is responsible for deleting m_data, + // false otherwise. bool m_alloc; + uint32_t m_block_size_bytes; }; inline void -DataBlock::assign(uint8_t *data) +DataBlock::assign(uint8_t *data, uint32_t block_size_bytes) { assert(data != NULL); if (m_alloc) { delete [] m_data; } + + m_block_size_bytes = block_size_bytes; m_data = data; m_alloc = false; } diff --git a/src/mem/ruby/common/DataBlock.cc b/src/mem/ruby/common/DataBlock.cc --- a/src/mem/ruby/common/DataBlock.cc +++ b/src/mem/ruby/common/DataBlock.cc @@ -31,37 +31,49 @@ #include "mem/ruby/common/WriteMask.hh" #include "mem/ruby/system/RubySystem.hh" +DataBlock::DataBlock() + : m_data(nullptr), m_alloc(false), m_block_size_bytes(0) +{ +} + DataBlock::DataBlock(const DataBlock &cp) { - m_data = new uint8_t[RubySystem::getBlockSizeBytes()]; - memcpy(m_data, cp.m_data, RubySystem::getBlockSizeBytes()); - m_alloc = true; + alloc(cp.m_block_size_bytes); + memcpy(m_data, cp.m_data, m_block_size_bytes); +} + +DataBlock::DataBlock(uint32_t block_size_bytes) +{ + alloc(block_size_bytes); } void -DataBlock::alloc() +DataBlock::alloc(uint32_t block_size_bytes) { - m_data = new uint8_t[RubySystem::getBlockSizeBytes()]; - m_alloc = true; - clear(); + if (block_size_bytes) { + m_data = new uint8_t[block_size_bytes]; + m_block_size_bytes = block_size_bytes; + m_alloc = true; + } } void DataBlock::clear() { - memset(m_data, 0, RubySystem::getBlockSizeBytes()); + memset(m_data, 0, m_block_size_bytes); } bool DataBlock::equal(const DataBlock& obj) const { - return !memcmp(m_data, obj.m_data, RubySystem::getBlockSizeBytes()); + return ((m_block_size_bytes == obj.m_block_size_bytes) && + (!memcmp(m_data, obj.m_data, m_block_size_bytes))); } void DataBlock::copyPartial(const DataBlock &dblk, const WriteMask &mask) { - for (int i = 0; i < RubySystem::getBlockSizeBytes(); i++) { + for (int i = 0; i < m_block_size_bytes; i++) { if (mask.getMask(i, 1)) { m_data[i] = dblk.m_data[i]; } @@ -71,7 +83,7 @@ void DataBlock::atomicPartial(const DataBlock &dblk, const WriteMask &mask) { - for (int i = 0; i < RubySystem::getBlockSizeBytes(); i++) { + for (int i = 0; i < m_block_size_bytes; i++) { m_data[i] = dblk.m_data[i]; } mask.performAtomic(m_data); @@ -82,9 +94,8 @@ { using namespace std; - int size = RubySystem::getBlockSizeBytes(); out << "[ "; - for (int i = 0; i < size; i++) { + for (int i = 0; i < m_block_size_bytes; i++) { out << setw(2) << setfill('0') << hex << "0x" << (int)m_data[i] << " "; out << setfill(' '); } @@ -94,7 +105,7 @@ const uint8_t* DataBlock::getData(int offset, int len) const { - assert(offset + len <= RubySystem::getBlockSizeBytes()); + assert(offset + len <= m_block_size_bytes); return &m_data[offset]; } @@ -107,13 +118,18 @@ void DataBlock::setData(const uint8_t *data, int offset, int len) { - assert(offset + len <= RubySystem::getBlockSizeBytes()); + assert(offset + len <= m_block_size_bytes); memcpy(&m_data[offset], data, len); } DataBlock & DataBlock::operator=(const DataBlock & obj) { - memcpy(m_data, obj.m_data, RubySystem::getBlockSizeBytes()); + if (m_data == nullptr) { + alloc(obj.m_block_size_bytes); + } + + assert(m_block_size_bytes == obj.m_block_size_bytes); + memcpy(m_data, obj.m_data, m_block_size_bytes); return *this; } diff --git a/src/mem/ruby/slicc_interface/AbstractController.cc b/src/mem/ruby/slicc_interface/AbstractController.cc --- a/src/mem/ruby/slicc_interface/AbstractController.cc +++ b/src/mem/ruby/slicc_interface/AbstractController.cc @@ -318,6 +318,7 @@ assert(pkt->isResponse()); std::shared_ptr msg = std::make_shared(clockEdge()); + (*msg).m_DataBlk.alloc(m_block_size_bytes); (*msg).m_addr = pkt->getAddr(); (*msg).m_Sender = m_machineID; diff --git a/src/mem/ruby/system/GPUCoalescer.cc b/src/mem/ruby/system/GPUCoalescer.cc --- a/src/mem/ruby/system/GPUCoalescer.cc +++ b/src/mem/ruby/system/GPUCoalescer.cc @@ -909,7 +909,7 @@ // Creating WriteMask that records written bytes // and atomic operations. This enables partial writes // and partial reads of those writes - DataBlock dataBlock; + DataBlock dataBlock(m_block_size_bytes); dataBlock.clear(); uint32_t blockSize = RubySystem::getBlockSizeBytes(); std::vector accessMask(blockSize,false); diff --git a/src/mem/protocol/MOESI_CMP_directory-L1cache.sm b/src/mem/protocol/MOESI_CMP_directory-L1cache.sm --- a/src/mem/protocol/MOESI_CMP_directory-L1cache.sm +++ b/src/mem/protocol/MOESI_CMP_directory-L1cache.sm @@ -441,6 +441,7 @@ out_msg.MessageSize := MessageSizeType:Request_Control; out_msg.AccessMode := in_msg.AccessMode; out_msg.Prefetch := in_msg.Prefetch; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -457,6 +458,7 @@ out_msg.MessageSize := MessageSizeType:Request_Control; out_msg.AccessMode := in_msg.AccessMode; out_msg.Prefetch := in_msg.Prefetch; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -470,6 +472,7 @@ out_msg.Destination.add(mapAddressToRange(address, MachineType:L2Cache, l2_select_low_bit, l2_select_num_bits, intToID(0))); out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -482,6 +485,7 @@ out_msg.Destination.add(mapAddressToRange(address, MachineType:L2Cache, l2_select_low_bit, l2_select_num_bits, intToID(0))); out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -494,6 +498,7 @@ out_msg.Destination.add(mapAddressToRange(address, MachineType:L2Cache, l2_select_low_bit, l2_select_num_bits, intToID(0))); out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -596,6 +601,7 @@ out_msg.Destination.add(in_msg.Requestor); out_msg.Acks := 0 - 1; // -1 out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } else { @@ -608,6 +614,7 @@ l2_select_low_bit, l2_select_num_bits, intToID(0))); out_msg.Acks := 0 - 1; // -1 out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -622,6 +629,7 @@ out_msg.Destination.add(mapAddressToRange(address, MachineType:L2Cache, l2_select_low_bit, l2_select_num_bits, intToID(0))); out_msg.MessageSize := MessageSizeType:Unblock_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -634,6 +642,7 @@ out_msg.Destination.add(mapAddressToRange(address, MachineType:L2Cache, l2_select_low_bit, l2_select_num_bits, intToID(0))); out_msg.MessageSize := MessageSizeType:Unblock_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -751,6 +760,7 @@ out_msg.Dirty := false; out_msg.Acks := 1; out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } diff --git a/src/mem/protocol/MOESI_CMP_directory-L2cache.sm b/src/mem/protocol/MOESI_CMP_directory-L2cache.sm --- a/src/mem/protocol/MOESI_CMP_directory-L2cache.sm +++ b/src/mem/protocol/MOESI_CMP_directory-L2cache.sm @@ -733,6 +733,7 @@ out_msg.Requestor := machineID; out_msg.Destination.add(map_Address_to_Directory(address)); out_msg.MessageSize := MessageSizeType:Request_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -746,6 +747,7 @@ out_msg.Requestor := machineID; out_msg.Destination.add(map_Address_to_Directory(address)); out_msg.MessageSize := MessageSizeType:Request_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -758,6 +760,7 @@ out_msg.Requestor := machineID; out_msg.Destination.add(map_Address_to_Directory(address)); out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -769,6 +772,7 @@ out_msg.RequestorMachine := MachineType:L2Cache; out_msg.Destination.add(map_Address_to_Directory(address)); out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -781,6 +785,7 @@ out_msg.RequestorMachine := MachineType:L2Cache; out_msg.Destination.add(map_Address_to_Directory(address)); out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -1012,6 +1017,7 @@ out_msg.Destination.add( tbe.Fwd_GetX_ID); out_msg.Acks := 0 - 1; out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -1025,6 +1031,7 @@ out_msg.Destination.add(in_msg.Requestor); out_msg.Acks := 0 - 1; out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -1039,6 +1046,7 @@ out_msg.Destination.add(tbe.L1_GetX_ID); out_msg.Acks := 0 - 1; out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -1064,6 +1072,7 @@ out_msg.Destination.add(getLocalOwner(cache_entry, address)); } out_msg.MessageSize := MessageSizeType:Invalidate_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -1081,6 +1090,7 @@ out_msg.RequestorMachine := MachineType:L2Cache; out_msg.Destination.addNetDest(getLocalSharers(cache_entry, address)); out_msg.MessageSize := MessageSizeType:Invalidate_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -1114,6 +1124,7 @@ out_msg.Destination.addNetDest(getLocalSharers(cache_entry, address)); out_msg.Destination.remove(in_msg.Requestor); out_msg.MessageSize := MessageSizeType:Invalidate_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -1140,6 +1151,7 @@ out_msg.Destination.addNetDest(getLocalSharers(cache_entry, address)); out_msg.Destination.remove(tbe.L1_GetX_ID); out_msg.MessageSize := MessageSizeType:Invalidate_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -1152,6 +1164,7 @@ out_msg.Sender := machineID; out_msg.SenderMachine := MachineType:L2Cache; out_msg.MessageSize := MessageSizeType:Unblock_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -1164,6 +1177,7 @@ out_msg.Sender := machineID; out_msg.SenderMachine := MachineType:L2Cache; out_msg.MessageSize := MessageSizeType:Unblock_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -1249,6 +1263,7 @@ out_msg.Type := in_msg.Type; out_msg.MessageSize := MessageSizeType:Forwarded_Control; out_msg.Acks := 0 - 1; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -1264,6 +1279,7 @@ out_msg.Type := in_msg.Type; out_msg.MessageSize := MessageSizeType:Forwarded_Control; out_msg.Acks := 0 - 1; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -1280,6 +1296,7 @@ DirEntry dir_entry := getDirEntry(in_msg.addr); out_msg.Destination.add(dir_entry.Sharers.smallestElement(MachineType:L1Cache)); out_msg.MessageSize := MessageSizeType:Forwarded_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -1295,6 +1312,7 @@ out_msg.Destination.add(dir_entry.Owner); out_msg.MessageSize := MessageSizeType:Forwarded_Control; out_msg.Acks := 1 + tbe.Local_GETX_IntAcks; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -1309,6 +1327,7 @@ out_msg.Destination.add(getLocalOwner(cache_entry, in_msg.addr)); out_msg.MessageSize := MessageSizeType:Forwarded_Control; out_msg.Acks := 1; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -1322,6 +1341,7 @@ out_msg.RequestorMachine := MachineType:L1Cache; out_msg.Destination.add(getLocalOwner(cache_entry, in_msg.addr)); out_msg.MessageSize := MessageSizeType:Forwarded_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -1337,6 +1357,7 @@ out_msg.RequestorMachine := MachineType:L2Cache; out_msg.Destination.add(in_msg.Requestor); out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -1351,6 +1372,7 @@ out_msg.RequestorMachine := MachineType:L2Cache; out_msg.Destination.add(in_msg.Requestor); out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -1364,6 +1386,7 @@ out_msg.RequestorMachine := MachineType:L2Cache; out_msg.Destination.add(in_msg.Requestor); out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -1566,6 +1589,7 @@ out_msg.Sender := machineID; out_msg.SenderMachine := MachineType:L2Cache; out_msg.MessageSize := MessageSizeType:Unblock_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } diff --git a/src/mem/protocol/MOESI_CMP_directory-dir.sm b/src/mem/protocol/MOESI_CMP_directory-dir.sm --- a/src/mem/protocol/MOESI_CMP_directory-dir.sm +++ b/src/mem/protocol/MOESI_CMP_directory-dir.sm @@ -315,6 +315,7 @@ out_msg.RequestorMachine := MachineType:Directory; out_msg.Destination.add(in_msg.Requestor); out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -328,6 +329,7 @@ out_msg.RequestorMachine := MachineType:Directory; out_msg.Destination.add(in_msg.Requestor); out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -375,6 +377,7 @@ out_msg.Dirty := false; // By definition, the block is now clean out_msg.Type := CoherenceResponseType:DATA_EXCLUSIVE; out_msg.MessageSize := MessageSizeType:Response_Data; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -399,6 +402,7 @@ out_msg.Acks := out_msg.Acks - 1; } out_msg.MessageSize := MessageSizeType:Forwarded_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -416,6 +420,7 @@ out_msg.Acks := out_msg.Acks - 1; } out_msg.MessageSize := MessageSizeType:Forwarded_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -434,6 +439,7 @@ out_msg.Destination.addNetDest(getDirectoryEntry(in_msg.addr).Sharers); out_msg.Destination.remove(in_msg.Requestor); out_msg.MessageSize := MessageSizeType:Invalidate_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } diff --git a/src/mem/protocol/MOESI_CMP_directory-dma.sm b/src/mem/protocol/MOESI_CMP_directory-dma.sm --- a/src/mem/protocol/MOESI_CMP_directory-dma.sm +++ b/src/mem/protocol/MOESI_CMP_directory-dma.sm @@ -211,6 +211,7 @@ out_msg.Sender := machineID; out_msg.SenderMachine := MachineType:DMA; out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } diff --git a/src/mem/protocol/MOESI_CMP_token-L1cache.sm b/src/mem/protocol/MOESI_CMP_token-L1cache.sm --- a/src/mem/protocol/MOESI_CMP_token-L1cache.sm +++ b/src/mem/protocol/MOESI_CMP_token-L1cache.sm @@ -1417,6 +1417,7 @@ MachineType:L2Cache, l2_select_low_bit, l2_select_num_bits, intToID(0))); out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } diff --git a/src/mem/protocol/MOESI_CMP_token-L2cache.sm b/src/mem/protocol/MOESI_CMP_token-L2cache.sm --- a/src/mem/protocol/MOESI_CMP_token-L2cache.sm +++ b/src/mem/protocol/MOESI_CMP_token-L2cache.sm @@ -561,6 +561,7 @@ out_msg.Destination.add(map_Address_to_Directory(address)); out_msg.Tokens := cache_entry.Tokens; out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } cache_entry.Tokens := 0; } @@ -648,6 +649,7 @@ assert(cache_entry.Tokens >= 1); out_msg.Tokens := cache_entry.Tokens; out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } cache_entry.Tokens := 0; @@ -682,6 +684,7 @@ assert(cache_entry.Tokens >= 1); out_msg.Tokens := cache_entry.Tokens - 1; out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } cache_entry.Tokens := 1; @@ -939,6 +942,7 @@ assert(cache_entry.Tokens >= 1); out_msg.Tokens := cache_entry.Tokens; out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -957,6 +961,7 @@ assert(cache_entry.Tokens >= 1); out_msg.Tokens := cache_entry.Tokens; out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } diff --git a/src/mem/protocol/MESI_Two_Level-dir.sm b/src/mem/protocol/MESI_Two_Level-dir.sm --- a/src/mem/protocol/MESI_Two_Level-dir.sm +++ b/src/mem/protocol/MESI_Two_Level-dir.sm @@ -253,6 +253,7 @@ out_msg.Sender := machineID; out_msg.Destination.add(in_msg.Sender); out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -283,6 +284,7 @@ out_msg.Sender := machineID; out_msg.Destination.add(in_msg.OriginalRequestorMachId); out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -353,6 +355,7 @@ out_msg.Type := CoherenceResponseType:ACK; out_msg.Destination.add(map_Address_to_DMA(address)); out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -372,6 +375,7 @@ out_msg.Sender := machineID; out_msg.Destination.add(getDirectoryEntry(address).Owner); out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } diff --git a/src/mem/protocol/MI_example-cache.sm b/src/mem/protocol/MI_example-cache.sm --- a/src/mem/protocol/MI_example-cache.sm +++ b/src/mem/protocol/MI_example-cache.sm @@ -274,6 +274,7 @@ out_msg.Requestor := machineID; out_msg.Destination.add(map_Address_to_Directory(address)); out_msg.MessageSize := MessageSizeType:Control; + out_msg.DataBlk.alloc(block_size_bytes); } } diff --git a/src/mem/protocol/MI_example-dir.sm b/src/mem/protocol/MI_example-dir.sm --- a/src/mem/protocol/MI_example-dir.sm +++ b/src/mem/protocol/MI_example-dir.sm @@ -270,6 +270,7 @@ out_msg.Requestor := in_msg.Requestor; out_msg.Destination.add(in_msg.Requestor); out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -282,6 +283,7 @@ out_msg.Requestor := in_msg.OriginalRequestorMachId; out_msg.Destination.add(in_msg.OriginalRequestorMachId); out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -294,6 +296,7 @@ out_msg.Requestor := in_msg.Requestor; out_msg.Destination.add(in_msg.Requestor); out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -356,6 +359,7 @@ out_msg.Type := DMAResponseType:ACK; out_msg.Destination.add(tbe.DmaRequestor); out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -378,6 +382,7 @@ out_msg.Requestor := in_msg.Requestor; out_msg.Destination := getDirectoryEntry(in_msg.addr).Owner; out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -390,6 +395,7 @@ out_msg.Requestor := machineID; out_msg.Destination := getDirectoryEntry(in_msg.PhysicalAddress).Owner; out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } diff --git a/src/mem/protocol/MOESI_AMD_Base-CorePair.sm b/src/mem/protocol/MOESI_AMD_Base-CorePair.sm --- a/src/mem/protocol/MOESI_AMD_Base-CorePair.sm +++ b/src/mem/protocol/MOESI_AMD_Base-CorePair.sm @@ -694,6 +694,7 @@ DPRINTF(RubySlicc,"%s\n",out_msg.Destination); out_msg.MessageSize := MessageSizeType:Request_Control; out_msg.InitialRequestTime := curCycle(); + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -708,6 +709,7 @@ out_msg.Destination.add(map_Address_to_Directory(address)); out_msg.MessageSize := MessageSizeType:Request_Control; out_msg.InitialRequestTime := curCycle(); + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -722,6 +724,7 @@ out_msg.Destination.add(map_Address_to_Directory(address)); out_msg.MessageSize := MessageSizeType:Request_Control; out_msg.InitialRequestTime := curCycle(); + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -763,6 +766,7 @@ } else { out_msg.Shared := false; } + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -798,6 +802,7 @@ assert(is_valid(cache_entry)); TBEs.allocate(address); set_tbe(TBEs.lookup(address)); + tbe.DataBlk.alloc(block_size_bytes); tbe.DataBlk := cache_entry.DataBlk; // Data only used for WBs tbe.Dirty := cache_entry.Dirty; tbe.Shared := false; @@ -1121,6 +1126,7 @@ out_msg.Sender := machineID; out_msg.Destination.add(map_Address_to_Directory(address)); out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); DPRINTF(RubySlicc, "%s\n", out_msg); } } @@ -1158,6 +1164,7 @@ out_msg.Ntsl := true; out_msg.State := CoherenceState:NA; out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -1172,6 +1179,7 @@ out_msg.Hit := false; out_msg.State := CoherenceState:NA; out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -1187,6 +1195,7 @@ out_msg.Ntsl := false; out_msg.State := CoherenceState:NA; out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -1205,6 +1214,7 @@ out_msg.Ntsl := false; out_msg.State := CoherenceState:NA; out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } diff --git a/src/mem/protocol/MOESI_AMD_Base-L3cache.sm b/src/mem/protocol/MOESI_AMD_Base-L3cache.sm --- a/src/mem/protocol/MOESI_AMD_Base-L3cache.sm +++ b/src/mem/protocol/MOESI_AMD_Base-L3cache.sm @@ -409,6 +409,7 @@ out_msg.Shared := false; // unneeded for this request out_msg.MessageSize := in_msg.MessageSize; DPRINTF(RubySlicc, "%s\n", out_msg); + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -438,6 +439,7 @@ out_msg.Requestor := machineID; out_msg.Destination.add(map_Address_to_Directory(address)); out_msg.MessageSize := MessageSizeType:Request_Control; + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -452,6 +454,7 @@ out_msg.Destination.add(in_msg.Requestor); out_msg.Sender := machineID; out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -467,6 +470,7 @@ out_msg.Ntsl := true; out_msg.State := CoherenceState:NA; out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -481,6 +485,7 @@ out_msg.Ntsl := false; out_msg.State := CoherenceState:NA; out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -495,6 +500,7 @@ out_msg.Ntsl := false; out_msg.State := CoherenceState:NA; out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -536,6 +542,7 @@ out_msg.Requestor := machineID; out_msg.Destination.add(map_Address_to_Directory(address)); out_msg.MessageSize := MessageSizeType:Request_Control; + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } diff --git a/src/mem/protocol/MOESI_AMD_Base-Region-CorePair.sm b/src/mem/protocol/MOESI_AMD_Base-Region-CorePair.sm --- a/src/mem/protocol/MOESI_AMD_Base-Region-CorePair.sm +++ b/src/mem/protocol/MOESI_AMD_Base-Region-CorePair.sm @@ -714,6 +714,7 @@ out_msg.Destination.add(getPeer(machineID)); out_msg.MessageSize := MessageSizeType:Request_Control; out_msg.InitialRequestTime := curCycle(); + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -728,6 +729,7 @@ out_msg.Destination.add(getPeer(machineID)); out_msg.MessageSize := MessageSizeType:Request_Control; out_msg.InitialRequestTime := curCycle(); + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -742,6 +744,7 @@ out_msg.Destination.add(getPeer(machineID)); out_msg.MessageSize := MessageSizeType:Request_Control; out_msg.CtoDSinked := true; + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -756,6 +759,7 @@ out_msg.Destination.add(getPeer(machineID)); out_msg.MessageSize := MessageSizeType:Request_Control; out_msg.InitialRequestTime := curCycle(); + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -770,6 +774,7 @@ out_msg.Destination.add(getPeer(machineID)); out_msg.CtoDSinked := true; out_msg.MessageSize := MessageSizeType:Request_Control; + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -811,6 +816,7 @@ } else { out_msg.Shared := false; } + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -855,6 +861,7 @@ out_msg.Shared := false; } out_msg.Private := true; + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -1148,6 +1155,7 @@ out_msg.Sender := machineID; out_msg.Destination.add(map_Address_to_Directory(address)); out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); DPRINTF(RubySlicc, "%s\n", out_msg); } } @@ -1255,6 +1263,7 @@ out_msg.State := CoherenceState:NA; out_msg.MessageSize := MessageSizeType:Response_Control; out_msg.isValid := isValid(address); + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -1271,6 +1280,7 @@ out_msg.State := CoherenceState:NA; out_msg.MessageSize := MessageSizeType:Response_Control; out_msg.isValid := isValid(address); + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -1287,6 +1297,7 @@ out_msg.State := CoherenceState:NA; out_msg.MessageSize := MessageSizeType:Response_Control; out_msg.isValid := isValid(address); + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -1306,6 +1317,7 @@ out_msg.State := CoherenceState:NA; out_msg.MessageSize := MessageSizeType:Response_Control; out_msg.isValid := isValid(address); + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -1369,6 +1381,7 @@ out_msg.Requestor := machineID; out_msg.Destination.add(getPeer(machineID)); out_msg.MessageSize := MessageSizeType:Request_Control; + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -1391,6 +1404,7 @@ out_msg.Destination.add(map_Address_to_Directory(address)); out_msg.Sender := machineID; out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } diff --git a/src/mem/protocol/MOESI_AMD_Base-Region-dir.sm b/src/mem/protocol/MOESI_AMD_Base-Region-dir.sm --- a/src/mem/protocol/MOESI_AMD_Base-Region-dir.sm +++ b/src/mem/protocol/MOESI_AMD_Base-Region-dir.sm @@ -666,6 +666,7 @@ out_msg.ForwardRequestTime := curCycle(); out_msg.ProbeRequestStartTime := in_msg.ProbeRequestStartTime; out_msg.DemandRequest := false; + out_msg.DataBlk.alloc(block_size_bytes); } } else { assert(in_msg.Type == CoherenceRequestType:Atomic); @@ -741,6 +742,7 @@ out_msg.ForwardRequestTime := curCycle(); out_msg.ProbeRequestStartTime := tbe.ProbeRequestStartTime; out_msg.DemandRequest := tbe.DemandRequest; + out_msg.DataBlk.alloc(block_size_bytes); DPRINTF(RubySlicc, "%s\n", out_msg); } } @@ -760,6 +762,7 @@ out_msg.ForwardRequestTime := curCycle(); out_msg.ProbeRequestStartTime := in_msg.ProbeRequestStartTime; out_msg.DemandRequest := false; + out_msg.DataBlk.alloc(block_size_bytes); DPRINTF(RubySlicc, "%s\n", out_msg); } } @@ -778,6 +781,7 @@ out_msg.ForwardRequestTime := in_msg.ForwardRequestTime; out_msg.ProbeRequestStartTime := in_msg.ProbeRequestStartTime; out_msg.DemandRequest := false; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -795,6 +799,7 @@ out_msg.ForwardRequestTime := curCycle(); out_msg.ProbeRequestStartTime := in_msg.ProbeRequestStartTime; out_msg.DemandRequest := false; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -807,6 +812,7 @@ out_msg.Destination.add(in_msg.Sender); out_msg.Sender := machineID; out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -820,6 +826,7 @@ out_msg.Destination.add(map_Address_to_RegionDir(address)); out_msg.Sender := machineID; out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -972,6 +979,7 @@ tbe.WTRequestor := in_msg.WTRequestor; tbe.LastSender := in_msg.Requestor; } + tbe.DataBlk.alloc(block_size_bytes); tbe.DataBlk := getDirectoryEntry(address).DataBlk; // Data only for WBs tbe.Dirty := false; if (in_msg.Type == CoherenceRequestType:WriteThrough) { @@ -1007,6 +1015,7 @@ tbe.WTRequestor := in_msg.WTRequestor; tbe.LastSender := in_msg.Requestor; } + tbe.DataBlk.alloc(block_size_bytes); tbe.DataBlk := getDirectoryEntry(address).DataBlk; // Data only for WBs tbe.Dirty := false; if (in_msg.Type == CoherenceRequestType:WriteThrough) { @@ -1036,6 +1045,7 @@ TBEs.allocate(address); set_tbe(TBEs.lookup(address)); tbe.NumPendingAcks := 0; + tbe.DataBlk.alloc(block_size_bytes); } action(dt_deallocateTBE, "dt", desc="deallocate TBE Entry") { @@ -1208,6 +1218,7 @@ out_msg.Destination.add(map_Address_to_RegionDir(address)); out_msg.Shared := in_msg.Shared; out_msg.MessageSize := in_msg.MessageSize; + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } diff --git a/src/mem/protocol/MOESI_AMD_Base-RegionBuffer.sm b/src/mem/protocol/MOESI_AMD_Base-RegionBuffer.sm --- a/src/mem/protocol/MOESI_AMD_Base-RegionBuffer.sm +++ b/src/mem/protocol/MOESI_AMD_Base-RegionBuffer.sm @@ -596,6 +596,7 @@ // will this always be ok? probably not for multisocket out_msg.Destination.add(map_Address_to_RegionDir(address)); out_msg.MessageSize := MessageSizeType:Request_Control; + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -621,6 +622,7 @@ // will this always be ok? probably not for multisocket out_msg.Destination.add(map_Address_to_RegionDir(address)); out_msg.MessageSize := MessageSizeType:Request_Control; + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -639,6 +641,7 @@ out_msg.Requestor := machineID; out_msg.Destination.add(map_Address_to_RegionDir(address)); // will this always be ok? probably not for multisocket out_msg.MessageSize := MessageSizeType:Request_Control; + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -661,6 +664,7 @@ // will this always be ok? probably not for multisocket out_msg.Destination.add(map_Address_to_RegionDir(address)); out_msg.MessageSize := MessageSizeType:Request_Control; + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -680,6 +684,7 @@ out_msg.Sender := machineID; out_msg.Destination.add(map_Address_to_RegionDir(address)); // will this always be ok? probably not for multisocket out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -697,6 +702,7 @@ out_msg.State := CoherenceState:NA; out_msg.NoAckNeeded := true; out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); DPRINTF(RubySlicc, "%s\n", out_msg); } } @@ -713,6 +719,7 @@ out_msg.Destination.add(map_Address_to_RegionDir(address)); // will this always be ok? probably not for multisocket out_msg.MessageSize := MessageSizeType:Response_Control; out_msg.Dirty := tbe.dirty; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -723,6 +730,7 @@ out_msg.Sender := machineID; out_msg.Destination.add(map_Address_to_RegionDir(address)); // will this always be ok? probably not for multisocket out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -734,6 +742,7 @@ out_msg.NotCached := true; out_msg.Destination.add(map_Address_to_RegionDir(address)); // will this always be ok? probably not for multisocket out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -744,6 +753,7 @@ out_msg.Sender := machineID; out_msg.Destination.add(map_Address_to_RegionDir(address)); // will this always be ok? probably not for multisocket out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -756,6 +766,7 @@ out_msg.Sender := machineID; out_msg.Destination.add(map_Address_to_RegionDir(address)); // will this always be ok? probably not for multisocket out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -832,6 +843,7 @@ out_msg.State := CoherenceState:NA; out_msg.NoAckNeeded := true; out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); DPRINTF(RubySlicc, "%s\n", out_msg); } } diff --git a/src/mem/protocol/MOESI_AMD_Base-RegionDir.sm b/src/mem/protocol/MOESI_AMD_Base-RegionDir.sm --- a/src/mem/protocol/MOESI_AMD_Base-RegionDir.sm +++ b/src/mem/protocol/MOESI_AMD_Base-RegionDir.sm @@ -779,6 +779,7 @@ out_msg.Requestor := machineID; out_msg.MessageSize := MessageSizeType:Request_Control; out_msg.InitialRequestTime := in_msg.InitialRequestTime; + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -796,6 +797,7 @@ out_msg.MessageSize := MessageSizeType:Request_Control; out_msg.InitialRequestTime := in_msg.InitialRequestTime; out_msg.NoAckNeeded := true; + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -812,6 +814,7 @@ out_msg.Requestor := machineID; out_msg.MessageSize := MessageSizeType:Request_Control; out_msg.InitialRequestTime := in_msg.InitialRequestTime; + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -828,6 +831,7 @@ out_msg.Requestor := machineID; out_msg.MessageSize := MessageSizeType:Request_Control; out_msg.InitialRequestTime := in_msg.InitialRequestTime; + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -847,6 +851,7 @@ out_msg.InitialRequestTime := tbe.InitialRequestTime; APPEND_TRANSITION_COMMENT("dest: "); APPEND_TRANSITION_COMMENT(out_msg.Destination); + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -865,6 +870,7 @@ out_msg.InitialRequestTime := tbe.InitialRequestTime; APPEND_TRANSITION_COMMENT("dest: "); APPEND_TRANSITION_COMMENT(out_msg.Destination); + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } diff --git a/src/mem/protocol/MOESI_AMD_Base-dir.sm b/src/mem/protocol/MOESI_AMD_Base-dir.sm --- a/src/mem/protocol/MOESI_AMD_Base-dir.sm +++ b/src/mem/protocol/MOESI_AMD_Base-dir.sm @@ -496,6 +496,7 @@ out_msg.InitialRequestTime := tbe.InitialRequestTime; out_msg.ForwardRequestTime := curCycle(); out_msg.ProbeRequestStartTime := tbe.ProbeRequestStartTime; + out_msg.DataBlk.alloc(block_size_bytes); DPRINTF(RubySlicc, "%s\n", out_msg); } } @@ -512,6 +513,7 @@ out_msg.InitialRequestTime := in_msg.InitialRequestTime; out_msg.ForwardRequestTime := curCycle(); out_msg.ProbeRequestStartTime := curCycle(); + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -687,6 +689,7 @@ tbe.WTRequestor := in_msg.WTRequestor; tbe.LastSender := in_msg.Requestor; } + tbe.DataBlk.alloc(block_size_bytes); tbe.DataBlk := getDirectoryEntry(address).DataBlk; // Data only for WBs tbe.Dirty := false; if (in_msg.Type == CoherenceRequestType:WriteThrough) { diff --git a/src/mem/protocol/MOESI_AMD_Base-probeFilter.sm b/src/mem/protocol/MOESI_AMD_Base-probeFilter.sm --- a/src/mem/protocol/MOESI_AMD_Base-probeFilter.sm +++ b/src/mem/protocol/MOESI_AMD_Base-probeFilter.sm @@ -584,6 +584,7 @@ out_msg.InitialRequestTime := tbe.InitialRequestTime; out_msg.ForwardRequestTime := curCycle(); out_msg.ProbeRequestStartTime := tbe.ProbeRequestStartTime; + out_msg.DataBlk.alloc(block_size_bytes); DPRINTF(RubySlicc, "%s\n", out_msg); } } @@ -600,6 +601,7 @@ out_msg.InitialRequestTime := in_msg.InitialRequestTime; out_msg.ForwardRequestTime := curCycle(); out_msg.ProbeRequestStartTime := curCycle(); + out_msg.DataBlk.alloc(block_size_bytes); } } } diff --git a/src/mem/protocol/GPU_VIPER-TCP.sm b/src/mem/protocol/GPU_VIPER-TCP.sm --- a/src/mem/protocol/GPU_VIPER-TCP.sm +++ b/src/mem/protocol/GPU_VIPER-TCP.sm @@ -350,6 +350,7 @@ TCC_select_low_bit, TCC_select_num_bits)); out_msg.MessageSize := MessageSizeType:Request_Control; out_msg.InitialRequestTime := curCycle(); + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -398,6 +399,7 @@ TCC_select_low_bit, TCC_select_num_bits)); out_msg.MessageSize := MessageSizeType:Request_Control; out_msg.InitialRequestTime := curCycle(); + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -431,6 +433,7 @@ enqueue(requestNetwork_out, CPURequestMsg, issue_latency) { out_msg.addr := address; out_msg.Requestor := machineID; + out_msg.DataBlk.alloc(block_size_bytes); out_msg.writeMask.clear(block_size_bytes); out_msg.writeMask.orMask(in_msg.writeMask); out_msg.Destination.add(mapAddressToRange(address,MachineType:TCC, diff --git a/src/mem/protocol/GPU_VIPER_Region-TCC.sm b/src/mem/protocol/GPU_VIPER_Region-TCC.sm --- a/src/mem/protocol/GPU_VIPER_Region-TCC.sm +++ b/src/mem/protocol/GPU_VIPER_Region-TCC.sm @@ -401,6 +401,7 @@ out_msg.Destination.add(getPeer(machineID)); out_msg.Shared := false; // unneeded for this request out_msg.MessageSize := in_msg.MessageSize; + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -419,6 +420,7 @@ out_msg.Destination.add(in_msg.WTRequestor); out_msg.Sender := machineID; out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -432,6 +434,7 @@ out_msg.Destination.add(in_msg.Requestor); out_msg.Sender := machineID; out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -554,6 +557,7 @@ out_msg.MessageSize := MessageSizeType:Data; out_msg.Type := CoherenceRequestType:Atomic; out_msg.Dirty := true; + out_msg.DataBlk := cache_entry.DataBlk; if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -573,6 +577,7 @@ out_msg.Ntsl := true; out_msg.State := CoherenceState:NA; out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk := cache_entry.DataBlk; } } action(ut_updateTag, "ut", desc="update Tag (i.e. set MRU)") { diff --git a/src/mem/protocol/MESI_Three_Level-L0cache.sm b/src/mem/protocol/MESI_Three_Level-L0cache.sm --- a/src/mem/protocol/MESI_Three_Level-L0cache.sm +++ b/src/mem/protocol/MESI_Three_Level-L0cache.sm @@ -373,6 +373,7 @@ address, out_msg.Dest); out_msg.MessageSize := MessageSizeType:Control; out_msg.AccessMode := in_msg.AccessMode; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -390,6 +391,7 @@ address, out_msg.Dest); out_msg.MessageSize := MessageSizeType:Control; out_msg.AccessMode := in_msg.AccessMode; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -406,6 +408,7 @@ address, out_msg.Dest); out_msg.MessageSize := MessageSizeType:Control; out_msg.AccessMode := in_msg.AccessMode; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -432,6 +435,7 @@ out_msg.Sender := machineID; out_msg.Dest := createMachineID(MachineType:L1Cache, version); out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } diff --git a/src/mem/protocol/MESI_Three_Level-L1cache.sm b/src/mem/protocol/MESI_Three_Level-L1cache.sm --- a/src/mem/protocol/MESI_Three_Level-L1cache.sm +++ b/src/mem/protocol/MESI_Three_Level-L1cache.sm @@ -396,6 +396,7 @@ address, out_msg.Destination); out_msg.MessageSize := MessageSizeType:Control; out_msg.AccessMode := in_msg.AccessMode; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -413,6 +414,7 @@ address, out_msg.Destination); out_msg.MessageSize := MessageSizeType:Control; out_msg.AccessMode := in_msg.AccessMode; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -429,6 +431,7 @@ address, out_msg.Destination); out_msg.MessageSize := MessageSizeType:Control; out_msg.AccessMode := in_msg.AccessMode; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -499,6 +502,7 @@ out_msg.Sender := machineID; out_msg.Destination.add(in_msg.Requestor); out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -540,6 +544,7 @@ out_msg.Destination.add(in_msg.Requestor); out_msg.MessageSize := MessageSizeType:Response_Control; out_msg.AckCount := 1; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -551,6 +556,7 @@ out_msg.Sender := machineID; out_msg.Dest := createMachineID(MachineType:L0Cache, version); out_msg.MessageSize := MessageSizeType:Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -568,6 +574,7 @@ out_msg.DataBlk := cache_entry.DataBlk; } else { out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -580,6 +587,7 @@ out_msg.Destination.add(mapAddressToRange(address, MachineType:L2Cache, l2_select_low_bit, l2_select_num_bits, clusterID)); out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); DPRINTF(RubySlicc, "%#x\n", address); } } @@ -592,6 +600,7 @@ out_msg.Destination.add(mapAddressToRange(address, MachineType:L2Cache, l2_select_low_bit, l2_select_num_bits, clusterID)); out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); DPRINTF(RubySlicc, "%#x\n", address); } diff --git a/src/mem/protocol/MESI_Two_Level-L1cache.sm b/src/mem/protocol/MESI_Two_Level-L1cache.sm --- a/src/mem/protocol/MESI_Two_Level-L1cache.sm +++ b/src/mem/protocol/MESI_Two_Level-L1cache.sm @@ -533,6 +533,7 @@ out_msg.MessageSize := MessageSizeType:Control; out_msg.Prefetch := in_msg.Prefetch; out_msg.AccessMode := in_msg.AccessMode; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -550,6 +551,7 @@ out_msg.MessageSize := MessageSizeType:Control; out_msg.Prefetch := in_msg.Prefetch; out_msg.AccessMode := in_msg.AccessMode; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -567,6 +569,7 @@ out_msg.MessageSize := MessageSizeType:Control; out_msg.Prefetch := in_msg.Prefetch; out_msg.AccessMode := in_msg.AccessMode; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -584,7 +587,7 @@ out_msg.MessageSize := MessageSizeType:Control; out_msg.Prefetch := in_msg.Prefetch; out_msg.AccessMode := in_msg.AccessMode; - + out_msg.DataBlk.alloc(block_size_bytes); DPRINTF(RubySlicc, "address: %#x, destination: %s\n", address, out_msg.Destination); } @@ -605,6 +608,7 @@ out_msg.MessageSize := MessageSizeType:Control; out_msg.Prefetch := in_msg.Prefetch; out_msg.AccessMode := in_msg.AccessMode; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -625,6 +629,7 @@ out_msg.MessageSize := MessageSizeType:Control; out_msg.Prefetch := in_msg.Prefetch; out_msg.AccessMode := in_msg.AccessMode; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -642,6 +647,7 @@ out_msg.MessageSize := MessageSizeType:Control; out_msg.Prefetch := in_msg.Prefetch; out_msg.AccessMode := in_msg.AccessMode; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -712,6 +718,7 @@ out_msg.Sender := machineID; out_msg.Destination.add(in_msg.Requestor); out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -753,6 +760,7 @@ out_msg.Destination.add(in_msg.Requestor); out_msg.MessageSize := MessageSizeType:Response_Control; out_msg.AckCount := 1; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -790,6 +798,7 @@ out_msg.Destination.add(mapAddressToRange(address, MachineType:L2Cache, l2_select_low_bit, l2_select_num_bits, intToID(0))); out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); DPRINTF(RubySlicc, "%#x\n", address); } } @@ -802,6 +811,7 @@ out_msg.Destination.add(mapAddressToRange(address, MachineType:L2Cache, l2_select_low_bit, l2_select_num_bits, intToID(0))); out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); DPRINTF(RubySlicc, "%#x\n", address); } diff --git a/src/mem/protocol/MESI_Two_Level-L2cache.sm b/src/mem/protocol/MESI_Two_Level-L2cache.sm --- a/src/mem/protocol/MESI_Two_Level-L2cache.sm +++ b/src/mem/protocol/MESI_Two_Level-L2cache.sm @@ -402,6 +402,7 @@ out_msg.Requestor := machineID; out_msg.Destination.add(map_Address_to_Directory(address)); out_msg.MessageSize := MessageSizeType:Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -415,6 +416,7 @@ out_msg.Requestor := in_msg.Requestor; out_msg.Destination.add(cache_entry.Exclusive); out_msg.MessageSize := MessageSizeType:Request_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -439,6 +441,7 @@ out_msg.Sender := machineID; out_msg.Destination.add(map_Address_to_Directory(address)); out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -560,6 +563,7 @@ out_msg.Requestor := machineID; out_msg.Destination := cache_entry.Sharers; out_msg.MessageSize := MessageSizeType:Request_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -572,6 +576,7 @@ out_msg.Requestor := in_msg.Requestor; out_msg.Destination := cache_entry.Sharers; out_msg.MessageSize := MessageSizeType:Request_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -586,6 +591,7 @@ out_msg.Destination := cache_entry.Sharers; out_msg.Destination.remove(in_msg.Requestor); out_msg.MessageSize := MessageSizeType:Request_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -700,6 +706,7 @@ out_msg.Sender := machineID; out_msg.Destination.add(in_msg.Requestor); out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -715,6 +722,7 @@ out_msg.MessageSize := MessageSizeType:Response_Control; // upgrader doesn't get ack from itself, hence the + 1 out_msg.AckCount := 0 - cache_entry.Sharers.count() + 1; + out_msg.DataBlk.alloc(block_size_bytes); } } } # Node ID 52997ce5a9a3d595d02b0ff28d9e11aabe416d54 # Parent 372b57df72d3d4a25bb64f60a5725dc0faddb8f1 diff --git a/src/mem/protocol/GPU_RfO-SQC.sm b/src/mem/protocol/GPU_RfO-SQC.sm --- a/src/mem/protocol/GPU_RfO-SQC.sm +++ b/src/mem/protocol/GPU_RfO-SQC.sm @@ -310,6 +310,7 @@ TCC_select_low_bit, TCC_select_num_bits)); out_msg.MessageSize := MessageSizeType:Request_Control; out_msg.InitialRequestTime := curCycle(); + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -331,6 +332,7 @@ out_msg.Shared := false; } out_msg.InitialRequestTime := curCycle(); + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -408,6 +410,7 @@ out_msg.Destination.add(mapAddressToRange(address,MachineType:TCC, TCC_select_low_bit, TCC_select_num_bits)); out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); DPRINTF(RubySlicc, "%s\n", out_msg); } } @@ -447,6 +450,7 @@ out_msg.Hit := false; out_msg.Ntsl := true; out_msg.State := CoherenceState:NA; + out_msg.DataBlk.alloc(block_size_bytes); out_msg.MessageSize := MessageSizeType:Response_Control; } } @@ -463,6 +467,7 @@ out_msg.Ntsl := true; out_msg.Hit := false; out_msg.State := CoherenceState:NA; + out_msg.DataBlk.alloc(block_size_bytes); out_msg.MessageSize := MessageSizeType:Response_Control; } } @@ -479,6 +484,7 @@ out_msg.Hit := false; out_msg.Ntsl := false; out_msg.State := CoherenceState:NA; + out_msg.DataBlk.alloc(block_size_bytes); out_msg.MessageSize := MessageSizeType:Response_Control; } } diff --git a/src/mem/protocol/GPU_RfO-TCC.sm b/src/mem/protocol/GPU_RfO-TCC.sm --- a/src/mem/protocol/GPU_RfO-TCC.sm +++ b/src/mem/protocol/GPU_RfO-TCC.sm @@ -425,6 +425,7 @@ TCC_select_low_bit, TCC_select_num_bits)); out_msg.Shared := false; // unneeded for this request out_msg.MessageSize := in_msg.MessageSize; + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -486,6 +487,7 @@ out_msg.Destination.add(in_msg.Requestor); out_msg.Sender := machineID; out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -503,6 +505,7 @@ out_msg.Ntsl := true; out_msg.State := CoherenceState:NA; out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -519,6 +522,7 @@ out_msg.Ntsl := false; out_msg.State := CoherenceState:NA; out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -535,6 +539,7 @@ out_msg.Ntsl := false; out_msg.State := CoherenceState:NA; out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -580,6 +585,7 @@ out_msg.Destination.add(mapAddressToRange(address,MachineType:TCCdir, TCC_select_low_bit, TCC_select_num_bits)); out_msg.MessageSize := MessageSizeType:Request_Control; + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } diff --git a/src/mem/protocol/GPU_RfO-TCCdir.sm b/src/mem/protocol/GPU_RfO-TCCdir.sm --- a/src/mem/protocol/GPU_RfO-TCCdir.sm +++ b/src/mem/protocol/GPU_RfO-TCCdir.sm @@ -665,6 +665,7 @@ out_msg.Sender := machineID; out_msg.Destination.add(in_msg.Requestor); out_msg.MessageSize := in_msg.MessageSize; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -677,6 +678,7 @@ out_msg.Sender := machineID; out_msg.Destination.add(in_msg.Requestor); out_msg.MessageSize := in_msg.MessageSize; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -767,6 +769,7 @@ out_msg.Requestor := machineID; out_msg.Destination.add(map_Address_to_Directory(address)); out_msg.MessageSize := MessageSizeType:Request_Control; + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -780,6 +783,7 @@ out_msg.Requestor := machineID; out_msg.Destination.add(map_Address_to_Directory(address)); out_msg.MessageSize := MessageSizeType:Request_Control; + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -793,6 +797,7 @@ out_msg.Requestor := machineID; out_msg.Destination.add(map_Address_to_Directory(address)); out_msg.MessageSize := MessageSizeType:Request_Control; + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -836,6 +841,7 @@ out_msg.Shared := false; } out_msg.Dirty := true; + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -855,6 +861,7 @@ out_msg.Shared := false; } out_msg.Dirty := false; + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -1117,6 +1124,7 @@ out_msg.Ntsl := true; out_msg.State := CoherenceState:NA; out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -1131,6 +1139,7 @@ out_msg.Hit := false; out_msg.State := CoherenceState:NA; out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -1145,6 +1154,7 @@ out_msg.Ntsl := false; out_msg.State := CoherenceState:NA; out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -1193,6 +1203,7 @@ out_msg.Destination.add(map_Address_to_Directory(address)); out_msg.Requestor := machineID; out_msg.MessageSize := MessageSizeType:Request_Control; + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -1257,6 +1268,7 @@ out_msg.Type := CoherenceResponseType:TDSysWBAck; out_msg.Sender := machineID; //out_msg.DataBlk := tbe.DataBlk; + out_msg.DataBlk.alloc(block_size_bytes); out_msg.Destination.add(tbe.OriginalRequestor); out_msg.MessageSize := in_msg.MessageSize; } @@ -1534,6 +1546,7 @@ out_msg.Destination.add(map_Address_to_Directory(address)); out_msg.Sender := machineID; out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } diff --git a/src/mem/protocol/GPU_RfO-TCP.sm b/src/mem/protocol/GPU_RfO-TCP.sm --- a/src/mem/protocol/GPU_RfO-TCP.sm +++ b/src/mem/protocol/GPU_RfO-TCP.sm @@ -372,6 +372,7 @@ TCC_select_low_bit, TCC_select_num_bits)); out_msg.MessageSize := MessageSizeType:Request_Control; out_msg.InitialRequestTime := curCycle(); + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -387,6 +388,7 @@ TCC_select_low_bit, TCC_select_num_bits)); out_msg.MessageSize := MessageSizeType:Request_Control; out_msg.InitialRequestTime := curCycle(); + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -430,6 +432,7 @@ } else { out_msg.Shared := false; } + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -559,6 +562,7 @@ out_msg.Destination.add(mapAddressToRange(address,MachineType:TCC, TCC_select_low_bit, TCC_select_num_bits)); out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); DPRINTF(RubySlicc, "%s\n", out_msg); } } @@ -600,6 +604,7 @@ out_msg.State := CoherenceState:NA; out_msg.UntransferredOwner :=true; out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -616,6 +621,7 @@ out_msg.State := CoherenceState:NA; out_msg.MessageSize := MessageSizeType:Response_Control; out_msg.isValid := isValid(address); + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -632,6 +638,7 @@ out_msg.State := CoherenceState:NA; out_msg.MessageSize := MessageSizeType:Response_Control; out_msg.isValid := isValid(address); + out_msg.DataBlk.alloc(block_size_bytes); } } @@ -648,6 +655,7 @@ out_msg.State := CoherenceState:NA; out_msg.MessageSize := MessageSizeType:Response_Control; out_msg.isValid := isValid(address); + out_msg.DataBlk.alloc(block_size_bytes); } } diff --git a/src/mem/protocol/GPU_VIPER-SQC.sm b/src/mem/protocol/GPU_VIPER-SQC.sm --- a/src/mem/protocol/GPU_VIPER-SQC.sm +++ b/src/mem/protocol/GPU_VIPER-SQC.sm @@ -264,6 +264,7 @@ TCC_select_low_bit, TCC_select_num_bits)); out_msg.MessageSize := MessageSizeType:Request_Control; out_msg.InitialRequestTime := curCycle(); + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } diff --git a/src/mem/protocol/GPU_VIPER-TCC.sm b/src/mem/protocol/GPU_VIPER-TCC.sm --- a/src/mem/protocol/GPU_VIPER-TCC.sm +++ b/src/mem/protocol/GPU_VIPER-TCC.sm @@ -383,6 +383,7 @@ out_msg.Destination.add(map_Address_to_Directory(address)); out_msg.Shared := false; // unneeded for this request out_msg.MessageSize := in_msg.MessageSize; + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -401,6 +402,7 @@ out_msg.Destination.add(in_msg.WTRequestor); out_msg.Sender := machineID; out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -414,6 +416,7 @@ out_msg.Destination.add(in_msg.Requestor); out_msg.Sender := machineID; out_msg.MessageSize := MessageSizeType:Writeback_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } } @@ -522,6 +525,7 @@ out_msg.MessageSize := MessageSizeType:Data; out_msg.Type := CoherenceRequestType:Atomic; out_msg.Dirty := true; + out_msg.DataBlk.alloc(block_size_bytes); if (out_msg.writeMask.isEmpty() == true) { out_msg.writeMask.clear(block_size_bytes); } @@ -541,6 +545,7 @@ out_msg.Ntsl := true; out_msg.State := CoherenceState:NA; out_msg.MessageSize := MessageSizeType:Response_Control; + out_msg.DataBlk.alloc(block_size_bytes); } } action(ut_updateTag, "ut", desc="update Tag (i.e. set MRU)") {