mem-cache: AMPM Prefetcher fails when restoring from a checkpoint

The preriodic event triggers an assertion due to an incorrect tick value to
schedule when restoring from a checkpoint.

Change-Id: I9454dd0c97d5a098f8a409886e63f7a7e990947c
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/17732
Reviewed-by: Daniel Carvalho <odanrc@yahoo.com.br>
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
This commit is contained in:
Javier Bueno
2019-04-02 23:34:20 +02:00
committed by Javier Bueno Hedo
parent e13d6dc9c0
commit c2c1a976ee
2 changed files with 8 additions and 3 deletions

View File

@@ -57,9 +57,12 @@ AccessMapPatternMatching::AccessMapPatternMatching(
{
fatal_if(!isPowerOf2(hotZoneSize),
"the hot zone size must be a power of 2");
if (!epochEvent.scheduled()) {
schedule(epochEvent, clockEdge(epochCycles));
}
}
void
AccessMapPatternMatching::startup()
{
schedule(epochEvent, clockEdge(epochCycles));
}
void
@@ -153,6 +156,7 @@ AccessMapPatternMatching::calculatePrefetch(
std::vector<QueuedPrefetcher::AddrPriority> &addresses)
{
assert(addresses.empty());
bool is_secure = pfi.isSecure();
Addr am_addr = pfi.getAddr() / hotZoneSize;
Addr current_block = (pfi.getAddr() % hotZoneSize) / blkSize;

View File

@@ -180,6 +180,7 @@ class AccessMapPatternMatching : public ClockedObject
AccessMapPatternMatching(const AccessMapPatternMatchingParams* p);
~AccessMapPatternMatching()
{}
void startup() override;
void calculatePrefetch(const BasePrefetcher::PrefetchInfo &pfi,
std::vector<QueuedPrefetcher::AddrPriority> &addresses);
};