ixgbe: Do not schedule an uninitialized workqueue entry
authorMark Rustad <mark.d.rustad@intel.com>
Sat, 9 Aug 2014 07:02:09 +0000 (07:02 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Thu, 18 Sep 2014 10:19:10 +0000 (03:19 -0700)
If a hardware Tx timestamp is requested, an uninitialized
workqueue entry may be scheduled, especially on an 82598 adapter.
Add a check for a PTP clock to avoid that. Also only apply the
unlikely to the first term of the conditional. That will make the
rest of the checks be in the cold path.

Signed-off-by: Mark Rustad <mark.d.rustad@intel.com>
Acked-by: Matthew Vick <matthew.vick@intel.com>
Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c

index bcd697c4b08a8e4ef54a490ef98739709d36e05a..06ef5a32a8937347f6af2edf142042b94e15f9a5 100644 (file)
@@ -7108,9 +7108,10 @@ netdev_tx_t ixgbe_xmit_frame_ring(struct sk_buff *skb,
                tx_flags |= IXGBE_TX_FLAGS_SW_VLAN;
        }
 
-       if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP &&
-                    !test_and_set_bit_lock(__IXGBE_PTP_TX_IN_PROGRESS,
-                                           &adapter->state))) {
+       if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) &&
+           adapter->ptp_clock &&
+           !test_and_set_bit_lock(__IXGBE_PTP_TX_IN_PROGRESS,
+                                  &adapter->state)) {
                skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
                tx_flags |= IXGBE_TX_FLAGS_TSTAMP;