RubyPort and Sequencer: Fix draining
authorJoel Hestness <hestness@cs.wisc.edu>
Sun, 23 Sep 2012 18:57:08 +0000 (13:57 -0500)
committerJoel Hestness <hestness@cs.wisc.edu>
Sun, 23 Sep 2012 18:57:08 +0000 (13:57 -0500)
commit4095af5fd600dcd497aae67ab5471de75601d052
tree24805680cb82b855ea8d6131570a76c56ff6e9ad
parent6427342318a17468ec2bf8cb8a7618d4d195fba4
RubyPort and Sequencer: Fix draining

Fix the drain functionality of the RubyPort to only call drain on child ports
during a system-wide drain process, instead of calling each time that a
ruby_hit_callback is executed.

This fixes the issue of the RubyPort ports being reawakened during the drain
simulation, possibly with work they didn't previously have to complete. If
they have new work, they may call process on the drain event that they had
not registered work for, causing an assertion failure when completing the
drain event.

Also, in RubyPort, set the drainEvent to NULL when there are no events
to be drained. If not set to NULL, the drain loop can result in stale
drainEvents used.
src/mem/ruby/system/RubyPort.cc
src/mem/ruby/system/RubyPort.hh
src/mem/ruby/system/Sequencer.cc