Get basic full-system working with AtomicSimpleCPU.
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
This commit is contained in:
@@ -100,6 +100,9 @@ AtomicSimpleCPU::CpuPort::recvFunctional(Packet &pkt)
|
||||
void
|
||||
AtomicSimpleCPU::CpuPort::recvStatusChange(Status status)
|
||||
{
|
||||
if (status == RangeChange)
|
||||
return;
|
||||
|
||||
panic("AtomicSimpleCPU doesn't expect recvStatusChange callback!");
|
||||
}
|
||||
|
||||
@@ -227,10 +230,13 @@ AtomicSimpleCPU::suspendContext(int thread_num)
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -417,6 +423,8 @@ AtomicSimpleCPU::tick()
|
||||
for (int i = 0; i < width; ++i) {
|
||||
numCycles++;
|
||||
|
||||
checkForInterrupts();
|
||||
|
||||
ifetch_req->resetMin();
|
||||
ifetch_pkt->reset();
|
||||
Fault fault = setupFetchPacket(ifetch_pkt);
|
||||
@@ -452,7 +460,8 @@ AtomicSimpleCPU::tick()
|
||||
advancePC(fault);
|
||||
}
|
||||
|
||||
tickEvent.schedule(curTick + latency);
|
||||
if (_status != Idle)
|
||||
tickEvent.schedule(curTick + latency);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -307,8 +307,7 @@ void
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user