misc: Hotfix v24.1.0.2 (#1964)

This adds #1930 as a hotfix to gem5 v24.1.0
This commit is contained in:
Bobby R. Bruce
2025-02-12 12:09:26 -08:00
committed by GitHub
5 changed files with 32 additions and 11 deletions

View File

@@ -1,3 +1,10 @@
# Version 24.1.0.2
**[HOTFIX]** Adds PR <https://github.com/gem5/gem5/pull/1930> as a hotfix to v24.1.0.
This fixes a bug which was was causing the CHI coherence protocol to fail in multi-core simulations.
The fix sets the `RubySystem` pointer when the TBE is allocated, instead of when `set_tbe` is performed, thus ensuring that the `RubySystem` pointer is set before the TBE is used.
# Version 24.1.0.1
**[HOTFIX]** This hotfix release applies the following:

View File

@@ -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.1.0.1
PROJECT_NUMBER = v24.1.0.2
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
# base path where the generated documentation will be put.

View File

@@ -32,6 +32,6 @@ namespace gem5
/**
* @ingroup api_base_utils
*/
const char *gem5Version = "24.1.0.1";
const char *gem5Version = "24.1.0.2";
} // namespace gem5

View File

@@ -45,6 +45,7 @@
#include <unordered_map>
#include "mem/ruby/common/Address.hh"
#include "mem/ruby/system/RubySystem.hh"
namespace gem5
{
@@ -70,7 +71,7 @@ class TBETable
return (m_number_of_TBEs - m_map.size()) >= n;
}
void setBlockSize(const int block_size) { m_block_size = block_size; }
void setRubySystem(RubySystem* rs);
ENTRY *getNullEntry();
ENTRY *lookup(Addr address);
@@ -89,6 +90,10 @@ class TBETable
private:
int m_number_of_TBEs = 0;
int m_block_size = 0;
RubySystem* m_ruby_system = nullptr;
static constexpr bool entryRequiresRubySystem =
std::is_member_function_pointer_v<decltype(&ENTRY::setRubySystem)>;
};
template<class ENTRY>
@@ -100,6 +105,14 @@ operator<<(std::ostream& out, const TBETable<ENTRY>& obj)
return out;
}
template<class ENTRY>
inline
void TBETable<ENTRY>::setRubySystem(RubySystem* rs)
{
m_ruby_system = rs;
m_block_size = rs->getBlockSizeBytes();
}
template<class ENTRY>
inline bool
TBETable<ENTRY>::isPresent(Addr address) const
@@ -116,7 +129,9 @@ TBETable<ENTRY>::allocate(Addr address)
assert(!isPresent(address));
assert(m_map.size() < m_number_of_TBEs);
assert(m_block_size > 0);
m_map.emplace(address, ENTRY(m_block_size));
ENTRY new_entry = ENTRY(m_block_size);
new_entry.setRubySystem(m_ruby_system);
m_map.emplace(address, new_entry);
}
template<class ENTRY>

View File

@@ -831,13 +831,13 @@ $c_ident::init()
comment = f"Type {vtype.ident} default"
code('*$vid = ${{vtype["default"]}}; // $comment')
# For objects that require knowing the cache line size,
# For objects that require a pointer to RubySystem,
# set the value here.
if vtype.c_ident in ("TBETable"):
block_size_func = "m_ruby_system->getBlockSizeBytes()"
code(f"(*{vid}).setBlockSize({block_size_func});")
if vtype.c_ident in ("NetDest", "PerfectCacheMemory"):
if vtype.c_ident in (
"NetDest",
"PerfectCacheMemory",
"TBETable",
):
code(f"(*{vid}).setRubySystem(m_ruby_system);")
for param in self.config_parameters:
@@ -1271,7 +1271,6 @@ void
$c_ident::set_tbe(${{self.TBEType.c_ident}}*& m_tbe_ptr, ${{self.TBEType.c_ident}}* m_new_tbe)
{
m_tbe_ptr = m_new_tbe;
m_tbe_ptr->setRubySystem(m_ruby_system);
}
void