i40e: replace PTP Rx timestamp hang logic
The current Rx timestamp hang logic is not very robust because it does not notice a register is hung until all four timestamps have been latched and we wait a full 5 seconds. Replace this logic with a newer Rx hang detection based on storing the jiffies when we first notice a receive timestamp event. We store each register's time separately, along with a flag indicating if it is currently latched. Upon first transitioning to latch, we will update the latch_events[i] jiffies value. This indicates the time we first noticed this event. The watchdog routine will simply check that the either the flag has been cleared, or we have passed at least one second. In this case, it is able to clear the Rx timestamp register under the assumption that it was for a dropped frame. The benefit if this strategy is that we should be able to detect and clear out stalled RXTIME_H registers before we exhaust the supply of 4, and avoid complete stall of Rx timestamp events. Change-ID: Id55458c0cd7a5dd0c951ff2b8ac0b2509364131f Signed-off-by: Jacob Keller <jacob.e.keller@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:

committed by
Jeff Kirsher

parent
195512629c
commit
124905012d
@@ -429,11 +429,13 @@ struct i40e_pf {
|
||||
struct ptp_clock_info ptp_caps;
|
||||
struct sk_buff *ptp_tx_skb;
|
||||
struct hwtstamp_config tstamp_config;
|
||||
unsigned long last_rx_ptp_check;
|
||||
struct mutex tmreg_lock; /* Used to protect the SYSTIME registers. */
|
||||
u64 ptp_base_adj;
|
||||
u32 tx_hwtstamp_timeouts;
|
||||
u32 rx_hwtstamp_cleared;
|
||||
u32 latch_event_flags;
|
||||
spinlock_t ptp_rx_lock; /* Used to protect Rx timestamp registers. */
|
||||
unsigned long latch_events[4];
|
||||
bool ptp_tx;
|
||||
bool ptp_rx;
|
||||
u16 rss_table_size; /* HW RSS table size */
|
||||
|
Reference in New Issue
Block a user