From 2d3cae02f5d4a6c1f116f922d0ee3dde9e9dcc77 Mon Sep 17 00:00:00 2001 From: Nilay Vaish Date: Wed, 11 Jan 2012 13:39:58 -0600 Subject: Ruby Port: Add a list of cpu ports attached to this port --- src/mem/ruby/system/RubyPort.hh | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/mem/ruby/system/RubyPort.hh') diff --git a/src/mem/ruby/system/RubyPort.hh b/src/mem/ruby/system/RubyPort.hh index 88e865766..0160d8fc8 100644 --- a/src/mem/ruby/system/RubyPort.hh +++ b/src/mem/ruby/system/RubyPort.hh @@ -148,6 +148,10 @@ class RubyPort : public MemObject M5Port* physMemPort; + /*! Vector of CPU Port attached to this Ruby port. */ + typedef std::vector::iterator CpuPortIter; + std::vector cpu_ports; + PhysicalMemory* physmem; RubySystem* ruby_system; -- cgit v1.2.3 From bf59a9298f6154cb85ebebabd4f45738caf29b35 Mon Sep 17 00:00:00 2001 From: Nilay Vaish Date: Wed, 11 Jan 2012 13:48:48 -0600 Subject: Ruby: Resurrect Cache Warmup Capability This patch resurrects ruby's cache warmup capability. It essentially makes use of all the infrastructure that was added to the controllers, memories and the cache recorder. --- src/mem/ruby/system/RubyPort.hh | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'src/mem/ruby/system/RubyPort.hh') diff --git a/src/mem/ruby/system/RubyPort.hh b/src/mem/ruby/system/RubyPort.hh index 0160d8fc8..d8dbe0cda 100644 --- a/src/mem/ruby/system/RubyPort.hh +++ b/src/mem/ruby/system/RubyPort.hh @@ -33,7 +33,6 @@ #include #include "mem/protocol/RequestStatus.hh" -#include "mem/ruby/slicc_interface/RubyRequest.hh" #include "mem/ruby/system/System.hh" #include "mem/mem_object.hh" #include "mem/physical.hh" @@ -115,17 +114,23 @@ class RubyPort : public MemObject Port *getPort(const std::string &if_name, int idx); virtual RequestStatus makeRequest(PacketPtr pkt) = 0; + virtual int outstandingCount() const = 0; + virtual bool isDeadlockEventScheduled() const = 0; + virtual void descheduleDeadlockEvent() = 0; // // Called by the controller to give the sequencer a pointer. // A pointer to the controller is needed for atomic support. // void setController(AbstractController* _cntrl) { m_controller = _cntrl; } + int getId() { return m_version; } + unsigned int drain(Event *de); protected: const std::string m_name; void ruby_hit_callback(PacketPtr pkt); void hit(PacketPtr pkt); + void testDrainComplete(); int m_version; AbstractController* m_controller; @@ -143,6 +148,8 @@ class RubyPort : public MemObject } } + unsigned int getDrainCount(Event *de); + uint16_t m_port_id; uint64_t m_request_cnt; @@ -152,6 +159,8 @@ class RubyPort : public MemObject typedef std::vector::iterator CpuPortIter; std::vector cpu_ports; + Event *drainEvent; + PhysicalMemory* physmem; RubySystem* ruby_system; -- cgit v1.2.3