Fixes to hitLatency, blocking, buffer allocation.
Single-cpu timing mode seems to work now. --HG-- extra : convert_revision : 720f6172df18a1c941e5bd0e8fdfbd686c13c7ad
This commit is contained in:
31
src/mem/cache/base_cache.hh
vendored
31
src/mem/cache/base_cache.hh
vendored
@@ -195,6 +195,11 @@ class BaseCache : public MemObject
|
||||
/** Block size of this cache */
|
||||
const int blkSize;
|
||||
|
||||
/**
|
||||
* The latency of a hit in this device.
|
||||
*/
|
||||
int hitLatency;
|
||||
|
||||
/** The number of targets for each MSHR. */
|
||||
const int numTarget;
|
||||
|
||||
@@ -464,15 +469,10 @@ class BaseCache : public MemObject
|
||||
if (blocked == 0) {
|
||||
blocked_causes[cause]++;
|
||||
blockedCycle = curTick;
|
||||
cpuSidePort->setBlocked();
|
||||
}
|
||||
int old_state = blocked;
|
||||
if (!(blocked & flag)) {
|
||||
//Wasn't already blocked for this cause
|
||||
blocked |= flag;
|
||||
DPRINTF(Cache,"Blocking for cause %s\n", cause);
|
||||
if (!old_state)
|
||||
cpuSidePort->setBlocked();
|
||||
}
|
||||
blocked |= flag;
|
||||
DPRINTF(Cache,"Blocking for cause %d, mask=%d\n", cause, blocked);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -485,16 +485,11 @@ class BaseCache : public MemObject
|
||||
void clearBlocked(BlockedCause cause)
|
||||
{
|
||||
uint8_t flag = 1 << cause;
|
||||
DPRINTF(Cache,"Unblocking for cause %s, causes left=%i\n",
|
||||
cause, blocked);
|
||||
if (blocked & flag)
|
||||
{
|
||||
blocked &= ~flag;
|
||||
if (!isBlocked()) {
|
||||
blocked_cycles[cause] += curTick - blockedCycle;
|
||||
DPRINTF(Cache,"Unblocking from all causes\n");
|
||||
cpuSidePort->clearBlocked();
|
||||
}
|
||||
blocked &= ~flag;
|
||||
DPRINTF(Cache,"Unblocking for cause %d, mask=%d\n", cause, blocked);
|
||||
if (blocked == 0) {
|
||||
blocked_cycles[cause] += curTick - blockedCycle;
|
||||
cpuSidePort->clearBlocked();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user