changeset c7e14f52c682 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=c7e14f52c682
description:
        MEM: Separate queries for snooping and address ranges

        This patch simplifies the address-range determination mechanism and
        also unifies the naming across ports and devices. It further splits
        the queries for determining if a port is snooping and what address
        ranges it responds to (aiming towards a separation of
        cache-maintenance ports and pure memory-mapped ports). Default
        behaviours are such that most ports do not have to define isSnooping,
        and master ports need not implement getAddrRanges.

diffstat:

 src/arch/x86/interrupts.cc                 |  22 ++++---
 src/arch/x86/interrupts.hh                 |   4 +-
 src/arch/x86/pagetable_walker.cc           |  11 +---
 src/arch/x86/pagetable_walker.hh           |  14 +----
 src/cpu/base.cc                            |  19 +------
 src/cpu/base.hh                            |  19 +------
 src/cpu/inorder/resources/cache_unit.cc    |  11 +---
 src/cpu/inorder/resources/cache_unit.hh    |  13 +---
 src/cpu/o3/cpu.hh                          |   8 +-
 src/cpu/ozone/front_end.hh                 |   9 +--
 src/cpu/ozone/front_end_impl.hh            |   6 +-
 src/cpu/ozone/lw_lsq.hh                    |  10 ++-
 src/cpu/ozone/lw_lsq_impl.hh               |   6 +-
 src/cpu/simple/atomic.cc                   |   4 +-
 src/cpu/testers/memtest/memtest.cc         |  14 +----
 src/cpu/testers/memtest/memtest.hh         |  10 +---
 src/cpu/testers/networktest/networktest.cc |  13 +----
 src/cpu/testers/networktest/networktest.hh |  10 +---
 src/dev/arm/gic.cc                         |  11 ++-
 src/dev/arm/gic.hh                         |   2 +-
 src/dev/arm/pl111.cc                       |   9 +-
 src/dev/arm/pl111.hh                       |   8 +-
 src/dev/copy_engine.hh                     |   1 -
 src/dev/io_device.cc                       |  22 +++----
 src/dev/io_device.hh                       |  45 +++++++---------
 src/dev/pciconfigall.cc                    |   9 +-
 src/dev/pciconfigall.hh                    |   2 +-
 src/dev/pcidev.cc                          |  25 ++++----
 src/dev/pcidev.hh                          |  11 ++-
 src/dev/sinic.cc                           |   2 +-
 src/dev/sparc/iob.cc                       |  11 ++-
 src/dev/sparc/iob.hh                       |   2 +-
 src/dev/uart8250.cc                        |  12 +--
 src/dev/uart8250.hh                        |   2 +-
 src/dev/x86/i8042.cc                       |  11 ++-
 src/dev/x86/i8042.hh                       |   2 +-
 src/dev/x86/i82094aa.hh                    |  20 ++++---
 src/dev/x86/intdev.cc                      |   2 +-
 src/dev/x86/intdev.hh                      |   9 +-
 src/kern/tru64/tru64_events.cc             |   4 +-
 src/mem/bridge.cc                          |  18 ++---
 src/mem/bridge.hh                          |  10 +-
 src/mem/bus.cc                             |  82 ++++++++++++++++-------------
 src/mem/bus.hh                             |  59 ++++++++++++++++-----
 src/mem/cache/base.cc                      |   8 +-
 src/mem/cache/base.hh                      |   2 +-
 src/mem/cache/cache.hh                     |   6 +-
 src/mem/cache/cache_impl.hh                |  16 ++--
 src/mem/physical.cc                        |  30 ++++------
 src/mem/physical.hh                        |   8 +-
 src/mem/port.hh                            |  73 +++++++++++++++----------
 src/mem/ruby/system/RubyPort.cc            |   5 +-
 src/mem/tport.hh                           |  11 ++-
 src/sim/system.hh                          |   8 ++-
 54 files changed, 345 insertions(+), 416 deletions(-)

diffs (truncated from 1753 to 300 lines):

diff -r aab813d6a162 -r c7e14f52c682 src/arch/x86/interrupts.cc
--- a/src/arch/x86/interrupts.cc        Tue Jan 17 12:55:09 2012 -0600
+++ b/src/arch/x86/interrupts.cc        Tue Jan 17 12:55:09 2012 -0600
@@ -353,25 +353,27 @@
 }
 
 
-void
-X86ISA::Interrupts::addressRanges(AddrRangeList &range_list)
+AddrRangeList
+X86ISA::Interrupts::getAddrRanges()
 {
-    range_list.clear();
+    AddrRangeList ranges;
     Range<Addr> range = RangeEx(x86LocalAPICAddress(initialApicId, 0),
                                 x86LocalAPICAddress(initialApicId, 0) + 
                                 PageBytes);
-    range_list.push_back(range);
+    ranges.push_back(range);
     pioAddr = range.start;
+    return ranges;
 }
 
 
-void
-X86ISA::Interrupts::getIntAddrRange(AddrRangeList &range_list)
+AddrRangeList
+X86ISA::Interrupts::getIntAddrRange()
 {
-    range_list.clear();
-    range_list.push_back(RangeEx(x86InterruptAddress(initialApicId, 0),
-                x86InterruptAddress(initialApicId, 0) +
-                PhysAddrAPICRangeSize));
+    AddrRangeList ranges;
+    ranges.push_back(RangeEx(x86InterruptAddress(initialApicId, 0),
+                             x86InterruptAddress(initialApicId, 0) +
+                             PhysAddrAPICRangeSize));
+    return ranges;
 }
 
 
diff -r aab813d6a162 -r c7e14f52c682 src/arch/x86/interrupts.hh
--- a/src/arch/x86/interrupts.hh        Tue Jan 17 12:55:09 2012 -0600
+++ b/src/arch/x86/interrupts.hh        Tue Jan 17 12:55:09 2012 -0600
@@ -217,8 +217,8 @@
         return entry.periodic;
     }
 
-    void addressRanges(AddrRangeList &range_list);
-    void getIntAddrRange(AddrRangeList &range_list);
+    AddrRangeList getAddrRanges();
+    AddrRangeList getIntAddrRange();
 
     Port *getPort(const std::string &if_name, int idx = -1)
     {
diff -r aab813d6a162 -r c7e14f52c682 src/arch/x86/pagetable_walker.cc
--- a/src/arch/x86/pagetable_walker.cc  Tue Jan 17 12:55:09 2012 -0600
+++ b/src/arch/x86/pagetable_walker.cc  Tue Jan 17 12:55:09 2012 -0600
@@ -154,17 +154,8 @@
 }
 
 void
-Walker::WalkerPort::recvStatusChange(Status status)
+Walker::WalkerPort::recvRangeChange()
 {
-    if (status == RangeChange) {
-        if (!snoopRangeSent) {
-            snoopRangeSent = true;
-            sendStatusChange(Port::RangeChange);
-        }
-        return;
-    }
-
-    panic("Unexpected recvStatusChange.\n");
 }
 
 void
diff -r aab813d6a162 -r c7e14f52c682 src/arch/x86/pagetable_walker.hh
--- a/src/arch/x86/pagetable_walker.hh  Tue Jan 17 12:55:09 2012 -0600
+++ b/src/arch/x86/pagetable_walker.hh  Tue Jan 17 12:55:09 2012 -0600
@@ -63,26 +63,18 @@
         {
           public:
             WalkerPort(const std::string &_name, Walker * _walker) :
-                  Port(_name, _walker), walker(_walker),
-                  snoopRangeSent(false)
+                  Port(_name, _walker), walker(_walker)
             {}
 
           protected:
             Walker * walker;
 
-            bool snoopRangeSent;
-
             bool recvTiming(PacketPtr pkt);
             Tick recvAtomic(PacketPtr pkt);
             void recvFunctional(PacketPtr pkt);
-            void recvStatusChange(Status status);
+            void recvRangeChange();
             void recvRetry();
-            void getDeviceAddressRanges(AddrRangeList &resp,
-                    bool &snoop)
-            {
-                resp.clear();
-                snoop = true;
-            }
+            bool isSnooping() { return true; }
         };
 
         friend class WalkerPort;
diff -r aab813d6a162 -r c7e14f52c682 src/cpu/base.cc
--- a/src/cpu/base.cc   Tue Jan 17 12:55:09 2012 -0600
+++ b/src/cpu/base.cc   Tue Jan 17 12:55:09 2012 -0600
@@ -527,23 +527,6 @@
 }
 
 void
-BaseCPU::CpuPort::recvStatusChange(Status status)
+BaseCPU::CpuPort::recvRangeChange()
 {
-    if (status == RangeChange) {
-        if (!snoopRangeSent) {
-            snoopRangeSent = true;
-            sendStatusChange(Port::RangeChange);
-        }
-        return;
-    }
-
-    panic("BaseCPU doesn't expect recvStatusChange callback!");
 }
-
-void
-BaseCPU::CpuPort::getDeviceAddressRanges(AddrRangeList& resp,
-                                         bool& snoop)
-{
-    resp.clear();
-    snoop = false;
-}
diff -r aab813d6a162 -r c7e14f52c682 src/cpu/base.hh
--- a/src/cpu/base.hh   Tue Jan 17 12:55:09 2012 -0600
+++ b/src/cpu/base.hh   Tue Jan 17 12:55:09 2012 -0600
@@ -126,7 +126,7 @@
          * @param _name structural owner of this port
          */
         CpuPort(const std::string& _name, MemObject* _owner) :
-            Port(_name, _owner), snoopRangeSent(false)
+            Port(_name, _owner)
         { }
 
       protected:
@@ -139,22 +139,7 @@
 
         void recvFunctional(PacketPtr pkt);
 
-        void recvStatusChange(Status status);
-
-        /**
-         * Add CPU ports are master ports and do not respond to any
-         * address ranges. Note that the LSQ snoops for specific ISAs
-         * and thus has to override this method.
-         *
-         * @param resp list of ranges this port responds to
-         * @param snoop indicating if the port snoops or not
-         */
-        virtual void getDeviceAddressRanges(AddrRangeList& resp,
-                                            bool& snoop);
-
-      private:
-
-        bool snoopRangeSent;
+        void recvRangeChange();
 
     };
 
diff -r aab813d6a162 -r c7e14f52c682 src/cpu/inorder/resources/cache_unit.cc
--- a/src/cpu/inorder/resources/cache_unit.cc   Tue Jan 17 12:55:09 2012 -0600
+++ b/src/cpu/inorder/resources/cache_unit.cc   Tue Jan 17 12:55:09 2012 -0600
@@ -82,17 +82,8 @@
 }
 
 void
-CacheUnit::CachePort::recvStatusChange(Status status)
+CacheUnit::CachePort::recvRangeChange()
 {
-    if (status == RangeChange) {
-        if (!snoopRangeSent) {
-            snoopRangeSent = true;
-            sendStatusChange(Port::RangeChange);
-        }
-        return;
-    }
-
-    panic("CacheUnit::CachePort doesn't expect recvStatusChange callback!");
 }
 
 bool
diff -r aab813d6a162 -r c7e14f52c682 src/cpu/inorder/resources/cache_unit.hh
--- a/src/cpu/inorder/resources/cache_unit.hh   Tue Jan 17 12:55:09 2012 -0600
+++ b/src/cpu/inorder/resources/cache_unit.hh   Tue Jan 17 12:55:09 2012 -0600
@@ -90,11 +90,9 @@
         CachePort(CacheUnit *_cachePortUnit)
           : Port(_cachePortUnit->name() + "-cache-port",
                  (MemObject*)_cachePortUnit->cpu),
-            cachePortUnit(_cachePortUnit), snoopRangeSent(false)
+            cachePortUnit(_cachePortUnit)
         { }
 
-        bool snoopRangeSent;
-
       protected:
         /** Atomic version of receive.  Panics. */
         Tick recvAtomic(PacketPtr pkt);
@@ -102,13 +100,8 @@
         /** Functional version of receive.*/
         void recvFunctional(PacketPtr pkt);
 
-        /** Receives status change.  Other than range changing, panics. */
-        void recvStatusChange(Status status);
-
-        /** Returns the address ranges of this device. */
-        void getDeviceAddressRanges(AddrRangeList &resp,
-                                    bool &snoop)
-        {  resp.clear(); snoop = true; }
+        /** Receives range changes. */
+        void recvRangeChange();
 
         /** Timing version of receive */
         bool recvTiming(PacketPtr pkt);
diff -r aab813d6a162 -r c7e14f52c682 src/cpu/o3/cpu.hh
--- a/src/cpu/o3/cpu.hh Tue Jan 17 12:55:09 2012 -0600
+++ b/src/cpu/o3/cpu.hh Tue Jan 17 12:55:09 2012 -0600
@@ -186,12 +186,10 @@
          * As this CPU requires snooping to maintain the load store queue
          * change the behaviour from the base CPU port.
          *
-         * @param resp list of ranges this port responds to
-         * @param snoop indicating if the port snoops or not
+         * @return true since we have to snoop
          */
-        virtual void getDeviceAddressRanges(AddrRangeList& resp,
-                                            bool& snoop)
-        { resp.clear(); snoop = true; }
+        virtual bool isSnooping()
+        { return true; }
     };
 
     class TickEvent : public Event
diff -r aab813d6a162 -r c7e14f52c682 src/cpu/ozone/front_end.hh
--- a/src/cpu/ozone/front_end.hh        Tue Jan 17 12:55:09 2012 -0600
+++ b/src/cpu/ozone/front_end.hh        Tue Jan 17 12:55:09 2012 -0600
@@ -87,13 +87,8 @@
         /** Functional version of receive.  Panics. */
         virtual void recvFunctional(PacketPtr pkt);
 
-        /** Receives status change.  Other than range changing, panics. */
-        virtual void recvStatusChange(Status status);
-
-        /** Returns the address ranges of this device. */
-        virtual void getDeviceAddressRanges(AddrRangeList &resp,
-                                            bool &snoop)
-        { resp.clear(); snoop = true; }
+        /** Receives range change. */
+        virtual void recvRangeChange();
 
         /** Timing version of receive.  Handles setting fetch to the
          * proper status to start fetching. */
diff -r aab813d6a162 -r c7e14f52c682 src/cpu/ozone/front_end_impl.hh
--- a/src/cpu/ozone/front_end_impl.hh   Tue Jan 17 12:55:09 2012 -0600
+++ b/src/cpu/ozone/front_end_impl.hh   Tue Jan 17 12:55:09 2012 -0600
@@ -64,12 +64,8 @@
 
 template<class Impl>
 void
-FrontEnd<Impl>::IcachePort::recvStatusChange(Status status)
+FrontEnd<Impl>::IcachePort::recvRangeChange()
 {
-    if (status == RangeChange)
-        return;
-
-    panic("FrontEnd doesn't expect recvStatusChange callback!");
 }
 
 template<class Impl>
diff -r aab813d6a162 -r c7e14f52c682 src/cpu/ozone/lw_lsq.hh
--- a/src/cpu/ozone/lw_lsq.hh   Tue Jan 17 12:55:09 2012 -0600
+++ b/src/cpu/ozone/lw_lsq.hh   Tue Jan 17 12:55:09 2012 -0600
@@ -256,11 +256,13 @@
 
         virtual void recvFunctional(PacketPtr pkt);
 
-        virtual void recvStatusChange(Status status);
+        virtual void recvRangeChange();
 
-        virtual void getDeviceAddressRanges(AddrRangeList &resp,
-                                            bool &snoop)
-        { resp.clear(); snoop = true; }
+        /**
+         * Is a snooper due to LSQ maintenance
+         */
+        virtual bool isSnooping()
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to