On Mon, 29 May 2017 15:42:12 +0200 Gaetan Rivet <gaetan.ri...@6wind.com> wrote:
> This PMD intercepts and manages Ethernet device removal events issued by > slave PMDs and re-initializes them transparently when brought back so that > existing applications do not need to be modified to benefit from true > hot-plugging support. > > The stacked PMD approach shares many similarities with the bonding PMD but > with a different purpose. While bonding provides the ability to group > several links into a single logical device for enhanced throughput and > supports fail-over at link level, this one manages the sudden disappearance > of the underlying device; it guarantees applications face a valid device in > working order at all times. > > Each fail-safe instance is configured to run atop one or several > devices, with one defined as the preferred device. Hot-plug events are > handled on all of them, and Tx is always directed to the preferred device > if present or to the next available failover device (Rx is always performed > on all devices for simplicity). > > Moreover, the configured slaves (preferred or failover) do not need to be > present at initialization time and may appear later. > > Slaves configuration is continuously synchronized with that of the virtual > device, which exposes their common set of capabilities to the application. > Failure to apply the current configuration state to a slave for any reason > simply reschedules its initialization. > > This patchset depends on: > > eal: complete attach / detach support > http://dpdk.org/ml/archives/dev/2017-May/066366.html > http://dpdk.org/dev/patchwork/patch/24522/ > > ethdev: add flow API rule copy function > http://dpdk.org/ml/archives/dev/2017-May/066145.html > http://dpdk.org/dev/patchwork/patch/24406/ > > ethdev: add isolated mode to flow API > http://dpdk.org/ml/archives/dev/2017-April/064327.html > http://dpdk.org/dev/patchwork/patch/23741/ > > v1 --> v2: > > - Wrote documentation > - Fixed commit logs, signed-off-by > - Added LSC event support > - A few minor fixes > > v2 --> v3: > > - Numerous bug fixes. > - Complete sub-EAL rework to follow new bus API. > - burst protection on sub removal. > - more flexible sub definition. > - flow isolated mode support. > > v3 --> v4: > > - Split back commits > net/failsafe: add fast burst functions > net/failsafe: support device removal > That were squashed by error during a rebase > - Fix segfault on port plugin > - Fix isolate mode support for MLX4 ports plugin > > Gaetan Rivet (12): > ethdev: save VLAN filter setting > ethdev: add deferred intermediate device state > ethdev: count devices consistently > net/failsafe: add fail-safe PMD > net/failsafe: add plug-in support > net/failsafe: add flexible device definition > net/failsafe: support flow API > net/failsafe: support offload capabilities > net/failsafe: add fast burst functions > net/failsafe: support device removal > net/failsafe: support link status change event > net/failsafe: support flow API isolation mode > > MAINTAINERS | 5 + > config/common_base | 6 + > doc/guides/nics/fail_safe.rst | 186 +++++++ > doc/guides/nics/features/failsafe.ini | 32 ++ > doc/guides/nics/index.rst | 1 + > drivers/net/Makefile | 2 + > drivers/net/failsafe/Makefile | 74 +++ > drivers/net/failsafe/failsafe.c | 305 +++++++++++ > drivers/net/failsafe/failsafe_args.c | 475 +++++++++++++++++ > drivers/net/failsafe/failsafe_eal.c | 140 +++++ > drivers/net/failsafe/failsafe_ether.c | 431 ++++++++++++++++ > drivers/net/failsafe/failsafe_flow.c | 245 +++++++++ > drivers/net/failsafe/failsafe_ops.c | 869 > ++++++++++++++++++++++++++++++++ > drivers/net/failsafe/failsafe_private.h | 377 ++++++++++++++ > drivers/net/failsafe/failsafe_rxtx.c | 204 ++++++++ > lib/librte_ether/rte_ethdev.c | 38 +- > lib/librte_ether/rte_ethdev.h | 24 +- > mk/rte.app.mk | 1 + > 18 files changed, 3399 insertions(+), 16 deletions(-) > create mode 100644 doc/guides/nics/fail_safe.rst > create mode 100644 doc/guides/nics/features/failsafe.ini > create mode 100644 drivers/net/failsafe/Makefile > create mode 100644 drivers/net/failsafe/failsafe.c > create mode 100644 drivers/net/failsafe/failsafe_args.c > create mode 100644 drivers/net/failsafe/failsafe_eal.c > create mode 100644 drivers/net/failsafe/failsafe_ether.c > create mode 100644 drivers/net/failsafe/failsafe_flow.c > create mode 100644 drivers/net/failsafe/failsafe_ops.c > create mode 100644 drivers/net/failsafe/failsafe_private.h > create mode 100644 drivers/net/failsafe/failsafe_rxtx.c > Discussed in tech-board meeting and accepted for inclusion in 17.08 release. Longer term this driver would benefit from better hot plug support Reviewed-by: Stephen Hemminger <step...@networkplumber.org>