dev: Remove auto-serialization dependency in EtherLink
authorAndreas Sandberg <andreas.sandberg@arm.com>
Tue, 1 Sep 2015 14:28:44 +0000 (15:28 +0100)
committerAndreas Sandberg <andreas.sandberg@arm.com>
Tue, 1 Sep 2015 14:28:44 +0000 (15:28 +0100)
commit53001e6e09d31063784c408f0f35caad45afeef1
treed2ca3f7954966ee5c6b559eacae0eebec6978842
parent0572dc3c6eca3acd6fc4e2e34607bd5d0ab67829
dev: Remove auto-serialization dependency in EtherLink

EtherLink currently uses a fire-and-forget link delay event that
delays sending of packets by a fixed number of ticks. In order to
serialize this event, it relies on the event queue's auto
serialization support. However, support for event auto serialization
has been broken for more than two years, which means that checkpoints
of multi-system setups are likely to drop in-flight packets.

This changeset the replaces rewrites this part of the EtherLink to use
a packet queue instead. The queue contains a (tick, packet) tuple. The
tick indicates when the packet will be ready. Instead of relying on
event autoserialization, we now explicitly serialize the packet queue
in the EhterLink::Link class.

Note that this changeset changes the way in-flight packages are
serialized. Old checkpoints will still load, but in-flight packets
will be dropped (just as before). There has been no attempt to upgrade
checkpoints since this would actually change the behavior of existing
checkpoints.
src/dev/etherlink.cc
src/dev/etherlink.hh