// probe cache for presence of given block.
bool
-Split::probe(int asid, Addr addr) const
+Split::probe(Addr addr) const
{
- bool success = lru->probe(asid, addr);
+ bool success = lru->probe(addr);
if (!success) {
if (lifo && lifo_net)
- success = lifo_net->probe(asid, addr);
+ success = lifo_net->probe(addr);
else if (lru_net)
- success = lru_net->probe(asid, addr);
+ success = lru_net->probe(addr);
}
return success;
}
-SplitBlk*
-Split::findBlock(Packet * &pkt, int &lat)
-{
-
- Addr aligned = blkAlign(pkt->paddr);
-
- if (memHash.count(aligned)) {
- memHash[aligned]++;
- } else if (pkt->nic_pkt) {
- memHash[aligned] = 1;
- }
-
- SplitBlk *blk = lru->findBlock(pkt->paddr, pkt->req->asid, lat);
- if (blk) {
- if (pkt->nic_pkt) {
- NR_CP_hits++;
- } else {
- CR_CP_hits++;
- }
- } else {
- if (lifo && lifo_net) {
- blk = lifo_net->findBlock(pkt->paddr, pkt->req->asid, lat);
-
- } else if (lru_net) {
- blk = lru_net->findBlock(pkt->paddr, pkt->req->asid, lat);
- }
- if (blk) {
- if (pkt->nic_pkt) {
- NR_NP_hits++;
- } else {
- CR_NP_hits++;
- }
- }
- }
-
- if (blk) {
- Tick latency = curTick - blk->ts;
- if (blk->isNIC) {
- if (!blk->isUsed && !pkt->nic_pkt) {
- useByCPUCycleDist.sample(latency);
- nicUseByCPUCycleTotal += latency;
- nicBlksUsedByCPU++;
- }
- }
- blk->isUsed = true;
-
- if (pkt->nic_pkt) {
- DPRINTF(Split, "found block in partition %d\n", blk->part);
- }
- }
- return blk;
-}
SplitBlk*
-Split::findBlock(Addr addr, int asid, int &lat)
+Split::findBlock(Addr addr, int &lat)
{
- SplitBlk *blk = lru->findBlock(addr, asid, lat);
+ SplitBlk *blk = lru->findBlock(addr, lat);
if (!blk) {
if (lifo && lifo_net) {
- blk = lifo_net->findBlock(addr, asid, lat);
+ blk = lifo_net->findBlock(addr, lat);
} else if (lru_net) {
- blk = lru_net->findBlock(addr, asid, lat);
+ blk = lru_net->findBlock(addr, lat);
}
}
}
SplitBlk*
-Split::findBlock(Addr addr, int asid) const
+Split::findBlock(Addr addr) const
{
- SplitBlk *blk = lru->findBlock(addr, asid);
+ SplitBlk *blk = lru->findBlock(addr);
if (!blk) {
if (lifo && lifo_net) {
- blk = lifo_net->findBlock(addr, asid);
+ blk = lifo_net->findBlock(addr);
} else if (lru_net) {
- blk = lru_net->findBlock(addr, asid);
+ blk = lru_net->findBlock(addr);
}
}
}
SplitBlk*
-Split::findReplacement(Packet * &pkt, PacketList* &writebacks,
- BlkList &compress_blocks)
+Split::findReplacement(Addr addr, PacketList &writebacks)
{
SplitBlk *blk;
- if (pkt->nic_pkt) {
+ assert(0);
+#if 0
+ if (pkt->nic_pkt()) {
DPRINTF(Split, "finding a replacement for nic_req\n");
nic_repl++;
if (lifo && lifo_net)
- blk = lifo_net->findReplacement(pkt, writebacks,
- compress_blocks);
+ blk = lifo_net->findReplacement(addr, writebacks);
else if (lru_net)
- blk = lru_net->findReplacement(pkt, writebacks,
- compress_blocks);
+ blk = lru_net->findReplacement(addr, writebacks);
// in this case, this is an LRU only cache, it's non partitioned
else
- blk = lru->findReplacement(pkt, writebacks, compress_blocks);
+ blk = lru->findReplacement(addr, writebacks);
} else {
DPRINTF(Split, "finding replacement for cpu_req\n");
- blk = lru->findReplacement(pkt, writebacks,
- compress_blocks);
+ blk = lru->findReplacement(addr, writebacks);
cpu_repl++;
}
// blk attributes for the new blk coming IN
blk->ts = curTick;
- blk->isNIC = (pkt->nic_pkt) ? true : false;
+ blk->isNIC = (pkt->nic_pkt()) ? true : false;
+#endif
return blk;
}
void
-Split::invalidateBlk(int asid, Addr addr)
+Split::invalidateBlk(Split::BlkType *blk)
{
- SplitBlk *blk = lru->findBlock(addr, asid);
if (!blk) {
+ fatal("FIXME!\n");
+#if 0
if (lifo && lifo_net)
- blk = lifo_net->findBlock(addr, asid);
+ blk = lifo_net->findBlock(addr);
else if (lru_net)
- blk = lru_net->findBlock(addr, asid);
+ blk = lru_net->findBlock(addr);
+#endif
if (!blk)
return;
tagsInUse--;
}
-void
-Split::doCopy(Addr source, Addr dest, int asid, PacketList* &writebacks)
-{
- if (lru->probe(asid, source))
- lru->doCopy(source, dest, asid, writebacks);
- else {
- if (lifo && lifo_net)
- lifo_net->doCopy(source, dest, asid, writebacks);
- else if (lru_net)
- lru_net->doCopy(source, dest, asid, writebacks);
- }
-}
-
void
Split::cleanupRefs()
{
}
Addr
-Split::extractTag(Addr addr, SplitBlk *blk) const
+Split::extractTag(Addr addr) const
{
+ // need to fix this if we want to use it... old interface of
+ // passing in blk was too weird
+ assert(0);
+ return 0;
+/*
if (blk->part == 2) {
if (lifo_net)
return lifo_net->extractTag(addr);
panic("this shouldn't happen");
} else
return lru->extractTag(addr);
+*/
}