DPDK patches and discussions
 help / color / mirror / Atom feed
From: Matan Azrad <matan@mellanox.com>
To: Maxime Coquelin <maxime.coquelin@redhat.com>,
	Slava Ovsiienko <viacheslavo@mellanox.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>
Subject: Re: [dpdk-dev] [PATCH 1/2] common/mlx5: share kernel interface name getter
Date: Thu, 18 Jun 2020 18:28:31 +0000	[thread overview]
Message-ID: <AM0PR0502MB4019648DEB2074A704970492D29B0@AM0PR0502MB4019.eurprd05.prod.outlook.com> (raw)
In-Reply-To: <e0abe9bd-ff5d-c467-4c4e-c31270a665e7@redhat.com>

Yes, more conflict are exists with current master-net-mlx.
I have newest version rebased on master-net-mlx.

I will send new version, for all the old versions...

> -----Original Message-----
> From: Maxime Coquelin <maxime.coquelin@redhat.com>
> Sent: Thursday, June 18, 2020 7:07 PM
> To: Matan Azrad <matan@mellanox.com>; Slava Ovsiienko
> <viacheslavo@mellanox.com>
> Cc: dev@dpdk.org
> Subject: Re: [PATCH 1/2] common/mlx5: share kernel interface name getter
> 
> Your series does not apply, there are no common ancestor so I can't do 3-
> way merge.
> 
> Could you please rebase it on top of next-virtio's master branch?
> 
> Thanks,
> Maxime
> 
> On 6/2/20 5:53 PM, Matan Azrad wrote:
> > Some configuration of the mlx5 port are done by the kernel net device
> > associated to the IB device represents the PCI device.
> >
> > The DPDK mlx5 driver uses linux system calls, for example ioctl, in
> > order to configure per port configurations requested by the DPDK user.
> >
> > One of the basic knowledges required to access the correct kernel net
> > device is its name.
> >
> > Move function to get interface name from IB device path to the common
> > library.
> >
> > Signed-off-by: Matan Azrad <matan@mellanox.com>
> > ---
> >  drivers/common/mlx5/mlx5_common.c               | 88
> ++++++++++++++++++++++++
> >  drivers/common/mlx5/mlx5_common.h               |  3 +
> >  drivers/common/mlx5/rte_common_mlx5_version.map |  2 +
> >  drivers/net/mlx5/mlx5.c                         |  2 +-
> >  drivers/net/mlx5/mlx5.h                         |  1 -
> >  drivers/net/mlx5/mlx5_ethdev.c                  | 90 +------------------------
> >  6 files changed, 96 insertions(+), 90 deletions(-)
> >
> > diff --git a/drivers/common/mlx5/mlx5_common.c
> > b/drivers/common/mlx5/mlx5_common.c
> > index 1c77763..3f0d8d3 100644
> > --- a/drivers/common/mlx5/mlx5_common.c
> > +++ b/drivers/common/mlx5/mlx5_common.c
> > @@ -8,8 +8,10 @@
> >  #ifdef RTE_IBVERBS_LINK_DLOPEN
> >  #include <dlfcn.h>
> >  #endif
> > +#include <dirent.h>
> >
> >  #include <rte_errno.h>
> > +#include <rte_string_fns.h>
> >
> >  #include "mlx5_common.h"
> >  #include "mlx5_common_utils.h"
> > @@ -167,6 +169,92 @@ enum mlx5_class
> >  	return;
> >  }
> >
> > +/**
> > + * Get kernel interface name from IB device path.
> > + *
> > + * @param[in] ibdev_path
> > + *   Pointer to IB device path.
> > + * @param[out] ifname
> > + *   Interface name output buffer.
> > + *
> > + * @return
> > + *   0 on success, a negative errno value otherwise and rte_errno is set.
> > + */
> > +int
> > +mlx5_get_ifname_sysfs(const char *ibdev_path, char
> > +(*ifname)[IF_NAMESIZE]) {
> > +	DIR *dir;
> > +	struct dirent *dent;
> > +	unsigned int dev_type = 0;
> > +	unsigned int dev_port_prev = ~0u;
> > +	char match[IF_NAMESIZE] = "";
> > +
> > +	MLX5_ASSERT(ibdev_path);
> > +	{
> > +		MKSTR(path, "%s/device/net", ibdev_path);
> > +
> > +		dir = opendir(path);
> > +		if (dir == NULL) {
> > +			rte_errno = errno;
> > +			return -rte_errno;
> > +		}
> > +	}
> > +	while ((dent = readdir(dir)) != NULL) {
> > +		char *name = dent->d_name;
> > +		FILE *file;
> > +		unsigned int dev_port;
> > +		int r;
> > +
> > +		if ((name[0] == '.') &&
> > +		    ((name[1] == '\0') ||
> > +		     ((name[1] == '.') && (name[2] == '\0'))))
> > +			continue;
> > +
> > +		MKSTR(path, "%s/device/net/%s/%s",
> > +		      ibdev_path, name,
> > +		      (dev_type ? "dev_id" : "dev_port"));
> > +
> > +		file = fopen(path, "rb");
> > +		if (file == NULL) {
> > +			if (errno != ENOENT)
> > +				continue;
> > +			/*
> > +			 * Switch to dev_id when dev_port does not exist as
> > +			 * is the case with Linux kernel versions < 3.15.
> > +			 */
> > +try_dev_id:
> > +			match[0] = '\0';
> > +			if (dev_type)
> > +				break;
> > +			dev_type = 1;
> > +			dev_port_prev = ~0u;
> > +			rewinddir(dir);
> > +			continue;
> > +		}
> > +		r = fscanf(file, (dev_type ? "%x" : "%u"), &dev_port);
> > +		fclose(file);
> > +		if (r != 1)
> > +			continue;
> > +		/*
> > +		 * Switch to dev_id when dev_port returns the same value
> for
> > +		 * all ports. May happen when using a MOFED release older
> than
> > +		 * 3.0 with a Linux kernel >= 3.15.
> > +		 */
> > +		if (dev_port == dev_port_prev)
> > +			goto try_dev_id;
> > +		dev_port_prev = dev_port;
> > +		if (dev_port == 0)
> > +			strlcpy(match, name, sizeof(match));
> > +	}
> > +	closedir(dir);
> > +	if (match[0] == '\0') {
> > +		rte_errno = ENOENT;
> > +		return -rte_errno;
> > +	}
> > +	strncpy(*ifname, match, sizeof(*ifname));
> > +	return 0;
> > +}
> > +
> >  #ifdef MLX5_GLUE
> >
> >  /**
> > diff --git a/drivers/common/mlx5/mlx5_common.h
> > b/drivers/common/mlx5/mlx5_common.h
> > index 8cd3ea5..4f6373b 100644
> > --- a/drivers/common/mlx5/mlx5_common.h
> > +++ b/drivers/common/mlx5/mlx5_common.h
> > @@ -6,6 +6,7 @@
> >  #define RTE_PMD_MLX5_COMMON_H_
> >
> >  #include <stdio.h>
> > +#include <net/if.h>
> >
> >  #include <rte_pci.h>
> >  #include <rte_debug.h>
> > @@ -212,6 +213,8 @@ enum mlx5_class {
> >  __rte_internal
> >  void mlx5_translate_port_name(const char *port_name_in,
> >  			      struct mlx5_switch_info *port_info_out);
> > +__rte_internal
> > +int mlx5_get_ifname_sysfs(const char *ibdev_path, char
> > +(*ifname)[IF_NAMESIZE]);
> >
> >  extern uint8_t haswell_broadwell_cpu;
> >
> > diff --git a/drivers/common/mlx5/rte_common_mlx5_version.map
> > b/drivers/common/mlx5/rte_common_mlx5_version.map
> > index b3410df..a62584d 100644
> > --- a/drivers/common/mlx5/rte_common_mlx5_version.map
> > +++ b/drivers/common/mlx5/rte_common_mlx5_version.map
> > @@ -33,6 +33,8 @@ INTERNAL {
> >  	mlx5_devx_cmd_query_virtq;
> >  	mlx5_devx_get_out_command_status;
> >
> > +	mlx5_get_ifname_sysfs;
> > +
> >  	mlx5_mp_init_primary;
> >  	mlx5_mp_uninit_primary;
> >  	mlx5_mp_init_secondary;
> > diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c index
> > 469ff73..91af47b 100644
> > --- a/drivers/net/mlx5/mlx5.c
> > +++ b/drivers/net/mlx5/mlx5.c
> > @@ -3570,7 +3570,7 @@ struct mlx5_flow_id_pool *
> >  					 */
> >  					continue;
> >  				}
> > -				ret = mlx5_get_master_ifname
> > +				ret = mlx5_get_ifname_sysfs
> >  					(ibv_match[i]->ibdev_path,
> &ifname);
> >  				if (!ret)
> >  					list[ns].ifindex =
> > diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index
> > 2908c8b..536afae 100644
> > --- a/drivers/net/mlx5/mlx5.h
> > +++ b/drivers/net/mlx5/mlx5.h
> > @@ -645,7 +645,6 @@ int mlx5_udp_tunnel_port_add(struct rte_eth_dev
> > *dev,
> >  /* mlx5_ethdev.c */
> >
> >  int mlx5_get_ifname(const struct rte_eth_dev *dev, char
> > (*ifname)[IF_NAMESIZE]); -int mlx5_get_master_ifname(const char
> > *ibdev_path, char (*ifname)[IF_NAMESIZE]);  unsigned int
> > mlx5_ifindex(const struct rte_eth_dev *dev);  int mlx5_ifreq(const
> > struct rte_eth_dev *dev, int req, struct ifreq *ifr);  int
> > mlx5_get_mtu(struct rte_eth_dev *dev, uint16_t *mtu); diff --git
> > a/drivers/net/mlx5/mlx5_ethdev.c b/drivers/net/mlx5/mlx5_ethdev.c
> > index b837ce6..62344d1 100644
> > --- a/drivers/net/mlx5/mlx5_ethdev.c
> > +++ b/drivers/net/mlx5/mlx5_ethdev.c
> > @@ -129,95 +129,9 @@ struct ethtool_link_settings {  #endif
> >
> >  /**
> > - * Get master interface name from private structure.
> > - *
> > - * @param[in] dev
> > - *   Pointer to Ethernet device.
> > - * @param[out] ifname
> > - *   Interface name output buffer.
> > - *
> > - * @return
> > - *   0 on success, a negative errno value otherwise and rte_errno is set.
> > - */
> > -int
> > -mlx5_get_master_ifname(const char *ibdev_path, char
> > (*ifname)[IF_NAMESIZE]) -{
> > -	DIR *dir;
> > -	struct dirent *dent;
> > -	unsigned int dev_type = 0;
> > -	unsigned int dev_port_prev = ~0u;
> > -	char match[IF_NAMESIZE] = "";
> > -
> > -	MLX5_ASSERT(ibdev_path);
> > -	{
> > -		MKSTR(path, "%s/device/net", ibdev_path);
> > -
> > -		dir = opendir(path);
> > -		if (dir == NULL) {
> > -			rte_errno = errno;
> > -			return -rte_errno;
> > -		}
> > -	}
> > -	while ((dent = readdir(dir)) != NULL) {
> > -		char *name = dent->d_name;
> > -		FILE *file;
> > -		unsigned int dev_port;
> > -		int r;
> > -
> > -		if ((name[0] == '.') &&
> > -		    ((name[1] == '\0') ||
> > -		     ((name[1] == '.') && (name[2] == '\0'))))
> > -			continue;
> > -
> > -		MKSTR(path, "%s/device/net/%s/%s",
> > -		      ibdev_path, name,
> > -		      (dev_type ? "dev_id" : "dev_port"));
> > -
> > -		file = fopen(path, "rb");
> > -		if (file == NULL) {
> > -			if (errno != ENOENT)
> > -				continue;
> > -			/*
> > -			 * Switch to dev_id when dev_port does not exist as
> > -			 * is the case with Linux kernel versions < 3.15.
> > -			 */
> > -try_dev_id:
> > -			match[0] = '\0';
> > -			if (dev_type)
> > -				break;
> > -			dev_type = 1;
> > -			dev_port_prev = ~0u;
> > -			rewinddir(dir);
> > -			continue;
> > -		}
> > -		r = fscanf(file, (dev_type ? "%x" : "%u"), &dev_port);
> > -		fclose(file);
> > -		if (r != 1)
> > -			continue;
> > -		/*
> > -		 * Switch to dev_id when dev_port returns the same value
> for
> > -		 * all ports. May happen when using a MOFED release older
> than
> > -		 * 3.0 with a Linux kernel >= 3.15.
> > -		 */
> > -		if (dev_port == dev_port_prev)
> > -			goto try_dev_id;
> > -		dev_port_prev = dev_port;
> > -		if (dev_port == 0)
> > -			strlcpy(match, name, sizeof(match));
> > -	}
> > -	closedir(dir);
> > -	if (match[0] == '\0') {
> > -		rte_errno = ENOENT;
> > -		return -rte_errno;
> > -	}
> > -	strncpy(*ifname, match, sizeof(*ifname));
> > -	return 0;
> > -}
> > -
> > -/**
> >   * Get interface name from private structure.
> >   *
> > - * This is a port representor-aware version of mlx5_get_master_ifname().
> > + * This is a port representor-aware version of mlx5_get_ifname_sysfs().
> >   *
> >   * @param[in] dev
> >   *   Pointer to Ethernet device.
> > @@ -238,7 +152,7 @@ struct ethtool_link_settings {
> >  	ifindex = mlx5_ifindex(dev);
> >  	if (!ifindex) {
> >  		if (!priv->representor)
> > -			return mlx5_get_master_ifname(priv->sh-
> >ibdev_path,
> > +			return mlx5_get_ifname_sysfs(priv->sh-
> >ibdev_path,
> >  						      ifname);
> >  		rte_errno = ENXIO;
> >  		return -rte_errno;
> >


      reply	other threads:[~2020-06-18 18:28 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-02 15:53 Matan Azrad
2020-06-02 15:53 ` [dpdk-dev] [PATCH 2/2] vdpa/mlx5: support MTU feature Matan Azrad
2020-06-18 15:22   ` Maxime Coquelin
2020-06-18 19:06   ` [dpdk-dev] [PATCH v2 0/2] " Matan Azrad
2020-06-18 19:06     ` [dpdk-dev] [PATCH v2 1/2] common/mlx5: share kernel interface name getter Matan Azrad
2020-06-18 19:06     ` [dpdk-dev] [PATCH v2 2/2] vdpa/mlx5: support MTU feature Matan Azrad
2020-06-19  6:39     ` [dpdk-dev] [PATCH v2 0/2] " Maxime Coquelin
2020-06-18 19:08   ` [dpdk-dev] [PATCH] vhost: fix features definition location Matan Azrad
2020-06-23  5:20     ` [dpdk-dev] [dpdk-stable] " Xia, Chenbo
2020-06-30  7:34     ` [dpdk-dev] " Maxime Coquelin
2020-06-30  7:41       ` Maxime Coquelin
2020-06-18 15:19 ` [dpdk-dev] [PATCH 1/2] common/mlx5: share kernel interface name getter Maxime Coquelin
2020-06-18 16:07 ` Maxime Coquelin
2020-06-18 18:28   ` Matan Azrad [this message]

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=AM0PR0502MB4019648DEB2074A704970492D29B0@AM0PR0502MB4019.eurprd05.prod.outlook.com \
    --to=matan@mellanox.com \
    --cc=dev@dpdk.org \
    --cc=maxime.coquelin@redhat.com \
    --cc=viacheslavo@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).