i40e: check I40E_FLAG_PTP before handling Tx or Rx timestamps
authorJacob Keller <jacob.e.keller@intel.com>
Sun, 14 Dec 2014 01:55:09 +0000 (01:55 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Fri, 16 Jan 2015 11:56:54 +0000 (03:56 -0800)
We should not be doing Tx or Rx timestamps if we do not have PTP
enabled. Add checks to ensure that we don't attempt to handle any PTP
related timestamping code if we have not enabled PTP on that PF.

Change-ID: I4335942ae2d5c5f91abfdbeeea02bcace49e7677
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/i40e/i40e_ptp.c
drivers/net/ethernet/intel/i40e/i40e_txrx.c

index 6d1ec926aa3713a6ebc40fa52aa2ee873f8292f4..a15287845570b91c91fe44cad4fe2fdb3fd33224 100644 (file)
@@ -305,6 +305,13 @@ void i40e_ptp_tx_hwtstamp(struct i40e_pf *pf)
        u32 hi, lo;
        u64 ns;
 
+       if (!(pf->flags & I40E_FLAG_PTP) || !pf->ptp_tx)
+               return;
+
+       /* don't attempt to timestamp if we don't have an skb */
+       if (!pf->ptp_tx_skb)
+               return;
+
        lo = rd32(hw, I40E_PRTTSYN_TXTIME_L);
        hi = rd32(hw, I40E_PRTTSYN_TXTIME_H);
 
@@ -338,7 +345,7 @@ void i40e_ptp_rx_hwtstamp(struct i40e_pf *pf, struct sk_buff *skb, u8 index)
        /* Since we cannot turn off the Rx timestamp logic if the device is
         * doing Tx timestamping, check if Rx timestamping is configured.
         */
-       if (!pf->ptp_rx)
+       if (!(pf->flags & I40E_FLAG_PTP) || !pf->ptp_rx)
                return;
 
        hw = &pf->hw;
index bb86390a0967c8bb2c50409d7e7b7e78e386d430..420d66274d69fb7b9379bb064dc81161a5edefc8 100644 (file)
@@ -1939,6 +1939,9 @@ static int i40e_tsyn(struct i40e_ring *tx_ring, struct sk_buff *skb,
         * we are not already transmitting a packet to be timestamped
         */
        pf = i40e_netdev_to_pf(tx_ring->netdev);
+       if (!(pf->flags & I40E_FLAG_PTP))
+               return 0;
+
        if (pf->ptp_tx &&
            !test_and_set_bit_lock(__I40E_PTP_TX_IN_PROGRESS, &pf->state)) {
                skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;