config: Fix to SystemC example's event handling
authorAndrew Bardsley <Andrew.Bardsley@arm.com>
Tue, 2 Dec 2014 11:08:09 +0000 (06:08 -0500)
committerAndrew Bardsley <Andrew.Bardsley@arm.com>
Tue, 2 Dec 2014 11:08:09 +0000 (06:08 -0500)
commite5e5b80690f736c65c9b51ef96660637210f3938
tree4c2f6422209fd55e2c97bcb48689c5091c000072
parent05bba75cdc346184da7ff40958673da980a06df2
config: Fix to SystemC example's event handling

This patch fixes checkpoint restore in the SystemC hosting example by handling
early PollEvent events correctly before any EventQueue events are posted.

The SystemC event queue handler (SCEventQueue) reports an error if the event
loop is entered with no Events posted.  It is possible for this to happen
after instantiate due to PollEvent events.  This patch separates out
`external' events into a different handler in sc_module.cc to prevent the
error from occurring.

This fix also improves the event handling of asynchronous events by:

    1) Making asynchronous events 'catch up' gem5 time to SystemC
        time to avoid the appearance that events have been lost
        while servicing an asynchronous event that schedules an
        event loop exit event

    2) Add an in_simulate data member to Module to allow the event
        loop to check whether events should be processed or deferred
        until the next time Module::simulate is entered

    3) Cancel pending events around the entry/exit of the event loop
        in Module::simulate

    4) Moving the state initialisation of the example entirely into
        run to correct a problem with early events in checkpoint
        restore.

It is still possible to schedule asynchronous events (and talk PollQueue
actions) while simulate is not running.  This behaviour may stil cause
some problems.
util/systemc/Makefile
util/systemc/main.cc
util/systemc/sc_gem5_control.cc
util/systemc/sc_logger.cc
util/systemc/sc_module.cc
util/systemc/sc_module.hh