On Thu, Jul 7, 2022 at 5:13 PM Mattias Rönnblom <hof...@lysator.liu.se> wrote: > > From: Mattias Rönnblom <mattias.ronnb...@ericsson.com> > > Fix bug in flow migration, which under certain conditions causes > reordering and violation of atomicity guarantees. > > The issue occurs when the processing of a flow (on an atomic queue) > has resulted in events enqueued to a flow currently being migrated, > and the former (producer) flow is also selected for migration. The > events are buffered ("paused") on the originating port, and released > (forwarded) when the migration has completed. However, at the time of > "unpausing" the latter (consumer) flow, processing of the producer > flow on the port to which it was migrated may have already produced > events, for the same paused flow. This constitutes a race condition, > and depending on which port wins, reordering may have been introduced. > > This patch forbids migration when a port has paused events, since > those events may have been the result of processing a to-be-migrated > flow. > > This patch also disallows processing events pertaining to a flow under > migration, for the same reason. A new buffer is introduced, which > holds such not-yet-processed events dequeued from the port's input > ring. Such events are forwarded to the target port as a part of the > migration process. > > The 'forwarding' migration state is eliminated, and instead background > processing is only performed if there are no unreleased events on the > port. > > The bug is primarily triggered in situations where multiple flows are > migrated as one transaction, but may occur even if only a single flow > is migrated (e.g., with older DSW versions, which does not support > multi-flow migration). > > Fixes: f6257b22e767 ("event/dsw: add load balancing") > Cc: sta...@dpdk.org > > Signed-off-by: Mattias Rönnblom <mattias.ronnb...@ericsson.com>
+ @Thomas Monjalon to merge to the main tree directly.