mem-cache: Move sector_blks to tags folder
authorDaniel R. Carvalho <odanrc@yahoo.com.br>
Thu, 11 Oct 2018 12:31:56 +0000 (14:31 +0200)
committerDaniel Carvalho <odanrc@yahoo.com.br>
Thu, 11 Oct 2018 13:24:53 +0000 (13:24 +0000)
Move sector_blks.hh and sector_blks.cc to the tags folder,
as its usage scope is restricted to the tags, and caches
should not be aware of them.

Change-Id: Ia7a71f51ec251d827872daf108c87da543a0ba57
Signed-off-by: Daniel R. Carvalho <odanrc@yahoo.com.br>
Reviewed-on: https://gem5-review.googlesource.com/c/13417
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>

src/mem/cache/SConscript
src/mem/cache/sector_blk.cc [deleted file]
src/mem/cache/sector_blk.hh [deleted file]
src/mem/cache/tags/SConscript
src/mem/cache/tags/sector_blk.cc [new file with mode: 0644]
src/mem/cache/tags/sector_blk.hh [new file with mode: 0644]
src/mem/cache/tags/sector_tags.hh

index 8a4602b869ebc4252eaa6b20af0af6f6818c98a7..1b2638e83253c4325e10c88a5f884920605019a5 100644 (file)
@@ -38,7 +38,6 @@ Source('cache_blk.cc')
 Source('mshr.cc')
 Source('mshr_queue.cc')
 Source('noncoherent_cache.cc')
-Source('sector_blk.cc')
 Source('write_queue.cc')
 Source('write_queue_entry.cc')
 
diff --git a/src/mem/cache/sector_blk.cc b/src/mem/cache/sector_blk.cc
deleted file mode 100644 (file)
index 5607f4c..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/**
- * Copyright (c) 2018 Inria
- * 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.
- *
- * Authors: Daniel Carvalho
- */
-
-/** @file
- * Implementation of a simple sector block class. Each sector consists of a
- * sequence of cache blocks that may or may not be present in the cache.
- */
-
-#include "mem/cache/sector_blk.hh"
-
-#include <cassert>
-
-#include "base/cprintf.hh"
-#include "base/logging.hh"
-
-void
-SectorSubBlk::setSectorBlock(SectorBlk* sector_blk)
-{
-    assert(sector_blk != nullptr);
-    _sectorBlk = sector_blk;
-}
-
-const SectorBlk*
-SectorSubBlk::getSectorBlock() const
-{
-    return _sectorBlk;
-}
-
-void
-SectorSubBlk::setSectorOffset(const int sector_offset)
-{
-    _sectorOffset = sector_offset;
-}
-
-int
-SectorSubBlk::getSectorOffset() const
-{
-    return _sectorOffset;
-}
-
-Addr
-SectorSubBlk::getTag() const
-{
-    return _sectorBlk->getTag();
-}
-
-void
-SectorSubBlk::insert(const Addr tag, const bool is_secure,
-                     const int src_master_ID, const uint32_t task_ID)
-{
-    // Make sure it is not overwriting another sector
-    panic_if((_sectorBlk && _sectorBlk->isValid()) &&
-             ((_sectorBlk->getTag() != tag) ||
-              (_sectorBlk->isSecure() != is_secure)),
-              "Overwriting valid sector!");
-
-    CacheBlk::insert(tag, is_secure, src_master_ID, task_ID);
-
-    // Set sector tag
-    _sectorBlk->setTag(tag);
-}
-
-std::string
-SectorSubBlk::print() const
-{
-    return csprintf("%s sector offset: %#x", CacheBlk::print(),
-                    getSectorOffset());
-}
-
-bool
-SectorBlk::isValid() const
-{
-    // If any of the blocks in the sector is valid, so is the sector
-    for (const auto& blk : blks) {
-        if (blk->isValid()) {
-            return true;
-        }
-    }
-    return false;
-}
-
-bool
-SectorBlk::isSecure() const
-{
-    // If any of the valid blocks in the sector is secure, so is the sector
-    for (const auto& blk : blks) {
-        if (blk->isValid()) {
-            return blk->isSecure();
-        }
-    }
-    return false;
-}
-
-void
-SectorBlk::setTag(const Addr tag)
-{
-    _tag = tag;
-}
-
-Addr
-SectorBlk::getTag() const
-{
-    return _tag;
-}
diff --git a/src/mem/cache/sector_blk.hh b/src/mem/cache/sector_blk.hh
deleted file mode 100644 (file)
index 3d09d2b..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-/**
- * Copyright (c) 2018 Inria
- * 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.
- *
- * Authors: Daniel Carvalho
- */
-
-/** @file
- * Definition of a simple sector block class. Each sector consists of a
- * sequence of cache blocks that may or may not be present in the cache.
- */
-
-#ifndef __MEM_CACHE_SECTOR_BLK_HH__
-#define __MEM_CACHE_SECTOR_BLK_HH__
-
-#include <vector>
-
-#include "mem/cache/cache_blk.hh"
-#include "mem/cache/replacement_policies/base.hh"
-
-class SectorBlk;
-
-/**
- * A sector is composed of sub-blocks, and each sub-block has information
- * regarding its sector and a pointer to its sector tag.
- */
-class SectorSubBlk : public CacheBlk
-{
-  private:
-    /**
-     * Sector block associated to this block.
-     */
-    SectorBlk* _sectorBlk;
-
-    /**
-     * The offset of this sub-block in the sector.
-     */
-    int _sectorOffset;
-
-  public:
-    SectorSubBlk() : CacheBlk(), _sectorBlk(nullptr), _sectorOffset(0) {}
-    SectorSubBlk(const SectorSubBlk&) = delete;
-    SectorSubBlk& operator=(const SectorSubBlk&) = delete;
-    ~SectorSubBlk() {};
-
-    /**
-     * Set sector block associated to this block.
-     *
-     * @param sector_blk The sector block pointer.
-     */
-    void setSectorBlock(SectorBlk* sector_blk);
-
-    /**
-     * Get sector block associated to this block.
-     *
-     * @return The sector block pointer.
-     */
-    const SectorBlk* getSectorBlock() const;
-
-    /**
-     * Set offset of this sub-block within the sector.
-     *
-     * @param sector_offset The block's offset.
-     */
-    void setSectorOffset(const int sector_offset);
-
-    /**
-     * Get offset of this sub-block within the sector.
-     *
-     * @return sector_offset The block's offset.
-     */
-    int getSectorOffset() const;
-
-    /**
-     * Get tag associated to this block.
-     *
-     * @return The tag value.
-     */
-    Addr getTag() const;
-
-    /**
-     * Set member variables when a block insertion occurs. Resets reference
-     * count to 1 (the insertion counts as a reference), and touch block if
-     * it hadn't been touched previously. Sets the insertion tick to the
-     * current tick. Does not make block valid.
-     *
-     * @param tag Block address tag.
-     * @param is_secure Whether the block is in secure space or not.
-     * @param src_master_ID The source requestor ID.
-     * @param task_ID The new task ID.
-     */
-    void insert(const Addr tag, const bool is_secure, const int src_master_ID,
-                const uint32_t task_ID) override;
-
-    /**
-     * Pretty-print sector offset and other CacheBlk information.
-     *
-     * @return string with basic state information
-     */
-    std::string print() const override;
-};
-
-/**
- * A Basic Sector block.
- * Contains the tag and a list of blocks associated to this sector.
- */
-class SectorBlk : public ReplaceableEntry
-{
-  private:
-    /**
-     * Sector tag value. A sector's tag is the tag of all its sub-blocks.
-     */
-    Addr _tag;
-
-  public:
-    SectorBlk() : ReplaceableEntry(), _tag(MaxAddr) {}
-    SectorBlk(const SectorBlk&) = delete;
-    SectorBlk& operator=(const SectorBlk&) = delete;
-    ~SectorBlk() {};
-
-    /** List of blocks associated to this sector. */
-    std::vector<SectorSubBlk*> blks;
-
-    /**
-     * Checks that a sector block is valid.
-     *
-     * @return True if any of the blocks in the sector is valid.
-     */
-    bool isValid() const;
-
-    /**
-     * Checks that a sector block is secure. A single secure block suffices
-     * to imply that the whole sector is secure, as the insertion proccess
-     * asserts that different secure spaces can't coexist in the same sector.
-     *
-     * @return True if any of the blocks in the sector is secure.
-     */
-    bool isSecure() const;
-
-    /**
-     * Set tag associated to this block.
-     *
-     * @param The tag value.
-     */
-    void setTag(const Addr tag);
-
-    /**
-     * Get tag associated to this block.
-     *
-     * @return The tag value.
-     */
-    Addr getTag() const;
-};
-
-#endif //__MEM_CACHE_SECTOR_BLK_HH__
index 136abac2cca8e90a035158f5f1121b1c9910d28d..c654bf2eb8f642209fb7e457c7e5d0e835ba6fc9 100644 (file)
@@ -35,4 +35,5 @@ SimObject('Tags.py')
 Source('base.cc')
 Source('base_set_assoc.cc')
 Source('fa_lru.cc')
+Source('sector_blk.cc')
 Source('sector_tags.cc')
diff --git a/src/mem/cache/tags/sector_blk.cc b/src/mem/cache/tags/sector_blk.cc
new file mode 100644 (file)
index 0000000..de91536
--- /dev/null
@@ -0,0 +1,131 @@
+/**
+ * Copyright (c) 2018 Inria
+ * 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.
+ *
+ * Authors: Daniel Carvalho
+ */
+
+/** @file
+ * Implementation of a simple sector block class. Each sector consists of a
+ * sequence of cache blocks that may or may not be present in the cache.
+ */
+
+#include "mem/cache/tags/sector_blk.hh"
+
+#include <cassert>
+
+#include "base/cprintf.hh"
+#include "base/logging.hh"
+
+void
+SectorSubBlk::setSectorBlock(SectorBlk* sector_blk)
+{
+    assert(sector_blk != nullptr);
+    _sectorBlk = sector_blk;
+}
+
+const SectorBlk*
+SectorSubBlk::getSectorBlock() const
+{
+    return _sectorBlk;
+}
+
+void
+SectorSubBlk::setSectorOffset(const int sector_offset)
+{
+    _sectorOffset = sector_offset;
+}
+
+int
+SectorSubBlk::getSectorOffset() const
+{
+    return _sectorOffset;
+}
+
+Addr
+SectorSubBlk::getTag() const
+{
+    return _sectorBlk->getTag();
+}
+
+void
+SectorSubBlk::insert(const Addr tag, const bool is_secure,
+                     const int src_master_ID, const uint32_t task_ID)
+{
+    // Make sure it is not overwriting another sector
+    panic_if((_sectorBlk && _sectorBlk->isValid()) &&
+             ((_sectorBlk->getTag() != tag) ||
+              (_sectorBlk->isSecure() != is_secure)),
+              "Overwriting valid sector!");
+
+    CacheBlk::insert(tag, is_secure, src_master_ID, task_ID);
+
+    // Set sector tag
+    _sectorBlk->setTag(tag);
+}
+
+std::string
+SectorSubBlk::print() const
+{
+    return csprintf("%s sector offset: %#x", CacheBlk::print(),
+                    getSectorOffset());
+}
+
+bool
+SectorBlk::isValid() const
+{
+    // If any of the blocks in the sector is valid, so is the sector
+    for (const auto& blk : blks) {
+        if (blk->isValid()) {
+            return true;
+        }
+    }
+    return false;
+}
+
+bool
+SectorBlk::isSecure() const
+{
+    // If any of the valid blocks in the sector is secure, so is the sector
+    for (const auto& blk : blks) {
+        if (blk->isValid()) {
+            return blk->isSecure();
+        }
+    }
+    return false;
+}
+
+void
+SectorBlk::setTag(const Addr tag)
+{
+    _tag = tag;
+}
+
+Addr
+SectorBlk::getTag() const
+{
+    return _tag;
+}
diff --git a/src/mem/cache/tags/sector_blk.hh b/src/mem/cache/tags/sector_blk.hh
new file mode 100644 (file)
index 0000000..d252a61
--- /dev/null
@@ -0,0 +1,178 @@
+/**
+ * Copyright (c) 2018 Inria
+ * 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.
+ *
+ * Authors: Daniel Carvalho
+ */
+
+/** @file
+ * Definition of a simple sector block class. Each sector consists of a
+ * sequence of cache blocks that may or may not be present in the cache.
+ */
+
+#ifndef __MEM_CACHE_TAGS_SECTOR_BLK_HH__
+#define __MEM_CACHE_TAGS_SECTOR_BLK_HH__
+
+#include <vector>
+
+#include "mem/cache/cache_blk.hh"
+#include "mem/cache/replacement_policies/base.hh"
+
+class SectorBlk;
+
+/**
+ * A sector is composed of sub-blocks, and each sub-block has information
+ * regarding its sector and a pointer to its sector tag.
+ */
+class SectorSubBlk : public CacheBlk
+{
+  private:
+    /**
+     * Sector block associated to this block.
+     */
+    SectorBlk* _sectorBlk;
+
+    /**
+     * The offset of this sub-block in the sector.
+     */
+    int _sectorOffset;
+
+  public:
+    SectorSubBlk() : CacheBlk(), _sectorBlk(nullptr), _sectorOffset(0) {}
+    SectorSubBlk(const SectorSubBlk&) = delete;
+    SectorSubBlk& operator=(const SectorSubBlk&) = delete;
+    ~SectorSubBlk() {};
+
+    /**
+     * Set sector block associated to this block.
+     *
+     * @param sector_blk The sector block pointer.
+     */
+    void setSectorBlock(SectorBlk* sector_blk);
+
+    /**
+     * Get sector block associated to this block.
+     *
+     * @return The sector block pointer.
+     */
+    const SectorBlk* getSectorBlock() const;
+
+    /**
+     * Set offset of this sub-block within the sector.
+     *
+     * @param sector_offset The block's offset.
+     */
+    void setSectorOffset(const int sector_offset);
+
+    /**
+     * Get offset of this sub-block within the sector.
+     *
+     * @return sector_offset The block's offset.
+     */
+    int getSectorOffset() const;
+
+    /**
+     * Get tag associated to this block.
+     *
+     * @return The tag value.
+     */
+    Addr getTag() const;
+
+    /**
+     * Set member variables when a block insertion occurs. Resets reference
+     * count to 1 (the insertion counts as a reference), and touch block if
+     * it hadn't been touched previously. Sets the insertion tick to the
+     * current tick. Does not make block valid.
+     *
+     * @param tag Block address tag.
+     * @param is_secure Whether the block is in secure space or not.
+     * @param src_master_ID The source requestor ID.
+     * @param task_ID The new task ID.
+     */
+    void insert(const Addr tag, const bool is_secure, const int src_master_ID,
+                const uint32_t task_ID) override;
+
+    /**
+     * Pretty-print sector offset and other CacheBlk information.
+     *
+     * @return string with basic state information
+     */
+    std::string print() const override;
+};
+
+/**
+ * A Basic Sector block.
+ * Contains the tag and a list of blocks associated to this sector.
+ */
+class SectorBlk : public ReplaceableEntry
+{
+  private:
+    /**
+     * Sector tag value. A sector's tag is the tag of all its sub-blocks.
+     */
+    Addr _tag;
+
+  public:
+    SectorBlk() : ReplaceableEntry(), _tag(MaxAddr) {}
+    SectorBlk(const SectorBlk&) = delete;
+    SectorBlk& operator=(const SectorBlk&) = delete;
+    ~SectorBlk() {};
+
+    /** List of blocks associated to this sector. */
+    std::vector<SectorSubBlk*> blks;
+
+    /**
+     * Checks that a sector block is valid.
+     *
+     * @return True if any of the blocks in the sector is valid.
+     */
+    bool isValid() const;
+
+    /**
+     * Checks that a sector block is secure. A single secure block suffices
+     * to imply that the whole sector is secure, as the insertion proccess
+     * asserts that different secure spaces can't coexist in the same sector.
+     *
+     * @return True if any of the blocks in the sector is secure.
+     */
+    bool isSecure() const;
+
+    /**
+     * Set tag associated to this block.
+     *
+     * @param The tag value.
+     */
+    void setTag(const Addr tag);
+
+    /**
+     * Get tag associated to this block.
+     *
+     * @return The tag value.
+     */
+    Addr getTag() const;
+};
+
+#endif //__MEM_CACHE_TAGS_SECTOR_BLK_HH__
index 518ab28a96f4d02ee9e89f9d2c1ab93c2cb1ba2a..40df7829dbf1d2ba6f0cc0249c4dff220b782084 100644 (file)
@@ -39,8 +39,8 @@
 #include <string>
 #include <vector>
 
-#include "mem/cache/sector_blk.hh"
 #include "mem/cache/tags/base.hh"
+#include "mem/cache/tags/sector_blk.hh"
 #include "params/SectorTags.hh"
 
 class BaseCache;