From dc2162dbff22cac3b497308d7b87bf154c5a5186 Mon Sep 17 00:00:00 2001 From: Erin Le Date: Mon, 22 Jul 2024 18:54:02 +0000 Subject: [PATCH 1/6] mem: Fix "Need is_secure arg" prefetcher crash This commit fixes the "Need is_secure arg" crash that occurs when using the IndirectMemoryPrefetcher, SignaturePathPrefetcher, SignaturePathPrefetcherV2, STeMSPrefetcher, and PIFPrefetcher. This was done by changing some variables to be AssociativeSet<...> instead of AssociativeCache<...> and changing the affected function calls. Change-Id: I61808c877514efeb73ad041de273ae386711acae --- src/mem/cache/prefetch/associative_set.hh | 2 +- src/mem/cache/prefetch/indirect_memory.cc | 4 ++-- src/mem/cache/prefetch/indirect_memory.hh | 2 +- src/mem/cache/prefetch/pif.cc | 8 +++++--- src/mem/cache/prefetch/pif.hh | 2 +- src/mem/cache/prefetch/signature_path.cc | 7 ++++--- src/mem/cache/prefetch/signature_path.hh | 2 +- src/mem/cache/prefetch/signature_path_v2.cc | 2 +- src/mem/cache/prefetch/signature_path_v2.hh | 2 +- .../cache/prefetch/spatio_temporal_memory_streaming.cc | 8 +++++--- .../cache/prefetch/spatio_temporal_memory_streaming.hh | 2 +- 11 files changed, 23 insertions(+), 18 deletions(-) diff --git a/src/mem/cache/prefetch/associative_set.hh b/src/mem/cache/prefetch/associative_set.hh index b73939fd5d..f7217a1e6b 100644 --- a/src/mem/cache/prefetch/associative_set.hh +++ b/src/mem/cache/prefetch/associative_set.hh @@ -90,7 +90,7 @@ class AssociativeSet : public AssociativeCache using AssociativeCache::accessEntryByAddr; using AssociativeCache::findEntry; using AssociativeCache::insertEntry; - using AssociativeCache::getPossibleEntries; + // using AssociativeCache::getPossibleEntries; using AssociativeCache::replPolicy; using AssociativeCache::indexingPolicy; diff --git a/src/mem/cache/prefetch/indirect_memory.cc b/src/mem/cache/prefetch/indirect_memory.cc index f689bff38c..169356277a 100644 --- a/src/mem/cache/prefetch/indirect_memory.cc +++ b/src/mem/cache/prefetch/indirect_memory.cc @@ -85,7 +85,7 @@ IndirectMemory::calculatePrefetch(const PrefetchInfo &pfi, } } else { // if misses are not being tracked, attempt to detect stream accesses - PrefetchTableEntry *pt_entry = prefetchTable.findEntry(pc); + PrefetchTableEntry *pt_entry = prefetchTable.findEntry(pc, is_secure); if (pt_entry != nullptr) { prefetchTable.accessEntry(pt_entry); @@ -159,7 +159,7 @@ IndirectMemory::calculatePrefetch(const PrefetchInfo &pfi, } else { pt_entry = prefetchTable.findVictim(pc); assert(pt_entry != nullptr); - prefetchTable.insertEntry(pc, pt_entry); + prefetchTable.insertEntry(pc, pt_entry-> secure, pt_entry); pt_entry->address = addr; pt_entry->secure = is_secure; } diff --git a/src/mem/cache/prefetch/indirect_memory.hh b/src/mem/cache/prefetch/indirect_memory.hh index 1062545301..00c89fd036 100644 --- a/src/mem/cache/prefetch/indirect_memory.hh +++ b/src/mem/cache/prefetch/indirect_memory.hh @@ -121,7 +121,7 @@ class IndirectMemory : public Queued } }; /** Prefetch table */ - AssociativeCache prefetchTable; + AssociativeSet prefetchTable; /** Indirect Pattern Detector entrt */ struct IndirectPatternDetectorEntry : public TaggedEntry diff --git a/src/mem/cache/prefetch/pif.cc b/src/mem/cache/prefetch/pif.cc index 138c89f08e..bfe53d0fc9 100644 --- a/src/mem/cache/prefetch/pif.cc +++ b/src/mem/cache/prefetch/pif.cc @@ -177,13 +177,15 @@ PIF::notifyRetiredInst(const Addr pc) // the 'iterator' table to point to the new entry historyBuffer.push_back(spatialCompactor); - auto idx_entry = index.findEntry(spatialCompactor.trigger); + auto idx_entry = index.findEntry(spatialCompactor.trigger, + false); if (idx_entry != nullptr) { index.accessEntry(idx_entry); } else { idx_entry = index.findVictim(spatialCompactor.trigger); assert(idx_entry != nullptr); - index.insertEntry(spatialCompactor.trigger, idx_entry); + index.insertEntry(spatialCompactor.trigger, false, + idx_entry); } idx_entry->historyIt = historyBuffer.getIterator(historyBuffer.tail()); @@ -219,7 +221,7 @@ PIF::calculatePrefetch(const PrefetchInfo &pfi, // Check if a valid entry in the 'index' table is found and allocate a new // active prediction stream - IndexEntry *idx_entry = index.findEntry(pc); + IndexEntry *idx_entry = index.findEntry(pc, false); if (idx_entry != nullptr) { index.accessEntry(idx_entry); diff --git a/src/mem/cache/prefetch/pif.hh b/src/mem/cache/prefetch/pif.hh index 3592397804..9422419db5 100644 --- a/src/mem/cache/prefetch/pif.hh +++ b/src/mem/cache/prefetch/pif.hh @@ -143,7 +143,7 @@ class PIF : public Queued * The index table is a small cache-like structure that facilitates * fast search of the history buffer. */ - AssociativeCache index; + AssociativeSet index; /** * A Stream Address Buffer (SAB) tracks a window of consecutive diff --git a/src/mem/cache/prefetch/signature_path.cc b/src/mem/cache/prefetch/signature_path.cc index 122c498be7..74eccbde77 100644 --- a/src/mem/cache/prefetch/signature_path.cc +++ b/src/mem/cache/prefetch/signature_path.cc @@ -192,7 +192,8 @@ SignaturePath::getSignatureEntry(Addr ppn, bool is_secure, SignaturePath::PatternEntry & SignaturePath::getPatternEntry(Addr signature) { - PatternEntry* pattern_entry = patternTable.findEntry(signature); + bool is_secure = false; + PatternEntry* pattern_entry = patternTable.findEntry(signature, is_secure); if (pattern_entry != nullptr) { // Signature found patternTable.accessEntry(pattern_entry); @@ -201,7 +202,7 @@ SignaturePath::getPatternEntry(Addr signature) pattern_entry = patternTable.findVictim(signature); assert(pattern_entry != nullptr); - patternTable.insertEntry(signature, pattern_entry); + patternTable.insertEntry(signature, is_secure, pattern_entry); } return *pattern_entry; } @@ -277,7 +278,7 @@ SignaturePath::calculatePrefetch(const PrefetchInfo &pfi, // confidence, these are prefetch candidates // - select the entry with the highest counter as the "lookahead" PatternEntry *current_pattern_entry = - patternTable.findEntry(current_signature); + patternTable.findEntry(current_signature, false); //, PatternStrideEntry const *lookahead = nullptr; if (current_pattern_entry != nullptr) { unsigned long max_counter = 0; diff --git a/src/mem/cache/prefetch/signature_path.hh b/src/mem/cache/prefetch/signature_path.hh index d5e1ea18ab..c4a640ae78 100644 --- a/src/mem/cache/prefetch/signature_path.hh +++ b/src/mem/cache/prefetch/signature_path.hh @@ -148,7 +148,7 @@ class SignaturePath : public Queued }; /** Pattern table */ - AssociativeCache patternTable; + AssociativeSet patternTable; /** * Generates a new signature from an existing one and a new stride diff --git a/src/mem/cache/prefetch/signature_path_v2.cc b/src/mem/cache/prefetch/signature_path_v2.cc index 518fc3e0e7..202a6ee7c8 100644 --- a/src/mem/cache/prefetch/signature_path_v2.cc +++ b/src/mem/cache/prefetch/signature_path_v2.cc @@ -125,7 +125,7 @@ SignaturePathV2::handlePageCrossingLookahead(signature_t signature, GlobalHistoryEntry *gh_entry = globalHistoryRegister.findVictim(0); assert(gh_entry != nullptr); // Any address value works, as it is never used - globalHistoryRegister.insertEntry(0, gh_entry); + globalHistoryRegister.insertEntry(0, false, gh_entry); // false, gh_entry->signature = signature; gh_entry->lastBlock = last_offset; diff --git a/src/mem/cache/prefetch/signature_path_v2.hh b/src/mem/cache/prefetch/signature_path_v2.hh index ee9e2cdc3c..417b7ec540 100644 --- a/src/mem/cache/prefetch/signature_path_v2.hh +++ b/src/mem/cache/prefetch/signature_path_v2.hh @@ -66,7 +66,7 @@ class SignaturePathV2 : public SignaturePath delta(0) {} }; /** Global History Register */ - AssociativeCache globalHistoryRegister; + AssociativeSet globalHistoryRegister; double calculateLookaheadConfidence(PatternEntry const &sig, PatternStrideEntry const &lookahead) const override; diff --git a/src/mem/cache/prefetch/spatio_temporal_memory_streaming.cc b/src/mem/cache/prefetch/spatio_temporal_memory_streaming.cc index c2f936b176..fe264ab5f7 100644 --- a/src/mem/cache/prefetch/spatio_temporal_memory_streaming.cc +++ b/src/mem/cache/prefetch/spatio_temporal_memory_streaming.cc @@ -92,12 +92,14 @@ STeMS::checkForActiveGenerationsEnd(const CacheAccessor &cache) } if (generation_ended) { // PST is indexed using the PC (secure bit is unused) - auto pst_entry = patternSequenceTable.findEntry(pst_addr); + auto pst_entry = patternSequenceTable.findEntry(pst_addr, + false); if (pst_entry == nullptr) { // Tipically an entry will not exist pst_entry = patternSequenceTable.findVictim(pst_addr); assert(pst_entry != nullptr); - patternSequenceTable.insertEntry(pst_addr, pst_entry); + patternSequenceTable.insertEntry(pst_addr, false, + pst_entry); } else { patternSequenceTable.accessEntry(pst_entry); } @@ -221,7 +223,7 @@ STeMS::reconstructSequence( idx = 0; for (auto it = rmob_it; it != rmob.end() && (idx < reconstructionEntries); it++) { - auto pst_entry = patternSequenceTable.findEntry(it->pstAddress); + auto pst_entry = patternSequenceTable.findEntry(it->pstAddress, false); if (pst_entry != nullptr) { patternSequenceTable.accessEntry(pst_entry); for (auto &seq_entry : pst_entry->sequence) { diff --git a/src/mem/cache/prefetch/spatio_temporal_memory_streaming.hh b/src/mem/cache/prefetch/spatio_temporal_memory_streaming.hh index 753c6a79b4..c6cd2f72d1 100644 --- a/src/mem/cache/prefetch/spatio_temporal_memory_streaming.hh +++ b/src/mem/cache/prefetch/spatio_temporal_memory_streaming.hh @@ -155,7 +155,7 @@ class STeMS : public Queued /** Active Generation Table (AGT) */ AssociativeSet activeGenerationTable; /** Pattern Sequence Table (PST) */ - AssociativeCache patternSequenceTable; + AssociativeSet patternSequenceTable; /** Data type of the Region Miss Order Buffer entry */ struct RegionMissOrderBufferEntry From 6c4621c6658cd8feac0ba33f9c3a72e02fd7a74f Mon Sep 17 00:00:00 2001 From: Erin Le Date: Mon, 22 Jul 2024 21:14:29 +0000 Subject: [PATCH 2/6] mem: use is_secure instead of hardcoded false in prefetcher crash This modifies the crash fix so that the function calls that were modified use a local variables called `is_secure` instead of a hardcoded `false`. Some of these existed previously so it made more sense to use them, while others were newly added in to mark where the code might need to be changed later. Change-Id: I0c0d14b74f0ccf70ee5fe7c8b01ed0266353b3c1 --- src/mem/cache/prefetch/pif.cc | 9 +++++---- src/mem/cache/prefetch/signature_path.cc | 2 +- src/mem/cache/prefetch/signature_path_v2.cc | 3 ++- .../cache/prefetch/spatio_temporal_memory_streaming.cc | 9 ++++++--- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/mem/cache/prefetch/pif.cc b/src/mem/cache/prefetch/pif.cc index bfe53d0fc9..416190e2d3 100644 --- a/src/mem/cache/prefetch/pif.cc +++ b/src/mem/cache/prefetch/pif.cc @@ -176,15 +176,15 @@ PIF::notifyRetiredInst(const Addr pc) // Insert the spatial entry into the history buffer and update // the 'iterator' table to point to the new entry historyBuffer.push_back(spatialCompactor); - + bool is_secure = false; auto idx_entry = index.findEntry(spatialCompactor.trigger, - false); + is_secure); if (idx_entry != nullptr) { index.accessEntry(idx_entry); } else { idx_entry = index.findVictim(spatialCompactor.trigger); assert(idx_entry != nullptr); - index.insertEntry(spatialCompactor.trigger, false, + index.insertEntry(spatialCompactor.trigger, is_secure, idx_entry); } idx_entry->historyIt = @@ -207,6 +207,7 @@ PIF::calculatePrefetch(const PrefetchInfo &pfi, } const Addr pc = pfi.getPC(); + bool is_secure = pfi.isSecure(); // First check if the access has been prefetched, this is done by // comparing the access against the active Stream Address Buffers @@ -221,7 +222,7 @@ PIF::calculatePrefetch(const PrefetchInfo &pfi, // Check if a valid entry in the 'index' table is found and allocate a new // active prediction stream - IndexEntry *idx_entry = index.findEntry(pc, false); + IndexEntry *idx_entry = index.findEntry(pc, is_secure); if (idx_entry != nullptr) { index.accessEntry(idx_entry); diff --git a/src/mem/cache/prefetch/signature_path.cc b/src/mem/cache/prefetch/signature_path.cc index 74eccbde77..a16931828f 100644 --- a/src/mem/cache/prefetch/signature_path.cc +++ b/src/mem/cache/prefetch/signature_path.cc @@ -278,7 +278,7 @@ SignaturePath::calculatePrefetch(const PrefetchInfo &pfi, // confidence, these are prefetch candidates // - select the entry with the highest counter as the "lookahead" PatternEntry *current_pattern_entry = - patternTable.findEntry(current_signature, false); //, + patternTable.findEntry(current_signature, is_secure); PatternStrideEntry const *lookahead = nullptr; if (current_pattern_entry != nullptr) { unsigned long max_counter = 0; diff --git a/src/mem/cache/prefetch/signature_path_v2.cc b/src/mem/cache/prefetch/signature_path_v2.cc index 202a6ee7c8..dc34dbd71e 100644 --- a/src/mem/cache/prefetch/signature_path_v2.cc +++ b/src/mem/cache/prefetch/signature_path_v2.cc @@ -125,7 +125,8 @@ SignaturePathV2::handlePageCrossingLookahead(signature_t signature, GlobalHistoryEntry *gh_entry = globalHistoryRegister.findVictim(0); assert(gh_entry != nullptr); // Any address value works, as it is never used - globalHistoryRegister.insertEntry(0, false, gh_entry); // false, + bool is_secure = false; + globalHistoryRegister.insertEntry(0, is_secure, gh_entry); // false, gh_entry->signature = signature; gh_entry->lastBlock = last_offset; diff --git a/src/mem/cache/prefetch/spatio_temporal_memory_streaming.cc b/src/mem/cache/prefetch/spatio_temporal_memory_streaming.cc index fe264ab5f7..a1b40d182d 100644 --- a/src/mem/cache/prefetch/spatio_temporal_memory_streaming.cc +++ b/src/mem/cache/prefetch/spatio_temporal_memory_streaming.cc @@ -92,13 +92,14 @@ STeMS::checkForActiveGenerationsEnd(const CacheAccessor &cache) } if (generation_ended) { // PST is indexed using the PC (secure bit is unused) + bool is_secure = false; auto pst_entry = patternSequenceTable.findEntry(pst_addr, - false); + is_secure); if (pst_entry == nullptr) { // Tipically an entry will not exist pst_entry = patternSequenceTable.findVictim(pst_addr); assert(pst_entry != nullptr); - patternSequenceTable.insertEntry(pst_addr, false, + patternSequenceTable.insertEntry(pst_addr, is_secure, pst_entry); } else { patternSequenceTable.accessEntry(pst_entry); @@ -221,9 +222,11 @@ STeMS::reconstructSequence( // Now query the PST with the PC of each RMOB entry idx = 0; + bool is_secure = false; for (auto it = rmob_it; it != rmob.end() && (idx < reconstructionEntries); it++) { - auto pst_entry = patternSequenceTable.findEntry(it->pstAddress, false); + auto pst_entry = patternSequenceTable.findEntry(it->pstAddress, + is_secure); if (pst_entry != nullptr) { patternSequenceTable.accessEntry(pst_entry); for (auto &seq_entry : pst_entry->sequence) { From 8e80ede3f1ff2038ee5c8706ab49692974f33be1 Mon Sep 17 00:00:00 2001 From: Erin Le Date: Fri, 2 Aug 2024 21:11:02 +0000 Subject: [PATCH 3/6] mem: Comment removal and adding constexpr to is_secure bools This commit removes some comments and adds constexpr in front of "bool is_secure..." in pif.cc, signature_path.cc, and signature_path_v2.cc Change-Id: Icafe1d7c97d1d3fbf6abc12ba87ebb596255b96f --- src/mem/cache/prefetch/associative_set.hh | 2 -- src/mem/cache/prefetch/pif.cc | 2 +- src/mem/cache/prefetch/signature_path.cc | 2 +- src/mem/cache/prefetch/signature_path_v2.cc | 3 +-- 4 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/mem/cache/prefetch/associative_set.hh b/src/mem/cache/prefetch/associative_set.hh index f7217a1e6b..d434a6b47c 100644 --- a/src/mem/cache/prefetch/associative_set.hh +++ b/src/mem/cache/prefetch/associative_set.hh @@ -90,8 +90,6 @@ class AssociativeSet : public AssociativeCache using AssociativeCache::accessEntryByAddr; using AssociativeCache::findEntry; using AssociativeCache::insertEntry; - // using AssociativeCache::getPossibleEntries; - using AssociativeCache::replPolicy; using AssociativeCache::indexingPolicy; }; diff --git a/src/mem/cache/prefetch/pif.cc b/src/mem/cache/prefetch/pif.cc index 416190e2d3..6d62910452 100644 --- a/src/mem/cache/prefetch/pif.cc +++ b/src/mem/cache/prefetch/pif.cc @@ -176,7 +176,7 @@ PIF::notifyRetiredInst(const Addr pc) // Insert the spatial entry into the history buffer and update // the 'iterator' table to point to the new entry historyBuffer.push_back(spatialCompactor); - bool is_secure = false; + constexpr bool is_secure = false; auto idx_entry = index.findEntry(spatialCompactor.trigger, is_secure); if (idx_entry != nullptr) { diff --git a/src/mem/cache/prefetch/signature_path.cc b/src/mem/cache/prefetch/signature_path.cc index a16931828f..7f2f8b4794 100644 --- a/src/mem/cache/prefetch/signature_path.cc +++ b/src/mem/cache/prefetch/signature_path.cc @@ -192,7 +192,7 @@ SignaturePath::getSignatureEntry(Addr ppn, bool is_secure, SignaturePath::PatternEntry & SignaturePath::getPatternEntry(Addr signature) { - bool is_secure = false; + constexpr bool is_secure = false; PatternEntry* pattern_entry = patternTable.findEntry(signature, is_secure); if (pattern_entry != nullptr) { // Signature found diff --git a/src/mem/cache/prefetch/signature_path_v2.cc b/src/mem/cache/prefetch/signature_path_v2.cc index dc34dbd71e..d021170742 100644 --- a/src/mem/cache/prefetch/signature_path_v2.cc +++ b/src/mem/cache/prefetch/signature_path_v2.cc @@ -124,8 +124,7 @@ SignaturePathV2::handlePageCrossingLookahead(signature_t signature, // of them are unique, there are never "hits" in the GHR GlobalHistoryEntry *gh_entry = globalHistoryRegister.findVictim(0); assert(gh_entry != nullptr); - // Any address value works, as it is never used - bool is_secure = false; + constexpr bool is_secure = false; globalHistoryRegister.insertEntry(0, is_secure, gh_entry); // false, gh_entry->signature = signature; From be6fadca5227a4420efc6799ac306a915d0441e8 Mon Sep 17 00:00:00 2001 From: Erin Le Date: Mon, 5 Aug 2024 23:10:10 +0000 Subject: [PATCH 4/6] mem: remove stray comment from signature_path_v2.cc Change-Id: I5ddd2ddd6a9cb4fb032b48870c5ef6b0dc9533c0 --- src/mem/cache/prefetch/signature_path_v2.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/mem/cache/prefetch/signature_path_v2.cc b/src/mem/cache/prefetch/signature_path_v2.cc index d021170742..34209e6f00 100644 --- a/src/mem/cache/prefetch/signature_path_v2.cc +++ b/src/mem/cache/prefetch/signature_path_v2.cc @@ -124,8 +124,9 @@ SignaturePathV2::handlePageCrossingLookahead(signature_t signature, // of them are unique, there are never "hits" in the GHR GlobalHistoryEntry *gh_entry = globalHistoryRegister.findVictim(0); assert(gh_entry != nullptr); + // Any address value works, as it is never used constexpr bool is_secure = false; - globalHistoryRegister.insertEntry(0, is_secure, gh_entry); // false, + globalHistoryRegister.insertEntry(0, is_secure, gh_entry); gh_entry->signature = signature; gh_entry->lastBlock = last_offset; From 2955d89ed30fed8d982c29057c06d752822cbac9 Mon Sep 17 00:00:00 2001 From: Erin Le Date: Tue, 6 Aug 2024 00:06:38 +0000 Subject: [PATCH 5/6] mem: Add constexprs to spatio_temporal_memory_streaming.cc Change-Id: I6fa3d9f9a9d89d59d9ec1fc97c152bea3059f87d --- src/mem/cache/prefetch/spatio_temporal_memory_streaming.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mem/cache/prefetch/spatio_temporal_memory_streaming.cc b/src/mem/cache/prefetch/spatio_temporal_memory_streaming.cc index a1b40d182d..b16267c09f 100644 --- a/src/mem/cache/prefetch/spatio_temporal_memory_streaming.cc +++ b/src/mem/cache/prefetch/spatio_temporal_memory_streaming.cc @@ -92,7 +92,7 @@ STeMS::checkForActiveGenerationsEnd(const CacheAccessor &cache) } if (generation_ended) { // PST is indexed using the PC (secure bit is unused) - bool is_secure = false; + constexpr bool is_secure = false; auto pst_entry = patternSequenceTable.findEntry(pst_addr, is_secure); if (pst_entry == nullptr) { @@ -222,7 +222,7 @@ STeMS::reconstructSequence( // Now query the PST with the PC of each RMOB entry idx = 0; - bool is_secure = false; + constexpr bool is_secure = false; for (auto it = rmob_it; it != rmob.end() && (idx < reconstructionEntries); it++) { auto pst_entry = patternSequenceTable.findEntry(it->pstAddress, From 69ca952724824a0c75f0ec5dfa532184ac19abd8 Mon Sep 17 00:00:00 2001 From: "Bobby R. Bruce" Date: Tue, 6 Aug 2024 21:23:33 -0700 Subject: [PATCH 6/6] misc: Release v24.0.0.1 hotfix - Updates releases notes. - Increase the versioning from v24.0.0.0 to v24.0.0.1. Change-Id: I2f3f9eed06ecf74a5c6d86bb4dab25f1ff23b10d --- RELEASE-NOTES.md | 8 ++++++++ src/Doxyfile | 2 +- src/base/version.cc | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index c2c6b382e0..c7215a20da 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -1,3 +1,11 @@ +# Version 24.0.0.1 + +**[HOTFIX]** Fixes a bug affecting the use of the `IndirectMemoryPrefetcher`, `SignaturePathPrefetcher`, `SignaturePathPrefetcherV2`, `STeMSPrefetcher`, and `PIFPrefetcher` SimObjects. +Use of these resulted in gem5 crashing a gem5 crash with the error message "Need is_secure arg". + +The fix to this introduced to the gem5 develop branch in the Pull Request. +The commits in this PR were cherry-picked on the gem5 stable branch to create the v24.0.0.1 hotfix release. + # Version 24.0 gem5 Version 24.0 is the first major release of 2024. diff --git a/src/Doxyfile b/src/Doxyfile index 2206f17669..fc95f17d62 100644 --- a/src/Doxyfile +++ b/src/Doxyfile @@ -31,7 +31,7 @@ PROJECT_NAME = gem5 # This could be handy for archiving the generated documentation or # if some version control system is used. -PROJECT_NUMBER = v24.0.0.0 +PROJECT_NUMBER = v24.0.0.1 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. diff --git a/src/base/version.cc b/src/base/version.cc index dedbb425d3..ffbc7bd38d 100644 --- a/src/base/version.cc +++ b/src/base/version.cc @@ -32,6 +32,6 @@ namespace gem5 /** * @ingroup api_base_utils */ -const char *gem5Version = "24.0.0.0"; +const char *gem5Version = "24.0.0.1"; } // namespace gem5