Hi,
I am currently experimenting with the timing CPU in X86_FS, and I have
encountered an assertion failure while booting Linux (using Linux boot as a
test):
m5.debug: build/X86_FS/cpu/simple/timing.cc:900: void
TimingSimpleCPU::completeDataAccess(Packet*): Assertion `_status ==
DcacheWaitResponse || _status == DTBWaitResponse' failed.
I have attached a stack trace (note that completeDataAccess is called
twice in the trace). The current macro-instruction is a POP_M, and the
current uop is the Cda.
In timing mode since the Cda doesn't access memory (the Request::NO_ACCESS
flag is set by Cda), it doesn't wait on a memory access or TLB, so the
status of the CPU before the assertion is _status = Running. I've tried
adding "|| _status == Running" to the conditional in the assertion, and the
simulation gets past that point, but crashes later. I'm not sure if this is
a sound fix, or if there is a better way to handle this.
While browsing the code, I noticed that further up in the call stack,
TimingSimpleCPU::write is called, and when executing this same test using
the atomic CPU, AtomicSimpleCPU::write is called. In the
AtomicSimpleCPU::write code, there is a special case test for
when the Request::NO_ACCESS flag is set. I wonder if the same should occur
in TimingSimpleCPU::write?
Thanks,
Joel
--
Joel Hestness
PhD Student, Computer Architecture
Dept. of Computer Science, University of Texas - Austin
http://www.cs.utexas.edu/~hestness
Starting program: /home/jhestnes/work/m5/build/X86_FS/m5.debug --outdir=$OUTDIR
./configs/example/fs.py --timing
[Thread debugging using libthread_db enabled]
Program received signal SIGABRT, Aborted.
0x00007ffff65f2a75 in *__GI_raise (sig=<value optimized out>) at
../nptl/sysdeps/unix/sysv/linux/raise.c:64
64 ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
in ../nptl/sysdeps/unix/sysv/linux/raise.c
#0 0x00007ffff65f2a75 in *__GI_raise (sig=<value optimized out>) at
../nptl/sysdeps/unix/sysv/linux/raise.c:64
#1 0x00007ffff65f65c0 in *__GI_abort () at abort.c:92
#2 0x00007ffff65eb941 in *__GI___assert_fail (assertion=0xd5ef38 "_status ==
DcacheWaitResponse || _status == DTBWaitResponse",
file=<value optimized out>, line=900, function=0xd5fca0 "void
TimingSimpleCPU::completeDataAccess(Packet*)") at assert.c:81
#3 0x0000000000486796 in TimingSimpleCPU::completeDataAccess (this=0x1d13830,
pkt=0x1d1fa90) at build/X86_FS/cpu/simple/timing.cc:900
#4 0x0000000000483f49 in TimingSimpleCPU::sendData (this=0x1d13830,
req=0x1d1f5b0, data=0x2882b70 "", res=0x0, read=false)
at build/X86_FS/cpu/simple/timing.cc:280
#5 0x0000000000484c57 in TimingSimpleCPU::finishTranslation (this=0x1d13830,
state=0x2878270) at build/X86_FS/cpu/simple/timing.cc:659
#6 0x000000000048caf9 in DataTranslation<TimingSimpleCPU>::finish
(this=0x2882f00, fault=..., req=0x1d1f5b0, tc=0x1d154a0, mode=BaseTLB::Write)
at build/X86_FS/cpu/translation.hh:233
#7 0x000000000063be1d in X86ISA::TLB::translateTiming (this=0x1d10080,
req=0x1d1f5b0, tc=0x1d154a0, translation=0x2882f00, mode=BaseTLB::Write)
at build/X86_FS/arch/x86/tlb.cc:721
#8 0x000000000048badd in TimingSimpleCPU::write<unsigned long>
(this=0x1d13830, data=0, addr=18446744071571259048, flags=524291, res=0x0)
at build/X86_FS/cpu/simple/timing.cc:580
#9 0x0000000000ab143d in X86ISA::LdStOp::write<TimingSimpleCPU, unsigned long>
(this=0x2882cf0, xc=0x1d13830, m...@0x7fffffffc198,
EA=18446744071571259048, flags=524291) at
build/X86_FS/arch/x86/insts/microldstop.hh:141
#10 0x0000000000aa3bfc in X86ISAInst::Cda::initiateAcc (this=0x2882cf0,
xc=0x1d13830, traceData=0x0) at
build/X86_FS/arch/x86/timing_simple_cpu_exec.cc:9199
#11 0x0000000000485e32 in TimingSimpleCPU::completeIfetch (this=0x1d13830,
pkt=0x0) at build/X86_FS/cpu/simple/timing.cc:770
#12 0x00000000004853ac in TimingSimpleCPU::fetch (this=0x1d13830) at
build/X86_FS/cpu/simple/timing.cc:690
#13 0x0000000000485696 in TimingSimpleCPU::advanceInst (this=0x1d13830,
fault=...) at build/X86_FS/cpu/simple/timing.cc:735
#14 0x000000000048699e in TimingSimpleCPU::completeDataAccess (this=0x1d13830,
pkt=0x1d1fa90) at build/X86_FS/cpu/simple/timing.cc:932
#15 0x0000000000487097 in TimingSimpleCPU::DcachePort::recvTiming
(this=0x1d13b10, pkt=0x1d1fa90) at build/X86_FS/cpu/simple/timing.cc:964
#16 0x0000000000487f5e in Port::sendTiming (this=0x1d16760, pkt=0x1d1fa90) at
build/X86_FS/mem/port.hh:186
#17 0x0000000000507f28 in Bus::recvTiming (this=0x1a4ce00, pkt=0x1d1fa90) at
build/X86_FS/mem/bus.cc:243
#18 0x0000000000510777 in Bus::BusPort::recvTiming (this=0x1d11650,
pkt=0x1d1fa90) at build/X86_FS/mem/bus.hh:89
#19 0x0000000000487f5e in Port::sendTiming (this=0x1d16170, pkt=0x1d1fa90) at
build/X86_FS/mem/port.hh:186
#20 0x000000000053f7da in SimpleTimingPort::sendDeferredPacket (this=0x1d16170)
at build/X86_FS/mem/tport.cc:150
#21 0x0000000000540431 in SimpleTimingPort::processSendEvent (this=0x1d16170)
at build/X86_FS/mem/tport.cc:191
#22 0x0000000000541133 in EventWrapper<SimpleTimingPort,
&(SimpleTimingPort::processSendEvent())>::process (this=0x1a4c1c8)
at build/X86_FS/sim/eventq.hh:587
#23 0x00000000004a2dba in EventQueue::serviceOne (this=0x127f2c0) at
build/X86_FS/sim/eventq.cc:203
#24 0x00000000004e93aa in simulate (num_cycles=9223372036854775807) at
build/X86_FS/sim/simulate.cc:73
#25 0x000000000041fb8c in _wrap_simulate__SWIG_0 (args=0x193dd10) at
build/X86_FS/python/swig/event_wrap.cc:4378
#26 0x000000000041fd4a in _wrap_simulate (self=0x0, args=0x193dd10) at
build/X86_FS/python/swig/event_wrap.cc:4428
#27 0x00007ffff73fd313 in PyEval_EvalFrameEx () from
/usr/lib/libpython2.6.so.1.0
#28 0x00007ffff73fed60 in PyEval_EvalCodeEx () from /usr/lib/libpython2.6.so.1.0
#29 0x00007ffff73fd0ab in PyEval_EvalFrameEx () from
/usr/lib/libpython2.6.so.1.0
#30 0x00007ffff73fd928 in PyEval_EvalFrameEx () from
/usr/lib/libpython2.6.so.1.0
#31 0x00007ffff73fed60 in PyEval_EvalCodeEx () from /usr/lib/libpython2.6.so.1.0
#32 0x00007ffff73fee32 in PyEval_EvalCode () from /usr/lib/libpython2.6.so.1.0
#33 0x00007ffff73fe0b9 in PyEval_EvalFrameEx () from
/usr/lib/libpython2.6.so.1.0
#34 0x00007ffff73fed60 in PyEval_EvalCodeEx () from /usr/lib/libpython2.6.so.1.0
#35 0x00007ffff73fd0ab in PyEval_EvalFrameEx () from
/usr/lib/libpython2.6.so.1.0
#36 0x00007ffff73fed60 in PyEval_EvalCodeEx () from /usr/lib/libpython2.6.so.1.0
#37 0x00007ffff73fee32 in PyEval_EvalCode () from /usr/lib/libpython2.6.so.1.0
#38 0x00007ffff741cd1c in PyRun_StringFlags () from /usr/lib/libpython2.6.so.1.0
#39 0x00000000004adfe9 in m5Main (argc=4, argv=0x7fffffffe178) at
build/X86_FS/sim/init.cc:194
#40 0x000000000040954b in main (argc=4, argv=0x7fffffffe178) at
build/X86_FS/sim/main.cc:57
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev