[07/14] net/mlx5: switch to the names in the shared IB context

Message ID 1553155888-27498-8-git-send-email-viacheslavo@mellanox.com (mailing list archive)
State Superseded, archived
Delegated to: Shahaf Shuler
Headers
Series net/mlx5: add support for multiport IB devices |

Checks

Context Check Description
ci/Intel-compilation success Compilation OK
ci/checkpatch warning coding style issues

Commit Message

Slava Ovsiienko March 21, 2019, 8:11 a.m. UTC
  The IB device names are moved from device private data
to the shared context, code involving the names is updated.
The IB port index treatment is added where it is relevant.

Signed-off-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com>
---
 drivers/net/mlx5/mlx5.h        |  2 --
 drivers/net/mlx5/mlx5_ethdev.c | 10 +++++++---
 drivers/net/mlx5/mlx5_stats.c  | 22 +++++++++++++---------
 3 files changed, 20 insertions(+), 14 deletions(-)
  

Comments

Shahaf Shuler March 21, 2019, 12:14 p.m. UTC | #1
Thursday, March 21, 2019 10:11 AM, Viacheslav Ovsiienko:
> Subject: [PATCH 07/14] net/mlx5: switch to the names in the shared IB
> context
> 
> The IB device names are moved from device private data to the shared
> context, code involving the names is updated.
> The IB port index treatment is added where it is relevant.
> 
> Signed-off-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com>

Acked-by: Shahaf Shuler <shahafs@mellaox.com>

> ---
>  drivers/net/mlx5/mlx5.h        |  2 --
>  drivers/net/mlx5/mlx5_ethdev.c | 10 +++++++---
> drivers/net/mlx5/mlx5_stats.c  | 22 +++++++++++++---------
>  3 files changed, 20 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index
> 528ae02..fb9ed3b 100644
> --- a/drivers/net/mlx5/mlx5.h
> +++ b/drivers/net/mlx5/mlx5.h
> @@ -229,8 +229,6 @@ struct mlx5_priv {
>  	struct ibv_context *ctx; /* Verbs context. */
>  	struct ibv_device_attr_ex device_attr; /* Device properties. */
>  	struct ibv_pd *pd; /* Protection Domain. */
> -	char ibdev_name[IBV_SYSFS_NAME_MAX]; /* IB device name. */
> -	char ibdev_path[IBV_SYSFS_PATH_MAX]; /* IB device path for
> secondary */
>  	struct ether_addr mac[MLX5_MAX_MAC_ADDRESSES]; /* MAC
> addresses. */
>  	BITFIELD_DECLARE(mac_own, uint64_t,
> MLX5_MAX_MAC_ADDRESSES);
>  	/* Bit-field of MAC addresses owned by the PMD. */ diff --git
> a/drivers/net/mlx5/mlx5_ethdev.c b/drivers/net/mlx5/mlx5_ethdev.c index
> 5b44889..2ccc743 100644
> --- a/drivers/net/mlx5/mlx5_ethdev.c
> +++ b/drivers/net/mlx5/mlx5_ethdev.c
> @@ -138,8 +138,10 @@ struct ethtool_link_settings {
>  	unsigned int dev_port_prev = ~0u;
>  	char match[IF_NAMESIZE] = "";
> 
> +	assert(priv);
> +	assert(priv->sh);
>  	{
> -		MKSTR(path, "%s/device/net", priv->ibdev_path);
> +		MKSTR(path, "%s/device/net", priv->sh->ibdev_path);
> 
>  		dir = opendir(path);
>  		if (dir == NULL) {
> @@ -159,7 +161,7 @@ struct ethtool_link_settings {
>  			continue;
> 
>  		MKSTR(path, "%s/device/net/%s/%s",
> -		      priv->ibdev_path, name,
> +		      priv->sh->ibdev_path, name,
>  		      (dev_type ? "dev_id" : "dev_port"));
> 
>  		file = fopen(path, "rb");
> @@ -222,7 +224,9 @@ struct ethtool_link_settings {
>  	struct mlx5_priv *priv = dev->data->dev_private;
>  	unsigned int ifindex =
>  		priv->nl_socket_rdma >= 0 ?
> -		mlx5_nl_ifindex(priv->nl_socket_rdma, priv->ibdev_name,
> 1) : 0;
> +		mlx5_nl_ifindex(priv->nl_socket_rdma,
> +				priv->sh->ibdev_name,
> +				priv->ibv_port) : 0;
> 
>  	if (!ifindex) {
>  		if (!priv->representor)
> diff --git a/drivers/net/mlx5/mlx5_stats.c b/drivers/net/mlx5/mlx5_stats.c
> index 6906dc8..5af199d 100644
> --- a/drivers/net/mlx5/mlx5_stats.c
> +++ b/drivers/net/mlx5/mlx5_stats.c
> @@ -140,18 +140,22 @@
>  mlx5_read_ib_stat(struct mlx5_priv *priv, const char *ctr_name, uint64_t
> *stat)  {
>  	FILE *file;
> -	MKSTR(path, "%s/ports/1/hw_counters/%s",
> -		  priv->ibdev_path,
> -		  ctr_name);
> +	if (priv->sh) {
> +		MKSTR(path, "%s/ports/%d/hw_counters/%s",
> +			  priv->sh->ibdev_path,
> +			  priv->ibv_port,
> +			  ctr_name);
> 
> -	file = fopen(path, "rb");
> -	if (file) {
> -		int n = fscanf(file, "%" SCNu64, stat);
> +		file = fopen(path, "rb");
> +		if (file) {
> +			int n = fscanf(file, "%" SCNu64, stat);
> 
> -		fclose(file);
> -		if (n != 1)
> -			stat = 0;
> +			fclose(file);
> +			if (n == 1)
> +				return;
> +		}
>  	}
> +	*stat = 0;
>  }
> 
>  /**
> --
> 1.8.3.1
  

Patch

diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h
index 528ae02..fb9ed3b 100644
--- a/drivers/net/mlx5/mlx5.h
+++ b/drivers/net/mlx5/mlx5.h
@@ -229,8 +229,6 @@  struct mlx5_priv {
 	struct ibv_context *ctx; /* Verbs context. */
 	struct ibv_device_attr_ex device_attr; /* Device properties. */
 	struct ibv_pd *pd; /* Protection Domain. */
-	char ibdev_name[IBV_SYSFS_NAME_MAX]; /* IB device name. */
-	char ibdev_path[IBV_SYSFS_PATH_MAX]; /* IB device path for secondary */
 	struct ether_addr mac[MLX5_MAX_MAC_ADDRESSES]; /* MAC addresses. */
 	BITFIELD_DECLARE(mac_own, uint64_t, MLX5_MAX_MAC_ADDRESSES);
 	/* Bit-field of MAC addresses owned by the PMD. */
diff --git a/drivers/net/mlx5/mlx5_ethdev.c b/drivers/net/mlx5/mlx5_ethdev.c
index 5b44889..2ccc743 100644
--- a/drivers/net/mlx5/mlx5_ethdev.c
+++ b/drivers/net/mlx5/mlx5_ethdev.c
@@ -138,8 +138,10 @@  struct ethtool_link_settings {
 	unsigned int dev_port_prev = ~0u;
 	char match[IF_NAMESIZE] = "";
 
+	assert(priv);
+	assert(priv->sh);
 	{
-		MKSTR(path, "%s/device/net", priv->ibdev_path);
+		MKSTR(path, "%s/device/net", priv->sh->ibdev_path);
 
 		dir = opendir(path);
 		if (dir == NULL) {
@@ -159,7 +161,7 @@  struct ethtool_link_settings {
 			continue;
 
 		MKSTR(path, "%s/device/net/%s/%s",
-		      priv->ibdev_path, name,
+		      priv->sh->ibdev_path, name,
 		      (dev_type ? "dev_id" : "dev_port"));
 
 		file = fopen(path, "rb");
@@ -222,7 +224,9 @@  struct ethtool_link_settings {
 	struct mlx5_priv *priv = dev->data->dev_private;
 	unsigned int ifindex =
 		priv->nl_socket_rdma >= 0 ?
-		mlx5_nl_ifindex(priv->nl_socket_rdma, priv->ibdev_name, 1) : 0;
+		mlx5_nl_ifindex(priv->nl_socket_rdma,
+				priv->sh->ibdev_name,
+				priv->ibv_port) : 0;
 
 	if (!ifindex) {
 		if (!priv->representor)
diff --git a/drivers/net/mlx5/mlx5_stats.c b/drivers/net/mlx5/mlx5_stats.c
index 6906dc8..5af199d 100644
--- a/drivers/net/mlx5/mlx5_stats.c
+++ b/drivers/net/mlx5/mlx5_stats.c
@@ -140,18 +140,22 @@ 
 mlx5_read_ib_stat(struct mlx5_priv *priv, const char *ctr_name, uint64_t *stat)
 {
 	FILE *file;
-	MKSTR(path, "%s/ports/1/hw_counters/%s",
-		  priv->ibdev_path,
-		  ctr_name);
+	if (priv->sh) {
+		MKSTR(path, "%s/ports/%d/hw_counters/%s",
+			  priv->sh->ibdev_path,
+			  priv->ibv_port,
+			  ctr_name);
 
-	file = fopen(path, "rb");
-	if (file) {
-		int n = fscanf(file, "%" SCNu64, stat);
+		file = fopen(path, "rb");
+		if (file) {
+			int n = fscanf(file, "%" SCNu64, stat);
 
-		fclose(file);
-		if (n != 1)
-			stat = 0;
+			fclose(file);
+			if (n == 1)
+				return;
+		}
 	}
+	*stat = 0;
 }
 
 /**