Merge zizzer:/z/m5/Bitkeeper/newmem
into zizzer.eecs.umich.edu:/.automount/zazzer/z/rdreslin/m5bk/newmem --HG-- extra : convert_revision : 507eefde3514c35ca8420408cc89590d83cc6fc6
This commit is contained in:
commit
a1d208a65d
3 changed files with 54 additions and 22 deletions
31
src/mem/cache/base_cache.cc
vendored
31
src/mem/cache/base_cache.cc
vendored
|
@ -98,6 +98,37 @@ BaseCache::CachePort::clearBlocked()
|
|||
blocked = false;
|
||||
}
|
||||
|
||||
BaseCache::CacheEvent::CacheEvent(CachePort *_cachePort)
|
||||
: Event(&mainEventQueue, CPU_Tick_Pri), cachePort(_cachePort)
|
||||
{
|
||||
this->setFlags(AutoDelete);
|
||||
pkt = NULL;
|
||||
}
|
||||
|
||||
BaseCache::CacheEvent::CacheEvent(CachePort *_cachePort, Packet *_pkt)
|
||||
: Event(&mainEventQueue, CPU_Tick_Pri), cachePort(_cachePort), pkt(_pkt)
|
||||
{
|
||||
this->setFlags(AutoDelete);
|
||||
}
|
||||
|
||||
void
|
||||
BaseCache::CacheEvent::process()
|
||||
{
|
||||
if (!pkt)
|
||||
{
|
||||
if (!cachePort->isCpuSide)
|
||||
pkt = cachePort->cache->getPacket();
|
||||
//Else get coherence req
|
||||
}
|
||||
cachePort->sendTiming(pkt);
|
||||
}
|
||||
|
||||
const char *
|
||||
BaseCache::CacheEvent::description()
|
||||
{
|
||||
return "timing event\n";
|
||||
}
|
||||
|
||||
Port*
|
||||
BaseCache::getPort(const std::string &if_name, int idx)
|
||||
{
|
||||
|
|
32
src/mem/cache/base_cache.hh
vendored
32
src/mem/cache/base_cache.hh
vendored
|
@ -79,9 +79,9 @@ class BaseCache : public MemObject
|
|||
{
|
||||
class CachePort : public Port
|
||||
{
|
||||
public:
|
||||
BaseCache *cache;
|
||||
|
||||
public:
|
||||
CachePort(const std::string &_name, BaseCache *_cache, bool _isCpuSide);
|
||||
|
||||
protected:
|
||||
|
@ -110,10 +110,11 @@ class BaseCache : public MemObject
|
|||
|
||||
struct CacheEvent : public Event
|
||||
{
|
||||
Packet *pkt;
|
||||
CachePort *cachePort;
|
||||
Packet *pkt;
|
||||
|
||||
CacheEvent(Packet *pkt, CachePort *cachePort);
|
||||
CacheEvent(CachePort *_cachePort);
|
||||
CacheEvent(CachePort *_cachePort, Packet *_pkt);
|
||||
void process();
|
||||
const char *description();
|
||||
};
|
||||
|
@ -147,6 +148,11 @@ class BaseCache : public MemObject
|
|||
fatal("No implementation");
|
||||
}
|
||||
|
||||
virtual Packet *getPacket()
|
||||
{
|
||||
fatal("No implementation");
|
||||
}
|
||||
|
||||
/**
|
||||
* Bit vector of the blocking reasons for the access path.
|
||||
* @sa #BlockedCause
|
||||
|
@ -388,7 +394,6 @@ class BaseCache : public MemObject
|
|||
if (!isBlockedForSnoop()) {
|
||||
memSidePort->clearBlocked();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -407,10 +412,13 @@ class BaseCache : public MemObject
|
|||
*/
|
||||
void setMasterRequest(RequestCause cause, Tick time)
|
||||
{
|
||||
if (!doMasterRequest())
|
||||
{
|
||||
BaseCache::CacheEvent * reqCpu = new BaseCache::CacheEvent(memSidePort);
|
||||
reqCpu->schedule(time);
|
||||
}
|
||||
uint8_t flag = 1<<cause;
|
||||
masterRequests |= flag;
|
||||
assert("Implement\n" && 0);
|
||||
// mi->pktuest(time);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -462,8 +470,10 @@ class BaseCache : public MemObject
|
|||
*/
|
||||
void respond(Packet *pkt, Tick time)
|
||||
{
|
||||
assert("Implement\n" && 0);
|
||||
// si->respond(pkt,time);
|
||||
pkt->makeTimingResponse();
|
||||
pkt->result = Packet::Success;
|
||||
CacheEvent *reqCpu = new CacheEvent(cpuSidePort, pkt);
|
||||
reqCpu->schedule(time);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -476,8 +486,10 @@ class BaseCache : public MemObject
|
|||
if (!pkt->req->isUncacheable()) {
|
||||
missLatency[pkt->cmdToIndex()][pkt->req->getThreadNum()] += time - pkt->time;
|
||||
}
|
||||
assert("Implement\n" && 0);
|
||||
// si->respond(pkt,time);
|
||||
pkt->makeTimingResponse();
|
||||
pkt->result = Packet::Success;
|
||||
CacheEvent *reqCpu = new CacheEvent(cpuSidePort, pkt);
|
||||
reqCpu->schedule(time);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
13
src/mem/cache/cache.hh
vendored
13
src/mem/cache/cache.hh
vendored
|
@ -168,7 +168,7 @@ class Cache : public BaseCache
|
|||
* Selects a request to send on the bus.
|
||||
* @return The memory request to service.
|
||||
*/
|
||||
Packet * getPacket();
|
||||
virtual Packet * getPacket();
|
||||
|
||||
/**
|
||||
* Was the request was sent successfully?
|
||||
|
@ -241,17 +241,6 @@ class Cache : public BaseCache
|
|||
return missQueue->getMisses();
|
||||
}
|
||||
|
||||
/**
|
||||
* Send a response to the slave interface.
|
||||
* @param req The request being responded to.
|
||||
* @param time The time the response is ready.
|
||||
*/
|
||||
void respond(Packet * &pkt, Tick time)
|
||||
{
|
||||
//si->respond(pkt,time);
|
||||
cpuSidePort->sendAtomic(pkt);
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform the access specified in the request and return the estimated
|
||||
* time of completion. This function can either update the hierarchy state
|
||||
|
|
Loading…
Reference in a new issue