From: Leon Romanovsky <leon@kernel.org>
To: Niklas Schnelle <schnelle@linux.ibm.com>
Cc: Saeed Mahameed <saeedm@nvidia.com>,
Gerd Bayer <gbayer@linux.ibm.com>,
"alexander.sschmidt" <alexander.sschmidt@linux.ibm.com>,
Alexandra Winter <wintera@linux.ibm.com>,
netdev@vger.kernel.org, rrameshbabu@nvidia.com, gal@nvidia.com,
moshe@nvidia.com, shayd@nvidia.com
Subject: Re: Kernel crash after FLR reset of a ConnectX-5 PF in switchdev mode
Date: Thu, 13 Apr 2023 14:02:28 +0300 [thread overview]
Message-ID: <20230413110228.GJ17993@unreal> (raw)
In-Reply-To: <90e1efad457f40c1f9f7b8cb56852072d8ea00fd.camel@linux.ibm.com>
On Tue, Apr 11, 2023 at 05:11:11PM +0200, Niklas Schnelle wrote:
> Hi Saeed, Hi Leon,
>
> While testing PCI recovery with a ConnectX-5 card (MT28800, fw
> 16.35.1012) and vanilla 6.3-rc4/5/6 on s390 I've run into a kernel
> crash (stacktrace attached) when the card is in switchdev mode. No
> crash occurs and the recovery succeeds in legacy mode (with VFs). I
> found that the same crash occurs also with a simple Function Level
> Reset instead of the s390 specific PCI recovery, see instructions
> below. From the looks of it I think this could affect non-s390 too but
> I don't have a proper x86 test system with a ConnectX card to test
> with.
>
> Anyway, I tried to analyze further but got stuck after figuring out
> that in mlx5e_remove() deep down from mlx5_fw_fatal_reporter_err_work()
> (see trace) the mlx5e_dev->priv pointer is valid but the pointed to
> struct only contains zeros as it was previously zeroed by
> mlx5_mdev_uninit() which then leads to a NULL pointer access.
>
> The crash itself can be prevented by the following debug patch though
> clearly this is not a proper fix:
>
> --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
> @@ -6012,6 +6012,10 @@ static void mlx5e_remove(struct auxiliary_device
> *adev)
> struct mlx5e_priv *priv = mlx5e_dev->priv;
> pm_message_t state = {};
>
> + if (!priv->mdev) {
> + pr_err("%s with zeroed mlx5e_dev->priv\n", __func__);
> + return;
> + }
> mlx5_core_uplink_netdev_set(priv->mdev, NULL);
> mlx5e_dcbnl_delete_app(priv);
> unregister_netdev(priv->netdev);
>
> With that I then tried to track down why mlx5_mdev_uninit() is called
> and this might actually be s390 specific in that this happens during
> the removal of the VF which on s390 causes extra hot unplug events for
> the VFs (our virtualized PCI hotplug is per-PCI function) resulting in
> the following call trace:
>
> ...
> zpci_bus_remove_device()
> zpci_iov_remove_virtfn()
> pci_iov_remove_virtfn()
> pci_stop_and_remove_bus_device()
> pci_stop_bus_device()
> device_release_driver_internal()
> pci_device_remove()
> remove_one()
> mlx5_mdev_uninit()
>
> Then again I would expect that on other architectures VFs become at
> leastunresponsive during a FLR of the PF not sure if that also lead to
> calls to remove_one() though.
>
> As another data point I tried the same on the default Ubuntu 22.04
> generic 5.15 kernel and there no crash occurs so this might be a newer
> issue.
>
> Also, I did test with and without the patch I sent recently for
> skipping the wait in mlx5_health_wait_pci_up() but that made no
> difference.
>
> Any hints on how to debug this further and could you try to see if this
> occurs on other architectures as well?
My guess that the splash, which complains about missing mutex_init(), is an outcome of these failures:
[ 1375.771395] mlx5_core 0004:00:00.0 eth0 (unregistering): vport 1 error -67 reading stats
[ 1376.151345] mlx5_core 0004:00:00.0: mlx5e_init_nic_tx:5376:(pid 1505): create tises failed, -67
[ 1376.238808] mlx5_core 0004:00:00.0 ens8832f0np0: mlx5e_netdev_change_profile: new profile init failed, -67
[ 1376.243746] mlx5_core 0004:00:00.0: mlx5e_init_rep_tx:1101:(pid 1505): create tises failed, -67
[ 1376.328623] mlx5_core 0004:00:00.0 ens8832f0np0: mlx5e_netdev_change_profile: failed to rollback to orig profile,
-67 is -ENOLINK from mlx5_internal_err_ret_value().
Thanks
next prev parent reply other threads:[~2023-04-13 11:02 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-11 15:11 Kernel crash after FLR reset of a ConnectX-5 PF in switchdev mode Niklas Schnelle
2023-04-13 11:02 ` Leon Romanovsky [this message]
2023-04-13 22:02 ` Saeed Mahameed
2023-04-14 7:12 ` Niklas Schnelle
2023-04-14 22:27 ` Saeed Mahameed
2023-04-19 11:47 ` Niklas Schnelle
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=20230413110228.GJ17993@unreal \
--to=leon@kernel.org \
--cc=alexander.sschmidt@linux.ibm.com \
--cc=gal@nvidia.com \
--cc=gbayer@linux.ibm.com \
--cc=moshe@nvidia.com \
--cc=netdev@vger.kernel.org \
--cc=rrameshbabu@nvidia.com \
--cc=saeedm@nvidia.com \
--cc=schnelle@linux.ibm.com \
--cc=shayd@nvidia.com \
--cc=wintera@linux.ibm.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).