From patchwork Wed Oct 11 14:35:23 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adrien Mazarguil X-Patchwork-Id: 30143 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 3938F1B2A1; Wed, 11 Oct 2017 16:36:57 +0200 (CEST) Received: from mail-wm0-f43.google.com (mail-wm0-f43.google.com [74.125.82.43]) by dpdk.org (Postfix) with ESMTP id 3C3331B24A for ; Wed, 11 Oct 2017 16:36:44 +0200 (CEST) Received: by mail-wm0-f43.google.com with SMTP id i124so5312067wmf.3 for ; Wed, 11 Oct 2017 07:36:44 -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=3yZAWomt2SCWMcK2b5L7kN1EjnD74tyDzyhjJ/p/k24=; b=X3OOaK4EbdB+GDLtv3AiINZ5LqR36rL1SwPNRXeCG/3Ohh4mo418DrRtH/cEJDjyok 6QADic85U//kx6/WJ2jl9Fxojcun4hz7kzp4GFWvD9NyjQ9ur0rgtUHGPfSvhEuGKLMH 9ElM4/UMBNxHNjooOeFcx7ibGOe0CNVkY+/vISm5zy48CC1obu5sWBzPZqvdnPssbe4t UkvU7N3ypuoWleIXxi1YVIGn6fSCiJN4u5fsNbys/W1fCHxR0WafgDZIUZR255CVa3ER /0c93JAfdlx9ZNX1DUnT7zy9b9pQfvGxcMc1/zNIccyNeLaoxItvZKmA+5GnClKL6oy6 /ijQ== 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=3yZAWomt2SCWMcK2b5L7kN1EjnD74tyDzyhjJ/p/k24=; b=GUh9dbnarB5jM1TTOy4Iwi3NBim/Y/79ZidQU4Crh10KCGbg24z438AiUuMjOklv0r gaXIyIburTPL+0Wj8r/DJ1r65j7V0COWsqvZQEDL/HHLe9lvCA7JrZE+7ri9Q1jJjzHS Wz2FZJtbplTOUtWe7iI7Iphc2FjSPXryW+nyxGcpExRMoslVP9iwlgHB8D7DdAnkniQT T3vL/TpBD4luSq6BSIK1dkPOgKFGuvwZpi6GvhG+QjPcGkEkyOtxB4pUJGGEv10ZAvTE VLUbpi3DS9Xsfrk92wotmoEl7UrKCM0thEbGJz1vLia5VQRDPAkj+AvwpX/ceC31pr7n clsQ== X-Gm-Message-State: AMCzsaXVZ/b9mGx9WFxg6f6qh7V60NWmr/2xYpV1+VVExbBMjGRNbAg9 mFzlN2YGXuqRg0FGikhToq8v7A== X-Google-Smtp-Source: AOwi7QCjcN+qu50Q3YpjojVgWMGrkYDKtjDxiIpm1EovP90v6YfO7uehSfqL83QcQpE6VQ5fy2odLQ== X-Received: by 10.223.172.78 with SMTP id v72mr5646229wrc.140.1507732603978; Wed, 11 Oct 2017 07:36:43 -0700 (PDT) Received: from 6wind.com (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id l9sm11543679wrf.70.2017.10.11.07.36.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 11 Oct 2017 07:36:42 -0700 (PDT) From: Adrien Mazarguil To: Ferruh Yigit Cc: dev@dpdk.org Date: Wed, 11 Oct 2017 16:35:23 +0200 Message-Id: X-Mailer: git-send-email 2.1.4 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v1 21/29] net/mlx4: update Rx/Tx callbacks consistently 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Although their "removed" version acts as a safety against unexpected bursts while queues are being modified by the control path, these callbacks are set per device instead of per queue. It makes sense to update them during start/stop/close cycles instead of queue setup. As a side effect, this commit addresses a bug left over from a prior commit: bringing the link down causes the "removed" Tx callback to be used, however the normal callback is not restored when bringing it back up, preventing the application from sending traffic at all. Updating callbacks for a link change is not necessary as bringing the netdevice down is normally enough to prevent traffic from flowing in. Fixes: a4951cb98fdf ("net/mlx4: drop scatter/gather support") Signed-off-by: Adrien Mazarguil Acked-by: Nelio Laranjeiro --- drivers/net/mlx4/mlx4.c | 11 ++++++++--- drivers/net/mlx4/mlx4_ethdev.c | 4 ---- drivers/net/mlx4/mlx4_rxq.c | 2 -- drivers/net/mlx4/mlx4_txq.c | 2 -- 4 files changed, 8 insertions(+), 11 deletions(-) diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c index f02508a..52f8d51 100644 --- a/drivers/net/mlx4/mlx4.c +++ b/drivers/net/mlx4/mlx4.c @@ -149,6 +149,9 @@ mlx4_dev_start(struct rte_eth_dev *dev) error.message ? error.message : "(unspecified)"); goto err; } + rte_wmb(); + dev->tx_pkt_burst = mlx4_tx_burst; + dev->rx_pkt_burst = mlx4_rx_burst; return 0; err: /* Rollback. */ @@ -173,6 +176,9 @@ mlx4_dev_stop(struct rte_eth_dev *dev) return; DEBUG("%p: detaching flows from all RX queues", (void *)dev); priv->started = 0; + dev->tx_pkt_burst = mlx4_tx_burst_removed; + dev->rx_pkt_burst = mlx4_rx_burst_removed; + rte_wmb(); mlx4_flow_sync(priv, NULL); mlx4_intr_uninstall(priv); } @@ -191,14 +197,13 @@ mlx4_dev_close(struct rte_eth_dev *dev) struct priv *priv = dev->data->dev_private; unsigned int i; - if (priv == NULL) - return; DEBUG("%p: closing device \"%s\"", (void *)dev, ((priv->ctx != NULL) ? priv->ctx->device->name : "")); - mlx4_flow_clean(priv); dev->rx_pkt_burst = mlx4_rx_burst_removed; dev->tx_pkt_burst = mlx4_tx_burst_removed; + rte_wmb(); + mlx4_flow_clean(priv); for (i = 0; i != dev->data->nb_rx_queues; ++i) mlx4_rx_queue_release(dev->data->rx_queues[i]); for (i = 0; i != dev->data->nb_tx_queues; ++i) diff --git a/drivers/net/mlx4/mlx4_ethdev.c b/drivers/net/mlx4/mlx4_ethdev.c index 01fb195..ebf2339 100644 --- a/drivers/net/mlx4/mlx4_ethdev.c +++ b/drivers/net/mlx4/mlx4_ethdev.c @@ -467,20 +467,16 @@ mlx4_set_flags(struct priv *priv, unsigned int keep, unsigned int flags) static int mlx4_dev_set_link(struct priv *priv, int up) { - struct rte_eth_dev *dev = priv->dev; int err; if (up) { err = mlx4_set_flags(priv, ~IFF_UP, IFF_UP); if (err) return err; - dev->rx_pkt_burst = mlx4_rx_burst; } else { err = mlx4_set_flags(priv, ~IFF_UP, ~IFF_UP); if (err) return err; - dev->rx_pkt_burst = mlx4_rx_burst_removed; - dev->tx_pkt_burst = mlx4_tx_burst_removed; } return 0; } diff --git a/drivers/net/mlx4/mlx4_rxq.c b/drivers/net/mlx4/mlx4_rxq.c index bcb7b94..693db4f 100644 --- a/drivers/net/mlx4/mlx4_rxq.c +++ b/drivers/net/mlx4/mlx4_rxq.c @@ -436,8 +436,6 @@ mlx4_rx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc, rte_free(rxq); return ret; } - /* Update receive callback. */ - dev->rx_pkt_burst = mlx4_rx_burst; } return ret; } diff --git a/drivers/net/mlx4/mlx4_txq.c b/drivers/net/mlx4/mlx4_txq.c index e0245b0..c1fdbaf 100644 --- a/drivers/net/mlx4/mlx4_txq.c +++ b/drivers/net/mlx4/mlx4_txq.c @@ -438,8 +438,6 @@ mlx4_tx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc, DEBUG("%p: adding Tx queue %p to list", (void *)dev, (void *)txq); dev->data->tx_queues[idx] = txq; - /* Update send callback. */ - dev->tx_pkt_burst = mlx4_tx_burst; } return ret; }