aboutsummaryrefslogtreecommitdiffstats
path: root/net/core
diff options
context:
space:
mode:
authorJesse Gross <jesse@nicira.com>2011-01-09 01:23:32 -0500
committerDavid S. Miller <davem@davemloft.net>2011-01-10 02:35:34 -0500
commitfc741216db156994c554ac31c1151fe0e00d8f0e (patch)
tree692c6278f1c20e4452620adee1ea3cd05d878819 /net/core
parentf01a5236bd4b140198fbcc550f085e8361fd73fa (diff)
net offloading: Pass features into netif_needs_gso().
Now that there is a single function that can compute the device features relevant to a packet, we don't want to run it for each offload. This converts netif_needs_gso() to take the features of the device, rather than computing them itself. Signed-off-by: Jesse Gross <jesse@nicira.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core')
-rw-r--r--net/core/dev.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index a51dfd7b56fb..1444ed3861a0 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -2086,6 +2086,8 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
2086 int rc = NETDEV_TX_OK; 2086 int rc = NETDEV_TX_OK;
2087 2087
2088 if (likely(!skb->next)) { 2088 if (likely(!skb->next)) {
2089 int features;
2090
2089 /* 2091 /*
2090 * If device doesnt need skb->dst, release it right now while 2092 * If device doesnt need skb->dst, release it right now while
2091 * its hot in this cpu cache 2093 * its hot in this cpu cache
@@ -2098,8 +2100,10 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
2098 2100
2099 skb_orphan_try(skb); 2101 skb_orphan_try(skb);
2100 2102
2103 features = netif_skb_features(skb);
2104
2101 if (vlan_tx_tag_present(skb) && 2105 if (vlan_tx_tag_present(skb) &&
2102 !(dev->features & NETIF_F_HW_VLAN_TX)) { 2106 !(features & NETIF_F_HW_VLAN_TX)) {
2103 skb = __vlan_put_tag(skb, vlan_tx_tag_get(skb)); 2107 skb = __vlan_put_tag(skb, vlan_tx_tag_get(skb));
2104 if (unlikely(!skb)) 2108 if (unlikely(!skb))
2105 goto out; 2109 goto out;
@@ -2107,7 +2111,7 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
2107 skb->vlan_tci = 0; 2111 skb->vlan_tci = 0;
2108 } 2112 }
2109 2113
2110 if (netif_needs_gso(dev, skb)) { 2114 if (netif_needs_gso(skb, features)) {
2111 if (unlikely(dev_gso_segment(skb))) 2115 if (unlikely(dev_gso_segment(skb)))
2112 goto out_kfree_skb; 2116 goto out_kfree_skb;
2113 if (skb->next) 2117 if (skb->next)