diff options
author | Alexander Duyck <alexander.h.duyck@intel.com> | 2012-02-08 02:50:40 -0500 |
---|---|---|
committer | Jeff Kirsher <jeffrey.t.kirsher@intel.com> | 2012-03-17 04:06:47 -0400 |
commit | a50c29dd09ed14f8489677813a4b1c8b62dcf19d (patch) | |
tree | 45d28e67b4fd04ce6df4c9c974d51d14a28f92d3 | |
parent | 655309e944fd482e59850d55186571c1b2a91e55 (diff) |
ixgbe: Make certain that all frames fit minimum size requirements
This change makes certain that any packet we attempt to transmit will meet
minimum size requirements for the hardware.
Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Tested-by: Stephen Ko <stephen.s.ko@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
-rw-r--r-- | drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c index db1f17c3ed47..bf6d122e6f99 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | |||
@@ -7162,11 +7162,27 @@ out_drop: | |||
7162 | return NETDEV_TX_OK; | 7162 | return NETDEV_TX_OK; |
7163 | } | 7163 | } |
7164 | 7164 | ||
7165 | static netdev_tx_t ixgbe_xmit_frame(struct sk_buff *skb, struct net_device *netdev) | 7165 | static netdev_tx_t ixgbe_xmit_frame(struct sk_buff *skb, |
7166 | struct net_device *netdev) | ||
7166 | { | 7167 | { |
7167 | struct ixgbe_adapter *adapter = netdev_priv(netdev); | 7168 | struct ixgbe_adapter *adapter = netdev_priv(netdev); |
7168 | struct ixgbe_ring *tx_ring; | 7169 | struct ixgbe_ring *tx_ring; |
7169 | 7170 | ||
7171 | if (skb->len <= 0) { | ||
7172 | dev_kfree_skb_any(skb); | ||
7173 | return NETDEV_TX_OK; | ||
7174 | } | ||
7175 | |||
7176 | /* | ||
7177 | * The minimum packet size for olinfo paylen is 17 so pad the skb | ||
7178 | * in order to meet this minimum size requirement. | ||
7179 | */ | ||
7180 | if (skb->len < 17) { | ||
7181 | if (skb_padto(skb, 17)) | ||
7182 | return NETDEV_TX_OK; | ||
7183 | skb->len = 17; | ||
7184 | } | ||
7185 | |||
7170 | tx_ring = adapter->tx_ring[skb->queue_mapping]; | 7186 | tx_ring = adapter->tx_ring[skb->queue_mapping]; |
7171 | return ixgbe_xmit_frame_ring(skb, adapter, tx_ring); | 7187 | return ixgbe_xmit_frame_ring(skb, adapter, tx_ring); |
7172 | } | 7188 | } |