net/failsafe: fix hotplug races
authorMatan Azrad <matan@mellanox.com>
Mon, 12 Feb 2018 20:51:42 +0000 (20:51 +0000)
committerThomas Monjalon <thomas@monjalon.net>
Tue, 13 Feb 2018 17:17:30 +0000 (18:17 +0100)
commit655fcd68c7d282dcd5a414696c3d93d6ccac75da
treedda4e7508ce041221d51c3674ce640cc8ebd296f
parent82bae1ea01850455e8ef9fafffca70879e5393ca
net/failsafe: fix hotplug races

Fail-safe uses a periodic alarm mechanism, running from the host
thread, to manage the hot-plug events of its sub-devices. This
management requires a lot of sub-devices PMDs operations
(stop, close, start, configure, etc.).

While the hot-plug alarm runs in the host thread, the application may
call fail-safe operations, which directly trigger the sub-devices PMDs
operations as well. This call may occur from any thread decided by the
application (probably the master thread).

Thus, more than one operation can be executed to a sub-device at the
same time. This can initiate a lot of races in the sub-PMDs.

Moreover, some control operations update the fail-safe internal
databases, which can be used by the alarm mechanism at the same time.
This can also initiate races and crashes.

Fail-safe is the owner of its sub-devices and must synchronize their
use according to the ETHDEV ownership rules.

Synchronize hot-plug management by a new lock mechanism uses a mutex to
atomically defend each critical section in the fail-safe hot-plug
mechanism and control operations to prevent any races between them.

Fixes: a46f8d5 ("net/failsafe: add fail-safe PMD")
Cc: stable@dpdk.org
Signed-off-by: Matan Azrad <matan@mellanox.com>
Acked-by: Gaetan Rivet <gaetan.rivet@6wind.com>
drivers/net/failsafe/Makefile
drivers/net/failsafe/failsafe.c
drivers/net/failsafe/failsafe_ether.c
drivers/net/failsafe/failsafe_flow.c
drivers/net/failsafe/failsafe_ops.c
drivers/net/failsafe/failsafe_private.h