@@ -2913,77 +2913,53 @@ static void iavf_init_config_adapter(struct iavf_adapter *adapter)
2913
2913
2914
2914
static const int IAVF_NO_RESCHED = -1 ;
2915
2915
2916
- /**
2917
- * iavf_watchdog_task - Periodic call-back task
2918
- * @work: pointer to work_struct
2919
- **/
2920
- static void iavf_watchdog_task (struct work_struct * work )
2916
+ /* return: msec delay for requeueing itself */
2917
+ static int iavf_watchdog_step (struct iavf_adapter * adapter )
2921
2918
{
2922
- struct iavf_adapter * adapter = container_of (work ,
2923
- struct iavf_adapter ,
2924
- watchdog_task .work );
2925
- struct net_device * netdev = adapter -> netdev ;
2926
2919
struct iavf_hw * hw = & adapter -> hw ;
2927
- int msec_delay ;
2928
2920
u32 reg_val ;
2929
2921
2930
- netdev_lock (netdev );
2931
- if (!mutex_trylock (& adapter -> crit_lock )) {
2932
- if (adapter -> state == __IAVF_REMOVE ) {
2933
- netdev_unlock (netdev );
2934
- return ;
2935
- }
2936
-
2937
- msec_delay = 20 ;
2938
- goto restart_watchdog ;
2939
- }
2922
+ netdev_assert_locked (adapter -> netdev );
2923
+ lockdep_assert_held (& adapter -> crit_lock );
2940
2924
2941
2925
if (adapter -> flags & IAVF_FLAG_PF_COMMS_FAILED )
2942
2926
iavf_change_state (adapter , __IAVF_COMM_FAILED );
2943
2927
2944
2928
switch (adapter -> state ) {
2945
2929
case __IAVF_STARTUP :
2946
2930
iavf_startup (adapter );
2947
- msec_delay = 30 ;
2948
- goto watchdog_done ;
2931
+ return 30 ;
2949
2932
case __IAVF_INIT_VERSION_CHECK :
2950
2933
iavf_init_version_check (adapter );
2951
- msec_delay = 30 ;
2952
- goto watchdog_done ;
2934
+ return 30 ;
2953
2935
case __IAVF_INIT_GET_RESOURCES :
2954
2936
iavf_init_get_resources (adapter );
2955
- msec_delay = 1 ;
2956
- goto watchdog_done ;
2937
+ return 1 ;
2957
2938
case __IAVF_INIT_EXTENDED_CAPS :
2958
2939
iavf_init_process_extended_caps (adapter );
2959
- msec_delay = 1 ;
2960
- goto watchdog_done ;
2940
+ return 1 ;
2961
2941
case __IAVF_INIT_CONFIG_ADAPTER :
2962
2942
iavf_init_config_adapter (adapter );
2963
- msec_delay = 1 ;
2964
- goto watchdog_done ;
2943
+ return 1 ;
2965
2944
case __IAVF_INIT_FAILED :
2966
2945
if (test_bit (__IAVF_IN_REMOVE_TASK ,
2967
2946
& adapter -> crit_section )) {
2968
2947
/* Do not update the state and do not reschedule
2969
2948
* watchdog task, iavf_remove should handle this state
2970
2949
* as it can loop forever
2971
2950
*/
2972
- msec_delay = IAVF_NO_RESCHED ;
2973
- goto watchdog_done ;
2951
+ return IAVF_NO_RESCHED ;
2974
2952
}
2975
2953
if (++ adapter -> aq_wait_count > IAVF_AQ_MAX_ERR ) {
2976
2954
dev_err (& adapter -> pdev -> dev ,
2977
2955
"Failed to communicate with PF; waiting before retry\n" );
2978
2956
adapter -> flags |= IAVF_FLAG_PF_COMMS_FAILED ;
2979
2957
iavf_shutdown_adminq (hw );
2980
- msec_delay = 5000 ;
2981
- goto watchdog_done ;
2958
+ return 5000 ;
2982
2959
}
2983
2960
/* Try again from failed step*/
2984
2961
iavf_change_state (adapter , adapter -> last_state );
2985
- msec_delay = 1000 ;
2986
- goto watchdog_done ;
2962
+ return 1000 ;
2987
2963
case __IAVF_COMM_FAILED :
2988
2964
if (test_bit (__IAVF_IN_REMOVE_TASK ,
2989
2965
& adapter -> crit_section )) {
@@ -2993,8 +2969,7 @@ static void iavf_watchdog_task(struct work_struct *work)
2993
2969
*/
2994
2970
iavf_change_state (adapter , __IAVF_INIT_FAILED );
2995
2971
adapter -> flags &= ~IAVF_FLAG_PF_COMMS_FAILED ;
2996
- msec_delay = IAVF_NO_RESCHED ;
2997
- goto watchdog_done ;
2972
+ return IAVF_NO_RESCHED ;
2998
2973
}
2999
2974
reg_val = rd32 (hw , IAVF_VFGEN_RSTAT ) &
3000
2975
IAVF_VFGEN_RSTAT_VFR_STATE_MASK ;
@@ -3012,11 +2987,9 @@ static void iavf_watchdog_task(struct work_struct *work)
3012
2987
}
3013
2988
adapter -> aq_required = 0 ;
3014
2989
adapter -> current_op = VIRTCHNL_OP_UNKNOWN ;
3015
- msec_delay = 10 ;
3016
- goto watchdog_done ;
2990
+ return 10 ;
3017
2991
case __IAVF_RESETTING :
3018
- msec_delay = 2000 ;
3019
- goto watchdog_done ;
2992
+ return 2000 ;
3020
2993
case __IAVF_DOWN :
3021
2994
case __IAVF_DOWN_PENDING :
3022
2995
case __IAVF_TESTING :
@@ -3043,8 +3016,7 @@ static void iavf_watchdog_task(struct work_struct *work)
3043
3016
break ;
3044
3017
case __IAVF_REMOVE :
3045
3018
default :
3046
- msec_delay = IAVF_NO_RESCHED ;
3047
- goto watchdog_done ;
3019
+ return IAVF_NO_RESCHED ;
3048
3020
}
3049
3021
3050
3022
/* check for hw reset */
@@ -3055,12 +3027,31 @@ static void iavf_watchdog_task(struct work_struct *work)
3055
3027
dev_err (& adapter -> pdev -> dev , "Hardware reset detected\n" );
3056
3028
iavf_schedule_reset (adapter , IAVF_FLAG_RESET_PENDING );
3057
3029
}
3058
- if (adapter -> aq_required )
3030
+
3031
+ return adapter -> aq_required ? 20 : 2000 ;
3032
+ }
3033
+
3034
+ static void iavf_watchdog_task (struct work_struct * work )
3035
+ {
3036
+ struct iavf_adapter * adapter = container_of (work ,
3037
+ struct iavf_adapter ,
3038
+ watchdog_task .work );
3039
+ struct net_device * netdev = adapter -> netdev ;
3040
+ int msec_delay ;
3041
+
3042
+ netdev_lock (netdev );
3043
+ if (!mutex_trylock (& adapter -> crit_lock )) {
3044
+ if (adapter -> state == __IAVF_REMOVE ) {
3045
+ netdev_unlock (netdev );
3046
+ return ;
3047
+ }
3048
+
3059
3049
msec_delay = 20 ;
3060
- else
3061
- msec_delay = 2000 ;
3050
+ goto restart_watchdog ;
3051
+ }
3052
+
3053
+ msec_delay = iavf_watchdog_step (adapter );
3062
3054
3063
- watchdog_done :
3064
3055
mutex_unlock (& adapter -> crit_lock );
3065
3056
restart_watchdog :
3066
3057
netdev_unlock (netdev );
0 commit comments