From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <gaetan.rivet@6wind.com>
Received: from mail-wr0-f179.google.com (mail-wr0-f179.google.com
 [209.85.128.179]) by dpdk.org (Postfix) with ESMTP id 255DA7CC0
 for <dev@dpdk.org>; Tue, 11 Jul 2017 01:20:07 +0200 (CEST)
Received: by mail-wr0-f179.google.com with SMTP id r103so159334377wrb.0
 for <dev@dpdk.org>; Mon, 10 Jul 2017 16:20:07 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=6wind-com.20150623.gappssmtp.com; s=20150623;
 h=from:to:cc:subject:date:message-id:in-reply-to:references;
 bh=bZexzhmILdTLbY2LWxyogax9iLhGaEX3LflNwcGJz4o=;
 b=r3kZzp8uyZUkqYgJa0qplFBcPoVK6frjKi4OWs55yBsKOhmkVOYhcwB8TFiXk1aeb1
 /RV6JdcAEvkG0zP7E34OxzWRRASwkQodvAHjjrWVALtVV3xS1FNvtDH9qAMuYg1mAYvu
 1ZtFVnsY9AB+XL5RIEnzuL4N9UYQ82IYyagBTuI3h4ylwHmkbwHs2kcUCS5jyhxIlUik
 AWHqNhrqneUgo+VqOXlwLx2HwJ41s5iis+jfLxxnZxdvZuKYEF2fW7FrU7Ck5DBQ2hvb
 zzg7LzmgYI5MoWOldgj7l5hKEFK02wGnkk6up8yzs6yQ0rMPHHf0GgmHP8BZaAj7GO6n
 zNhA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references;
 bh=bZexzhmILdTLbY2LWxyogax9iLhGaEX3LflNwcGJz4o=;
 b=FEhZLcg14xkr6OYMlkxVZXhGMF2PvUSU/O7i293GKfDYcSKe0KC68zHONuQjLYiadw
 FVxYEG1HFNLFfsBzEWOjPn4QMNL7vgDy+b40k+jybtXkKDx028iPN+JJKhXvaSxFU6II
 pqjTQDfUXTIcdu6cdtSk9ahK2I7CrfC/XcJ+8xO8h9pNskRh4/gUAliTY/i7uRu2awsV
 SWQGb8mayt606wWGx9G0+Q77UC0bE+/g1X3W6MwV2Dw/xSF6qdxiV7u8BEOmG9e9Cp7J
 vAi3APE9VLmjxerfmpDsdGTv4cONfRPx16jang1kV6EfvBvnb0DOwDB6Eh94VEmLbSE2
 1Qrw==
X-Gm-Message-State: AIVw111LlVGzJVw7+d9tMZHUadMQIUv0V84BvrdqMBBmFTLWKyUtXPNm
 pOAzh0yrmmV3N8n1Kt4=
X-Received: by 10.223.162.219 with SMTP id t27mr9034932wra.68.1499728806431;
 Mon, 10 Jul 2017 16:20:06 -0700 (PDT)
Received: from bidouze.dev.6wind.com (host.78.145.23.62.rev.coltfrance.com.
 [62.23.145.78])
 by smtp.gmail.com with ESMTPSA id k137sm11805038wmd.22.2017.07.10.16.20.05
 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128);
 Mon, 10 Jul 2017 16:20:05 -0700 (PDT)
From: Gaetan Rivet <gaetan.rivet@6wind.com>
To: dev@dpdk.org
Cc: Gaetan Rivet <gaetan.rivet@6wind.com>
Date: Tue, 11 Jul 2017 01:19:41 +0200
Message-Id: <cover.1499728587.git.gaetan.rivet@6wind.com>
X-Mailer: git-send-email 2.1.4
In-Reply-To: <cover.1499564333.git.gaetan.rivet@6wind.com>
References: <cover.1499564333.git.gaetan.rivet@6wind.com>
Subject: [dpdk-dev] [PATCH v8 00/11] introduce fail-safe PMD
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <http://dpdk.org/ml/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://dpdk.org/ml/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <http://dpdk.org/ml/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Mon, 10 Jul 2017 23:20:07 -0000

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

v4 --> v5:

  - Follow new plug / unplug API.

v5 --> v6:

  - Follow new hotplug API.
  - Improve usability of hotplug API.
  - Fix rte_dev hotplug API implementation.
  - Introduce rte_eal_devargs_rmv API as EXPERIMENTAL.
  - Use it to clean up resources on hotplug_remove.
  - Fix hotplug implementation and support un pci bus.
    The scan was not idempotent, nor clean.
    Neither were the device fields.
  - Implement plug operation for vdev bus.
    This is needed for hotplug support and to make the EAL
    independent from vdev-specific API.
  - Remove useless parameters from plug / unplug API.

This patchset is fairly big and complex. The hotplug API has been rushed and
has never been tested outside of the special case of vdev bus.

These evolutions are proposed alongside this PMD as only this PMD allows to test
this API at the moment, and without those evolutions this PMD cannot be used.

v6 --> v7

  - Split the series in three, with
    vlan filter configuration store standing alone
    Hotplug API fixes separated
    Fail-safe PMD on its own.

    These changes should ease integration.

v7 --> v8

  - Fix usage examples in documentation.
  - Use rte_eth_dev_allocated when relevant.

Gaetan Rivet (11):
  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                     | 199 +++++
 doc/guides/nics/features/failsafe.ini             |  32 +
 doc/guides/nics/index.rst                         |   1 +
 drivers/net/Makefile                              |   2 +
 drivers/net/failsafe/Makefile                     |  78 ++
 drivers/net/failsafe/failsafe.c                   | 305 ++++++++
 drivers/net/failsafe/failsafe_args.c              | 475 ++++++++++++
 drivers/net/failsafe/failsafe_eal.c               | 118 +++
 drivers/net/failsafe/failsafe_ether.c             | 437 +++++++++++
 drivers/net/failsafe/failsafe_flow.c              | 245 ++++++
 drivers/net/failsafe/failsafe_ops.c               | 869 ++++++++++++++++++++++
 drivers/net/failsafe/failsafe_private.h           | 376 ++++++++++
 drivers/net/failsafe/failsafe_rxtx.c              | 204 +++++
 drivers/net/failsafe/rte_pmd_failsafe_version.map |   4 +
 lib/librte_ether/rte_ethdev.c                     |  19 +-
 lib/librte_ether/rte_ethdev.h                     |  14 +-
 mk/rte.app.mk                                     |   1 +
 19 files changed, 3375 insertions(+), 15 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
 create mode 100644 drivers/net/failsafe/rte_pmd_failsafe_version.map

-- 
2.1.4