* ice_ptp_flush_tx_tracker - Flush any remaining timestamps from the tracker
  * @pf: Board private structure
  * @tx: the tracker to flush
+ *
+ * Called during teardown when a Tx tracker is being removed.
  */
 static void
 ice_ptp_flush_tx_tracker(struct ice_pf *pf, struct ice_ptp_tx *tx)
 {
+       struct ice_hw *hw = &pf->hw;
+       u64 tstamp_ready;
+       int err;
        u8 idx;
 
-       for (idx = 0; idx < tx->len; idx++) {
+       err = ice_get_phy_tx_tstamp_ready(hw, tx->block, &tstamp_ready);
+       if (err) {
+               dev_dbg(ice_pf_to_dev(pf), "Failed to get the Tx tstamp ready bitmap for block %u, err %d\n",
+                       tx->block, err);
+
+               /* If we fail to read the Tx timestamp ready bitmap just
+                * skip clearing the PHY timestamps.
+                */
+               tstamp_ready = 0;
+       }
+
+       for_each_set_bit(idx, tx->in_use, tx->len) {
                u8 phy_idx = idx + tx->offset;
+               struct sk_buff *skb;
+
+               /* In case this timestamp is ready, we need to clear it. */
+               if (!hw->reset_ongoing && (tstamp_ready & BIT_ULL(phy_idx)))
+                       ice_clear_phy_tstamp(hw, tx->block, phy_idx);
 
                spin_lock(&tx->lock);
-               if (tx->tstamps[idx].skb) {
-                       dev_kfree_skb_any(tx->tstamps[idx].skb);
-                       tx->tstamps[idx].skb = NULL;
-                       pf->ptp.tx_hwtstamp_flushed++;
-               }
+               skb = tx->tstamps[idx].skb;
+               tx->tstamps[idx].skb = NULL;
                clear_bit(idx, tx->in_use);
                clear_bit(idx, tx->stale);
                spin_unlock(&tx->lock);
 
-               /* Clear any potential residual timestamp in the PHY block */
-               if (!pf->hw.reset_ongoing)
-                       ice_clear_phy_tstamp(&pf->hw, tx->block, phy_idx);
+               /* Count the number of Tx timestamps flushed */
+               pf->ptp.tx_hwtstamp_flushed++;
+
+               /* Free the SKB after we've cleared the bit */
+               dev_kfree_skb_any(skb);
        }
 }