#define IXGBE_TX_FLAGS_IPV4            (u32)(1 << 4)
 #define IXGBE_TX_FLAGS_FCOE            (u32)(1 << 5)
 #define IXGBE_TX_FLAGS_FSO             (u32)(1 << 6)
-#define IXGBE_TX_FLAGS_MAPPED_AS_PAGE  (u32)(1 << 7)
+#define IXGBE_TX_FLAGS_TXSW            (u32)(1 << 7)
+#define IXGBE_TX_FLAGS_MAPPED_AS_PAGE  (u32)(1 << 8)
 #define IXGBE_TX_FLAGS_VLAN_MASK       0xffff0000
 #define IXGBE_TX_FLAGS_VLAN_PRIO_MASK  0xe0000000
 #define IXGBE_TX_FLAGS_VLAN_PRIO_SHIFT  29
 
        u32 type_tucmd = 0;
 
        if (skb->ip_summed != CHECKSUM_PARTIAL) {
-           if (!(tx_flags & IXGBE_TX_FLAGS_HW_VLAN))
+           if (!(tx_flags & IXGBE_TX_FLAGS_HW_VLAN) &&
+               !(tx_flags & IXGBE_TX_FLAGS_TXSW))
                        return false;
        } else {
                u8 l4_hdr = 0;
                                            (1 << IXGBE_ADVTXD_IDX_SHIFT));
 
 #endif
+       /*
+        * Check Context must be set if Tx switch is enabled, which it
+        * always is for case where virtual functions are running
+        */
+       if (tx_flags & IXGBE_TX_FLAGS_TXSW)
+               olinfo_status |= cpu_to_le32(IXGBE_ADVTXD_CC);
+
        return olinfo_status;
 }
 
                return NETDEV_TX_BUSY;
        }
 
+#ifdef CONFIG_PCI_IOV
+       if (adapter->flags & IXGBE_FLAG_SRIOV_ENABLED)
+               tx_flags |= IXGBE_TX_FLAGS_TXSW;
+
+#endif
        /* if we have a HW VLAN tag being added default to the HW one */
        if (vlan_tx_tag_present(skb)) {
                tx_flags |= vlan_tx_tag_get(skb) << IXGBE_TX_FLAGS_VLAN_SHIFT;