From 16ac48e6a419b75e6a9e86fab9cd2fd62ef9a574 Mon Sep 17 00:00:00 2001 From: Nilay Vaish Date: Sat, 4 Jul 2015 10:43:46 -0500 Subject: ruby: drop NetworkMessage class This patch drops the NetworkMessage class. The relevant data members and functions have been moved to the Message class, which was the parent of NetworkMessage. --- src/mem/protocol/MESI_Two_Level-msg.sm | 4 +- src/mem/protocol/MI_example-msg.sm | 8 +- src/mem/protocol/MOESI_CMP_directory-msg.sm | 4 +- src/mem/protocol/MOESI_CMP_token-msg.sm | 10 +- src/mem/protocol/MOESI_hammer-msg.sm | 8 +- src/mem/protocol/Network_test-msg.sm | 2 +- src/mem/protocol/RubySlicc_Exports.sm | 1 + src/mem/ruby/SConscript | 1 - src/mem/ruby/common/NetDest.hh | 2 +- .../garnet/fixed-pipeline/NetworkInterface_d.cc | 13 ++- .../garnet/fixed-pipeline/NetworkInterface_d.hh | 1 - .../network/garnet/fixed-pipeline/RoutingUnit_d.cc | 6 +- .../garnet/flexible-pipeline/NetworkInterface.cc | 15 ++- .../garnet/flexible-pipeline/NetworkInterface.hh | 1 - .../network/garnet/flexible-pipeline/Router.cc | 7 +- src/mem/ruby/network/simple/PerfectSwitch.cc | 12 +-- src/mem/ruby/network/simple/Throttle.cc | 9 +- src/mem/ruby/slicc_interface/Message.hh | 24 ++++- src/mem/ruby/slicc_interface/NetworkMessage.hh | 102 --------------------- src/mem/ruby/structures/RubyMemoryControl.cc | 2 +- src/mem/slicc/ast/AssignStatementAST.py | 9 +- src/mem/slicc/symbols/Type.py | 8 +- 22 files changed, 78 insertions(+), 171 deletions(-) delete mode 100644 src/mem/ruby/slicc_interface/NetworkMessage.hh (limited to 'src/mem') diff --git a/src/mem/protocol/MESI_Two_Level-msg.sm b/src/mem/protocol/MESI_Two_Level-msg.sm index 85a54c1f2..d7b8b3118 100644 --- a/src/mem/protocol/MESI_Two_Level-msg.sm +++ b/src/mem/protocol/MESI_Two_Level-msg.sm @@ -57,7 +57,7 @@ enumeration(CoherenceResponseType, desc="...") { } // RequestMsg -structure(RequestMsg, desc="...", interface="NetworkMessage") { +structure(RequestMsg, desc="...", interface="Message") { Address Addr, desc="Physical address for this request"; CoherenceRequestType Type, desc="Type of request (GetS, GetX, PutX, etc)"; RubyAccessMode AccessMode, desc="user/supervisor access type"; @@ -86,7 +86,7 @@ structure(RequestMsg, desc="...", interface="NetworkMessage") { } // ResponseMsg -structure(ResponseMsg, desc="...", interface="NetworkMessage") { +structure(ResponseMsg, desc="...", interface="Message") { Address Addr, desc="Physical address for this request"; CoherenceResponseType Type, desc="Type of response (Ack, Data, etc)"; MachineID Sender, desc="What component sent the data"; diff --git a/src/mem/protocol/MI_example-msg.sm b/src/mem/protocol/MI_example-msg.sm index 568b79786..f7721c6e0 100644 --- a/src/mem/protocol/MI_example-msg.sm +++ b/src/mem/protocol/MI_example-msg.sm @@ -50,7 +50,7 @@ enumeration(CoherenceResponseType, desc="...") { } // RequestMsg (and also forwarded requests) -structure(RequestMsg, desc="...", interface="NetworkMessage") { +structure(RequestMsg, desc="...", interface="Message") { Address Addr, desc="Physical address for this request"; CoherenceRequestType Type, desc="Type of request (GetS, GetX, PutX, etc)"; MachineID Requestor, desc="Node who initiated the request"; @@ -74,7 +74,7 @@ structure(RequestMsg, desc="...", interface="NetworkMessage") { } // ResponseMsg (and also unblock requests) -structure(ResponseMsg, desc="...", interface="NetworkMessage") { +structure(ResponseMsg, desc="...", interface="Message") { Address Addr, desc="Physical address for this request"; CoherenceResponseType Type, desc="Type of response (Ack, Data, etc)"; MachineID Sender, desc="Node who sent the data"; @@ -108,7 +108,7 @@ enumeration(DMAResponseType, desc="...", default="DMAResponseType_NULL") { NULL, desc="Invalid"; } -structure(DMARequestMsg, desc="...", interface="NetworkMessage") { +structure(DMARequestMsg, desc="...", interface="Message") { DMARequestType Type, desc="Request type (read/write)"; Address PhysicalAddress, desc="Physical address for this request"; Address LineAddress, desc="Line address for this request"; @@ -127,7 +127,7 @@ structure(DMARequestMsg, desc="...", interface="NetworkMessage") { } } -structure(DMAResponseMsg, desc="...", interface="NetworkMessage") { +structure(DMAResponseMsg, desc="...", interface="Message") { DMAResponseType Type, desc="Response type (DATA/ACK)"; Address PhysicalAddress, desc="Physical address for this request"; Address LineAddress, desc="Line address for this request"; diff --git a/src/mem/protocol/MOESI_CMP_directory-msg.sm b/src/mem/protocol/MOESI_CMP_directory-msg.sm index 6452aa9f9..eaef28f77 100644 --- a/src/mem/protocol/MOESI_CMP_directory-msg.sm +++ b/src/mem/protocol/MOESI_CMP_directory-msg.sm @@ -84,7 +84,7 @@ structure(TriggerMsg, desc="...", interface="Message") { } // RequestMsg (and also forwarded requests) -structure(RequestMsg, desc="...", interface="NetworkMessage") { +structure(RequestMsg, desc="...", interface="Message") { Address Addr, desc="Physical address for this request"; int Len, desc="Length of Request"; CoherenceRequestType Type, desc="Type of request (GetS, GetX, PutX, etc)"; @@ -113,7 +113,7 @@ structure(RequestMsg, desc="...", interface="NetworkMessage") { } // ResponseMsg (and also unblock requests) -structure(ResponseMsg, desc="...", interface="NetworkMessage") { +structure(ResponseMsg, desc="...", interface="Message") { Address Addr, desc="Physical address for this request"; CoherenceResponseType Type, desc="Type of response (Ack, Data, etc)"; MachineID Sender, desc="Node who sent the data"; diff --git a/src/mem/protocol/MOESI_CMP_token-msg.sm b/src/mem/protocol/MOESI_CMP_token-msg.sm index 6df417e00..91e8c1dc8 100644 --- a/src/mem/protocol/MOESI_CMP_token-msg.sm +++ b/src/mem/protocol/MOESI_CMP_token-msg.sm @@ -57,7 +57,7 @@ enumeration(CoherenceResponseType, desc="...") { } // PersistentMsg -structure(PersistentMsg, desc="...", interface="NetworkMessage") { +structure(PersistentMsg, desc="...", interface="Message") { Address Addr, desc="Physical address for this request"; PersistentRequestType Type, desc="Type of starvation request"; MachineID Requestor, desc="Node who initiated the request"; @@ -78,7 +78,7 @@ structure(PersistentMsg, desc="...", interface="NetworkMessage") { } // RequestMsg -structure(RequestMsg, desc="...", interface="NetworkMessage") { +structure(RequestMsg, desc="...", interface="Message") { Address Addr, desc="Physical address for this request"; CoherenceRequestType Type, desc="Type of request (GetS, GetX, PutX, etc)"; MachineID Requestor, desc="Node who initiated the request"; @@ -101,7 +101,7 @@ structure(RequestMsg, desc="...", interface="NetworkMessage") { } // ResponseMsg -structure(ResponseMsg, desc="...", interface="NetworkMessage") { +structure(ResponseMsg, desc="...", interface="Message") { Address Addr, desc="Physical address for this request"; CoherenceResponseType Type, desc="Type of response (Ack, Data, etc)"; MachineID Sender, desc="Node who sent the data"; @@ -134,7 +134,7 @@ enumeration(DMAResponseType, desc="...", default="DMAResponseType_NULL") { NULL, desc="Invalid"; } -structure(DMARequestMsg, desc="...", interface="NetworkMessage") { +structure(DMARequestMsg, desc="...", interface="Message") { DMARequestType Type, desc="Request type (read/write)"; Address PhysicalAddress, desc="Physical address for this request"; Address LineAddress, desc="Line address for this request"; @@ -153,7 +153,7 @@ structure(DMARequestMsg, desc="...", interface="NetworkMessage") { } } -structure(DMAResponseMsg, desc="...", interface="NetworkMessage") { +structure(DMAResponseMsg, desc="...", interface="Message") { DMAResponseType Type, desc="Response type (DATA/ACK)"; Address PhysicalAddress, desc="Physical address for this request"; Address LineAddress, desc="Line address for this request"; diff --git a/src/mem/protocol/MOESI_hammer-msg.sm b/src/mem/protocol/MOESI_hammer-msg.sm index 240b27ed7..12472ad98 100644 --- a/src/mem/protocol/MOESI_hammer-msg.sm +++ b/src/mem/protocol/MOESI_hammer-msg.sm @@ -86,7 +86,7 @@ structure(TriggerMsg, desc="...", interface="Message") { } // RequestMsg (and also forwarded requests) -structure(RequestMsg, desc="...", interface="NetworkMessage") { +structure(RequestMsg, desc="...", interface="Message") { Address Addr, desc="Physical address for this request"; CoherenceRequestType Type, desc="Type of request (GetS, GetX, PutX, etc)"; MachineID Requestor, desc="Node who initiated the request"; @@ -113,7 +113,7 @@ structure(RequestMsg, desc="...", interface="NetworkMessage") { } // ResponseMsg (and also unblock requests) -structure(ResponseMsg, desc="...", interface="NetworkMessage") { +structure(ResponseMsg, desc="...", interface="Message") { Address Addr, desc="Physical address for this request"; CoherenceResponseType Type, desc="Type of response (Ack, Data, etc)"; MachineID Sender, desc="Node who sent the data"; @@ -164,7 +164,7 @@ enumeration(DMAResponseType, desc="...", default="DMAResponseType_NULL") { NULL, desc="Invalid"; } -structure(DMARequestMsg, desc="...", interface="NetworkMessage") { +structure(DMARequestMsg, desc="...", interface="Message") { DMARequestType Type, desc="Request type (read/write)"; Address PhysicalAddress, desc="Physical address for this request"; Address LineAddress, desc="Line address for this request"; @@ -183,7 +183,7 @@ structure(DMARequestMsg, desc="...", interface="NetworkMessage") { } } -structure(DMAResponseMsg, desc="...", interface="NetworkMessage") { +structure(DMAResponseMsg, desc="...", interface="Message") { DMAResponseType Type, desc="Response type (DATA/ACK)"; Address PhysicalAddress, desc="Physical address for this request"; Address LineAddress, desc="Line address for this request"; diff --git a/src/mem/protocol/Network_test-msg.sm b/src/mem/protocol/Network_test-msg.sm index d40e74f5f..b4d788823 100644 --- a/src/mem/protocol/Network_test-msg.sm +++ b/src/mem/protocol/Network_test-msg.sm @@ -33,7 +33,7 @@ enumeration(CoherenceRequestType, desc="...") { } // RequestMsg (and also forwarded requests) -structure(RequestMsg, desc="...", interface="NetworkMessage") { +structure(RequestMsg, desc="...", interface="Message") { Address Addr, desc="Physical address for this request"; CoherenceRequestType Type, desc="Type of request (GetS, GetX, PutX, etc)"; MachineID Requestor, desc="Node who initiated the request"; diff --git a/src/mem/protocol/RubySlicc_Exports.sm b/src/mem/protocol/RubySlicc_Exports.sm index 4162800c5..b2a8bcb00 100644 --- a/src/mem/protocol/RubySlicc_Exports.sm +++ b/src/mem/protocol/RubySlicc_Exports.sm @@ -219,6 +219,7 @@ structure(SequencerMsg, desc="...", interface="Message") { DataBlock DataBlk, desc="Data"; int Len, desc="size in bytes of access"; PrefetchBit Prefetch, desc="Is this a prefetch request"; + MessageSizeType MessageSize; bool functionalRead(Packet *pkt) { return testAndRead(PhysicalAddress, DataBlk, pkt); diff --git a/src/mem/ruby/SConscript b/src/mem/ruby/SConscript index 8133820b9..091f55060 100644 --- a/src/mem/ruby/SConscript +++ b/src/mem/ruby/SConscript @@ -111,7 +111,6 @@ def MakeInclude(source): MakeInclude('slicc_interface/AbstractEntry.hh') MakeInclude('slicc_interface/AbstractCacheEntry.hh') MakeInclude('slicc_interface/Message.hh') -MakeInclude('slicc_interface/NetworkMessage.hh') MakeInclude('slicc_interface/RubyRequest.hh') # External types diff --git a/src/mem/ruby/common/NetDest.hh b/src/mem/ruby/common/NetDest.hh index 9914ca218..e09be0c2c 100644 --- a/src/mem/ruby/common/NetDest.hh +++ b/src/mem/ruby/common/NetDest.hh @@ -26,7 +26,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -// NetDest specifies the network destination of a NetworkMessage +// NetDest specifies the network destination of a Message // This is backward compatible with the Set class that was previously // used to specify network destinations. // NetDest supports both node networks and component networks diff --git a/src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.cc b/src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.cc index 47ded231c..c7bd6178a 100644 --- a/src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.cc +++ b/src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.cc @@ -37,7 +37,7 @@ #include "mem/ruby/network/MessageBuffer.hh" #include "mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.hh" #include "mem/ruby/network/garnet/fixed-pipeline/flitBuffer_d.hh" -#include "mem/ruby/slicc_interface/NetworkMessage.hh" +#include "mem/ruby/slicc_interface/Message.hh" using namespace std; using m5::stl_helpers::deletePointers; @@ -129,8 +129,8 @@ NetworkInterface_d::addNode(vector& in, bool NetworkInterface_d::flitisizeMessage(MsgPtr msg_ptr, int vnet) { - NetworkMessage *net_msg_ptr = safe_cast(msg_ptr.get()); - NetDest net_msg_dest = net_msg_ptr->getInternalDestination(); + Message *net_msg_ptr = msg_ptr.get(); + NetDest net_msg_dest = net_msg_ptr->getDestination(); // gets all the destinations associated with this message. vector dest_nodes = net_msg_dest.getAllDest(); @@ -152,8 +152,7 @@ NetworkInterface_d::flitisizeMessage(MsgPtr msg_ptr, int vnet) MsgPtr new_msg_ptr = msg_ptr->clone(); NodeID destID = dest_nodes[ctr]; - NetworkMessage *new_net_msg_ptr = - safe_cast(new_msg_ptr.get()); + Message *new_net_msg_ptr = new_msg_ptr.get(); if (dest_nodes.size() > 1) { NetDest personal_dest; for (int m = 0; m < (int) MachineType_NUM; m++) { @@ -163,7 +162,7 @@ NetworkInterface_d::flitisizeMessage(MsgPtr msg_ptr, int vnet) personal_dest.clear(); personal_dest.add((MachineID) {(MachineType) m, (destID - MachineType_base_number((MachineType) m))}); - new_net_msg_ptr->getInternalDestination() = personal_dest; + new_net_msg_ptr->getDestination() = personal_dest; break; } } @@ -171,7 +170,7 @@ NetworkInterface_d::flitisizeMessage(MsgPtr msg_ptr, int vnet) // removing the destination from the original message to reflect // that a message with this particular destination has been // flitisized and an output vc is acquired - net_msg_ptr->getInternalDestination().removeNetDest(personal_dest); + net_msg_ptr->getDestination().removeNetDest(personal_dest); } for (int i = 0; i < num_flits; i++) { diff --git a/src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.hh b/src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.hh index 0cb928d82..812e8b7fb 100644 --- a/src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.hh +++ b/src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.hh @@ -43,7 +43,6 @@ #include "mem/ruby/slicc_interface/Message.hh" #include "params/GarnetNetworkInterface_d.hh" -class NetworkMessage; class MessageBuffer; class flitBuffer_d; diff --git a/src/mem/ruby/network/garnet/fixed-pipeline/RoutingUnit_d.cc b/src/mem/ruby/network/garnet/fixed-pipeline/RoutingUnit_d.cc index e68c08613..8d8378738 100644 --- a/src/mem/ruby/network/garnet/fixed-pipeline/RoutingUnit_d.cc +++ b/src/mem/ruby/network/garnet/fixed-pipeline/RoutingUnit_d.cc @@ -32,7 +32,7 @@ #include "mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.hh" #include "mem/ruby/network/garnet/fixed-pipeline/Router_d.hh" #include "mem/ruby/network/garnet/fixed-pipeline/RoutingUnit_d.hh" -#include "mem/ruby/slicc_interface/NetworkMessage.hh" +#include "mem/ruby/slicc_interface/Message.hh" RoutingUnit_d::RoutingUnit_d(Router_d *router) { @@ -66,8 +66,8 @@ int RoutingUnit_d::routeCompute(flit_d *t_flit) { MsgPtr msg_ptr = t_flit->get_msg_ptr(); - NetworkMessage* net_msg_ptr = safe_cast(msg_ptr.get()); - NetDest msg_destination = net_msg_ptr->getInternalDestination(); + Message *net_msg_ptr = msg_ptr.get(); + NetDest msg_destination = net_msg_ptr->getDestination(); int output_link = -1; int min_weight = INFINITE_; diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc b/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc index 32066f0e1..d834ea1a3 100644 --- a/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc +++ b/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc @@ -37,7 +37,7 @@ #include "mem/ruby/network/MessageBuffer.hh" #include "mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.hh" #include "mem/ruby/network/garnet/flexible-pipeline/flitBuffer.hh" -#include "mem/ruby/slicc_interface/NetworkMessage.hh" +#include "mem/ruby/slicc_interface/Message.hh" using namespace std; using m5::stl_helpers::deletePointers; @@ -120,8 +120,8 @@ NetworkInterface::request_vc(int in_vc, int in_port, NetDest destination, bool NetworkInterface::flitisizeMessage(MsgPtr msg_ptr, int vnet) { - NetworkMessage *net_msg_ptr = safe_cast(msg_ptr.get()); - NetDest net_msg_dest = net_msg_ptr->getInternalDestination(); + Message *net_msg_ptr = msg_ptr.get(); + NetDest net_msg_dest = net_msg_ptr->getDestination(); // get all the destinations associated with this message. vector dest_nodes = net_msg_dest.getAllDest(); @@ -143,8 +143,7 @@ NetworkInterface::flitisizeMessage(MsgPtr msg_ptr, int vnet) MsgPtr new_msg_ptr = msg_ptr->clone(); NodeID destID = dest_nodes[ctr]; - NetworkMessage *new_net_msg_ptr = - safe_cast(new_msg_ptr.get()); + Message *new_net_msg_ptr = new_msg_ptr.get(); if (dest_nodes.size() > 1) { NetDest personal_dest; for (int m = 0; m < (int) MachineType_NUM; m++) { @@ -154,7 +153,7 @@ NetworkInterface::flitisizeMessage(MsgPtr msg_ptr, int vnet) personal_dest.clear(); personal_dest.add((MachineID) {(MachineType) m, (destID - MachineType_base_number((MachineType) m))}); - new_net_msg_ptr->getInternalDestination() = personal_dest; + new_net_msg_ptr->getDestination() = personal_dest; break; } } @@ -163,7 +162,7 @@ NetworkInterface::flitisizeMessage(MsgPtr msg_ptr, int vnet) // removing the destination from the original message to reflect // that a message with this particular destination has been // flitisized and an output vc is acquired - net_msg_ptr->getInternalDestination().removeNetDest(personal_dest); + net_msg_ptr->getDestination().removeNetDest(personal_dest); } for (int i = 0; i < num_flits; i++) { m_net_ptr->increment_injected_flits(vnet); @@ -179,7 +178,7 @@ NetworkInterface::flitisizeMessage(MsgPtr msg_ptr, int vnet) // This flit will be ready to traverse the link and into the next hop // only when an output vc is acquired at the next hop outNetLink->request_vc_link( - vc, new_net_msg_ptr->getInternalDestination(), curCycle()); + vc, new_net_msg_ptr->getDestination(), curCycle()); } return true ; diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.hh b/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.hh index 03cdf3dc6..9207c353a 100644 --- a/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.hh +++ b/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.hh @@ -42,7 +42,6 @@ #include "mem/ruby/slicc_interface/Message.hh" #include "params/GarnetNetworkInterface.hh" -class NetworkMessage; class MessageBuffer; class flitBuffer; diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/Router.cc b/src/mem/ruby/network/garnet/flexible-pipeline/Router.cc index 0fc2c6be3..ef985058e 100644 --- a/src/mem/ruby/network/garnet/flexible-pipeline/Router.cc +++ b/src/mem/ruby/network/garnet/flexible-pipeline/Router.cc @@ -35,7 +35,7 @@ #include "mem/ruby/network/garnet/flexible-pipeline/OutVcState.hh" #include "mem/ruby/network/garnet/flexible-pipeline/Router.hh" #include "mem/ruby/network/garnet/flexible-pipeline/VCarbiter.hh" -#include "mem/ruby/slicc_interface/NetworkMessage.hh" +#include "mem/ruby/slicc_interface/Message.hh" using namespace std; using m5::stl_helpers::deletePointers; @@ -277,9 +277,8 @@ Router::routeCompute(flit *m_flit, int inport) scheduleEvent(Cycles(m_net_ptr->getNumPipeStages() - 1)); if ((m_flit->get_type() == HEAD_) || (m_flit->get_type() == HEAD_TAIL_)) { - NetworkMessage *nm = - safe_cast(m_flit->get_msg_ptr().get()); - NetDest destination = nm->getInternalDestination(); + Message *nm = m_flit->get_msg_ptr().get(); + NetDest destination = nm->getDestination(); if (m_net_ptr->getNumPipeStages() > 1) { m_out_vc_state[outport][outvc]->setState(VC_AB_, curCycle() + diff --git a/src/mem/ruby/network/simple/PerfectSwitch.cc b/src/mem/ruby/network/simple/PerfectSwitch.cc index 86cafbe15..06072724e 100644 --- a/src/mem/ruby/network/simple/PerfectSwitch.cc +++ b/src/mem/ruby/network/simple/PerfectSwitch.cc @@ -35,7 +35,7 @@ #include "mem/ruby/network/simple/PerfectSwitch.hh" #include "mem/ruby/network/simple/SimpleNetwork.hh" #include "mem/ruby/network/simple/Switch.hh" -#include "mem/ruby/slicc_interface/NetworkMessage.hh" +#include "mem/ruby/slicc_interface/Message.hh" using namespace std; @@ -112,7 +112,7 @@ void PerfectSwitch::operateVnet(int vnet) { MsgPtr msg_ptr; - NetworkMessage* net_msg_ptr = NULL; + Message *net_msg_ptr = NULL; // This is for round-robin scheduling int incoming = m_round_robin_start; @@ -149,12 +149,12 @@ PerfectSwitch::operateVnet(int vnet) // Peek at message msg_ptr = buffer->peekMsgPtr(); - net_msg_ptr = safe_cast(msg_ptr.get()); + net_msg_ptr = msg_ptr.get(); DPRINTF(RubyNetwork, "Message: %s\n", (*net_msg_ptr)); output_links.clear(); output_link_destinations.clear(); - NetDest msg_dsts = net_msg_ptr->getInternalDestination(); + NetDest msg_dsts = net_msg_ptr->getDestination(); // Unfortunately, the token-protocol sends some // zero-destination messages, so this assert isn't valid @@ -264,8 +264,8 @@ PerfectSwitch::operateVnet(int vnet) // Change the internal destination set of the message so it // knows which destinations this link is responsible for. - net_msg_ptr = safe_cast(msg_ptr.get()); - net_msg_ptr->getInternalDestination() = + net_msg_ptr = msg_ptr.get(); + net_msg_ptr->getDestination() = output_link_destinations[i]; // Enqeue msg diff --git a/src/mem/ruby/network/simple/Throttle.cc b/src/mem/ruby/network/simple/Throttle.cc index 2da810edb..d722c91ea 100644 --- a/src/mem/ruby/network/simple/Throttle.cc +++ b/src/mem/ruby/network/simple/Throttle.cc @@ -34,7 +34,7 @@ #include "mem/ruby/network/simple/Throttle.hh" #include "mem/ruby/network/MessageBuffer.hh" #include "mem/ruby/network/Network.hh" -#include "mem/ruby/slicc_interface/NetworkMessage.hh" +#include "mem/ruby/slicc_interface/Message.hh" #include "mem/ruby/system/System.hh" using namespace std; @@ -44,7 +44,7 @@ const int MESSAGE_SIZE_MULTIPLIER = 1000; const int BROADCAST_SCALING = 1; const int PRIORITY_SWITCH_LIMIT = 128; -static int network_message_to_size(NetworkMessage* net_msg_ptr); +static int network_message_to_size(Message* net_msg_ptr); Throttle::Throttle(int sID, NodeID node, Cycles link_latency, int link_bandwidth_multiplier, int endpoint_bandwidth, @@ -121,8 +121,7 @@ Throttle::operateVnet(int vnet, int &bw_remaining, bool &schedule_wakeup, if (m_units_remaining[vnet] == 0 && in->isReady()) { // Find the size of the message we are moving MsgPtr msg_ptr = in->peekMsgPtr(); - NetworkMessage* net_msg_ptr = - safe_cast(msg_ptr.get()); + Message *net_msg_ptr = msg_ptr.get(); m_units_remaining[vnet] += network_message_to_size(net_msg_ptr); @@ -257,7 +256,7 @@ Throttle::print(ostream& out) const } int -network_message_to_size(NetworkMessage* net_msg_ptr) +network_message_to_size(Message *net_msg_ptr) { assert(net_msg_ptr != NULL); diff --git a/src/mem/ruby/slicc_interface/Message.hh b/src/mem/ruby/slicc_interface/Message.hh index ea33c1340..5d8ed9711 100644 --- a/src/mem/ruby/slicc_interface/Message.hh +++ b/src/mem/ruby/slicc_interface/Message.hh @@ -34,6 +34,8 @@ #include #include "mem/packet.hh" +#include "mem/protocol/MessageSizeType.hh" +#include "mem/ruby/common/NetDest.hh" class Message; typedef std::shared_ptr MsgPtr; @@ -58,8 +60,11 @@ class Message virtual MsgPtr clone() const = 0; virtual void print(std::ostream& out) const = 0; - virtual void setIncomingLink(int) {} - virtual void setVnet(int) {} + + virtual const MessageSizeType& getMessageSize() const + { panic("MessageSizeType() called on wrong message!"); } + virtual MessageSizeType& getMessageSize() + { panic("MessageSizeType() called on wrong message!"); } /** * The two functions below are used for reading / writing the message @@ -87,11 +92,26 @@ class Message void setMsgCounter(uint64_t c) { m_msg_counter = c; } uint64_t getMsgCounter() const { return m_msg_counter; } + // Functions related to network traversal + virtual const NetDest& getDestination() const + { panic("getDestination() called on wrong message!"); } + virtual NetDest& getDestination() + { panic("getDestination() called on wrong message!"); } + + int getIncomingLink() const { return incoming_link; } + void setIncomingLink(int link) { incoming_link = link; } + int getVnet() const { return vnet; } + void setVnet(int net) { vnet = net; } + private: const Tick m_time; Tick m_LastEnqueueTime; // my last enqueue time Tick m_DelayedTicks; // my delayed cycles uint64_t m_msg_counter; // FIXME, should this be a 64-bit value? + + // Variables for required network traversal + int incoming_link; + int vnet; }; inline bool diff --git a/src/mem/ruby/slicc_interface/NetworkMessage.hh b/src/mem/ruby/slicc_interface/NetworkMessage.hh deleted file mode 100644 index 1b5edcfcd..000000000 --- a/src/mem/ruby/slicc_interface/NetworkMessage.hh +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __MEM_RUBY_SLICC_INTERFACE_NETWORKMESSAGE_HH__ -#define __MEM_RUBY_SLICC_INTERFACE_NETWORKMESSAGE_HH__ - -#include -#include - -#include "mem/protocol/MessageSizeType.hh" -#include "mem/ruby/common/NetDest.hh" -#include "mem/ruby/slicc_interface/Message.hh" - -class NetworkMessage; -typedef std::shared_ptr NetMsgPtr; - -class NetworkMessage : public Message -{ - public: - NetworkMessage(Tick curTime) - : Message(curTime), m_internal_dest_valid(false) - { } - - NetworkMessage(const NetworkMessage &other) - : Message(other), m_internal_dest(other.m_internal_dest), - m_internal_dest_valid(other.m_internal_dest_valid) - { } - - virtual ~NetworkMessage() { } - - virtual const NetDest& getDestination() const = 0; - virtual NetDest& getDestination() = 0; - virtual const MessageSizeType& getMessageSize() const = 0; - virtual MessageSizeType& getMessageSize() = 0; - - const NetDest& - getInternalDestination() const - { - if (!m_internal_dest_valid) - return getDestination(); - - return m_internal_dest; - } - - NetDest& - getInternalDestination() - { - if (!m_internal_dest_valid) { - m_internal_dest = getDestination(); - m_internal_dest_valid = true; - } - return m_internal_dest; - } - - virtual void print(std::ostream& out) const = 0; - - int getIncomingLink() const { return incoming_link; } - void setIncomingLink(int link) { incoming_link = link; } - int getVnet() const { return vnet; } - void setVnet(int net) { vnet = net; } - - private: - NetDest m_internal_dest; - bool m_internal_dest_valid; - int incoming_link; - int vnet; -}; - -inline std::ostream& -operator<<(std::ostream& out, const NetworkMessage& obj) -{ - obj.print(out); - out << std::flush; - return out; -} - -#endif // __MEM_RUBY_SLICC_INTERFACE_NETWORKMESSAGE_HH__ diff --git a/src/mem/ruby/structures/RubyMemoryControl.cc b/src/mem/ruby/structures/RubyMemoryControl.cc index adf3dcc53..7e07a82bc 100644 --- a/src/mem/ruby/structures/RubyMemoryControl.cc +++ b/src/mem/ruby/structures/RubyMemoryControl.cc @@ -112,7 +112,7 @@ #include "mem/ruby/common/Address.hh" #include "mem/ruby/common/Global.hh" #include "mem/ruby/profiler/Profiler.hh" -#include "mem/ruby/slicc_interface/NetworkMessage.hh" +#include "mem/ruby/slicc_interface/Message.hh" #include "mem/ruby/slicc_interface/RubySlicc_ComponentMapping.hh" #include "mem/ruby/structures/RubyMemoryControl.hh" #include "mem/ruby/system/System.hh" diff --git a/src/mem/slicc/ast/AssignStatementAST.py b/src/mem/slicc/ast/AssignStatementAST.py index 042204925..b95979354 100644 --- a/src/mem/slicc/ast/AssignStatementAST.py +++ b/src/mem/slicc/ast/AssignStatementAST.py @@ -47,11 +47,10 @@ class AssignStatementAST(StatementAST): if not (ltype == rtype or (ltype.isInterface and ltype['interface'] == rtype.ident)): # FIXME - beckmann - # the following if statement is a hack to allow NetDest - # objects to be assigned to Sets this allows for the - # previous NetworkMessage Destiantion 'Set class' to - # migrate to the new NetworkMessage Destiantion 'NetDest - # class' + # the following if statement is a hack to allow NetDest objects to + # be assigned to Sets this allows for the previous Message + # Destination 'Set class' to migrate to the new Message Destination + # 'NetDest class' if str(ltype) != "NetDest" and str(rtype) != "Set": self.error("Assignment type mismatch '%s' and '%s'", ltype, rtype) diff --git a/src/mem/slicc/symbols/Type.py b/src/mem/slicc/symbols/Type.py index 2afd9958c..e6e704000 100644 --- a/src/mem/slicc/symbols/Type.py +++ b/src/mem/slicc/symbols/Type.py @@ -61,10 +61,8 @@ class Type(Symbol): # check for interface that this Type implements if "interface" in self: interface = self["interface"] - if interface in ("Message", "NetworkMessage"): + if interface in ("Message"): self["message"] = "yes" - if interface == "NetworkMessage": - self["networkmessage"] = "yes" # FIXME - all of the following id comparisons are fragile hacks if self.ident in ("CacheMemory"): @@ -97,9 +95,7 @@ class Type(Symbol): @property def isPrimitive(self): return "primitive" in self - @property - def isNetworkMessage(self): - return "networkmessage" in self + @property def isMessage(self): return "message" in self -- cgit v1.2.3