From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr0-f178.google.com (mail-wr0-f178.google.com [209.85.128.178]) by dpdk.org (Postfix) with ESMTP id 4AFAA2A5D for ; Sat, 15 Jul 2017 19:57:54 +0200 (CEST) Received: by mail-wr0-f178.google.com with SMTP id v60so13163304wrc.3 for ; Sat, 15 Jul 2017 10:57:54 -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=avT2HjlW82lpeBKKCuBR4jq0rvrpK39nXcN4xVqTvKM=; b=dkeCxjrohFUgRJkNv+1KOJaHEh0zK6aBWu9lEeo7LpC3yy2sQtZGREul6C300vY2t0 vATmtlCMWS+PyOWgUkrUh5ZuUqaEWrRnhgoqJcFcldBkp7EPdszQ0rG6qdIgZdEqoKoI QHXScd5xwCEfRyzCECMMo9HQn2dO3dFb/Tf9iZ5sZ/FH11bjMRceseK3N1mGVdGyE86X wi0gmA97vNczWRCa83aqkokCwbzZATNjrzZC9ciaK9cPG3n5CW+9m/IeuJXSK8QdEvbN UwzKzsW8SaLfQX/yz9Ivwb+4sYkNOMWT+JgeF2M3poNXResKXKDlOs9GI0J+90i0/U6z JROg== 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=avT2HjlW82lpeBKKCuBR4jq0rvrpK39nXcN4xVqTvKM=; b=MXbwhGQ/jzVYdR7STx/mjBovOPjjpII/ahPl6RxR1QGBbGIp9k0E0DO2o9uqF4BVx6 pQhWs/qmrGcHDuxsZe8W9fX+IfpRSpGKR8Um1AfRUn6EGD602lSziYwk70LMyQwZACAp KIG7/wEgJyJuNbhfy7h8Fx7B4ZDcN86WmKUZd9jAaDzaDsv/jSZ3RBbQ+aWfR5b+BLpm ZiYosFRCN+e++gnPS6TRTUSCGFRdl9UC8AM6etR5LtdVTdEJkNcDGpiWGqDHpBWyBmNo 46Y0J4HmqdyASHRQ5CK/dHzImLHL8JUDV9F1lQY1CE31SJJ+LT3QoaIlUurXlAC6cHnp NtYg== X-Gm-Message-State: AIVw113SUzOc6ZbNxV/xYMlrGCIfPXDGcJMLLjrYTauXDA5e3w3cewTy vfrJqsdzyvaN4wmm7po= X-Received: by 10.223.162.208 with SMTP id t16mr8407368wra.151.1500141473361; Sat, 15 Jul 2017 10:57:53 -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 g82sm6342745wmg.8.2017.07.15.10.57.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sat, 15 Jul 2017 10:57:52 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Sat, 15 Jul 2017 19:57:29 +0200 Message-Id: X-Mailer: git-send-email 2.1.4 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v10 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Jul 2017 17:57:54 -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. v8 --> v9 - Use calloc instead of rte_realloc for command line parsing. - Include errno only when necessary. v9 --> v10 - Fix rte_flow description double-free issue. Thanks Raslan for finding the issue :) - Use RTE_ASSERT instead of assert. Integrate the debug log of the fail-safe to RTE_LOG_DEBUG macro as well, allowing dynamic log levels. - Remove devices post-state-sync during slave upkeep, to avoid a useless early probe attempt. 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 | 5 + doc/guides/nics/fail_safe.rst | 195 +++++ doc/guides/nics/features/failsafe.ini | 32 + doc/guides/nics/index.rst | 1 + drivers/net/Makefile | 2 + drivers/net/failsafe/Makefile | 68 ++ drivers/net/failsafe/failsafe.c | 306 ++++++++ drivers/net/failsafe/failsafe_args.c | 472 ++++++++++++ drivers/net/failsafe/failsafe_eal.c | 118 +++ drivers/net/failsafe/failsafe_ether.c | 437 +++++++++++ drivers/net/failsafe/failsafe_flow.c | 244 ++++++ drivers/net/failsafe/failsafe_ops.c | 869 ++++++++++++++++++++++ drivers/net/failsafe/failsafe_private.h | 359 +++++++++ drivers/net/failsafe/failsafe_rxtx.c | 203 +++++ 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, 3339 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