| From: Benjamin Poirier <bpoirier@suse.com> |
| Date: Mon, 11 Dec 2017 16:26:40 +0900 |
| Subject: e1000e: Fix e1000_check_for_copper_link_ich8lan return value. |
| |
| commit 4110e02eb45ea447ec6f5459c9934de0a273fb91 upstream. |
| |
| e1000e_check_for_copper_link() and e1000_check_for_copper_link_ich8lan() |
| are the two functions that may be assigned to mac.ops.check_for_link when |
| phy.media_type == e1000_media_type_copper. Commit 19110cfbb34d ("e1000e: |
| Separate signaling for link check/link up") changed the meaning of the |
| return value of check_for_link for copper media but only adjusted the first |
| function. This patch adjusts the second function likewise. |
| |
| Reported-by: Christian Hesse <list@eworm.de> |
| Reported-by: Gabriel C <nix.or.die@gmail.com> |
| Link: https://bugzilla.kernel.org/show_bug.cgi?id=198047 |
| Fixes: 19110cfbb34d ("e1000e: Separate signaling for link check/link up") |
| Signed-off-by: Benjamin Poirier <bpoirier@suse.com> |
| Tested-by: Aaron Brown <aaron.f.brown@intel.com> |
| Tested-by: Christian Hesse <list@eworm.de> |
| Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> |
| [bwh: Backported to 3.2: e1000_check_for_copper_link() has a single return |
| statement for success and error cases, so set ret_val in the link-up |
| case instead of changing that statement.] |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| drivers/net/ethernet/intel/e1000e/ich8lan.c | 11 ++++++++--- |
| 1 file changed, 8 insertions(+), 3 deletions(-) |
| |
| --- a/drivers/net/ethernet/intel/e1000e/ich8lan.c |
| +++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c |
| @@ -657,6 +657,9 @@ out: |
| * Checks to see of the link status of the hardware has changed. If a |
| * change in link status has been detected, then we read the PHY registers |
| * to get the current speed/duplex if link exists. |
| + * |
| + * Returns a negative error code (-E1000_ERR_*) or 0 (link down) or 1 (link |
| + * up). |
| **/ |
| static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw) |
| { |
| @@ -672,7 +675,7 @@ static s32 e1000_check_for_copper_link_i |
| * Change or Rx Sequence Error interrupt. |
| */ |
| if (!mac->get_link_status) { |
| - ret_val = 0; |
| + ret_val = 1; |
| goto out; |
| } |
| |
| @@ -761,9 +764,12 @@ static s32 e1000_check_for_copper_link_i |
| * different link partner. |
| */ |
| ret_val = e1000e_config_fc_after_link_up(hw); |
| - if (ret_val) |
| + if (ret_val) { |
| e_dbg("Error configuring flow control\n"); |
| + return ret_val; |
| + } |
| |
| + ret_val = 1; |
| out: |
| return ret_val; |
| } |