diff options
Diffstat (limited to 'net/core/dev.c')
-rw-r--r-- | net/core/dev.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index a06a7a58dd11..e7d68ed8aafe 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 | } |
1551 | EXPORT_SYMBOL(net_enable_timestamp); | 1550 | EXPORT_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 | } |
1646 | EXPORT_SYMBOL_GPL(dev_forward_skb); | 1645 | EXPORT_SYMBOL_GPL(dev_forward_skb); |
@@ -2219,9 +2218,9 @@ struct sk_buff *skb_mac_gso_segment(struct sk_buff *skb, | |||
2219 | struct sk_buff *segs = ERR_PTR(-EPROTONOSUPPORT); | 2218 | struct sk_buff *segs = ERR_PTR(-EPROTONOSUPPORT); |
2220 | struct packet_offload *ptype; | 2219 | struct packet_offload *ptype; |
2221 | __be16 type = skb->protocol; | 2220 | __be16 type = skb->protocol; |
2221 | int vlan_depth = ETH_HLEN; | ||
2222 | 2222 | ||
2223 | while (type == htons(ETH_P_8021Q)) { | 2223 | while (type == htons(ETH_P_8021Q)) { |
2224 | int vlan_depth = ETH_HLEN; | ||
2225 | struct vlan_hdr *vh; | 2224 | struct vlan_hdr *vh; |
2226 | 2225 | ||
2227 | if (unlikely(!pskb_may_pull(skb, vlan_depth + VLAN_HLEN))) | 2226 | if (unlikely(!pskb_may_pull(skb, vlan_depth + VLAN_HLEN))) |
@@ -3315,6 +3314,7 @@ int netdev_rx_handler_register(struct net_device *dev, | |||
3315 | if (dev->rx_handler) | 3314 | if (dev->rx_handler) |
3316 | return -EBUSY; | 3315 | return -EBUSY; |
3317 | 3316 | ||
3317 | /* Note: rx_handler_data must be set before rx_handler */ | ||
3318 | rcu_assign_pointer(dev->rx_handler_data, rx_handler_data); | 3318 | rcu_assign_pointer(dev->rx_handler_data, rx_handler_data); |
3319 | rcu_assign_pointer(dev->rx_handler, rx_handler); | 3319 | rcu_assign_pointer(dev->rx_handler, rx_handler); |
3320 | 3320 | ||
@@ -3335,6 +3335,11 @@ void netdev_rx_handler_unregister(struct net_device *dev) | |||
3335 | 3335 | ||
3336 | ASSERT_RTNL(); | 3336 | ASSERT_RTNL(); |
3337 | RCU_INIT_POINTER(dev->rx_handler, NULL); | 3337 | RCU_INIT_POINTER(dev->rx_handler, NULL); |
3338 | /* a reader seeing a non NULL rx_handler in a rcu_read_lock() | ||
3339 | * section has a guarantee to see a non NULL rx_handler_data | ||
3340 | * as well. | ||
3341 | */ | ||
3342 | synchronize_net(); | ||
3338 | RCU_INIT_POINTER(dev->rx_handler_data, NULL); | 3343 | RCU_INIT_POINTER(dev->rx_handler_data, NULL); |
3339 | } | 3344 | } |
3340 | EXPORT_SYMBOL_GPL(netdev_rx_handler_unregister); | 3345 | EXPORT_SYMBOL_GPL(netdev_rx_handler_unregister); |
@@ -3444,6 +3449,7 @@ ncls: | |||
3444 | } | 3449 | } |
3445 | switch (rx_handler(&skb)) { | 3450 | switch (rx_handler(&skb)) { |
3446 | case RX_HANDLER_CONSUMED: | 3451 | case RX_HANDLER_CONSUMED: |
3452 | ret = NET_RX_SUCCESS; | ||
3447 | goto unlock; | 3453 | goto unlock; |
3448 | case RX_HANDLER_ANOTHER: | 3454 | case RX_HANDLER_ANOTHER: |
3449 | goto another_round; | 3455 | goto another_round; |
@@ -4103,7 +4109,7 @@ static void net_rx_action(struct softirq_action *h) | |||
4103 | * Allow this to run for 2 jiffies since which will allow | 4109 | * Allow this to run for 2 jiffies since which will allow |
4104 | * an average latency of 1.5/HZ. | 4110 | * an average latency of 1.5/HZ. |
4105 | */ | 4111 | */ |
4106 | if (unlikely(budget <= 0 || time_after(jiffies, time_limit))) | 4112 | if (unlikely(budget <= 0 || time_after_eq(jiffies, time_limit))) |
4107 | goto softnet_break; | 4113 | goto softnet_break; |
4108 | 4114 | ||
4109 | local_irq_enable(); | 4115 | local_irq_enable(); |
@@ -4780,7 +4786,7 @@ EXPORT_SYMBOL(dev_set_mac_address); | |||
4780 | /** | 4786 | /** |
4781 | * dev_change_carrier - Change device carrier | 4787 | * dev_change_carrier - Change device carrier |
4782 | * @dev: device | 4788 | * @dev: device |
4783 | * @new_carries: new value | 4789 | * @new_carrier: new value |
4784 | * | 4790 | * |
4785 | * Change device carrier | 4791 | * Change device carrier |
4786 | */ | 4792 | */ |