diff options
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.patch | 52 |
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; + } + |