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.coque...@redhat.com>
> Sent: Thursday, June 18, 2020 7:07 PM
> To: Matan Azrad <ma...@mellanox.com>; Slava Ovsiienko
> <viachesl...@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 <ma...@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 via email to