From: Adrien Mazarguil <adrien.mazarguil@6wind.com>
To: Ophir Munk <ophirmu@mellanox.com>
Cc: dev@dpdk.org, Thomas Monjalon <thomas@monjalon.net>,
Olga Shern <olgas@mellanox.com>,
stable@dpdk.org, Gaetan Rivet <gaetan.rivet@6wind.com>
Subject: Re: [PATCH v1] net/mlx4: fix 'show port info all' during detach
Date: Fri, 2 Mar 2018 20:12:58 +0100 [thread overview]
Message-ID: <20180302191258.GF4256@6wind.com> (raw)
In-Reply-To: <1519836450-11895-1-git-send-email-ophirmu@mellanox.com>
On Wed, Feb 28, 2018 at 04:47:30PM +0000, Ophir Munk wrote:
> The following scenario causes a crash in function mlx4_get_ifname
> 1. On testpmd startup mlx4 device is probed and started
> 2. mlx4 sriov is disabled. As a result an RMV event is sent to
> testpmd which closes the device and nullify the priv struct
> members.
> 3. Running 'show port info all' in testpmd results in segmentation
> fault because of accessing NULL pointer priv->ctx
>
> The fix is to return with an error from mlx4_get_ifname() if priv->ctx
> member is NULL.
So priv->ctx is NULL after mlx4_dev_close() was called. In my opinion the
fact testpmd is allowed to call rte_eth_dev_info_get() on a closed port is
fishy, there are quite a few other ethdev callbacks that may end up
crashing in such a scenario.
Since commit 284c908cc588 ("app/testpmd: request device removal interrupt"),
testpmd automatically calls rte_eth_dev_close() and rte_eal_dev_detach()
after receiving a removal event on a port.
rte_eth_dev_close() documentation says:
"Close a stopped Ethernet device. The device cannot be restarted!
The function frees all resources except for needed by the
closed state. To free these resources, call rte_eth_dev_detach()."
Unfortunately testpmd calls rte_*eal*_dev_detach() not
rte_*eth*_dev_detach(), the former doesn't release ethdev ports while the
latter does. I think it's a mistake, there's no point in keeping a closed
device around after it's been physically unplugged.
In short, rmv_event_callback() should call detach_port() instead of
rte_eal_dev_detach().
> Fixes: 61cbdd419478 ("net/mlx4: separate device control functions")
> Cc: stable@dpdk.org
>
> Signed-off-by: Ophir Munk <ophirmu@mellanox.com>
The above suggests the problem is actually in testpmd and was introduced in
v17.05 by commit 284c908cc588. The proposed patch is a workaround that
doesn't address the underlying issue, thus NACK unless proven otherwise :)
> ---
> drivers/net/mlx4/mlx4_ethdev.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/drivers/net/mlx4/mlx4_ethdev.c b/drivers/net/mlx4/mlx4_ethdev.c
> index 3bc6927..cca5223 100644
> --- a/drivers/net/mlx4/mlx4_ethdev.c
> +++ b/drivers/net/mlx4/mlx4_ethdev.c
> @@ -67,6 +67,9 @@ mlx4_get_ifname(const struct priv *priv, char (*ifname)[IF_NAMESIZE])
> char match[IF_NAMESIZE] = "";
>
> {
> + if (priv->ctx == NULL)
> + return -ENOENT;
> +
> MKSTR(path, "%s/device/net", priv->ctx->device->ibdev_path);
>
> dir = opendir(path);
> --
> 2.7.4
>
--
Adrien Mazarguil
6WIND
next prev parent reply other threads:[~2018-03-02 19:13 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-28 16:47 [PATCH v1] net/mlx4: fix 'show port info all' during detach Ophir Munk
2018-03-02 19:12 ` Adrien Mazarguil [this message]
2018-03-20 14:02 ` Gaëtan Rivet
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=20180302191258.GF4256@6wind.com \
--to=adrien.mazarguil@6wind.com \
--cc=dev@dpdk.org \
--cc=gaetan.rivet@6wind.com \
--cc=olgas@mellanox.com \
--cc=ophirmu@mellanox.com \
--cc=stable@dpdk.org \
--cc=thomas@monjalon.net \
/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.