aboutsummaryrefslogtreecommitdiffstats
path: root/net/core/dev.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/core/dev.c')
-rw-r--r--net/core/dev.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index a06a7a58dd11..b24ab0e98eb4 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -1545,7 +1545,6 @@ void net_enable_timestamp(void)
1545 return; 1545 return;
1546 } 1546 }
1547#endif 1547#endif
1548 WARN_ON(in_interrupt());
1549 static_key_slow_inc(&netstamp_needed); 1548 static_key_slow_inc(&netstamp_needed);
1550} 1549}
1551EXPORT_SYMBOL(net_enable_timestamp); 1550EXPORT_SYMBOL(net_enable_timestamp);
@@ -1625,7 +1624,6 @@ int dev_forward_skb(struct net_device *dev, struct sk_buff *skb)
1625 } 1624 }
1626 1625
1627 skb_orphan(skb); 1626 skb_orphan(skb);
1628 nf_reset(skb);
1629 1627
1630 if (unlikely(!is_skb_forwardable(dev, skb))) { 1628 if (unlikely(!is_skb_forwardable(dev, skb))) {
1631 atomic_long_inc(&dev->rx_dropped); 1629 atomic_long_inc(&dev->rx_dropped);
@@ -1641,6 +1639,7 @@ int dev_forward_skb(struct net_device *dev, struct sk_buff *skb)
1641 skb->mark = 0; 1639 skb->mark = 0;
1642 secpath_reset(skb); 1640 secpath_reset(skb);
1643 nf_reset(skb); 1641 nf_reset(skb);
1642 nf_reset_trace(skb);
1644 return netif_rx(skb); 1643 return netif_rx(skb);
1645} 1644}
1646EXPORT_SYMBOL_GPL(dev_forward_skb); 1645EXPORT_SYMBOL_GPL(dev_forward_skb);
@@ -2149,6 +2148,9 @@ static void skb_warn_bad_offload(const struct sk_buff *skb)
2149 struct net_device *dev = skb->dev; 2148 struct net_device *dev = skb->dev;
2150 const char *driver = ""; 2149 const char *driver = "";
2151 2150
2151 if (!net_ratelimit())
2152 return;
2153
2152 if (dev && dev->dev.parent) 2154 if (dev && dev->dev.parent)
2153 driver = dev_driver_string(dev->dev.parent); 2155 driver = dev_driver_string(dev->dev.parent);
2154 2156
@@ -2219,9 +2221,9 @@ struct sk_buff *skb_mac_gso_segment(struct sk_buff *skb,
2219 struct sk_buff *segs = ERR_PTR(-EPROTONOSUPPORT); 2221 struct sk_buff *segs = ERR_PTR(-EPROTONOSUPPORT);
2220 struct packet_offload *ptype; 2222 struct packet_offload *ptype;
2221 __be16 type = skb->protocol; 2223 __be16 type = skb->protocol;
2224 int vlan_depth = ETH_HLEN;
2222 2225
2223 while (type == htons(ETH_P_8021Q)) { 2226 while (type == htons(ETH_P_8021Q)) {
2224 int vlan_depth = ETH_HLEN;
2225 struct vlan_hdr *vh; 2227 struct vlan_hdr *vh;
2226 2228
2227 if (unlikely(!pskb_may_pull(skb, vlan_depth + VLAN_HLEN))) 2229 if (unlikely(!pskb_may_pull(skb, vlan_depth + VLAN_HLEN)))
@@ -3315,6 +3317,7 @@ int netdev_rx_handler_register(struct net_device *dev,
3315 if (dev->rx_handler) 3317 if (dev->rx_handler)
3316 return -EBUSY; 3318 return -EBUSY;
3317 3319
3320 /* Note: rx_handler_data must be set before rx_handler */
3318 rcu_assign_pointer(dev->rx_handler_data, rx_handler_data); 3321 rcu_assign_pointer(dev->rx_handler_data, rx_handler_data);
3319 rcu_assign_pointer(dev->rx_handler, rx_handler); 3322 rcu_assign_pointer(dev->rx_handler, rx_handler);
3320 3323
@@ -3335,6 +3338,11 @@ void netdev_rx_handler_unregister(struct net_device *dev)
3335 3338
3336 ASSERT_RTNL(); 3339 ASSERT_RTNL();
3337 RCU_INIT_POINTER(dev->rx_handler, NULL); 3340 RCU_INIT_POINTER(dev->rx_handler, NULL);
3341 /* a reader seeing a non NULL rx_handler in a rcu_read_lock()
3342 * section has a guarantee to see a non NULL rx_handler_data
3343 * as well.
3344 */
3345 synchronize_net();
3338 RCU_INIT_POINTER(dev->rx_handler_data, NULL); 3346 RCU_INIT_POINTER(dev->rx_handler_data, NULL);
3339} 3347}
3340EXPORT_SYMBOL_GPL(netdev_rx_handler_unregister); 3348EXPORT_SYMBOL_GPL(netdev_rx_handler_unregister);
@@ -3444,6 +3452,7 @@ ncls:
3444 } 3452 }
3445 switch (rx_handler(&skb)) { 3453 switch (rx_handler(&skb)) {
3446 case RX_HANDLER_CONSUMED: 3454 case RX_HANDLER_CONSUMED:
3455 ret = NET_RX_SUCCESS;
3447 goto unlock; 3456 goto unlock;
3448 case RX_HANDLER_ANOTHER: 3457 case RX_HANDLER_ANOTHER:
3449 goto another_round; 3458 goto another_round;
@@ -4103,7 +4112,7 @@ static void net_rx_action(struct softirq_action *h)
4103 * Allow this to run for 2 jiffies since which will allow 4112 * Allow this to run for 2 jiffies since which will allow
4104 * an average latency of 1.5/HZ. 4113 * an average latency of 1.5/HZ.
4105 */ 4114 */
4106 if (unlikely(budget <= 0 || time_after(jiffies, time_limit))) 4115 if (unlikely(budget <= 0 || time_after_eq(jiffies, time_limit)))
4107 goto softnet_break; 4116 goto softnet_break;
4108 4117
4109 local_irq_enable(); 4118 local_irq_enable();
@@ -4780,7 +4789,7 @@ EXPORT_SYMBOL(dev_set_mac_address);
4780/** 4789/**
4781 * dev_change_carrier - Change device carrier 4790 * dev_change_carrier - Change device carrier
4782 * @dev: device 4791 * @dev: device
4783 * @new_carries: new value 4792 * @new_carrier: new value
4784 * 4793 *
4785 * Change device carrier 4794 * Change device carrier
4786 */ 4795 */