All of lore.kernel.org
 help / color / mirror / Atom feed
From: Saeed Mahameed <saeedm@mellanox.com>
To: "David S. Miller" <davem@davemloft.net>
Cc: kuba@kernel.org, netdev@vger.kernel.org,
	Bodong Wang <bodong@mellanox.com>,
	Parav Pandit <parav@mellanox.com>,
	Saeed Mahameed <saeedm@mellanox.com>
Subject: [net-next 02/14] net/mlx5: E-Switch, Hold mutex when querying drop counter in legacy mode
Date: Fri, 13 Mar 2020 18:16:10 -0700	[thread overview]
Message-ID: <20200314011622.64939-3-saeedm@mellanox.com> (raw)
In-Reply-To: <20200314011622.64939-1-saeedm@mellanox.com>

From: Bodong Wang <bodong@mellanox.com>

Consider scenario below, CPU 1 is at risk to query already destroyed
drop counters. Need to apply the same state mutex when disabling vport.

+-------------------------------+-------------------------------------+
| CPU 0                         | CPU 1                               |
+-------------------------------+-------------------------------------+
| mlx5_device_disable_sriov     | mlx5e_get_vf_stats                  |
| mlx5_eswitch_disable          | mlx5_eswitch_get_vport_stats        |
| esw_disable_vport             | mlx5_eswitch_query_vport_drop_stats |
| mlx5_fc_destroy(drop_counter) | mlx5_fc_query(drop_counter)         |
+-------------------------------+-------------------------------------+

Fixes: b8a0dbe3a90b ("net/mlx5e: E-switch, Add steering drop counters")
Signed-off-by: Bodong Wang <bodong@mellanox.com>
Reviewed-by: Parav Pandit <parav@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlx5/core/eswitch.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
index b123089866e2..b4b93d2322a9 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
@@ -2620,9 +2620,13 @@ static int mlx5_eswitch_query_vport_drop_stats(struct mlx5_core_dev *dev,
 	u64 bytes = 0;
 	int err = 0;
 
-	if (!vport->enabled || esw->mode != MLX5_ESWITCH_LEGACY)
+	if (esw->mode != MLX5_ESWITCH_LEGACY)
 		return 0;
 
+	mutex_lock(&esw->state_lock);
+	if (!vport->enabled)
+		goto unlock;
+
 	if (vport->egress.legacy.drop_counter)
 		mlx5_fc_query(dev, vport->egress.legacy.drop_counter,
 			      &stats->rx_dropped, &bytes);
@@ -2633,20 +2637,22 @@ static int mlx5_eswitch_query_vport_drop_stats(struct mlx5_core_dev *dev,
 
 	if (!MLX5_CAP_GEN(dev, receive_discard_vport_down) &&
 	    !MLX5_CAP_GEN(dev, transmit_discard_vport_down))
-		return 0;
+		goto unlock;
 
 	err = mlx5_query_vport_down_stats(dev, vport->vport, 1,
 					  &rx_discard_vport_down,
 					  &tx_discard_vport_down);
 	if (err)
-		return err;
+		goto unlock;
 
 	if (MLX5_CAP_GEN(dev, receive_discard_vport_down))
 		stats->rx_dropped += rx_discard_vport_down;
 	if (MLX5_CAP_GEN(dev, transmit_discard_vport_down))
 		stats->tx_dropped += tx_discard_vport_down;
 
-	return 0;
+unlock:
+	mutex_unlock(&esw->state_lock);
+	return err;
 }
 
 int mlx5_eswitch_get_vport_stats(struct mlx5_eswitch *esw,
-- 
2.24.1


  parent reply	other threads:[~2020-03-14  1:16 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-14  1:16 [pull request][net-next 00/14] Mellanox, mlx5 updates 2020-03-13 Saeed Mahameed
2020-03-14  1:16 ` [net-next 01/14] net/mlx5: E-Switch, Remove redundant check of eswitch manager cap Saeed Mahameed
2020-03-14  1:16 ` Saeed Mahameed [this message]
2020-03-14  1:16 ` [net-next 03/14] net/mlx5: E-Switch, Remove redundant warning when QoS enable failed Saeed Mahameed
2020-03-14  1:16 ` [net-next 04/14] net/mlx5: E-Switch, Prepare for vport enable/disable refactor Saeed Mahameed
2020-03-14  1:16 ` [net-next 05/14] net/mlx5: E-switch, Make vport setup/cleanup sequence symmetric Saeed Mahameed
2020-03-14  1:16 ` [net-next 06/14] net/mlx5: E-Switch, Introduce per vport configuration for eswitch modes Saeed Mahameed
2020-03-14  1:16 ` [net-next 07/14] net/mlx5: E-Switch, Update VF vports config when num of VFs changed Saeed Mahameed
2020-03-14  2:36   ` Jakub Kicinski
2020-03-14  6:13     ` Saeed Mahameed
2020-03-14  1:16 ` [net-next 08/14] net/mlx5: E-Switch, Refactor unload all reps per rep type Saeed Mahameed
2020-03-14  1:16 ` [net-next 09/14] net/mlx5: Accept flow rules without match Saeed Mahameed
2020-03-14  1:16 ` [net-next 10/14] net/mlx5: E-switch, Annotate termtbl_mutex mutex destroy Saeed Mahameed
2020-03-14  1:16 ` [net-next 11/14] net/mlx5: E-switch, Annotate esw state_lock " Saeed Mahameed
2020-03-14  1:16 ` [net-next 12/14] net/mlx5: Avoid deriving mlx5_core_dev second time Saeed Mahameed
2020-03-14  1:16 ` [net-next 13/14] net/mlx5: DR, Add support for flow table id destination action Saeed Mahameed
2020-03-14  2:36   ` Jakub Kicinski
2020-03-14  6:23     ` Saeed Mahameed
2020-03-14  9:57     ` Leon Romanovsky
2020-03-14  1:16 ` [net-next 14/14] net/mlx5: DR, Remove unneeded functions deceleration Saeed Mahameed
2020-03-14  2:37 ` [pull request][net-next 00/14] Mellanox, mlx5 updates 2020-03-13 Jakub Kicinski
2020-03-14  4:04   ` David Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200314011622.64939-3-saeedm@mellanox.com \
    --to=saeedm@mellanox.com \
    --cc=bodong@mellanox.com \
    --cc=davem@davemloft.net \
    --cc=kuba@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=parav@mellanox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.