Comment 15 for bug 1865570

Revision history for this message
Eugene Crosser (crosser) wrote :

To check the theory from comment #13, I built kernel from mainline at tag v5.6-rc5. Out of the box, it behaves the same way as all recent kernels: suspend works only the first time. I could not revert commit f15bb6d (there were later changes), instead I commented out the calls to e1000e_s0ix_entry_flow() and e1000e_s0ix_exit_flow()

diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
index db4ea58bac82..53f8ed97d282 100644
--- a/drivers/net/ethernet/intel/e1000e/netdev.c
+++ b/drivers/net/ethernet/intel/e1000e/netdev.c
@@ -6860,8 +6860,8 @@ static int e1000e_pm_suspend(struct device *dev)
   e1000e_pm_thaw(dev);

  /* Introduce S0ix implementation */
- if (hw->mac.type >= e1000_pch_cnp)
- e1000e_s0ix_entry_flow(adapter);
+ /*if (hw->mac.type >= e1000_pch_cnp)
+ e1000e_s0ix_entry_flow(adapter);*/

  return rc;
 }
@@ -6875,8 +6875,8 @@ static int e1000e_pm_resume(struct device *dev)
  int rc;

  /* Introduce S0ix implementation */
- if (hw->mac.type >= e1000_pch_cnp)
- e1000e_s0ix_exit_flow(adapter);
+ /* if (hw->mac.type >= e1000_pch_cnp)
+ e1000e_s0ix_exit_flow(adapter);*/

  rc = __e1000_resume(pdev);
  if (rc)

And voila, suspend works normally every time now!
Apparently S0ix implementation is indeed the culprit.