patches for DPDK stable branches
 help / color / mirror / Atom feed
* Re: [dpdk-stable] 答复: patch 'net/tap: let kernel choose tun device name' has been queued to LTS release 18.11.1
       [not found] <003901d4ba18$ee13bf40$ca3b3dc0$@netitest.com>
@ 2019-02-05 12:57 ` Kevin Traynor
  2019-02-06 17:45 ` [dpdk-stable] " Stephen Hemminger
  1 sibling, 0 replies; 3+ messages in thread
From: Kevin Traynor @ 2019-02-05 12:57 UTC (permalink / raw)
  To: hfli, 'Stephen Hemminger',
	anatoly.burakov, olivier.matz, artem.andreev
  Cc: 'dpdk stable', qhyuan

On 02/01/2019 10:28 AM, hfli@netitest.com wrote:
> Hi Guys,
> 
>  
> 
> We have gotten a weird problem after we upgrade DPDK version from 18.05.1 to
> 18.11, we need call a expect script in C code by system() which execute some
> commands on our network devices.
> 

Hi - I'm not sure if the reports are related to this patch which is
currently not in 18.11.

Is there an issue with backporting this patch to 18.11 stable branch?

thanks,
Kevin.

>  
> 
> But it will be crashed after call function rte_eal_memory_init(), I have
> enclosed the expect script and crash output in attachment. Can anyone dig
> into this?
> 
>  
> 
> spawn telnet 192.168.16.230
> 
> *** buffer overflow detected ***: /usr/bin/expect terminated
> 
> ======= Backtrace: =========
> 
> /lib64/libc.so.6(__fortify_fail+0x37)[0x7f033f6759e7]
> 
> /lib64/libc.so.6(+0x115b62)[0x7f033f673b62]
> 
> /lib64/libc.so.6(+0x117947)[0x7f033f675947]
> 
> /lib64/libtcl8.5.so(+0xe37d8)[0x7f033ff147d8]
> 
> /lib64/libpthread.so.0(+0x7dd5)[0x7f033f146dd5]
> 
> /lib64/libc.so.6(clone+0x6d)[0x7f033f65bead]
> 
>  
> 
> 
> 
>  
> 
>  
> 
> Thanks and Regards,
> 
> Haifeng
> 
>  
> 
> -----邮件原件-----
> 
> 发件人: Kevin Traynor <ktraynor@redhat.com> 
> 
> 发送时间: 2019年1月31日 23:49
> 
> 收件人: Stephen Hemminger <stephen@networkplumber.org>
> 
> 抄送: Haifeng Li <hfli@netitest.com>; dpdk stable <stable@dpdk.org>
> 
> 主题: patch 'net/tap: let kernel choose tun device name' has been queued to
> LTS release 18.11.1
> 
>  
> 
> Hi,
> 
>  
> 
> FYI, your patch has been queued to LTS release 18.11.1
> 
>  
> 
> Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
> 
> It will be pushed if I get no objections before 02/07/19. So please shout if
> anyone has objections.
> 
>  
> 
> Also note that after the patch there's a diff of the upstream commit vs the
> patch applied to the branch. This will indicate if there was any rebasing
> needed to apply to the stable branch. If there were code changes for
> rebasing
> 
> (ie: not only metadata diffs), please double check that the rebase was
> correctly done.
> 
>  
> 
> Thanks.
> 
>  
> 
> Kevin Traynor
> 
>  
> 
> ---
> 
> From d3034e04e58ca7bed78182fa9a1439afe4a73d4b Mon Sep 17 00:00:00 2001
> 
> From: Stephen Hemminger <stephen@networkplumber.org>
> 
> Date: Fri, 11 Jan 2019 12:35:18 -0800
> 
> Subject: [PATCH] net/tap: let kernel choose tun device name
> 
>  
> 
> [ upstream commit b5235d61f3b7d2b1c2b9ee2601f3aca2b151b508 ]
> 
>  
> 
> Assigning tun and tap index in DPDK tap device driver is racy and fails if
> used with primary/secondary. Instead use the kernel feature of device
> wildcarding where if a name with %d is used the kernel will fill in the next
> available device.
> 
>  
> 
> Fixes: 02f96a0a82d1 ("net/tap: add TUN/TAP device PMD")
> 
>  
> 
> Reported-by: Haifeng Li <hfli@netitest.com>
> 
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> Acked-by Keith
> Wiles <keith.wiles@intel.com>
> 
> ---
> 
> drivers/net/tap/rte_eth_tap.c | 33 +++++++++++++++++----------------
> 
> 1 file changed, 17 insertions(+), 16 deletions(-)
> 
>  
> 
> diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c
> index aef8b0b9f..a93429973 100644
> 
> --- a/drivers/net/tap/rte_eth_tap.c
> 
> +++ b/drivers/net/tap/rte_eth_tap.c
> 
> @@ -79,7 +79,4 @@ static const char *valid_arguments[] = {  };
> 
> -static unsigned int tap_unit;
> 
> -static unsigned int tun_unit;
> 
> -
> 
> static char tuntap_name[8];
> 
> @@ -151,6 +148,4 @@ tun_alloc(struct pmd_internals *pmd, int is_keepalive)
> 
>        snprintf(ifr.ifr_name, IFNAMSIZ, "%s", pmd->name);
> 
> -        TAP_LOG(DEBUG, "ifr_name '%s'", ifr.ifr_name);
> 
> -
> 
>        fd = open(TUN_TAP_DEV_PATH, O_RDWR);
> 
>        if (fd < 0) {
> 
> @@ -186,4 +181,11 @@ tun_alloc(struct pmd_internals *pmd, int is_keepalive)
> 
>        }
> 
> +       /*
> 
> +       * Name passed to kernel might be wildcard like dtun%d
> 
> +       * and need to find the resulting device.
> 
> +       */
> 
> +       TAP_LOG(DEBUG, "Device name is '%s'", ifr.ifr_name);
> 
> +       strlcpy(pmd->name, ifr.ifr_name, RTE_ETH_NAME_MAX_LEN);
> 
> +
> 
>        if (is_keepalive) {
> 
>                 /*
> 
> @@ -1756,4 +1758,5 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, char
> *tap_name,
> 
>                 goto error_exit;
> 
>        }
> 
> +       TAP_LOG(DEBUG, "allocated %s", pmd->name);
> 
>         ifr.ifr_mtu = dev->data->mtu;
> 
> @@ -1895,6 +1898,6 @@ set_interface_name(const char *key __rte_unused,
> 
>                 strlcpy(name, value, RTE_ETH_NAME_MAX_LEN);
> 
>        else
> 
> -                 snprintf(name, RTE_ETH_NAME_MAX_LEN, "%s%d",
> 
> -                           DEFAULT_TAP_NAME, tap_unit - 1);
> 
> +                /* use tap%d which causes kernel to choose next available
> */
> 
> +                strlcpy(name, DEFAULT_TAP_NAME "%d", RTE_ETH_NAME_MAX_LEN);
> 
>         return 0;
> 
> @@ -2003,6 +2006,6 @@ rte_pmd_tun_probe(struct rte_vdev_device *dev)
> 
>        }
> 
> -        snprintf(tun_name, sizeof(tun_name), "%s%u",
> 
> -                 DEFAULT_TUN_NAME, tun_unit++);
> 
> +       /* use tun%d which causes kernel to choose next available */
> 
> +       strlcpy(tun_name, DEFAULT_TUN_NAME "%d", RTE_ETH_NAME_MAX_LEN);
> 
>         if (params && (params[0] != '\0')) {
> 
> @@ -2024,9 +2027,8 @@ rte_pmd_tun_probe(struct rte_vdev_device *dev)
> 
>        pmd_link.link_speed = ETH_SPEED_NUM_10G;
> 
> -        TAP_LOG(NOTICE, "Initializing pmd_tun for %s as %s",
> 
> -                 name, tun_name);
> 
> +       TAP_LOG(NOTICE, "Initializing pmd_tun for %s", name);
> 
>         ret = eth_dev_tap_create(dev, tun_name, remote_iface, 0,
> 
> -                 ETH_TUNTAP_TYPE_TUN);
> 
> +                                   ETH_TUNTAP_TYPE_TUN);
> 
>  leave:
> 
> @@ -2034,5 +2036,4 @@ leave:
> 
>                 TAP_LOG(ERR, "Failed to create pmd for %s as %s",
> 
>                           name, tun_name);
> 
> -                 tun_unit--; /* Restore the unit number */
> 
>        }
> 
>        rte_kvargs_free(kvlist);
> 
> @@ -2190,6 +2191,7 @@ rte_pmd_tap_probe(struct rte_vdev_device *dev)
> 
>         speed = ETH_SPEED_NUM_10G;
> 
> -        snprintf(tap_name, sizeof(tap_name), "%s%u",
> 
> -                 DEFAULT_TAP_NAME, tap_unit++);
> 
> +
> 
> +       /* use tap%d which causes kernel to choose next available */
> 
> +       strlcpy(tap_name, DEFAULT_TAP_NAME "%d", RTE_ETH_NAME_MAX_LEN);
> 
>        memset(remote_iface, 0, RTE_ETH_NAME_MAX_LEN);
> 
> @@ -2255,5 +2257,4 @@ leave:
> 
>                           tap_devices_count--;
> 
>                 }
> 
> -                 tap_unit--;                  /* Restore the unit number */
> 
>        }
> 
>        rte_kvargs_free(kvlist);
> 
> --
> 
> 2.19.0
> 
>  
> 
> ---
> 
>   Diff of the applied patch vs upstream commit (please double-check if
> non-empty:
> 
> ---
> 
> --- -   2019-01-31 15:44:06.948575581 <sip:06948575581> +0000
> 
> +++ 0052-net-tap-let-kernel-choose-tun-device-name.patch          2019-01-31
> 15:44:05.000000000 <sip:05000000000> +0000
> 
> @@ -1,15 +1,16 @@
> 
> -From b5235d61f3b7d2b1c2b9ee2601f3aca2b151b508 Mon Sep 17 00:00:00 2001
> 
> +From d3034e04e58ca7bed78182fa9a1439afe4a73d4b Mon Sep 17 00:00:00 2001
> 
> From: Stephen Hemminger <stephen@networkplumber.org>
> 
> Date: Fri, 11 Jan 2019 12:35:18 -0800
> 
> Subject: [PATCH] net/tap: let kernel choose tun device name
> 
> +[ upstream commit b5235d61f3b7d2b1c2b9ee2601f3aca2b151b508 ]
> 
> +
> 
> Assigning tun and tap index in DPDK tap device driver is racy  and fails if
> used with primary/secondary. Instead use the kernel  feature of device
> wildcarding where if a name with %d is used  the kernel will fill in the
> next available device.
> 
>  Fixes: 02f96a0a82d1 ("net/tap: add TUN/TAP device PMD")
> 
> -Cc: stable@dpdk.org
> 
>  Reported-by: Haifeng Li <hfli@netitest.com>
> 
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> @@ -19,10 +20,
> 10 @@
> 
>   1 file changed, 17 insertions(+), 16 deletions(-)
> 
>  diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c
> -index d699b4fb0..ed8483cb9 100644
> 
> +index aef8b0b9f..a93429973 100644
> 
> --- a/drivers/net/tap/rte_eth_tap.c
> 
> +++ b/drivers/net/tap/rte_eth_tap.c
> 
> -@@ -80,7 +80,4 @@ static const char *valid_arguments[] = {
> 
> +@@ -79,7 +79,4 @@ static const char *valid_arguments[] = {
> 
>   };
> 
>   
> 
>  -static unsigned int tap_unit;
> 
> @@ -30,14 +31,14 @@
> 
> -
> 
>   static char tuntap_name[8];
> 
>   
> 
> -@@ -152,6 +149,4 @@ tun_alloc(struct pmd_internals *pmd, int is_keepalive)
> 
> -       strlcpy(ifr.ifr_name, pmd->name, IFNAMSIZ);
> 
> +@@ -151,6 +148,4 @@ tun_alloc(struct pmd_internals *pmd, int is_keepalive)
> 
> +      snprintf(ifr.ifr_name, IFNAMSIZ, "%s", pmd->name);
> 
>   
> 
>  -      TAP_LOG(DEBUG, "ifr_name '%s'", ifr.ifr_name);
> 
> -
> 
>        fd = open(TUN_TAP_DEV_PATH, O_RDWR);
> 
>        if (fd < 0) {
> 
> -@@ -187,4 +182,11 @@ tun_alloc(struct pmd_internals *pmd, int is_keepalive)
> 
> +@@ -186,4 +181,11 @@ tun_alloc(struct pmd_internals *pmd, int 
> 
> +is_keepalive)
> 
>        }
> 
>   
> 
>  +     /*
> 
> @@ -49,22 +50,22 @@
> 
> +
> 
>        if (is_keepalive) {
> 
>                 /*
> 
> -@@ -1757,4 +1759,5 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, char
> *tap_name,
> 
> +@@ -1756,4 +1758,5 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, 
> 
> +char *tap_name,
> 
>                 goto error_exit;
> 
>        }
> 
> +     TAP_LOG(DEBUG, "allocated %s", pmd->name);
> 
>   
> 
>        ifr.ifr_mtu = dev->data->mtu;
> 
> -@@ -1919,6 +1922,6 @@ set_interface_name(const char *key __rte_unused,
> 
> +@@ -1895,6 +1898,6 @@ set_interface_name(const char *key __rte_unused,
> 
>                 strlcpy(name, value, RTE_ETH_NAME_MAX_LEN);
> 
> -       } else {
> 
> +      else
> 
> -               snprintf(name, RTE_ETH_NAME_MAX_LEN, "%s%d",
> 
> -                        DEFAULT_TAP_NAME, tap_unit - 1);
> 
> +              /* use tap%d which causes kernel to choose next available */
> 
> +              strlcpy(name, DEFAULT_TAP_NAME "%d", RTE_ETH_NAME_MAX_LEN);
> 
> -       }
> 
> + 
> 
>        return 0;
> 
> -@@ -2033,6 +2036,6 @@ rte_pmd_tun_probe(struct rte_vdev_device *dev)
> 
> +@@ -2003,6 +2006,6 @@ rte_pmd_tun_probe(struct rte_vdev_device *dev)
> 
>        }
> 
>   
> 
>  -      snprintf(tun_name, sizeof(tun_name), "%s%u",
> 
> @@ -73,25 +74,25 @@
> 
> +     strlcpy(tun_name, DEFAULT_TUN_NAME "%d", RTE_ETH_NAME_MAX_LEN);
> 
>   
> 
>        if (params && (params[0] != '\0')) {
> 
> -@@ -2054,9 +2057,8 @@ rte_pmd_tun_probe(struct rte_vdev_device *dev)
> 
> +@@ -2024,9 +2027,8 @@ rte_pmd_tun_probe(struct rte_vdev_device *dev)
> 
>        pmd_link.link_speed = ETH_SPEED_NUM_10G;
> 
>   
> 
> --       TAP_LOG(DEBUG, "Initializing pmd_tun for %s as %s",
> 
> +-      TAP_LOG(NOTICE, "Initializing pmd_tun for %s as %s",
> 
> -               name, tun_name);
> 
> -+      TAP_LOG(DEBUG, "Initializing pmd_tun for %s", name);
> 
> ++     TAP_LOG(NOTICE, "Initializing pmd_tun for %s", name);
> 
>   
> 
>        ret = eth_dev_tap_create(dev, tun_name, remote_iface, 0,
> 
> -               ETH_TUNTAP_TYPE_TUN);
> 
> +                                 ETH_TUNTAP_TYPE_TUN);
> 
>   
> 
>   leave:
> 
> -@@ -2064,5 +2066,4 @@ leave:
> 
> +@@ -2034,5 +2036,4 @@ leave:
> 
>                 TAP_LOG(ERR, "Failed to create pmd for %s as %s",
> 
>                          name, tun_name);
> 
> -               tun_unit--; /* Restore the unit number */
> 
>        }
> 
>        rte_kvargs_free(kvlist);
> 
> -@@ -2220,6 +2221,7 @@ rte_pmd_tap_probe(struct rte_vdev_device *dev)
> 
> +@@ -2190,6 +2191,7 @@ rte_pmd_tap_probe(struct rte_vdev_device *dev)
> 
>   
> 
>        speed = ETH_SPEED_NUM_10G;
> 
> -      snprintf(tap_name, sizeof(tap_name), "%s%u",
> 
> @@ -101,7 +102,7 @@
> 
> +     strlcpy(tap_name, DEFAULT_TAP_NAME "%d", RTE_ETH_NAME_MAX_LEN);
> 
>        memset(remote_iface, 0, RTE_ETH_NAME_MAX_LEN);
> 
>   
> 
> -@@ -2284,5 +2286,4 @@ leave:
> 
> +@@ -2255,5 +2257,4 @@ leave:
> 
>                          tap_devices_count--;
> 
>                 }
> 
> -               tap_unit--;                  /* Restore the unit number */
> 
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [dpdk-stable] patch 'net/tap: let kernel choose tun device name' has been queued to LTS release 18.11.1
       [not found] <003901d4ba18$ee13bf40$ca3b3dc0$@netitest.com>
  2019-02-05 12:57 ` [dpdk-stable] 答复: patch 'net/tap: let kernel choose tun device name' has been queued to LTS release 18.11.1 Kevin Traynor
@ 2019-02-06 17:45 ` Stephen Hemminger
  1 sibling, 0 replies; 3+ messages in thread
From: Stephen Hemminger @ 2019-02-06 17:45 UTC (permalink / raw)
  To: hfli
  Cc: 'Kevin Traynor',
	anatoly.burakov, olivier.matz, artem.andreev,
	'dpdk stable',
	qhyuan

On Fri, 1 Feb 2019 18:28:52 +0800
<hfli@netitest.com> wrote:

> Hi Guys,
> 
>  
> 
> We have gotten a weird problem after we upgrade DPDK version from 18.05.1 to
> 18.11, we need call a expect script in C code by system() which execute some
> commands on our network devices.
> 
>  
> 
> But it will be crashed after call function rte_eal_memory_init(), I have
> enclosed the expect script and crash output in attachment. Can anyone dig
> into this?
> 
>  
> 
> spawn telnet 192.168.16.230
> 
> *** buffer overflow detected ***: /usr/bin/expect terminated
> 
> ======= Backtrace: =========
> 
> /lib64/libc.so.6(__fortify_fail+0x37)[0x7f033f6759e7]
> 
> /lib64/libc.so.6(+0x115b62)[0x7f033f673b62]
> 
> /lib64/libc.so.6(+0x117947)[0x7f033f675947]
> 
> /lib64/libtcl8.5.so(+0xe37d8)[0x7f033ff147d8]
> 
> /lib64/libpthread.so.0(+0x7dd5)[0x7f033f146dd5]
> 
> /lib64/libc.so.6(clone+0x6d)[0x7f033f65bead]
> 
>  
> 
> 
> 
>  
> 
>  
> 
> Thanks and Regards,
> 
> Haifeng
> 
>  
> 
> -----邮件原件-----
> 
> 发件人: Kevin Traynor <ktraynor@redhat.com> 
> 
> 发送时间: 2019年1月31日 23:49
> 
> 收件人: Stephen Hemminger <stephen@networkplumber.org>
> 
> 抄送: Haifeng Li <hfli@netitest.com>; dpdk stable <stable@dpdk.org>
> 
> 主题: patch 'net/tap: let kernel choose tun device name' has been queued to
> LTS release 18.11.1
> 
>  
> 
> Hi,
> 
>  
> 
> FYI, your patch has been queued to LTS release 18.11.1
> 
>  
> 
> Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
> 
> It will be pushed if I get no objections before 02/07/19. So please shout if
> anyone has objections.
> 
>  
> 
> Also note that after the patch there's a diff of the upstream commit vs the
> patch applied to the branch. This will indicate if there was any rebasing
> needed to apply to the stable branch. If there were code changes for
> rebasing
> 
> (ie: not only metadata diffs), please double check that the rebase was
> correctly done.
> 
>  
> 
> Thanks.
> 
>  
> 
> Kevin Traynor
> 
>  
> 
> ---
> 
> From d3034e04e58ca7bed78182fa9a1439afe4a73d4b Mon Sep 17 00:00:00 2001
> 
> From: Stephen Hemminger <stephen@networkplumber.org>
> 
> Date: Fri, 11 Jan 2019 12:35:18 -0800
> 
> Subject: [PATCH] net/tap: let kernel choose tun device name
> 
>  
> 
> [ upstream commit b5235d61f3b7d2b1c2b9ee2601f3aca2b151b508 ]
> 
>  
> 
> Assigning tun and tap index in DPDK tap device driver is racy and fails if
> used with primary/secondary. Instead use the kernel feature of device
> wildcarding where if a name with %d is used the kernel will fill in the next
> available device.
> 
>  
> 
> Fixes: 02f96a0a82d1 ("net/tap: add TUN/TAP device PMD")
> 
>  
> 
> Reported-by: Haifeng Li <hfli@netitest.com>
> 
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> Acked-by Keith
> Wiles <keith.wiles@intel.com>
> 
> ---
> 
> drivers/net/tap/rte_eth_tap.c | 33 +++++++++++++++++----------------
> 
> 1 file changed, 17 insertions(+), 16 deletions(-)
> 
>  
> 
> diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c
> index aef8b0b9f..a93429973 100644
> 
> --- a/drivers/net/tap/rte_eth_tap.c
> 
> +++ b/drivers/net/tap/rte_eth_tap.c
> 
> @@ -79,7 +79,4 @@ static const char *valid_arguments[] = {  };
> 
> -static unsigned int tap_unit;
> 
> -static unsigned int tun_unit;
> 
> -
> 
> static char tuntap_name[8];
> 
> @@ -151,6 +148,4 @@ tun_alloc(struct pmd_internals *pmd, int is_keepalive)
> 
>        snprintf(ifr.ifr_name, IFNAMSIZ, "%s", pmd->name);
> 
> -        TAP_LOG(DEBUG, "ifr_name '%s'", ifr.ifr_name);
> 
> -
> 
>        fd = open(TUN_TAP_DEV_PATH, O_RDWR);
> 
>        if (fd < 0) {
> 
> @@ -186,4 +181,11 @@ tun_alloc(struct pmd_internals *pmd, int is_keepalive)
> 
>        }
> 
> +       /*
> 
> +       * Name passed to kernel might be wildcard like dtun%d
> 
> +       * and need to find the resulting device.
> 
> +       */
> 
> +       TAP_LOG(DEBUG, "Device name is '%s'", ifr.ifr_name);
> 
> +       strlcpy(pmd->name, ifr.ifr_name, RTE_ETH_NAME_MAX_LEN);
> 
> +
> 
>        if (is_keepalive) {
> 
>                 /*
> 
> @@ -1756,4 +1758,5 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, char
> *tap_name,
> 
>                 goto error_exit;
> 
>        }
> 
> +       TAP_LOG(DEBUG, "allocated %s", pmd->name);
> 
>         ifr.ifr_mtu = dev->data->mtu;
> 
> @@ -1895,6 +1898,6 @@ set_interface_name(const char *key __rte_unused,
> 
>                 strlcpy(name, value, RTE_ETH_NAME_MAX_LEN);
> 
>        else
> 
> -                 snprintf(name, RTE_ETH_NAME_MAX_LEN, "%s%d",
> 
> -                           DEFAULT_TAP_NAME, tap_unit - 1);
> 
> +                /* use tap%d which causes kernel to choose next available
> */
> 
> +                strlcpy(name, DEFAULT_TAP_NAME "%d", RTE_ETH_NAME_MAX_LEN);
> 
>         return 0;
> 
> @@ -2003,6 +2006,6 @@ rte_pmd_tun_probe(struct rte_vdev_device *dev)
> 
>        }
> 
> -        snprintf(tun_name, sizeof(tun_name), "%s%u",
> 
> -                 DEFAULT_TUN_NAME, tun_unit++);
> 
> +       /* use tun%d which causes kernel to choose next available */
> 
> +       strlcpy(tun_name, DEFAULT_TUN_NAME "%d", RTE_ETH_NAME_MAX_LEN);
> 
>         if (params && (params[0] != '\0')) {
> 
> @@ -2024,9 +2027,8 @@ rte_pmd_tun_probe(struct rte_vdev_device *dev)
> 
>        pmd_link.link_speed = ETH_SPEED_NUM_10G;
> 
> -        TAP_LOG(NOTICE, "Initializing pmd_tun for %s as %s",
> 
> -                 name, tun_name);
> 
> +       TAP_LOG(NOTICE, "Initializing pmd_tun for %s", name);
> 
>         ret = eth_dev_tap_create(dev, tun_name, remote_iface, 0,
> 
> -                 ETH_TUNTAP_TYPE_TUN);
> 
> +                                   ETH_TUNTAP_TYPE_TUN);
> 
>  leave:
> 
> @@ -2034,5 +2036,4 @@ leave:
> 
>                 TAP_LOG(ERR, "Failed to create pmd for %s as %s",
> 
>                           name, tun_name);
> 
> -                 tun_unit--; /* Restore the unit number */
> 
>        }
> 
>        rte_kvargs_free(kvlist);
> 
> @@ -2190,6 +2191,7 @@ rte_pmd_tap_probe(struct rte_vdev_device *dev)
> 
>         speed = ETH_SPEED_NUM_10G;
> 
> -        snprintf(tap_name, sizeof(tap_name), "%s%u",
> 
> -                 DEFAULT_TAP_NAME, tap_unit++);
> 
> +
> 
> +       /* use tap%d which causes kernel to choose next available */
> 
> +       strlcpy(tap_name, DEFAULT_TAP_NAME "%d", RTE_ETH_NAME_MAX_LEN);
> 
>        memset(remote_iface, 0, RTE_ETH_NAME_MAX_LEN);
> 
> @@ -2255,5 +2257,4 @@ leave:
> 
>                           tap_devices_count--;
> 
>                 }
> 
> -                 tap_unit--;                  /* Restore the unit number */
> 
>        }
> 
>        rte_kvargs_free(kvlist);
> 
> --
> 
> 2.19.0
> 
>  
> 
> ---
> 
>   Diff of the applied patch vs upstream commit (please double-check if
> non-empty:
> 
> ---
> 
> --- -   2019-01-31 15:44:06.948575581 +0000
> 
> +++ 0052-net-tap-let-kernel-choose-tun-device-name.patch          2019-01-31
> 15:44:05.000000000 +0000
> 
> @@ -1,15 +1,16 @@
> 
> -From b5235d61f3b7d2b1c2b9ee2601f3aca2b151b508 Mon Sep 17 00:00:00 2001
> 
> +From d3034e04e58ca7bed78182fa9a1439afe4a73d4b Mon Sep 17 00:00:00 2001
> 
> From: Stephen Hemminger <stephen@networkplumber.org>
> 
> Date: Fri, 11 Jan 2019 12:35:18 -0800
> 
> Subject: [PATCH] net/tap: let kernel choose tun device name
> 
> +[ upstream commit b5235d61f3b7d2b1c2b9ee2601f3aca2b151b508 ]
> 
> +
> 
> Assigning tun and tap index in DPDK tap device driver is racy  and fails if
> used with primary/secondary. Instead use the kernel  feature of device
> wildcarding where if a name with %d is used  the kernel will fill in the
> next available device.
> 
>  Fixes: 02f96a0a82d1 ("net/tap: add TUN/TAP device PMD")
> 
> -Cc: stable@dpdk.org
> 
>  Reported-by: Haifeng Li <hfli@netitest.com>
> 
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> @@ -19,10 +20,
> 10 @@
> 
>   1 file changed, 17 insertions(+), 16 deletions(-)
> 
>  diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c
> -index d699b4fb0..ed8483cb9 100644
> 
> +index aef8b0b9f..a93429973 100644
> 
> --- a/drivers/net/tap/rte_eth_tap.c
> 
> +++ b/drivers/net/tap/rte_eth_tap.c
> 
> -@@ -80,7 +80,4 @@ static const char *valid_arguments[] = {
> 
> +@@ -79,7 +79,4 @@ static const char *valid_arguments[] = {
> 
>   };
> 
>   
> 
>  -static unsigned int tap_unit;
> 
> @@ -30,14 +31,14 @@
> 
> -
> 
>   static char tuntap_name[8];
> 
>   
> 
> -@@ -152,6 +149,4 @@ tun_alloc(struct pmd_internals *pmd, int is_keepalive)
> 
> -       strlcpy(ifr.ifr_name, pmd->name, IFNAMSIZ);
> 
> +@@ -151,6 +148,4 @@ tun_alloc(struct pmd_internals *pmd, int is_keepalive)
> 
> +      snprintf(ifr.ifr_name, IFNAMSIZ, "%s", pmd->name);
> 
>   
> 
>  -      TAP_LOG(DEBUG, "ifr_name '%s'", ifr.ifr_name);
> 
> -
> 
>        fd = open(TUN_TAP_DEV_PATH, O_RDWR);
> 
>        if (fd < 0) {
> 
> -@@ -187,4 +182,11 @@ tun_alloc(struct pmd_internals *pmd, int is_keepalive)
> 
> +@@ -186,4 +181,11 @@ tun_alloc(struct pmd_internals *pmd, int 
> 
> +is_keepalive)
> 
>        }
> 
>   
> 
>  +     /*
> 
> @@ -49,22 +50,22 @@
> 
> +
> 
>        if (is_keepalive) {
> 
>                 /*
> 
> -@@ -1757,4 +1759,5 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, char
> *tap_name,
> 
> +@@ -1756,4 +1758,5 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, 
> 
> +char *tap_name,
> 
>                 goto error_exit;
> 
>        }
> 
> +     TAP_LOG(DEBUG, "allocated %s", pmd->name);
> 
>   
> 
>        ifr.ifr_mtu = dev->data->mtu;
> 
> -@@ -1919,6 +1922,6 @@ set_interface_name(const char *key __rte_unused,
> 
> +@@ -1895,6 +1898,6 @@ set_interface_name(const char *key __rte_unused,
> 
>                 strlcpy(name, value, RTE_ETH_NAME_MAX_LEN);
> 
> -       } else {
> 
> +      else
> 
> -               snprintf(name, RTE_ETH_NAME_MAX_LEN, "%s%d",
> 
> -                        DEFAULT_TAP_NAME, tap_unit - 1);
> 
> +              /* use tap%d which causes kernel to choose next available */
> 
> +              strlcpy(name, DEFAULT_TAP_NAME "%d", RTE_ETH_NAME_MAX_LEN);
> 
> -       }
> 
> + 
> 
>        return 0;
> 
> -@@ -2033,6 +2036,6 @@ rte_pmd_tun_probe(struct rte_vdev_device *dev)
> 
> +@@ -2003,6 +2006,6 @@ rte_pmd_tun_probe(struct rte_vdev_device *dev)
> 
>        }
> 
>   
> 
>  -      snprintf(tun_name, sizeof(tun_name), "%s%u",
> 
> @@ -73,25 +74,25 @@
> 
> +     strlcpy(tun_name, DEFAULT_TUN_NAME "%d", RTE_ETH_NAME_MAX_LEN);
> 
>   
> 
>        if (params && (params[0] != '\0')) {
> 
> -@@ -2054,9 +2057,8 @@ rte_pmd_tun_probe(struct rte_vdev_device *dev)
> 
> +@@ -2024,9 +2027,8 @@ rte_pmd_tun_probe(struct rte_vdev_device *dev)
> 
>        pmd_link.link_speed = ETH_SPEED_NUM_10G;
> 
>   
> 
> --       TAP_LOG(DEBUG, "Initializing pmd_tun for %s as %s",
> 
> +-      TAP_LOG(NOTICE, "Initializing pmd_tun for %s as %s",
> 
> -               name, tun_name);
> 
> -+      TAP_LOG(DEBUG, "Initializing pmd_tun for %s", name);
> 
> ++     TAP_LOG(NOTICE, "Initializing pmd_tun for %s", name);
> 
>   
> 
>        ret = eth_dev_tap_create(dev, tun_name, remote_iface, 0,
> 
> -               ETH_TUNTAP_TYPE_TUN);
> 
> +                                 ETH_TUNTAP_TYPE_TUN);
> 
>   
> 
>   leave:
> 
> -@@ -2064,5 +2066,4 @@ leave:
> 
> +@@ -2034,5 +2036,4 @@ leave:
> 
>                 TAP_LOG(ERR, "Failed to create pmd for %s as %s",
> 
>                          name, tun_name);
> 
> -               tun_unit--; /* Restore the unit number */
> 
>        }
> 
>        rte_kvargs_free(kvlist);
> 
> -@@ -2220,6 +2221,7 @@ rte_pmd_tap_probe(struct rte_vdev_device *dev)
> 
> +@@ -2190,6 +2191,7 @@ rte_pmd_tap_probe(struct rte_vdev_device *dev)
> 
>   
> 
>        speed = ETH_SPEED_NUM_10G;
> 
> -      snprintf(tap_name, sizeof(tap_name), "%s%u",
> 
> @@ -101,7 +102,7 @@
> 
> +     strlcpy(tap_name, DEFAULT_TAP_NAME "%d", RTE_ETH_NAME_MAX_LEN);
> 
>        memset(remote_iface, 0, RTE_ETH_NAME_MAX_LEN);
> 
>   
> 
> -@@ -2284,5 +2286,4 @@ leave:
> 
> +@@ -2255,5 +2257,4 @@ leave:
> 
>                          tap_devices_count--;
> 
>                 }
> 
> -               tap_unit--;                  /* Restore the unit number */
> 

I wonder if the real problem here is the number of open file descriptors that
get leftover from the new EAL memory changes.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [dpdk-stable] patch 'net/tap: let kernel choose tun device name' has been queued to LTS release 18.11.1
  2019-01-31 15:48 [dpdk-stable] patch 'net/i40e: fix get RSS conf' " Kevin Traynor
@ 2019-01-31 15:49 ` Kevin Traynor
  0 siblings, 0 replies; 3+ messages in thread
From: Kevin Traynor @ 2019-01-31 15:49 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: Haifeng Li, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 18.11.1

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 02/07/19. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.

Thanks.

Kevin Traynor

---
>From d3034e04e58ca7bed78182fa9a1439afe4a73d4b Mon Sep 17 00:00:00 2001
From: Stephen Hemminger <stephen@networkplumber.org>
Date: Fri, 11 Jan 2019 12:35:18 -0800
Subject: [PATCH] net/tap: let kernel choose tun device name

[ upstream commit b5235d61f3b7d2b1c2b9ee2601f3aca2b151b508 ]

Assigning tun and tap index in DPDK tap device driver is racy
and fails if used with primary/secondary. Instead use the kernel
feature of device wildcarding where if a name with %d is used
the kernel will fill in the next available device.

Fixes: 02f96a0a82d1 ("net/tap: add TUN/TAP device PMD")

Reported-by: Haifeng Li <hfli@netitest.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by Keith Wiles <keith.wiles@intel.com>
---
 drivers/net/tap/rte_eth_tap.c | 33 +++++++++++++++++----------------
 1 file changed, 17 insertions(+), 16 deletions(-)

diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c
index aef8b0b9f..a93429973 100644
--- a/drivers/net/tap/rte_eth_tap.c
+++ b/drivers/net/tap/rte_eth_tap.c
@@ -79,7 +79,4 @@ static const char *valid_arguments[] = {
 };
 
-static unsigned int tap_unit;
-static unsigned int tun_unit;
-
 static char tuntap_name[8];
 
@@ -151,6 +148,4 @@ tun_alloc(struct pmd_internals *pmd, int is_keepalive)
 	snprintf(ifr.ifr_name, IFNAMSIZ, "%s", pmd->name);
 
-	TAP_LOG(DEBUG, "ifr_name '%s'", ifr.ifr_name);
-
 	fd = open(TUN_TAP_DEV_PATH, O_RDWR);
 	if (fd < 0) {
@@ -186,4 +181,11 @@ tun_alloc(struct pmd_internals *pmd, int is_keepalive)
 	}
 
+	/*
+	 * Name passed to kernel might be wildcard like dtun%d
+	 * and need to find the resulting device.
+	 */
+	TAP_LOG(DEBUG, "Device name is '%s'", ifr.ifr_name);
+	strlcpy(pmd->name, ifr.ifr_name, RTE_ETH_NAME_MAX_LEN);
+
 	if (is_keepalive) {
 		/*
@@ -1756,4 +1758,5 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, char *tap_name,
 		goto error_exit;
 	}
+	TAP_LOG(DEBUG, "allocated %s", pmd->name);
 
 	ifr.ifr_mtu = dev->data->mtu;
@@ -1895,6 +1898,6 @@ set_interface_name(const char *key __rte_unused,
 		strlcpy(name, value, RTE_ETH_NAME_MAX_LEN);
 	else
-		snprintf(name, RTE_ETH_NAME_MAX_LEN, "%s%d",
-			 DEFAULT_TAP_NAME, tap_unit - 1);
+		/* use tap%d which causes kernel to choose next available */
+		strlcpy(name, DEFAULT_TAP_NAME "%d", RTE_ETH_NAME_MAX_LEN);
 
 	return 0;
@@ -2003,6 +2006,6 @@ rte_pmd_tun_probe(struct rte_vdev_device *dev)
 	}
 
-	snprintf(tun_name, sizeof(tun_name), "%s%u",
-		 DEFAULT_TUN_NAME, tun_unit++);
+	/* use tun%d which causes kernel to choose next available */
+	strlcpy(tun_name, DEFAULT_TUN_NAME "%d", RTE_ETH_NAME_MAX_LEN);
 
 	if (params && (params[0] != '\0')) {
@@ -2024,9 +2027,8 @@ rte_pmd_tun_probe(struct rte_vdev_device *dev)
 	pmd_link.link_speed = ETH_SPEED_NUM_10G;
 
-	TAP_LOG(NOTICE, "Initializing pmd_tun for %s as %s",
-		name, tun_name);
+	TAP_LOG(NOTICE, "Initializing pmd_tun for %s", name);
 
 	ret = eth_dev_tap_create(dev, tun_name, remote_iface, 0,
-		ETH_TUNTAP_TYPE_TUN);
+				 ETH_TUNTAP_TYPE_TUN);
 
 leave:
@@ -2034,5 +2036,4 @@ leave:
 		TAP_LOG(ERR, "Failed to create pmd for %s as %s",
 			name, tun_name);
-		tun_unit--; /* Restore the unit number */
 	}
 	rte_kvargs_free(kvlist);
@@ -2190,6 +2191,7 @@ rte_pmd_tap_probe(struct rte_vdev_device *dev)
 
 	speed = ETH_SPEED_NUM_10G;
-	snprintf(tap_name, sizeof(tap_name), "%s%u",
-		 DEFAULT_TAP_NAME, tap_unit++);
+
+	/* use tap%d which causes kernel to choose next available */
+	strlcpy(tap_name, DEFAULT_TAP_NAME "%d", RTE_ETH_NAME_MAX_LEN);
 	memset(remote_iface, 0, RTE_ETH_NAME_MAX_LEN);
 
@@ -2255,5 +2257,4 @@ leave:
 			tap_devices_count--;
 		}
-		tap_unit--;		/* Restore the unit number */
 	}
 	rte_kvargs_free(kvlist);
-- 
2.19.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2019-01-31 15:44:06.948575581 +0000
+++ 0052-net-tap-let-kernel-choose-tun-device-name.patch	2019-01-31 15:44:05.000000000 +0000
@@ -1,15 +1,16 @@
-From b5235d61f3b7d2b1c2b9ee2601f3aca2b151b508 Mon Sep 17 00:00:00 2001
+From d3034e04e58ca7bed78182fa9a1439afe4a73d4b Mon Sep 17 00:00:00 2001
 From: Stephen Hemminger <stephen@networkplumber.org>
 Date: Fri, 11 Jan 2019 12:35:18 -0800
 Subject: [PATCH] net/tap: let kernel choose tun device name
 
+[ upstream commit b5235d61f3b7d2b1c2b9ee2601f3aca2b151b508 ]
+
 Assigning tun and tap index in DPDK tap device driver is racy
 and fails if used with primary/secondary. Instead use the kernel
 feature of device wildcarding where if a name with %d is used
 the kernel will fill in the next available device.
 
 Fixes: 02f96a0a82d1 ("net/tap: add TUN/TAP device PMD")
-Cc: stable@dpdk.org
 
 Reported-by: Haifeng Li <hfli@netitest.com>
 Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
@@ -19,10 +20,10 @@
  1 file changed, 17 insertions(+), 16 deletions(-)
 
 diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c
-index d699b4fb0..ed8483cb9 100644
+index aef8b0b9f..a93429973 100644
 --- a/drivers/net/tap/rte_eth_tap.c
 +++ b/drivers/net/tap/rte_eth_tap.c
-@@ -80,7 +80,4 @@ static const char *valid_arguments[] = {
+@@ -79,7 +79,4 @@ static const char *valid_arguments[] = {
  };
  
 -static unsigned int tap_unit;
@@ -30,14 +31,14 @@
 -
  static char tuntap_name[8];
  
-@@ -152,6 +149,4 @@ tun_alloc(struct pmd_internals *pmd, int is_keepalive)
- 	strlcpy(ifr.ifr_name, pmd->name, IFNAMSIZ);
+@@ -151,6 +148,4 @@ tun_alloc(struct pmd_internals *pmd, int is_keepalive)
+ 	snprintf(ifr.ifr_name, IFNAMSIZ, "%s", pmd->name);
  
 -	TAP_LOG(DEBUG, "ifr_name '%s'", ifr.ifr_name);
 -
  	fd = open(TUN_TAP_DEV_PATH, O_RDWR);
  	if (fd < 0) {
-@@ -187,4 +182,11 @@ tun_alloc(struct pmd_internals *pmd, int is_keepalive)
+@@ -186,4 +181,11 @@ tun_alloc(struct pmd_internals *pmd, int is_keepalive)
  	}
  
 +	/*
@@ -49,22 +50,22 @@
 +
  	if (is_keepalive) {
  		/*
-@@ -1757,4 +1759,5 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, char *tap_name,
+@@ -1756,4 +1758,5 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, char *tap_name,
  		goto error_exit;
  	}
 +	TAP_LOG(DEBUG, "allocated %s", pmd->name);
  
  	ifr.ifr_mtu = dev->data->mtu;
-@@ -1919,6 +1922,6 @@ set_interface_name(const char *key __rte_unused,
+@@ -1895,6 +1898,6 @@ set_interface_name(const char *key __rte_unused,
  		strlcpy(name, value, RTE_ETH_NAME_MAX_LEN);
- 	} else {
+ 	else
 -		snprintf(name, RTE_ETH_NAME_MAX_LEN, "%s%d",
 -			 DEFAULT_TAP_NAME, tap_unit - 1);
 +		/* use tap%d which causes kernel to choose next available */
 +		strlcpy(name, DEFAULT_TAP_NAME "%d", RTE_ETH_NAME_MAX_LEN);
- 	}
+ 
  	return 0;
-@@ -2033,6 +2036,6 @@ rte_pmd_tun_probe(struct rte_vdev_device *dev)
+@@ -2003,6 +2006,6 @@ rte_pmd_tun_probe(struct rte_vdev_device *dev)
  	}
  
 -	snprintf(tun_name, sizeof(tun_name), "%s%u",
@@ -73,25 +74,25 @@
 +	strlcpy(tun_name, DEFAULT_TUN_NAME "%d", RTE_ETH_NAME_MAX_LEN);
  
  	if (params && (params[0] != '\0')) {
-@@ -2054,9 +2057,8 @@ rte_pmd_tun_probe(struct rte_vdev_device *dev)
+@@ -2024,9 +2027,8 @@ rte_pmd_tun_probe(struct rte_vdev_device *dev)
  	pmd_link.link_speed = ETH_SPEED_NUM_10G;
  
--	TAP_LOG(DEBUG, "Initializing pmd_tun for %s as %s",
+-	TAP_LOG(NOTICE, "Initializing pmd_tun for %s as %s",
 -		name, tun_name);
-+	TAP_LOG(DEBUG, "Initializing pmd_tun for %s", name);
++	TAP_LOG(NOTICE, "Initializing pmd_tun for %s", name);
  
  	ret = eth_dev_tap_create(dev, tun_name, remote_iface, 0,
 -		ETH_TUNTAP_TYPE_TUN);
 +				 ETH_TUNTAP_TYPE_TUN);
  
  leave:
-@@ -2064,5 +2066,4 @@ leave:
+@@ -2034,5 +2036,4 @@ leave:
  		TAP_LOG(ERR, "Failed to create pmd for %s as %s",
  			name, tun_name);
 -		tun_unit--; /* Restore the unit number */
  	}
  	rte_kvargs_free(kvlist);
-@@ -2220,6 +2221,7 @@ rte_pmd_tap_probe(struct rte_vdev_device *dev)
+@@ -2190,6 +2191,7 @@ rte_pmd_tap_probe(struct rte_vdev_device *dev)
  
  	speed = ETH_SPEED_NUM_10G;
 -	snprintf(tap_name, sizeof(tap_name), "%s%u",
@@ -101,7 +102,7 @@
 +	strlcpy(tap_name, DEFAULT_TAP_NAME "%d", RTE_ETH_NAME_MAX_LEN);
  	memset(remote_iface, 0, RTE_ETH_NAME_MAX_LEN);
  
-@@ -2284,5 +2286,4 @@ leave:
+@@ -2255,5 +2257,4 @@ leave:
  			tap_devices_count--;
  		}
 -		tap_unit--;		/* Restore the unit number */

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2019-02-06 17:45 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <003901d4ba18$ee13bf40$ca3b3dc0$@netitest.com>
2019-02-05 12:57 ` [dpdk-stable] 答复: patch 'net/tap: let kernel choose tun device name' has been queued to LTS release 18.11.1 Kevin Traynor
2019-02-06 17:45 ` [dpdk-stable] " Stephen Hemminger
2019-01-31 15:48 [dpdk-stable] patch 'net/i40e: fix get RSS conf' " Kevin Traynor
2019-01-31 15:49 ` [dpdk-stable] patch 'net/tap: let kernel choose tun device name' " Kevin Traynor

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).