The branch stable/14 has been updated by kib:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=a76475313d6580cb36eb940d5730407d832246de

commit a76475313d6580cb36eb940d5730407d832246de
Author:     Konstantin Belousov <k...@freebsd.org>
AuthorDate: 2023-12-29 03:14:56 +0000
Commit:     Konstantin Belousov <k...@freebsd.org>
CommitDate: 2024-01-11 16:46:52 +0000

    mlx5(4): only detach IOV children if iov was successfully initialized
    
    (cherry picked from commit 987446fa39e8f6887ea16ad49f00f699b2efd210)
---
 sys/dev/mlx5/driver.h              |  2 ++
 sys/dev/mlx5/mlx5_core/mlx5_main.c | 11 ++++++++---
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/sys/dev/mlx5/driver.h b/sys/dev/mlx5/driver.h
index 9daa1235bd9c..6ebe4171a503 100644
--- a/sys/dev/mlx5/driver.h
+++ b/sys/dev/mlx5/driver.h
@@ -736,6 +736,8 @@ struct mlx5_core_dev {
        bool dump_copyout;
        struct mtx dump_lock;
 
+       bool                    iov_pf;
+
        struct sysctl_ctx_list  sysctl_ctx;
        int                     msix_eqvec;
        int                     pwr_status;
diff --git a/sys/dev/mlx5/mlx5_core/mlx5_main.c 
b/sys/dev/mlx5/mlx5_core/mlx5_main.c
index f6dc1158f085..6b9b63a24714 100644
--- a/sys/dev/mlx5/mlx5_core/mlx5_main.c
+++ b/sys/dev/mlx5/mlx5_core/mlx5_main.c
@@ -1719,7 +1719,9 @@ static int init_one(struct pci_dev *pdev,
                        pci_iov_schema_add_uint64(vf_schema, iov_port_guid_name,
                            0, 0);
                        err = pci_iov_attach(bsddev, pf_schema, vf_schema);
-                       if (err != 0) {
+                       if (err == 0) {
+                               dev->iov_pf = true;
+                       } else {
                                device_printf(bsddev,
                            "Failed to initialize SR-IOV support, error %d\n",
                                    err);
@@ -1753,8 +1755,11 @@ static void remove_one(struct pci_dev *pdev)
        struct mlx5_priv *priv = &dev->priv;
 
 #ifdef PCI_IOV
-       pci_iov_detach(pdev->dev.bsddev);
-       mlx5_eswitch_disable_sriov(priv->eswitch);
+       if (dev->iov_pf) {
+               pci_iov_detach(pdev->dev.bsddev);
+               mlx5_eswitch_disable_sriov(priv->eswitch);
+               dev->iov_pf = false;
+       }
 #endif
 
        if (mlx5_unload_one(dev, priv, true)) {

Reply via email to