Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 23 Mar 2018 18:34:35 +0000 (UTC)
From:      Hans Petter Selasky <hselasky@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r331453 - head/sys/dev/mlx5/mlx5_core
Message-ID:  <201803231834.w2NIYZ5j066035@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: hselasky
Date: Fri Mar 23 18:34:35 2018
New Revision: 331453
URL: https://svnweb.freebsd.org/changeset/base/331453

Log:
  Don't save PCI state when PCI error is detected in mlx5core.
  
  When a PCI error is detected the PCI state could be corrupt, don't
  save it in that flow. Save the state after initialization. After
  restoring the PCI state during slot reset save it again, restoring
  the state destroys the previously saved state info.
  
  Submitted by:	slavash@
  MFC after:	1 week
  Sponsored by:	Mellanox Technologies

Modified:
  head/sys/dev/mlx5/mlx5_core/mlx5_main.c

Modified: head/sys/dev/mlx5/mlx5_core/mlx5_main.c
==============================================================================
--- head/sys/dev/mlx5/mlx5_core/mlx5_main.c	Fri Mar 23 18:32:03 2018	(r331452)
+++ head/sys/dev/mlx5/mlx5_core/mlx5_main.c	Fri Mar 23 18:34:35 2018	(r331453)
@@ -1224,6 +1224,7 @@ static int init_one(struct pci_dev *pdev,
 		goto clean_health;
 	}
 
+	pci_save_state(pdev->dev.bsddev);
 	return 0;
 
 clean_health:
@@ -1264,7 +1265,6 @@ static pci_ers_result_t mlx5_pci_err_detected(struct p
 	mlx5_enter_error_state(dev, false);
 	mlx5_unload_one(dev, priv, false);
 	if (state) {
-		pci_save_state(pdev->dev.bsddev);
 		mlx5_drain_health_wq(dev);
 		mlx5_pci_disable_device(dev);
 	}
@@ -1289,6 +1289,7 @@ static pci_ers_result_t mlx5_pci_slot_reset(struct pci
 	pci_set_master(pdev);
 	pci_set_powerstate(pdev->dev.bsddev, PCI_POWERSTATE_D0);
 	pci_restore_state(pdev->dev.bsddev);
+	pci_save_state(pdev->dev.bsddev);
 
 	return err ? PCI_ERS_RESULT_DISCONNECT : PCI_ERS_RESULT_RECOVERED;
 }
@@ -1343,7 +1344,6 @@ static void mlx5_pci_resume(struct pci_dev *pdev)
 
 	dev_info(&pdev->dev, "%s was called\n", __func__);
 
-	pci_save_state(pdev->dev.bsddev);
 	wait_vital(pdev);
 
 	err = mlx5_load_one(dev, priv, false);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201803231834.w2NIYZ5j066035>