Hello everyone,
I am using Ruby tester to verify my cache coherence
protocol and found a weird problem. Basically I got this error message of
possible deadlock:
Warning: in fn virtual void Sequencer::wakeup() in
system/Sequencer.C:121: Possible Deadlock detected Warning: in fn virtual
void Sequencer::wakeup() in system/Sequencer.C:122: request is [CacheMsg:
Address=[0xdee, line 0xdc0] Type=ATOMIC ProgramCounter=[0xf0, line 0xc0]
AccessMode=SupervisorMode Size=1 Prefetch=No Version=0 Aborted=0 Time=10624
] Warning: in fn virtual void Sequencer::wakeup() in system/Sequencer.C:123:
m_chip_ptr->getID() is 2 Warning: in fn virtual void Sequencer::wakeup()
in system/Sequencer.C:124: m_version is 0 Warning: in fn virtual void
Sequencer::wakeup() in system/Sequencer.C:125: current_time is
1000002 Warning: in fn virtual void Sequencer::wakeup() in
system/Sequencer.C:126: request.getTime() is 10624 Warning: in fn virtual
void Sequencer::wakeup() in system/Sequencer.C:127: current_time -
request.getTime() is 989378 Warning: in fn virtual void Sequencer::wakeup()
in system/Sequencer.C:128: keys.size() is 16 Warning: in fn virtual void
Sequencer::wakeup() in system/Sequencer.C:129: *m_writeRequestTable_ptr is [
[0xdc0, line 0xdc0]=
I searched for address 0xdee and it appears NO
where in the output trace. Then I went to request time 10624 and saw
this:
10624 2
-1
Seq
Begin
> [0xdc0, line 0xdc0]
After this line there is no occurance of 0xdc0.
It appears to me that after the request
on 0xdc0 is issued by the sequencer, nothing else was done. I don't
even know wheter it is instruction read or load/store. Then somehow it
leads to a deadlock. Could anyone please give me a hint on how might I find out
the problem?
Thank you very much!
Lei
|