1045,1085d1044
< DRAMCtrl::moveToRespQ()
< {
< // Remove from read queue
< DRAMPacket* dram_pkt = readQueue.front();
< readQueue.pop_front();
<
< // sanity check
< assert(dram_pkt->size <= burstSize);
<
< // Insert into response queue sorted by readyTime
< // It will be sent back to the requestor at its
< // readyTime
< if (respQueue.empty()) {
< respQueue.push_front(dram_pkt);
< assert(!respondEvent.scheduled());
< assert(dram_pkt->readyTime >= curTick());
< schedule(respondEvent, dram_pkt->readyTime);
< } else {
< bool done = false;
< auto i = respQueue.begin();
< while (!done && i != respQueue.end()) {
< if ((*i)->readyTime > dram_pkt->readyTime) {
< respQueue.insert(i, dram_pkt);
< done = true;
< }
< ++i;
< }
<
< if (!done)
< respQueue.push_back(dram_pkt);
<
< assert(respondEvent.scheduled());
<
< if (respQueue.front()->readyTime < respondEvent.when()) {
< assert(respQueue.front()->readyTime >= curTick());
< reschedule(respondEvent, respQueue.front()->readyTime);
< }
< }
< }
<
< void
1155c1114
< doDRAMAccess(readQueue.front());
---
> DRAMPacket* dram_pkt = readQueue.front();
1156a1116,1117
> doDRAMAccess(dram_pkt);
>
1158,1161c1119
< // It will be moved to a separate response queue with a
< // correct readyTime, and eventually be sent back at that
< // time
< moveToRespQ();
---
> readQueue.pop_front();
1162a1121,1136
> // sanity check
> assert(dram_pkt->size <= burstSize);
> assert(dram_pkt->readyTime >= curTick());
>
> // Insert into response queue. It will be sent back to the
> // requestor at its readyTime
> if (respQueue.empty()) {
> assert(!respondEvent.scheduled());
> schedule(respondEvent, dram_pkt->readyTime);
> } else {
> assert(respQueue.back()->readyTime <= dram_pkt->readyTime);
> assert(respondEvent.scheduled());
> }
>
> respQueue.push_back(dram_pkt);
>