Couple more minor bug fixes for FS timing mode.

src/cpu/simple/timing.cc:
    Fix another SC problem.
src/mem/cache/cache_impl.hh:
    Forgot to call makeTimingResponse() on uncached timing responses.

--HG--
extra : convert_revision : 5a5a58ca2053e4e8de2133205bfd37de15eb4209
This commit is contained in:
Steve Reinhardt 2007-07-02 13:57:45 -07:00
parent e9c04dad60
commit 4b68652c87
2 changed files with 8 additions and 6 deletions

View file

@ -356,8 +356,6 @@ TimingSimpleCPU::write(T data, Addr addr, unsigned flags, uint64_t *res)
MemCmd cmd = MemCmd::WriteReq; // default
bool do_access = true; // flag to suppress cache access
assert(dcache_pkt == NULL);
if (req->isLocked()) {
cmd = MemCmd::StoreCondReq;
do_access = TheISA::handleLockedWrite(thread, req);
@ -369,11 +367,14 @@ TimingSimpleCPU::write(T data, Addr addr, unsigned flags, uint64_t *res)
}
}
if (do_access) {
dcache_pkt = new Packet(req, cmd, Packet::Broadcast);
dcache_pkt->allocate();
dcache_pkt->set(data);
// Note: need to allocate dcache_pkt even if do_access is
// false, as it's used unconditionally to call completeAcc().
assert(dcache_pkt == NULL);
dcache_pkt = new Packet(req, cmd, Packet::Broadcast);
dcache_pkt->allocate();
dcache_pkt->set(data);
if (do_access) {
if (!dcachePort.sendTiming(dcache_pkt)) {
_status = DcacheRetry;
} else {

View file

@ -698,6 +698,7 @@ Cache<TagStore>::handleResponse(PacketPtr pkt)
if (pkt->isRead()) {
target->pkt->setData(pkt->getPtr<uint8_t>());
}
target->pkt->makeTimingResponse();
cpuSidePort->respond(target->pkt, time);
}
assert(!mshr->hasTargets());