From patchwork Thu Oct 12 12:19:35 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adrien Mazarguil X-Patchwork-Id: 30273 X-Patchwork-Delegate: ferruh.yigit@amd.com 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 28D8F1B31E; Thu, 12 Oct 2017 14:20:46 +0200 (CEST) Received: from mail-wm0-f42.google.com (mail-wm0-f42.google.com [74.125.82.42]) by dpdk.org (Postfix) with ESMTP id C4F121B2A4 for ; Thu, 12 Oct 2017 14:20:34 +0200 (CEST) Received: by mail-wm0-f42.google.com with SMTP id t69so12677837wmt.2 for ; Thu, 12 Oct 2017 05:20:34 -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=yXVk/zbyyGiahr6m4/tzGEgKAlgcn69gzESqwNmGAmrnh9gqspgYl1SbwRZUIg7QAL FlE680jWzmoam6AAbIpIuLNNsPLOTRFIW/8pekwmwt7Ovhyl1Aa21kcCJaT3Wy8ZIiyf fDnTQoTw6bYQxcvXPFzBzHt9F/0Sc8ZV825XFDTbtBgHLeh3eylKLr0Fty/QfH0GmvjU Ai9lT7EaQBcRAvLlXeIYu/1F96f7HDtRUZjtRgXb2iHJ7qyBln/ktOCSN/5YqqEu0jEm 5ektr9h8uq2GV11jzczJS8+zkWeY0MBvb860bSn1Kf2cmb4FahgTjL5C5Ow+Ycr2/6fP Q+yg== 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=COC0GKiB8ugo49xyrfurxn70FsERLS0bQnfs1RgwVAYqu9EM4RElac8hur0qwma98e PekjVChQMDBL3MDf+aGdiQ2oXKvQosYau/vToy647XOCpTFanVSk0PvCjLoNLYMAgsGj OEwa5qjBrqA9OUyEqqOMyJVyT3O/BNiSqJ4POy8piBOc3NiARb7Ed2DasPbUQO1bxY4S 4O+cjNwbG9ec0+6wBsu+1ZXpmn7x+gplGKhp247dx7/v9/cDKARHWUUZPVCQ41XS6zoF Tnm9v3eKYzzWPdzVBnFVFtVLYAX6u1eWMZR1RJ7L2gLymcYxcwF5m6tzZxJIplrLaVAP 9IVA== X-Gm-Message-State: AMCzsaVi77lGYItgWbvTi9t94iBpRgsxae+4OYs7Ab+Qer9CG0SpMosy +zGpq+aQSudLZlISPHNBbdflIg== X-Google-Smtp-Source: AOwi7QBbRuXr9ywyRA207cKHYu2eKxOwGrclmFZRRlEw/RE+pIsIoU/hwE3yEYFNRYlq8NfxjDo8Qw== X-Received: by 10.28.141.70 with SMTP id p67mr1612688wmd.80.1507810834522; Thu, 12 Oct 2017 05:20:34 -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 b190sm143471wma.22.2017.10.12.05.20.33 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 12 Oct 2017 05:20:33 -0700 (PDT) From: Adrien Mazarguil To: Ferruh Yigit Cc: Nelio Laranjeiro , dev@dpdk.org Date: Thu, 12 Oct 2017 14:19:35 +0200 Message-Id: X-Mailer: git-send-email 2.1.4 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v2 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; }