inorder-faults: ignore unalign translation faults for prefetches
authorKorey Sewell <ksewell@umich.edu>
Tue, 12 May 2009 19:01:16 +0000 (15:01 -0400)
committerKorey Sewell <ksewell@umich.edu>
Tue, 12 May 2009 19:01:16 +0000 (15:01 -0400)
src/cpu/inorder/resources/tlb_unit.cc

index 238807ebc4da3eb44e52725b40de5960361ebf3b..93c066bb06e92bb739926be09940293908ca3f2d 100644 (file)
@@ -161,13 +161,21 @@ TLBUnit::execute(int slot_idx)
                         "addr:%08p for [sn:%i] %s.\n", tid, tlb_req->fault->name(),
                         tlb_req->memReq->getVaddr(), seq_num, inst->instName());
 
+                if (inst->isDataPrefetch()) {
+                    DPRINTF(InOrderTLB, "Ignoring %s fault for data prefetch\n",
+                            tlb_req->fault->name());
+
+                    tlb_req->fault = NoFault;
+
+                    tlb_req->done();
+                } else {
                     cpu->pipelineStage[stage_num]->setResStall(tlb_req, tid);
                     tlbBlocked[tid] = true;
                     scheduleEvent(slot_idx, 1);
 
                     // Let CPU handle the fault
                     cpu->trap(tlb_req->fault, tid);
-
+                }
             } else {
                 DPRINTF(InOrderTLB, "[tid:%i]: [sn:%i] virt. addr %08p translated "
                         "to phys. addr:%08p.\n", tid, seq_num,