]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
ixgbe: Add support for setting CC bit when SR-IOV is enabled
authorAlexander Duyck <alexander.h.duyck@intel.com>
Wed, 29 Jun 2011 05:43:27 +0000 (05:43 +0000)
committerJoe Jin <joe.jin@oracle.com>
Thu, 17 May 2012 14:00:54 +0000 (22:00 +0800)
This change makes it so that the CC bit in the descriptor is set when
SR-IOV is enabled.  This is needed in order to support offloading
functionality when passing traffic over the internal TX switch.

(cherry picked from commit 7f9643fd773a372a5470ed2daedaec5bac918e35)
Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: Joe Jin <joe.jin@oracle.com>
drivers/net/ixgbe/ixgbe.h
drivers/net/ixgbe/ixgbe_main.c

index dc3b12e1533153424ae1191b26e2995cd368cbb2..58482fc3024b0b661e27b1a878511db7d33acf13 100644 (file)
@@ -97,7 +97,8 @@
 #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
index 6d209eca0fe2c61dc35d36829c3543d4505601fd..9897a6548d02c5bafb6ce0fe1fd6f5f39febd181 100644 (file)
@@ -6294,7 +6294,8 @@ static bool ixgbe_tx_csum(struct ixgbe_ring *tx_ring,
        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;
@@ -6397,6 +6398,13 @@ static __le32 ixgbe_tx_olinfo_status(u32 tx_flags, unsigned int paylen)
                                            (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;
 }
 
@@ -6730,6 +6738,11 @@ netdev_tx_t ixgbe_xmit_frame_ring(struct sk_buff *skb,
                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;