aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/generic/pending-4.9/190-1-5-e1000e-Fix-error-path-in-link-detection.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/generic/pending-4.9/190-1-5-e1000e-Fix-error-path-in-link-detection.patch')
-rw-r--r--target/linux/generic/pending-4.9/190-1-5-e1000e-Fix-error-path-in-link-detection.patch52
1 files changed, 52 insertions, 0 deletions
diff --git a/target/linux/generic/pending-4.9/190-1-5-e1000e-Fix-error-path-in-link-detection.patch b/target/linux/generic/pending-4.9/190-1-5-e1000e-Fix-error-path-in-link-detection.patch
new file mode 100644
index 0000000000..8ed91db6ef
--- /dev/null
+++ b/target/linux/generic/pending-4.9/190-1-5-e1000e-Fix-error-path-in-link-detection.patch
@@ -0,0 +1,52 @@
+From patchwork Fri Jul 21 18:36:23 2017
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: [1/5] e1000e: Fix error path in link detection
+From: Benjamin Poirier <bpoirier@suse.com>
+X-Patchwork-Id: 9857487
+Message-Id: <20170721183627.13373-1-bpoirier@suse.com>
+To: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
+Cc: Lennart Sorensen <lsorense@csclub.uwaterloo.ca>,
+ intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org,
+ linux-kernel@vger.kernel.org
+Date: Fri, 21 Jul 2017 11:36:23 -0700
+
+In case of error from e1e_rphy(), the loop will exit early and "success"
+will be set to true erroneously.
+
+Signed-off-by: Benjamin Poirier <bpoirier@suse.com>
+---
+ drivers/net/ethernet/intel/e1000e/phy.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/ethernet/intel/e1000e/phy.c
++++ b/drivers/net/ethernet/intel/e1000e/phy.c
+@@ -1744,6 +1744,7 @@ s32 e1000e_phy_has_link_generic(struct e
+ s32 ret_val = 0;
+ u16 i, phy_status;
+
++ *success = false;
+ for (i = 0; i < iterations; i++) {
+ /* Some PHYs require the MII_BMSR register to be read
+ * twice due to the link bit being sticky. No harm doing
+@@ -1763,16 +1764,16 @@ s32 e1000e_phy_has_link_generic(struct e
+ ret_val = e1e_rphy(hw, MII_BMSR, &phy_status);
+ if (ret_val)
+ break;
+- if (phy_status & BMSR_LSTATUS)
++ if (phy_status & BMSR_LSTATUS) {
++ *success = true;
+ break;
++ }
+ if (usec_interval >= 1000)
+ msleep(usec_interval / 1000);
+ else
+ udelay(usec_interval);
+ }
+
+- *success = (i < iterations);
+-
+ return ret_val;
+ }
+