imported patch pagewalker.patch

--HG--
extra : convert_revision : 8ddde313f2249e1346fa51372a156f0d2ddc3b8f
This commit is contained in:
Gabe Black 2007-11-21 00:04:15 -08:00
parent ce26c3ccec
commit ab598eadbf
2 changed files with 6 additions and 2 deletions

View file

@ -101,6 +101,8 @@ class BaseCPU(SimObject):
tracer = Param.InstTracer(default_tracer, "Instruction tracer") tracer = Param.InstTracer(default_tracer, "Instruction tracer")
_mem_ports = [] _mem_ports = []
if build_env['TARGET_ISA'] == 'x86' and build_env['FULL_SYSTEM']:
_mem_ports = ["itb.walker.port", "dtb.walker.port"]
def connectMemPorts(self, bus): def connectMemPorts(self, bus):
for p in self._mem_ports: for p in self._mem_ports:
@ -108,12 +110,14 @@ class BaseCPU(SimObject):
exec('self.%s = bus.port' % p) exec('self.%s = bus.port' % p)
def addPrivateSplitL1Caches(self, ic, dc): def addPrivateSplitL1Caches(self, ic, dc):
assert(len(self._mem_ports) == 2 or len(self._mem_ports) == 3) assert(len(self._mem_ports) < 6)
self.icache = ic self.icache = ic
self.dcache = dc self.dcache = dc
self.icache_port = ic.cpu_side self.icache_port = ic.cpu_side
self.dcache_port = dc.cpu_side self.dcache_port = dc.cpu_side
self._mem_ports = ['icache.mem_side', 'dcache.mem_side'] self._mem_ports = ['icache.mem_side', 'dcache.mem_side']
if build_env['TARGET_ISA'] == 'x86' and build_env['FULL_SYSTEM']:
self._mem_ports += ["itb.walker_port", "dtb.walker_port"]
def addTwoLevelCacheHierarchy(self, ic, dc, l2c): def addTwoLevelCacheHierarchy(self, ic, dc, l2c):
self.addPrivateSplitL1Caches(ic, dc) self.addPrivateSplitL1Caches(ic, dc)

View file

@ -466,9 +466,9 @@ BaseSimpleCPU::advancePC(Fault fault)
if (fault != NoFault) { if (fault != NoFault) {
curMacroStaticInst = StaticInst::nullStaticInstPtr; curMacroStaticInst = StaticInst::nullStaticInstPtr;
predecoder.reset(); predecoder.reset();
fault->invoke(tc);
thread->setMicroPC(0); thread->setMicroPC(0);
thread->setNextMicroPC(1); thread->setNextMicroPC(1);
fault->invoke(tc);
} else { } else {
//If we're at the last micro op for this instruction //If we're at the last micro op for this instruction
if (curStaticInst && curStaticInst->isLastMicroop()) { if (curStaticInst && curStaticInst->isLastMicroop()) {