dev-arm: Fix SMMUv3BaseCache Stats
After [1] the SMMUv3BaseCache stats are undistinguible within each
other.
With this patch we are adding a string to their constructor so
that we can distinguish between an IPA, Config etc cache stat
[1]: https://gem5-review.googlesource.com/c/public/gem5/+/36415
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Change-Id: Iaa84ed948cf2a4c36ea4fcda589676b9bbeed6fd
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/42983
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Reviewed-by: Hoa Nguyen <hoanguyen@ucdavis.edu>
Maintainer: Jason Lowe-Power <power.jg@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
diff --git a/src/dev/arm/smmu_v3_caches.cc b/src/dev/arm/smmu_v3_caches.cc
index 8bea3ea..59f5aca 100644
--- a/src/dev/arm/smmu_v3_caches.cc
+++ b/src/dev/arm/smmu_v3_caches.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2018-2019 ARM Limited
+ * Copyright (c) 2014, 2018-2019, 2021 Arm Limited
* All rights reserved
*
* The license below extends only to copyright in the software and shall
@@ -59,12 +59,12 @@
*/
SMMUv3BaseCache::SMMUv3BaseCache(const std::string &policy_name, uint32_t seed,
- Stats::Group *parent) :
- replacementPolicy(decodePolicyName(policy_name)),
+ Stats::Group *parent, const std::string &name)
+ : replacementPolicy(decodePolicyName(policy_name)),
nextToReplace(0),
random(seed),
useStamp(0),
- baseCacheStats(parent)
+ baseCacheStats(parent, name)
{}
int
@@ -82,8 +82,9 @@
}
SMMUv3BaseCache::
-SMMUv3BaseCacheStats::SMMUv3BaseCacheStats(Stats::Group *parent)
- : Stats::Group(parent),
+SMMUv3BaseCacheStats::SMMUv3BaseCacheStats(
+ Stats::Group *parent, const std::string &name)
+ : Stats::Group(parent, name.c_str()),
ADD_STAT(averageLookups,
UNIT_RATE(Stats::Units::Count, Stats::Units::Second),
"Average number lookups per second"),
@@ -144,9 +145,10 @@
*/
SMMUTLB::SMMUTLB(unsigned numEntries, unsigned _associativity,
- const std::string &policy, Stats::Group *parent)
+ const std::string &policy, Stats::Group *parent,
+ const std::string &name)
:
- SMMUv3BaseCache(policy, SMMUTLB_SEED, parent),
+ SMMUv3BaseCache(policy, SMMUTLB_SEED, parent, name),
associativity(_associativity)
{
if (associativity == 0)
@@ -426,7 +428,7 @@
ARMArchTLB::ARMArchTLB(unsigned numEntries, unsigned _associativity,
const std::string &policy, Stats::Group *parent)
:
- SMMUv3BaseCache(policy, ARMARCHTLB_SEED, parent),
+ SMMUv3BaseCache(policy, ARMARCHTLB_SEED, parent, "tlb"),
associativity(_associativity)
{
if (associativity == 0)
@@ -625,7 +627,7 @@
IPACache::IPACache(unsigned numEntries, unsigned _associativity,
const std::string &policy, Stats::Group *parent)
:
- SMMUv3BaseCache(policy, IPACACHE_SEED, parent),
+ SMMUv3BaseCache(policy, IPACACHE_SEED, parent, "ipa"),
associativity(_associativity)
{
if (associativity == 0)
@@ -805,7 +807,7 @@
ConfigCache::ConfigCache(unsigned numEntries, unsigned _associativity,
const std::string &policy, Stats::Group *parent)
:
- SMMUv3BaseCache(policy, CONFIGCACHE_SEED, parent),
+ SMMUv3BaseCache(policy, CONFIGCACHE_SEED, parent, "cfg"),
associativity(_associativity)
{
if (associativity == 0)
@@ -969,7 +971,7 @@
WalkCache::WalkCache(const std::array<unsigned, 2*WALK_CACHE_LEVELS> &_sizes,
unsigned _associativity, const std::string &policy,
Stats::Group *parent) :
- SMMUv3BaseCache(policy, WALKCACHE_SEED, parent),
+ SMMUv3BaseCache(policy, WALKCACHE_SEED, parent, "walk"),
walkCacheStats(&(SMMUv3BaseCache::baseCacheStats)),
associativity(_associativity),
sizes()
@@ -1226,7 +1228,7 @@
WalkCache::
WalkCacheStats::WalkCacheStats(Stats::Group *parent)
- : Stats::Group(parent, "WalkCache")
+ : Stats::Group(parent)
{
using namespace Stats;
diff --git a/src/dev/arm/smmu_v3_caches.hh b/src/dev/arm/smmu_v3_caches.hh
index 640710f..dee09f2 100644
--- a/src/dev/arm/smmu_v3_caches.hh
+++ b/src/dev/arm/smmu_v3_caches.hh
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2018-2019 ARM Limited
+ * Copyright (c) 2014, 2018-2019, 2021 Arm Limited
* All rights reserved
*
* The license below extends only to copyright in the software and shall
@@ -67,7 +67,7 @@
struct SMMUv3BaseCacheStats : public Stats::Group
{
- SMMUv3BaseCacheStats(Stats::Group *parent);
+ SMMUv3BaseCacheStats(Stats::Group *parent, const std::string &name);
Stats::Formula averageLookups;
Stats::Scalar totalLookups;
@@ -87,7 +87,7 @@
public:
SMMUv3BaseCache(const std::string &policy_name, uint32_t seed,
- Stats::Group *parent);
+ Stats::Group *parent, const std::string &name);
virtual ~SMMUv3BaseCache() {}
};
@@ -122,7 +122,8 @@
};
SMMUTLB(unsigned numEntries, unsigned _associativity,
- const std::string &policy, Stats::Group *parent);
+ const std::string &policy, Stats::Group *parent,
+ const std::string &name);
SMMUTLB(const SMMUTLB& tlb) = delete;
virtual ~SMMUTLB() {}
diff --git a/src/dev/arm/smmu_v3_deviceifc.cc b/src/dev/arm/smmu_v3_deviceifc.cc
index 182c6d2..6683e76 100644
--- a/src/dev/arm/smmu_v3_deviceifc.cc
+++ b/src/dev/arm/smmu_v3_deviceifc.cc
@@ -49,11 +49,11 @@
microTLB(new SMMUTLB(p.utlb_entries,
p.utlb_assoc,
p.utlb_policy,
- this)),
+ this, "utlb")),
mainTLB(new SMMUTLB(p.tlb_entries,
p.tlb_assoc,
p.tlb_policy,
- this)),
+ this, "maintlb")),
microTLBEnable(p.utlb_enable),
mainTLBEnable(p.tlb_enable),
devicePortSem(1),