SConscript:
Comment out sinic for now... needs to be fixed to compile under newmem.
configs/test/SysPaths.py:
Fix paths.
configs/test/fs.py:
SimpleCPU -> AtomicSimpleCPU
Fix vmlinux path
cpu/simple/atomic.cc:
Fix suspendContext() so quiesce works.
Don't forget to checkForInterrupts().
cpu/simple/base.cc:
Minor fix to interrupt check code.
dev/ide_disk.hh:
Don't declare regStats() in header since it's not in
.cc file anymore (will need to add it back in when
stats are added back).
dev/io_device.cc:
Set packet dest to Packet::Broadcast.
dev/pciconfigall.cc:
Set PCI config packet result to Success.
python/m5/objects/Root.py:
Add debug object to Root so things like break_cycles
can be set from command line.
--HG--
extra : convert_revision :
aa1c652fe589784e753e13ad9acb0cd5f3b6eafb
dev/platform.cc
dev/simconsole.cc
dev/simple_disk.cc
- dev/sinic.cc
dev/tsunami.cc
dev/tsunami_cchip.cc
dev/tsunami_io.cc
sim/pseudo_inst.cc
''')
+# dev/sinic.cc
if env['TARGET_ISA'] == 'alpha':
DISKDIR = SYSTEMDIR + '/disks'
def disk(file):
- return '%s/%s' % (DISKDIR, file)
+ return os.path.join(DISKDIR, file)
def binary(file):
- return '%s/%s' % (BINDIR, file)
+ return os.path.join(BINDIR, file)
def script(file):
- return '%s/%s' % ('/z/saidi/work/m5.newmem/configs/boot', file)
+ return os.path.join(SYSTEMDIR, 'boot', file)
read_only=True)
simple_disk = SimpleDisk(disk=Parent.raw_image)
intrctrl = IntrControl()
- cpu = SimpleCPU(mem=Parent.magicbus2)
+ cpu = AtomicSimpleCPU(mem=Parent.magicbus2)
sim_console = SimConsole(listener=ConsoleListener(port=3456))
- kernel = '/z/saidi/work/m5.newmem/build/vmlinux'
+ kernel = binary('vmlinux')
pal = binary('ts_osfpal')
console = binary('console')
boot_osflags = 'root=/dev/hda1 console=ttyS0'
void
AtomicSimpleCPU::CpuPort::recvStatusChange(Status status)
{
+ if (status == RangeChange)
+ return;
+
panic("AtomicSimpleCPU doesn't expect recvStatusChange callback!");
}
assert(cpuXC);
assert(_status == Running);
- assert(tickEvent.scheduled());
+
+ // tick event may not be scheduled if this gets called from inside
+ // an instruction's execution, e.g. "quiesce"
+ if (tickEvent.scheduled())
+ tickEvent.deschedule();
notIdleFraction--;
- tickEvent.deschedule();
_status = Idle;
}
for (int i = 0; i < width; ++i) {
numCycles++;
+ checkForInterrupts();
+
ifetch_req->resetMin();
ifetch_pkt->reset();
Fault fault = setupFetchPacket(ifetch_pkt);
advancePC(fault);
}
- tickEvent.schedule(curTick + latency);
+ if (_status != Idle)
+ tickEvent.schedule(curTick + latency);
}
BaseSimpleCPU::checkForInterrupts()
{
#if FULL_SYSTEM
- if (checkInterrupts && check_interrupts() && !cpuXC->inPalMode() &&
- status() != IcacheAccessComplete) {
+ if (checkInterrupts && check_interrupts() && !cpuXC->inPalMode()) {
int ipl = 0;
int summary = 0;
checkInterrupts = false;
*/
void reset(int id);
- /**
- * Register statistics.
- */
- void regStats();
-
-
/**
* Set the controller for this device
* @param c The IDE controller
basePkt.flags = 0;
basePkt.coherence = NULL;
basePkt.senderState = NULL;
- basePkt.src = 0;
- basePkt.dest = 0;
+ basePkt.dest = Packet::Broadcast;
basePkt.cmd = cmd;
basePkt.result = Unknown;
basePkt.req = NULL;
default:
panic("invalid pci config write size\n");
}
+ pkt.result = Success;
return pioDelay;
}
from Statistics import Statistics
from Trace import Trace
from ExeTrace import ExecutionTrace
+from Debug import Debug
class Root(SimObject):
type = 'Root'
trace = Trace()
exetrace = ExecutionTrace()
serialize = Serialize()
+ debug = Debug()