Hi all,

I was using the Ruby MESI_Three_Level protocol with strict ordered FIFO and hit 
a ordering violation.
After some digging, I found that the cause of the issue.

There are two events enqueue message to the same message buffer with different 
arrival delay, where the first executed one has higher delay and cause the 
violation.

At tick 63032684, L1Cache_Controller executes forward_eviction_to_L0_else() and 
directly enqueues the message to the message queue of the L0Cache_Controller, 
but the arrival time is (curTick + l1_request_delay), where the l1_reqest_delay 
is the ticks for 2 cycles.
So this will set the m_last_arrival_time to 63033256.

At the same tick (63032684), L0Cache_Controller delay the head message due to 
blocking, and re-enqueue it to the end of the queue with a new arrival time, 
which is (curTick + cyclesToTicks(Cycles(1))), which is 63032970.

So the second one's arrival time is less than the first one's arrival time, 
violating the strict fifo order.

This is due to the arrival delay is accounted for after the message is enqueued 
to the message buffer. But two entities may directly enqueue messages to the 
same message buffer (even in the same cycle) with different arrival delays.

Is the logic broken or there are some assumption for using strict fifo?

Currently I disable the strict_fifo flag as a workaround.
Any suggestions for fixing this issue?

Please see the debug log below:
The message buffer is system.ruby.l1_cntrl0.bufferFromL1, the 
L0Cache_Controller is system.ruby.l0_cntrl0, and the L1Cache_Controller is 
system.ruby.l1_cntrl0.
-------------------------------------------------------------
63032398: system.ruby.l0_cntrl0.bufferFromL1: break here
63032398: system.ruby.l0_cntrl0.bufferFromL1: Enqueue arrival_time: 63032684, 
Message: [CoherenceMsg: addr = [0x11e580, line 0x11e580] Class = INV_ELSE pc = 
[0x0, line 0x0] AccessMode = User Sender = L1Cache-0 Dest = L0Cache-0 
MessageSize = Control DataBlk = [ 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 
0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 
0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 
0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 ] Dirty = 0 Prefetch = No ]
63032398: system.ruby.l0_cntrl0.mandatoryQueue: Peeking at head of queue.
63032398: system.ruby.l0_cntrl0.mandatoryQueue: Message: [RubyRequest: 
LineAddress = 0x3a2c0 PhysicalAddress = 0x3a2e0 Type = IFETCH ProgramCounter = 
0x43a2e0 AccessMode = Supervisor Size = 16 Prefetch = No ]
63032398: system.ruby.l0_cntrl0.Dcache: No tag match for address: 0x3a2c0
63032398: system.ruby.l0_cntrl0.mandatoryQueue: Peeking at head of queue.
63032398: system.ruby.l0_cntrl0.mandatoryQueue: Message: [RubyRequest: 
LineAddress = 0x3a2c0 PhysicalAddress = 0x3a2e0 Type = IFETCH ProgramCounter = 
0x43a2e0 AccessMode = Supervisor Size = 16 Prefetch = No ]
63032398: system.ruby.l0_cntrl0.mandatoryQueue: Popping
63032398: system.ruby.l0_cntrl0.Dcache: No tag match for address: 0x3a2c0
63032398: system.ruby.l1_cntrl0.requestFromL2: Enqueue arrival_time: 63032684, 
Message: [RequestMsg: addr = [0x26300, line 0x26300] Type = GETS pc = [0x5, 
line 0x0] AccessMode = User Requestor = L1Cache-1 Destination = [NetDest (17) 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  - 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0  -  - 0 0 0 0  -  -  -  -  -  -  -  -  -  -  -  -  - ] 
MessageSize = Request_Control DataBlk = [ 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 
0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 
0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 
0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 ] Len = 0 Dirty = 0 
Prefetch = No ]
63032684: system.ruby.l1_cntrl10.responseFromL2: Enqueue arrival_time: 
63032970, Message: [ResponseMsg: addr = [0x3a400, line 0x3a400] Type = DATA 
Sender = L2Cache-0 Destination = [NetDest (17) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  
- 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0  - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  -  - 0 0 
0 0  -  -  -  -  -  -  -  -  -  -  -  -  - ] DataBlk = [ 0xb9 0x1 0x0 0x0 0x0 
0x89 0xd0 0xf0 0x41 0xf 0xb1 0x8 0xf 0x84 0xbc 0xfe 0xff 0xff 0x4c 0x89 0xc7 
0xe8 0x16 0xbf 0xfe 0xff 0xe9 0xaf 0xfe 0xff 0xff 0x90 0x87 0x7 0x83 0xf8 0x1 
0x7e 0x8e 0x45 0x31 0xd2 0xba 0x1 0x0 0x0 0x0 0xbe 0x81 0x0 0x0 0x0 0xb8 0xca 
0x0 0x0 0x0 0xf 0x5 0xe9 0x75 0xff 0xff 0xff ] Dirty = 0 AckCount = 0 
MessageSize = Response_Data ]
63032684: system.ruby.l1_cntrl0.requestFromL2: Peeking at head of queue.
63032684: system.ruby.l1_cntrl0.requestFromL2: Message: [RequestMsg: addr = 
[0x26300, line 0x26300] Type = GETS pc = [0x5, line 0x0] AccessMode = User 
Requestor = L1Cache-1 Destination = [NetDest (17) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0  - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  -  - 0 
0 0 0  -  -  -  -  -  -  -  -  -  -  -  -  - ] MessageSize = Request_Control 
DataBlk = [ 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 
0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 
0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 
0x0 0x0 0x0 0x0 0x0 0x0 0x0 ] Len = 0 Dirty = 0 Prefetch = No ]

Breakpoint 1, MessageBuffer::enqueue (this=0x556cb5704d80, 
message=std::shared_ptr<Message> (use count 2, weak count 0) = {...}, 
current_time=63032684, delta=572) at 
build/X86_MESI_Three_Level_Characterization/mem/ruby/network/MessageBuffer.cc:166
166             DPRINTF(RubyQueue, "break here\n");
(gdb) bt
#0  MessageBuffer::enqueue (this=0x556cb5704d80, 
message=std::shared_ptr<Message> (use count 2, weak count 0) = {...}, 
current_time=63032684, delta=572) at 
build/X86_MESI_Three_Level_Characterization/mem/ruby/network/MessageBuffer.cc:166
#1  0x0000556cb1663a45 in L1Cache_Controller::forward_eviction_to_L0_else 
(this=0x556cb5c70000, m_tbe_ptr=@0x7ffc78089070: 0x0, 
m_cache_entry_ptr=@0x7ffc78089078: 0x556d497ccc80, addr=156416)
    at 
build/X86_MESI_Three_Level_Characterization/mem/ruby/protocol/L1Cache_Controller.cc:909
#2  0x0000556cb166be90 in L1Cache_Controller::doTransitionWorker 
(this=0x556cb5c70000, event=L1Cache_Event_L0_Invalidate_Else, 
state=L1Cache_State_E, next_state=@0x7ffc780890a0: L1Cache_State_E_IL0, 
m_tbe_ptr=@0x7ffc78089070: 0x0, 
    m_cache_entry_ptr=@0x7ffc78089078: 0x556d497ccc80, addr=156416) at 
build/X86_MESI_Three_Level_Characterization/mem/ruby/protocol/L1Cache_Transitions.cc:271
#3  0x0000556cb166a5f9 in L1Cache_Controller::doTransition 
(this=0x556cb5c70000, event=L1Cache_Event_L0_Invalidate_Else, 
m_cache_entry_ptr=0x556d497ccc80, m_tbe_ptr=0x0, addr=156416)
    at 
build/X86_MESI_Three_Level_Characterization/mem/ruby/protocol/L1Cache_Transitions.cc:35
#4  0x0000556cb166e4f8 in L1Cache_Controller::wakeup (this=0x556cb5c70000) at 
build/X86_MESI_Three_Level_Characterization/mem/ruby/protocol/L1Cache_Wakeup.cc:369
#5  0x0000556cb23e550c in Consumer::processCurrentEvent (this=0x556cb5c700d8) 
at build/X86_MESI_Three_Level_Characterization/mem/ruby/common/Consumer.cc:90
#6  0x0000556cb23e4fe9 in operator() (__closure=0x556cb5c70148) at 
build/X86_MESI_Three_Level_Characterization/mem/ruby/common/Consumer.cc:46
#7  0x0000556cb23e585c in std::__invoke_impl<void, 
Consumer::Consumer(ClockedObject*)::<lambda()>&>(std::__invoke_other, struct 
{...} &) (__f=...) at /usr/include/c++/10/bits/invoke.h:60
#8  0x0000556cb23e574d in std::__invoke_r<void, 
Consumer::Consumer(ClockedObject*)::<lambda()>&>(struct {...} &) (__fn=...) at 
/usr/include/c++/10/bits/invoke.h:153
#9  0x0000556cb23e563a in std::_Function_handler<void(), 
Consumer::Consumer(ClockedObject*)::<lambda()> >::_M_invoke(const 
std::_Any_data &) (__functor=...) at /usr/include/c++/10/bits/std_function.h:291
#10 0x0000556cb0b03f14 in std::function<void ()>::operator()() const 
(this=0x556cb5c70148) at /usr/include/c++/10/bits/std_function.h:622
#11 0x0000556cb0b01cd6 in EventFunctionWrapper::process (this=0x556cb5c70110) 
at build/X86_MESI_Three_Level_Characterization/sim/eventq.hh:1127
#12 0x0000556cb242ca5f in EventQueue::serviceOne (this=0x556cb44cd200) at 
build/X86_MESI_Three_Level_Characterization/sim/eventq.cc:223
#13 0x0000556cb243bc16 in doSimLoop (eventq=0x556cb44cd200) at 
build/X86_MESI_Three_Level_Characterization/sim/simulate.cc:216
#14 0x0000556cb243b816 in simulate (num_cycles=18446744073709551615) at 
build/X86_MESI_Three_Level_Characterization/sim/simulate.cc:129
#15 0x0000556cb20e9ad4 in pybind11::detail::argument_loader<unsigned 
long>::call_impl<GlobalSimLoopExitEvent*, GlobalSimLoopExitEvent* (*&)(unsigned 
long), 0ul, pybind11::detail::void_type> (this=0x7ffc78089608, 
    f=@0x556cb4aa70b8: 0x556cb243b4dc <simulate(unsigned long)>) at 
ext/pybind11/include/pybind11/cast.h:1935
#16 0x0000556cb20e7ff2 in pybind11::detail::argument_loader<unsigned 
long>::call<GlobalSimLoopExitEvent*, pybind11::detail::void_type, 
GlobalSimLoopExitEvent* (*&)(unsigned long)>(GlobalSimLoopExitEvent* 
(*&)(unsigned long)) && (this=0x7ffc78089608, 
    f=@0x556cb4aa70b8: 0x556cb243b4dc <simulate(unsigned long)>) at 
ext/pybind11/include/pybind11/cast.h:1912
#17 0x0000556cb20e4a29 in 
pybind11::cpp_function::initialize<GlobalSimLoopExitEvent* (*&)(unsigned long), 
GlobalSimLoopExitEvent*, unsigned long, pybind11::name, pybind11::scope, 
pybind11::sibling, pybind11::arg_v>(GlobalSimLoopExitEvent* (*&)(unsigned 
long), GlobalSimLoopExitEvent* (*)(unsigned long), pybind11::name const&, 
pybind11::scope const&, pybind11::sibling const&, pybind11::arg_v 
const&)::{lambda(pybind11::detail::function_call&)#3}::operator()(pybind11::detail::function_call&)
 const (this=0x0, call=...)
    at ext/pybind11/include/pybind11/pybind11.h:165
#18 0x0000556cb20e4a94 in 
pybind11::cpp_function::initialize<GlobalSimLoopExitEvent* (*&)(unsigned long), 
GlobalSimLoopExitEvent*, unsigned long, pybind11::name, pybind11::scope, 
pybind11::sibling, pybind11::arg_v>(GlobalSimLoopExitEvent* (*&)(unsigned 
long), GlobalSimLoopExitEvent* (*)(unsigned long), pybind11::name const&, 
pybind11::scope const&, pybind11::sibling const&, pybind11::arg_v 
const&)::{lambda(pybind11::detail::function_call&)#3}::_FUN(pybind11::detail::function_call&)
 () at ext/pybind11/include/pybind11/pybind11.h:142
#19 0x0000556cb1531ba1 in pybind11::cpp_function::dispatcher 
(self=0x7f3e8076c480, args_in=0x7f3e7ed61970, kwargs_in=0x7f3e7f37ef80) at 
ext/pybind11/include/pybind11/pybind11.h:629
#20 0x00007f3e82338f58 in ?? () from /lib/x86_64-linux-gnu/libpython3.8.so.1.0
#21 0x00007f3e823149f0 in _PyEval_EvalFrameDefault () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#22 0x00007f3e82413b1f in _PyEval_EvalCodeWithName () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#23 0x00007f3e82339045 in _PyFunction_Vectorcall () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#24 0x00007f3e82314bdd in ?? () from /lib/x86_64-linux-gnu/libpython3.8.so.1.0
#25 0x00007f3e82312891 in _PyEval_EvalFrameDefault () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#26 0x00007f3e82309de3 in ?? () from /lib/x86_64-linux-gnu/libpython3.8.so.1.0
#27 0x00007f3e82314bdd in ?? () from /lib/x86_64-linux-gnu/libpython3.8.so.1.0
#28 0x00007f3e8230c34a in _PyEval_EvalFrameDefault () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#29 0x00007f3e82413b1f in _PyEval_EvalCodeWithName () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#30 0x00007f3e82339045 in _PyFunction_Vectorcall () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#31 0x00007f3e82314bdd in ?? () from /lib/x86_64-linux-gnu/libpython3.8.so.1.0
#32 0x00007f3e82312891 in _PyEval_EvalFrameDefault () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#33 0x00007f3e82413b1f in _PyEval_EvalCodeWithName () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#34 0x00007f3e82413ec2 in PyEval_EvalCodeEx () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#35 0x00007f3e824126df in PyEval_EvalCode () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#36 0x00007f3e8240e011 in ?? () from /lib/x86_64-linux-gnu/libpython3.8.so.1.0
#37 0x00007f3e8237e0c7 in ?? () from /lib/x86_64-linux-gnu/libpython3.8.so.1.0
#38 0x00007f3e82314bdd in ?? () from /lib/x86_64-linux-gnu/libpython3.8.so.1.0
#39 0x00007f3e8230c34a in _PyEval_EvalFrameDefault () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#40 0x00007f3e82413b1f in _PyEval_EvalCodeWithName () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#41 0x00007f3e82339045 in _PyFunction_Vectorcall () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#42 0x00007f3e82314bdd in ?? () from /lib/x86_64-linux-gnu/libpython3.8.so.1.0
#43 0x00007f3e82312891 in _PyEval_EvalFrameDefault () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#44 0x00007f3e82413b1f in _PyEval_EvalCodeWithName () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#45 0x00007f3e82413ec2 in PyEval_EvalCodeEx () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#46 0x00007f3e824126df in PyEval_EvalCode () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#47 0x00007f3e824533e0 in ?? () from /lib/x86_64-linux-gnu/libpython3.8.so.1.0
#48 0x00007f3e82453cc9 in PyRun_StringFlags () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#49 0x0000556cb242fda8 in m5Main (argc=34, _argv=0x7ffc7808abf8) at 
build/X86_MESI_Three_Level_Characterization/sim/init.cc:301
#50 0x0000556cb0afd673 in main (argc=34, argv=0x7ffc7808abf8) at 
build/X86_MESI_Three_Level_Characterization/sim/main.cc:67
(gdb) p m_last_arrival_time  
$1 = 63032684
(gdb) p cur
curEventQueue()             curTick()                   current                 
    current_rtmax               current_time                
curEventQueue(EventQueue*)  currency_symbol             currentDirectory        
    current_rtmin               curshell                    
(gdb) p curTick() 
$2 = 63032684
(gdb) c
Continuing.
63032684: system.ruby.l0_cntrl0.bufferFromL1: break here
63032684: system.ruby.l0_cntrl0.bufferFromL1: Enqueue arrival_time: 63033256, 
Message: [CoherenceMsg: addr = [0x26300, line 0x26300] Class = INV_ELSE pc = 
[0x0, line 0x0] AccessMode = User Sender = L1Cache-0 Dest = L0Cache-0 
MessageSize = Control DataBlk = [ 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 
0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 
0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 
0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 ] Dirty = 0 Prefetch = No ]
63032684: system.ruby.l1_cntrl0.requestFromL2: Peeking at head of queue.
63032684: system.ruby.l1_cntrl0.requestFromL2: Message: [RequestMsg: addr = 
[0x26300, line 0x26300] Type = GETS pc = [0x5, line 0x0] AccessMode = User 
Requestor = L1Cache-1 Destination = [NetDest (17) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0  - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  -  - 0 
0 0 0  -  -  -  -  -  -  -  -  -  -  -  -  - ] MessageSize = Request_Control 
DataBlk = [ 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 
0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 
0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 
0x0 0x0 0x0 0x0 0x0 0x0 0x0 ] Len = 0 Dirty = 0 Prefetch = No ]
63032684: system.ruby.l1_cntrl0: stalling 0x556cb56f2d80 port 1 addr 0x26300
63032684: system.ruby.l1_cntrl0.requestFromL2: Stalling due to 0x26300
63032684: system.ruby.l1_cntrl0.requestFromL2: Popping
63032684: system.ruby.l0_cntrl0.bufferFromL1: Peeking at head of queue.
63032684: system.ruby.l0_cntrl0.bufferFromL1: Message: [CoherenceMsg: addr = 
[0x11e580, line 0x11e580] Class = INV_ELSE pc = [0x0, line 0x0] AccessMode = 
User Sender = L1Cache-0 Dest = L0Cache-0 MessageSize = Control DataBlk = [ 0x0 
0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 
0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 
0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 
0x0 0x0 0x0 ] Dirty = 0 Prefetch = No ]

Breakpoint 1, MessageBuffer::enqueue (this=0x556cb5704d80, 
message=std::shared_ptr<Message> (use count 2, weak count 0) = {...}, 
current_time=63032684, delta=286) at 
build/X86_MESI_Three_Level_Characterization/mem/ruby/network/MessageBuffer.cc:166
166             DPRINTF(RubyQueue, "break here\n");
(gdb) p curTick() 
$3 = 63032684
(gdb) bt
#0  MessageBuffer::enqueue (this=0x556cb5704d80, 
message=std::shared_ptr<Message> (use count 2, weak count 0) = {...}, 
current_time=63032684, delta=286) at 
build/X86_MESI_Three_Level_Characterization/mem/ruby/network/MessageBuffer.cc:166
#1  0x0000556cb16a6e03 in MessageBuffer::delayHead (this=0x556cb5704d80, 
current_time=63032684, delta=286) at 
build/X86_MESI_Three_Level_Characterization/mem/ruby/network/MessageBuffer.hh:90
#2  0x0000556cb165bbc0 in L0Cache_Controller::wakeup (this=0x556cb56c8d00) at 
build/X86_MESI_Three_Level_Characterization/mem/ruby/protocol/L0Cache_Wakeup.cc:330
#3  0x0000556cb23e550c in Consumer::processCurrentEvent (this=0x556cb56c8dd8) 
at build/X86_MESI_Three_Level_Characterization/mem/ruby/common/Consumer.cc:90
#4  0x0000556cb23e4fe9 in operator() (__closure=0x556cb56c8e48) at 
build/X86_MESI_Three_Level_Characterization/mem/ruby/common/Consumer.cc:46
#5  0x0000556cb23e585c in std::__invoke_impl<void, 
Consumer::Consumer(ClockedObject*)::<lambda()>&>(std::__invoke_other, struct 
{...} &) (__f=...) at /usr/include/c++/10/bits/invoke.h:60
#6  0x0000556cb23e574d in std::__invoke_r<void, 
Consumer::Consumer(ClockedObject*)::<lambda()>&>(struct {...} &) (__fn=...) at 
/usr/include/c++/10/bits/invoke.h:153
#7  0x0000556cb23e563a in std::_Function_handler<void(), 
Consumer::Consumer(ClockedObject*)::<lambda()> >::_M_invoke(const 
std::_Any_data &) (__functor=...) at /usr/include/c++/10/bits/std_function.h:291
#8  0x0000556cb0b03f14 in std::function<void ()>::operator()() const 
(this=0x556cb56c8e48) at /usr/include/c++/10/bits/std_function.h:622
#9  0x0000556cb0b01cd6 in EventFunctionWrapper::process (this=0x556cb56c8e10) 
at build/X86_MESI_Three_Level_Characterization/sim/eventq.hh:1127
#10 0x0000556cb242ca5f in EventQueue::serviceOne (this=0x556cb44cd200) at 
build/X86_MESI_Three_Level_Characterization/sim/eventq.cc:223
#11 0x0000556cb243bc16 in doSimLoop (eventq=0x556cb44cd200) at 
build/X86_MESI_Three_Level_Characterization/sim/simulate.cc:216
#12 0x0000556cb243b816 in simulate (num_cycles=18446744073709551615) at 
build/X86_MESI_Three_Level_Characterization/sim/simulate.cc:129
#13 0x0000556cb20e9ad4 in pybind11::detail::argument_loader<unsigned 
long>::call_impl<GlobalSimLoopExitEvent*, GlobalSimLoopExitEvent* (*&)(unsigned 
long), 0ul, pybind11::detail::void_type> (this=0x7ffc78089608, 
    f=@0x556cb4aa70b8: 0x556cb243b4dc <simulate(unsigned long)>) at 
ext/pybind11/include/pybind11/cast.h:1935
#14 0x0000556cb20e7ff2 in pybind11::detail::argument_loader<unsigned 
long>::call<GlobalSimLoopExitEvent*, pybind11::detail::void_type, 
GlobalSimLoopExitEvent* (*&)(unsigned long)>(GlobalSimLoopExitEvent* 
(*&)(unsigned long)) && (this=0x7ffc78089608, 
    f=@0x556cb4aa70b8: 0x556cb243b4dc <simulate(unsigned long)>) at 
ext/pybind11/include/pybind11/cast.h:1912
#15 0x0000556cb20e4a29 in 
pybind11::cpp_function::initialize<GlobalSimLoopExitEvent* (*&)(unsigned long), 
GlobalSimLoopExitEvent*, unsigned long, pybind11::name, pybind11::scope, 
pybind11::sibling, pybind11::arg_v>(GlobalSimLoopExitEvent* (*&)(unsigned 
long), GlobalSimLoopExitEvent* (*)(unsigned long), pybind11::name const&, 
pybind11::scope const&, pybind11::sibling const&, pybind11::arg_v 
const&)::{lambda(pybind11::detail::function_call&)#3}::operator()(pybind11::detail::function_call&)
 const (this=0x0, call=...)
    at ext/pybind11/include/pybind11/pybind11.h:165
#16 0x0000556cb20e4a94 in 
pybind11::cpp_function::initialize<GlobalSimLoopExitEvent* (*&)(unsigned long), 
GlobalSimLoopExitEvent*, unsigned long, pybind11::name, pybind11::scope, 
pybind11::sibling, pybind11::arg_v>(GlobalSimLoopExitEvent* (*&)(unsigned 
long), GlobalSimLoopExitEvent* (*)(unsigned long), pybind11::name const&, 
pybind11::scope const&, pybind11::sibling const&, pybind11::arg_v 
const&)::{lambda(pybind11::detail::function_call&)#3}::_FUN(pybind11::detail::function_call&)
 () at ext/pybind11/include/pybind11/pybind11.h:142
#17 0x0000556cb1531ba1 in pybind11::cpp_function::dispatcher 
(self=0x7f3e8076c480, args_in=0x7f3e7ed61970, kwargs_in=0x7f3e7f37ef80) at 
ext/pybind11/include/pybind11/pybind11.h:629
#18 0x00007f3e82338f58 in ?? () from /lib/x86_64-linux-gnu/libpython3.8.so.1.0
#19 0x00007f3e823149f0 in _PyEval_EvalFrameDefault () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#20 0x00007f3e82413b1f in _PyEval_EvalCodeWithName () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#21 0x00007f3e82339045 in _PyFunction_Vectorcall () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#22 0x00007f3e82314bdd in ?? () from /lib/x86_64-linux-gnu/libpython3.8.so.1.0
#23 0x00007f3e82312891 in _PyEval_EvalFrameDefault () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#24 0x00007f3e82309de3 in ?? () from /lib/x86_64-linux-gnu/libpython3.8.so.1.0
#25 0x00007f3e82314bdd in ?? () from /lib/x86_64-linux-gnu/libpython3.8.so.1.0
#26 0x00007f3e8230c34a in _PyEval_EvalFrameDefault () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#27 0x00007f3e82413b1f in _PyEval_EvalCodeWithName () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#28 0x00007f3e82339045 in _PyFunction_Vectorcall () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#29 0x00007f3e82314bdd in ?? () from /lib/x86_64-linux-gnu/libpython3.8.so.1.0
#30 0x00007f3e82312891 in _PyEval_EvalFrameDefault () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#31 0x00007f3e82413b1f in _PyEval_EvalCodeWithName () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#32 0x00007f3e82413ec2 in PyEval_EvalCodeEx () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#33 0x00007f3e824126df in PyEval_EvalCode () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#34 0x00007f3e8240e011 in ?? () from /lib/x86_64-linux-gnu/libpython3.8.so.1.0
#35 0x00007f3e8237e0c7 in ?? () from /lib/x86_64-linux-gnu/libpython3.8.so.1.0
#36 0x00007f3e82314bdd in ?? () from /lib/x86_64-linux-gnu/libpython3.8.so.1.0
#37 0x00007f3e8230c34a in _PyEval_EvalFrameDefault () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#38 0x00007f3e82413b1f in _PyEval_EvalCodeWithName () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#39 0x00007f3e82339045 in _PyFunction_Vectorcall () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#40 0x00007f3e82314bdd in ?? () from /lib/x86_64-linux-gnu/libpython3.8.so.1.0
#41 0x00007f3e82312891 in _PyEval_EvalFrameDefault () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#42 0x00007f3e82413b1f in _PyEval_EvalCodeWithName () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#43 0x00007f3e82413ec2 in PyEval_EvalCodeEx () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#44 0x00007f3e824126df in PyEval_EvalCode () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#45 0x00007f3e824533e0 in ?? () from /lib/x86_64-linux-gnu/libpython3.8.so.1.0
#46 0x00007f3e82453cc9 in PyRun_StringFlags () from 
/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#47 0x0000556cb242fda8 in m5Main (argc=34, _argv=0x7ffc7808abf8) at 
build/X86_MESI_Three_Level_Characterization/sim/init.cc:301
#48 0x0000556cb0afd673 in main (argc=34, argv=0x7ffc7808abf8) at 
build/X86_MESI_Three_Level_Characterization/sim/main.cc:67
(gdb) p m_last_arrival_time 
$4 = 63033256
(gdb) c
Continuing.
63032684: system.ruby.l0_cntrl0.bufferFromL1: break here
panic: FIFO ordering violated: [MessageBuffer:  consumer-yes [ 0x556d4e368e20 
]] system.ruby.l0_cntrl0.bufferFromL1 name: system.ruby.l0_cntrl0.bufferFromL1 
current time: 63032684 delta: 286 arrival_time: 63032970 last arrival_time: 
63033256
Memory Usage: 19506032 KBytes

Program received signal SIGABRT, Aborted.
_______________________________________________
gem5-users mailing list -- [email protected]
To unsubscribe send an email to [email protected]
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

Reply via email to