summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLisa Hsu <Lisa.Hsu@amd.com>2011-03-31 17:17:47 -0700
committerLisa Hsu <Lisa.Hsu@amd.com>2011-03-31 17:17:47 -0700
commit225e67f5310f44cc8390c77dbb2c939c58c6b46e (patch)
tree34c0d9a93a7a99039e7cb644d3402f461b7c15e5
parentf6a0b63d7b5d6f5c85eb3af7086b86b753911173 (diff)
downloadgem5-225e67f5310f44cc8390c77dbb2c939c58c6b46e.tar.xz
Ruby: pass Packet->Req->contextId() to Ruby.
It is useful for Ruby to understand from whence request packets came. This has all request packets going into Ruby pass the contextId value, if it exists. This supplants the old libruby proc_id value passed around in all the Messages, so I've also removed the unused unsigned proc_id; member generated by SLICC for all Message types.
-rw-r--r--src/mem/protocol/RubySlicc_Types.sm1
-rw-r--r--src/mem/ruby/slicc_interface/RubyRequest.hh4
-rw-r--r--src/mem/ruby/system/Sequencer.cc4
-rw-r--r--src/mem/slicc/symbols/Type.py12
4 files changed, 6 insertions, 15 deletions
diff --git a/src/mem/protocol/RubySlicc_Types.sm b/src/mem/protocol/RubySlicc_Types.sm
index 118cbc2f0..add3d979b 100644
--- a/src/mem/protocol/RubySlicc_Types.sm
+++ b/src/mem/protocol/RubySlicc_Types.sm
@@ -117,6 +117,7 @@ structure(RubyRequest, desc="...", interface="Message", external="yes") {
RubyAccessMode AccessMode, desc="user/supervisor access type";
int Size, desc="size in bytes of access";
PrefetchBit Prefetch, desc="Is this a prefetch request";
+ int contextId, desc="this goes away but must be replace with Nilay";
}
external_type(AbstractEntry, primitive="yes");
diff --git a/src/mem/ruby/slicc_interface/RubyRequest.hh b/src/mem/ruby/slicc_interface/RubyRequest.hh
index 06ca0de1c..8ac43a8e1 100644
--- a/src/mem/ruby/slicc_interface/RubyRequest.hh
+++ b/src/mem/ruby/slicc_interface/RubyRequest.hh
@@ -52,7 +52,7 @@ class RubyRequest : public Message
PrefetchBit m_Prefetch;
uint8_t* data;
PacketPtr pkt;
- unsigned proc_id;
+ unsigned m_contextId;
RubyRequest() {}
RubyRequest(uint64_t _paddr, uint8_t* _data, int _len, uint64_t _pc,
@@ -67,7 +67,7 @@ class RubyRequest : public Message
m_Prefetch(_pb),
data(_data),
pkt(_pkt),
- proc_id(_proc_id)
+ m_contextId(_proc_id)
{
m_LineAddress = m_PhysicalAddress;
m_LineAddress.makeLineAddress();
diff --git a/src/mem/ruby/system/Sequencer.cc b/src/mem/ruby/system/Sequencer.cc
index 94ba6c2d3..94d41ffe4 100644
--- a/src/mem/ruby/system/Sequencer.cc
+++ b/src/mem/ruby/system/Sequencer.cc
@@ -671,11 +671,13 @@ Sequencer::issueRequest(const RubyRequest& request)
Address line_addr(request.m_PhysicalAddress);
line_addr.makeLineAddress();
+ int proc_id = request.pkt->req->hasContextId() ?
+ request.pkt->req->contextId() : -1;
RubyRequest *msg = new RubyRequest(request.m_PhysicalAddress.getAddress(),
request.data, request.m_Size,
request.m_ProgramCounter.getAddress(),
ctype, amtype, request.pkt,
- PrefetchBit_No, request.proc_id);
+ PrefetchBit_No, proc_id);
DPRINTFR(ProtocolTrace, "%7s %3s %10s%20s %6s>%-6s %s %s\n",
g_eventQueue_ptr->getTime(), m_version, "Seq", "Begin", "", "",
diff --git a/src/mem/slicc/symbols/Type.py b/src/mem/slicc/symbols/Type.py
index da9ecba3a..9aea286d7 100644
--- a/src/mem/slicc/symbols/Type.py
+++ b/src/mem/slicc/symbols/Type.py
@@ -261,9 +261,6 @@ $klass ${{self.c_ident}}$parent
for dm in self.data_members.values():
code('m_${{dm.ident}} = other.m_${{dm.ident}};')
- if self.isMessage:
- code('proc_id = other.proc_id;')
-
code.dedent()
code('}')
@@ -272,9 +269,6 @@ $klass ${{self.c_ident}}$parent
params = [ 'const %s& local_%s' % (dm.type.c_ident, dm.ident) \
for dm in self.data_members.itervalues() ]
- if self.isMessage:
- params.append('const unsigned local_proc_id')
-
params = ', '.join(params)
code('${{self.c_ident}}($params)')
@@ -289,9 +283,6 @@ $klass ${{self.c_ident}}$parent
if "nextLineCallHack" in dm:
code('m_${{dm.ident}}${{dm["nextLineCallHack"]}};')
- if self.isMessage:
- code('proc_id = local_proc_id;')
-
code.dedent()
code('}')
@@ -377,9 +368,6 @@ set${{dm.ident}}(const ${{dm.type.c_ident}}& local_${{dm.ident}})
code('$const${{dm.type.c_ident}} m_${{dm.ident}}$init;')
- if self.isMessage:
- code('unsigned proc_id;')
-
code.dedent()
code('};')