i40e: Move the saving of old link info from handle_link_event to link_event
authorCatherine Sullivan <catherine.sullivan@intel.com>
Wed, 21 Oct 2015 23:47:09 +0000 (19:47 -0400)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Wed, 25 Nov 2015 18:05:56 +0000 (10:05 -0800)
The watchdog only calls link_event not handle_link_event which means
that we need to save the old information in link_event.

Previously when polling we were comparing current data to the old data
saved the last time we actually received a link event. This means that
the polling would only fix link status changes in one direction
depending on what the last old data saved off was.

Change-ID: Ie590f30fdbcb133d0ddad4e07e3eb1aad58255b3
Signed-off-by: Catherine Sullivan <catherine.sullivan@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/i40e/i40e_main.c

index 0e6abc2..9c0a381 100644 (file)
@@ -6016,6 +6016,9 @@ static void i40e_link_event(struct i40e_pf *pf)
        i40e_status status;
        bool new_link, old_link;
 
+       /* save off old link status information */
+       pf->hw.phy.link_info_old = pf->hw.phy.link_info;
+
        /* set this to force the get_link_status call to refresh state */
        pf->hw.phy.get_link_info = true;
 
@@ -6150,13 +6153,9 @@ unlock:
 static void i40e_handle_link_event(struct i40e_pf *pf,
                                   struct i40e_arq_event_info *e)
 {
-       struct i40e_hw *hw = &pf->hw;
        struct i40e_aqc_get_link_status *status =
                (struct i40e_aqc_get_link_status *)&e->desc.params.raw;
 
-       /* save off old link status information */
-       hw->phy.link_info_old = hw->phy.link_info;
-
        /* Do a new status request to re-enable LSE reporting
         * and load new status information into the hw struct
         * This completely ignores any state information