nvethernet: consume the timestamp if available in tx done

Issue: Observed Tx timestamp timeout from application since
workqueue is not getting scheduled at the driver layer to consume
the Tx timestamp from the OSI layer which resulted in tx_timeout
from APP layer.

Fix: Invoke the timestamp consume function in tx done instead
of scheduling through workqueue. Schedule the work queue only
if the timestamp is not found.

Bug 3658701

Change-Id: If97aebc1980f685e3cc34f135ace91298ee78657
Signed-off-by: Bhadram Varka <vbhadram@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2732444
Reviewed-by: Troy Kong <troyk@nvidia.com>
Reviewed-by: Narayan Reddy <narayanr@nvidia.com>
Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com>
Reviewed-by: svc_kernel_abi <svc_kernel_abi@nvidia.com>
Reviewed-by: Rakesh Goyal <rgoyal@nvidia.com>
Reviewed-by: Bitan Biswas <bbiswas@nvidia.com>
Tested-by: Troy Kong <troyk@nvidia.com>
GVS: Gerrit_Virtual_Submit
This commit is contained in:
Bhadram Varka
2022-06-22 14:06:52 +05:30
committed by Revanth Kumar Uppala
parent cafe9a309c
commit 76abafe3a3
3 changed files with 60 additions and 31 deletions

View File

@@ -125,11 +125,6 @@
*/
#define ETHER_DEFAULT_PTP_QUEUE 3U
/**
* @brief TX timestamp miss threshold
*/
#define TS_MISS_THRESHOLD 200U
/**
* @brief SEC to MSEC converter
*/
@@ -626,6 +621,8 @@ struct ether_priv_data {
#endif
/** Protect critical section of TX TS SKB list */
raw_spinlock_t txts_lock;
/** Ref count for ether_get_tx_ts_func */
atomic_t tx_ts_ref_cnt;
};
/**
@@ -800,6 +797,18 @@ int ether_tc_setup_cbs(struct ether_priv_data *pdata,
struct tc_cbs_qopt_offload *qopt);
#endif
/**
* @brief Get Tx done timestamp from OSI and update in skb
*
* @param[in] pdata: Pointer to private data structure.
*
* @note Network interface should be up
*
* @retval 0 on success
* @retval EAGAIN on Failure
*/
int ether_get_tx_ts(struct ether_priv_data *pdata);
#ifdef ETHER_NVGRO
void ether_nvgro_purge_timer(struct timer_list *t);
#endif /* ETHER_NVGRO */