Merge branch '100GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue
Tony Nguyen says: ==================== Intel Wired LAN Driver Updates 2021-12-14 This series contains updates to ice driver only. Karol corrects division that was causing incorrect calculations and adds a check to ensure stale timestamps are not being used. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
7c8089f980
@ -705,7 +705,7 @@ static int ice_ptp_adjfine(struct ptp_clock_info *info, long scaled_ppm)
|
||||
scaled_ppm = -scaled_ppm;
|
||||
}
|
||||
|
||||
while ((u64)scaled_ppm > div_u64(U64_MAX, incval)) {
|
||||
while ((u64)scaled_ppm > div64_u64(U64_MAX, incval)) {
|
||||
/* handle overflow by scaling down the scaled_ppm and
|
||||
* the divisor, losing some precision
|
||||
*/
|
||||
@ -1540,19 +1540,16 @@ static void ice_ptp_tx_tstamp_work(struct kthread_work *work)
|
||||
if (err)
|
||||
continue;
|
||||
|
||||
/* Check if the timestamp is valid */
|
||||
if (!(raw_tstamp & ICE_PTP_TS_VALID))
|
||||
/* Check if the timestamp is invalid or stale */
|
||||
if (!(raw_tstamp & ICE_PTP_TS_VALID) ||
|
||||
raw_tstamp == tx->tstamps[idx].cached_tstamp)
|
||||
continue;
|
||||
|
||||
/* clear the timestamp register, so that it won't show valid
|
||||
* again when re-used.
|
||||
*/
|
||||
ice_clear_phy_tstamp(hw, tx->quad, phy_idx);
|
||||
|
||||
/* The timestamp is valid, so we'll go ahead and clear this
|
||||
* index and then send the timestamp up to the stack.
|
||||
*/
|
||||
spin_lock(&tx->lock);
|
||||
tx->tstamps[idx].cached_tstamp = raw_tstamp;
|
||||
clear_bit(idx, tx->in_use);
|
||||
skb = tx->tstamps[idx].skb;
|
||||
tx->tstamps[idx].skb = NULL;
|
||||
|
@ -55,15 +55,21 @@ struct ice_perout_channel {
|
||||
* struct ice_tx_tstamp - Tracking for a single Tx timestamp
|
||||
* @skb: pointer to the SKB for this timestamp request
|
||||
* @start: jiffies when the timestamp was first requested
|
||||
* @cached_tstamp: last read timestamp
|
||||
*
|
||||
* This structure tracks a single timestamp request. The SKB pointer is
|
||||
* provided when initiating a request. The start time is used to ensure that
|
||||
* we discard old requests that were not fulfilled within a 2 second time
|
||||
* window.
|
||||
* Timestamp values in the PHY are read only and do not get cleared except at
|
||||
* hardware reset or when a new timestamp value is captured. The cached_tstamp
|
||||
* field is used to detect the case where a new timestamp has not yet been
|
||||
* captured, ensuring that we avoid sending stale timestamp data to the stack.
|
||||
*/
|
||||
struct ice_tx_tstamp {
|
||||
struct sk_buff *skb;
|
||||
unsigned long start;
|
||||
u64 cached_tstamp;
|
||||
};
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user