aboutsummaryrefslogtreecommitdiffstats
path: root/net/core/dev.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2009-04-07 05:15:40 -0400
committerIngo Molnar <mingo@elte.hu>2009-04-07 05:15:40 -0400
commit5e34437840d33554f69380584311743b39e8fbeb (patch)
treee081135619ee146af5efb9ee883afca950df5757 /net/core/dev.c
parent77d05632baee21b1cef8730d7c06aa69601e4dca (diff)
parentd508afb437daee7cf07da085b635c44a4ebf9b38 (diff)
Merge branch 'linus' into core/softlockup
Conflicts: kernel/sysctl.c
Diffstat (limited to 'net/core/dev.c')
-rw-r--r--net/core/dev.c328
1 files changed, 197 insertions, 131 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index a17e00662363..91d792d17e09 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -1457,7 +1457,9 @@ static bool can_checksum_protocol(unsigned long features, __be16 protocol)
1457 ((features & NETIF_F_IP_CSUM) && 1457 ((features & NETIF_F_IP_CSUM) &&
1458 protocol == htons(ETH_P_IP)) || 1458 protocol == htons(ETH_P_IP)) ||
1459 ((features & NETIF_F_IPV6_CSUM) && 1459 ((features & NETIF_F_IPV6_CSUM) &&
1460 protocol == htons(ETH_P_IPV6))); 1460 protocol == htons(ETH_P_IPV6)) ||
1461 ((features & NETIF_F_FCOE_CRC) &&
1462 protocol == htons(ETH_P_FCOE)));
1461} 1463}
1462 1464
1463static bool dev_can_checksum(struct net_device *dev, struct sk_buff *skb) 1465static bool dev_can_checksum(struct net_device *dev, struct sk_buff *skb)
@@ -1668,8 +1670,8 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
1668 struct netdev_queue *txq) 1670 struct netdev_queue *txq)
1669{ 1671{
1670 const struct net_device_ops *ops = dev->netdev_ops; 1672 const struct net_device_ops *ops = dev->netdev_ops;
1673 int rc;
1671 1674
1672 prefetch(&dev->netdev_ops->ndo_start_xmit);
1673 if (likely(!skb->next)) { 1675 if (likely(!skb->next)) {
1674 if (!list_empty(&ptype_all)) 1676 if (!list_empty(&ptype_all))
1675 dev_queue_xmit_nit(skb, dev); 1677 dev_queue_xmit_nit(skb, dev);
@@ -1681,13 +1683,27 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
1681 goto gso; 1683 goto gso;
1682 } 1684 }
1683 1685
1684 return ops->ndo_start_xmit(skb, dev); 1686 rc = ops->ndo_start_xmit(skb, dev);
1687 /*
1688 * TODO: if skb_orphan() was called by
1689 * dev->hard_start_xmit() (for example, the unmodified
1690 * igb driver does that; bnx2 doesn't), then
1691 * skb_tx_software_timestamp() will be unable to send
1692 * back the time stamp.
1693 *
1694 * How can this be prevented? Always create another
1695 * reference to the socket before calling
1696 * dev->hard_start_xmit()? Prevent that skb_orphan()
1697 * does anything in dev->hard_start_xmit() by clearing
1698 * the skb destructor before the call and restoring it
1699 * afterwards, then doing the skb_orphan() ourselves?
1700 */
1701 return rc;
1685 } 1702 }
1686 1703
1687gso: 1704gso:
1688 do { 1705 do {
1689 struct sk_buff *nskb = skb->next; 1706 struct sk_buff *nskb = skb->next;
1690 int rc;
1691 1707
1692 skb->next = nskb->next; 1708 skb->next = nskb->next;
1693 nskb->next = NULL; 1709 nskb->next = NULL;
@@ -1708,59 +1724,24 @@ out_kfree_skb:
1708 return 0; 1724 return 0;
1709} 1725}
1710 1726
1711static u32 simple_tx_hashrnd; 1727static u32 skb_tx_hashrnd;
1712static int simple_tx_hashrnd_initialized = 0;
1713 1728
1714static u16 simple_tx_hash(struct net_device *dev, struct sk_buff *skb) 1729u16 skb_tx_hash(const struct net_device *dev, const struct sk_buff *skb)
1715{ 1730{
1716 u32 addr1, addr2, ports; 1731 u32 hash;
1717 u32 hash, ihl;
1718 u8 ip_proto = 0;
1719
1720 if (unlikely(!simple_tx_hashrnd_initialized)) {
1721 get_random_bytes(&simple_tx_hashrnd, 4);
1722 simple_tx_hashrnd_initialized = 1;
1723 }
1724
1725 switch (skb->protocol) {
1726 case htons(ETH_P_IP):
1727 if (!(ip_hdr(skb)->frag_off & htons(IP_MF | IP_OFFSET)))
1728 ip_proto = ip_hdr(skb)->protocol;
1729 addr1 = ip_hdr(skb)->saddr;
1730 addr2 = ip_hdr(skb)->daddr;
1731 ihl = ip_hdr(skb)->ihl;
1732 break;
1733 case htons(ETH_P_IPV6):
1734 ip_proto = ipv6_hdr(skb)->nexthdr;
1735 addr1 = ipv6_hdr(skb)->saddr.s6_addr32[3];
1736 addr2 = ipv6_hdr(skb)->daddr.s6_addr32[3];
1737 ihl = (40 >> 2);
1738 break;
1739 default:
1740 return 0;
1741 }
1742
1743
1744 switch (ip_proto) {
1745 case IPPROTO_TCP:
1746 case IPPROTO_UDP:
1747 case IPPROTO_DCCP:
1748 case IPPROTO_ESP:
1749 case IPPROTO_AH:
1750 case IPPROTO_SCTP:
1751 case IPPROTO_UDPLITE:
1752 ports = *((u32 *) (skb_network_header(skb) + (ihl * 4)));
1753 break;
1754 1732
1755 default: 1733 if (skb_rx_queue_recorded(skb)) {
1756 ports = 0; 1734 hash = skb_get_rx_queue(skb);
1757 break; 1735 } else if (skb->sk && skb->sk->sk_hash) {
1758 } 1736 hash = skb->sk->sk_hash;
1737 } else
1738 hash = skb->protocol;
1759 1739
1760 hash = jhash_3words(addr1, addr2, ports, simple_tx_hashrnd); 1740 hash = jhash_1word(hash, skb_tx_hashrnd);
1761 1741
1762 return (u16) (((u64) hash * dev->real_num_tx_queues) >> 32); 1742 return (u16) (((u64) hash * dev->real_num_tx_queues) >> 32);
1763} 1743}
1744EXPORT_SYMBOL(skb_tx_hash);
1764 1745
1765static struct netdev_queue *dev_pick_tx(struct net_device *dev, 1746static struct netdev_queue *dev_pick_tx(struct net_device *dev,
1766 struct sk_buff *skb) 1747 struct sk_buff *skb)
@@ -1771,7 +1752,7 @@ static struct netdev_queue *dev_pick_tx(struct net_device *dev,
1771 if (ops->ndo_select_queue) 1752 if (ops->ndo_select_queue)
1772 queue_index = ops->ndo_select_queue(dev, skb); 1753 queue_index = ops->ndo_select_queue(dev, skb);
1773 else if (dev->real_num_tx_queues > 1) 1754 else if (dev->real_num_tx_queues > 1)
1774 queue_index = simple_tx_hash(dev, skb); 1755 queue_index = skb_tx_hash(dev, skb);
1775 1756
1776 skb_set_queue_mapping(skb, queue_index); 1757 skb_set_queue_mapping(skb, queue_index);
1777 return netdev_get_tx_queue(dev, queue_index); 1758 return netdev_get_tx_queue(dev, queue_index);
@@ -2267,12 +2248,6 @@ int netif_receive_skb(struct sk_buff *skb)
2267 2248
2268 rcu_read_lock(); 2249 rcu_read_lock();
2269 2250
2270 /* Don't receive packets in an exiting network namespace */
2271 if (!net_alive(dev_net(skb->dev))) {
2272 kfree_skb(skb);
2273 goto out;
2274 }
2275
2276#ifdef CONFIG_NET_CLS_ACT 2251#ifdef CONFIG_NET_CLS_ACT
2277 if (skb->tc_verd & TC_NCLS) { 2252 if (skb->tc_verd & TC_NCLS) {
2278 skb->tc_verd = CLR_TC_NCLS(skb->tc_verd); 2253 skb->tc_verd = CLR_TC_NCLS(skb->tc_verd);
@@ -2303,6 +2278,8 @@ ncls:
2303 if (!skb) 2278 if (!skb)
2304 goto out; 2279 goto out;
2305 2280
2281 skb_orphan(skb);
2282
2306 type = skb->protocol; 2283 type = skb->protocol;
2307 list_for_each_entry_rcu(ptype, 2284 list_for_each_entry_rcu(ptype,
2308 &ptype_base[ntohs(type) & PTYPE_HASH_MASK], list) { 2285 &ptype_base[ntohs(type) & PTYPE_HASH_MASK], list) {
@@ -2372,7 +2349,6 @@ static int napi_gro_complete(struct sk_buff *skb)
2372 2349
2373out: 2350out:
2374 skb_shinfo(skb)->gso_size = 0; 2351 skb_shinfo(skb)->gso_size = 0;
2375 __skb_push(skb, -skb_network_offset(skb));
2376 return netif_receive_skb(skb); 2352 return netif_receive_skb(skb);
2377} 2353}
2378 2354
@@ -2386,20 +2362,40 @@ void napi_gro_flush(struct napi_struct *napi)
2386 napi_gro_complete(skb); 2362 napi_gro_complete(skb);
2387 } 2363 }
2388 2364
2365 napi->gro_count = 0;
2389 napi->gro_list = NULL; 2366 napi->gro_list = NULL;
2390} 2367}
2391EXPORT_SYMBOL(napi_gro_flush); 2368EXPORT_SYMBOL(napi_gro_flush);
2392 2369
2370void *skb_gro_header(struct sk_buff *skb, unsigned int hlen)
2371{
2372 unsigned int offset = skb_gro_offset(skb);
2373
2374 hlen += offset;
2375 if (hlen <= skb_headlen(skb))
2376 return skb->data + offset;
2377
2378 if (unlikely(!skb_shinfo(skb)->nr_frags ||
2379 skb_shinfo(skb)->frags[0].size <=
2380 hlen - skb_headlen(skb) ||
2381 PageHighMem(skb_shinfo(skb)->frags[0].page)))
2382 return pskb_may_pull(skb, hlen) ? skb->data + offset : NULL;
2383
2384 return page_address(skb_shinfo(skb)->frags[0].page) +
2385 skb_shinfo(skb)->frags[0].page_offset +
2386 offset - skb_headlen(skb);
2387}
2388EXPORT_SYMBOL(skb_gro_header);
2389
2393int dev_gro_receive(struct napi_struct *napi, struct sk_buff *skb) 2390int dev_gro_receive(struct napi_struct *napi, struct sk_buff *skb)
2394{ 2391{
2395 struct sk_buff **pp = NULL; 2392 struct sk_buff **pp = NULL;
2396 struct packet_type *ptype; 2393 struct packet_type *ptype;
2397 __be16 type = skb->protocol; 2394 __be16 type = skb->protocol;
2398 struct list_head *head = &ptype_base[ntohs(type) & PTYPE_HASH_MASK]; 2395 struct list_head *head = &ptype_base[ntohs(type) & PTYPE_HASH_MASK];
2399 int count = 0;
2400 int same_flow; 2396 int same_flow;
2401 int mac_len; 2397 int mac_len;
2402 int free; 2398 int ret;
2403 2399
2404 if (!(skb->dev->features & NETIF_F_GRO)) 2400 if (!(skb->dev->features & NETIF_F_GRO))
2405 goto normal; 2401 goto normal;
@@ -2409,30 +2405,16 @@ int dev_gro_receive(struct napi_struct *napi, struct sk_buff *skb)
2409 2405
2410 rcu_read_lock(); 2406 rcu_read_lock();
2411 list_for_each_entry_rcu(ptype, head, list) { 2407 list_for_each_entry_rcu(ptype, head, list) {
2412 struct sk_buff *p;
2413
2414 if (ptype->type != type || ptype->dev || !ptype->gro_receive) 2408 if (ptype->type != type || ptype->dev || !ptype->gro_receive)
2415 continue; 2409 continue;
2416 2410
2417 skb_reset_network_header(skb); 2411 skb_set_network_header(skb, skb_gro_offset(skb));
2418 mac_len = skb->network_header - skb->mac_header; 2412 mac_len = skb->network_header - skb->mac_header;
2419 skb->mac_len = mac_len; 2413 skb->mac_len = mac_len;
2420 NAPI_GRO_CB(skb)->same_flow = 0; 2414 NAPI_GRO_CB(skb)->same_flow = 0;
2421 NAPI_GRO_CB(skb)->flush = 0; 2415 NAPI_GRO_CB(skb)->flush = 0;
2422 NAPI_GRO_CB(skb)->free = 0; 2416 NAPI_GRO_CB(skb)->free = 0;
2423 2417
2424 for (p = napi->gro_list; p; p = p->next) {
2425 count++;
2426
2427 if (!NAPI_GRO_CB(p)->same_flow)
2428 continue;
2429
2430 if (p->mac_len != mac_len ||
2431 memcmp(skb_mac_header(p), skb_mac_header(skb),
2432 mac_len))
2433 NAPI_GRO_CB(p)->same_flow = 0;
2434 }
2435
2436 pp = ptype->gro_receive(&napi->gro_list, skb); 2418 pp = ptype->gro_receive(&napi->gro_list, skb);
2437 break; 2419 break;
2438 } 2420 }
@@ -2442,7 +2424,7 @@ int dev_gro_receive(struct napi_struct *napi, struct sk_buff *skb)
2442 goto normal; 2424 goto normal;
2443 2425
2444 same_flow = NAPI_GRO_CB(skb)->same_flow; 2426 same_flow = NAPI_GRO_CB(skb)->same_flow;
2445 free = NAPI_GRO_CB(skb)->free; 2427 ret = NAPI_GRO_CB(skb)->free ? GRO_MERGED_FREE : GRO_MERGED;
2446 2428
2447 if (pp) { 2429 if (pp) {
2448 struct sk_buff *nskb = *pp; 2430 struct sk_buff *nskb = *pp;
@@ -2450,27 +2432,35 @@ int dev_gro_receive(struct napi_struct *napi, struct sk_buff *skb)
2450 *pp = nskb->next; 2432 *pp = nskb->next;
2451 nskb->next = NULL; 2433 nskb->next = NULL;
2452 napi_gro_complete(nskb); 2434 napi_gro_complete(nskb);
2453 count--; 2435 napi->gro_count--;
2454 } 2436 }
2455 2437
2456 if (same_flow) 2438 if (same_flow)
2457 goto ok; 2439 goto ok;
2458 2440
2459 if (NAPI_GRO_CB(skb)->flush || count >= MAX_GRO_SKBS) { 2441 if (NAPI_GRO_CB(skb)->flush || napi->gro_count >= MAX_GRO_SKBS)
2460 __skb_push(skb, -skb_network_offset(skb));
2461 goto normal; 2442 goto normal;
2462 }
2463 2443
2444 napi->gro_count++;
2464 NAPI_GRO_CB(skb)->count = 1; 2445 NAPI_GRO_CB(skb)->count = 1;
2465 skb_shinfo(skb)->gso_size = skb->len; 2446 skb_shinfo(skb)->gso_size = skb_gro_len(skb);
2466 skb->next = napi->gro_list; 2447 skb->next = napi->gro_list;
2467 napi->gro_list = skb; 2448 napi->gro_list = skb;
2449 ret = GRO_HELD;
2450
2451pull:
2452 if (unlikely(!pskb_may_pull(skb, skb_gro_offset(skb)))) {
2453 if (napi->gro_list == skb)
2454 napi->gro_list = skb->next;
2455 ret = GRO_DROP;
2456 }
2468 2457
2469ok: 2458ok:
2470 return free; 2459 return ret;
2471 2460
2472normal: 2461normal:
2473 return -1; 2462 ret = GRO_NORMAL;
2463 goto pull;
2474} 2464}
2475EXPORT_SYMBOL(dev_gro_receive); 2465EXPORT_SYMBOL(dev_gro_receive);
2476 2466
@@ -2478,26 +2468,45 @@ static int __napi_gro_receive(struct napi_struct *napi, struct sk_buff *skb)
2478{ 2468{
2479 struct sk_buff *p; 2469 struct sk_buff *p;
2480 2470
2471 if (netpoll_rx_on(skb))
2472 return GRO_NORMAL;
2473
2481 for (p = napi->gro_list; p; p = p->next) { 2474 for (p = napi->gro_list; p; p = p->next) {
2482 NAPI_GRO_CB(p)->same_flow = 1; 2475 NAPI_GRO_CB(p)->same_flow = (p->dev == skb->dev)
2476 && !compare_ether_header(skb_mac_header(p),
2477 skb_gro_mac_header(skb));
2483 NAPI_GRO_CB(p)->flush = 0; 2478 NAPI_GRO_CB(p)->flush = 0;
2484 } 2479 }
2485 2480
2486 return dev_gro_receive(napi, skb); 2481 return dev_gro_receive(napi, skb);
2487} 2482}
2488 2483
2489int napi_gro_receive(struct napi_struct *napi, struct sk_buff *skb) 2484int napi_skb_finish(int ret, struct sk_buff *skb)
2490{ 2485{
2491 switch (__napi_gro_receive(napi, skb)) { 2486 int err = NET_RX_SUCCESS;
2492 case -1: 2487
2488 switch (ret) {
2489 case GRO_NORMAL:
2493 return netif_receive_skb(skb); 2490 return netif_receive_skb(skb);
2494 2491
2495 case 1: 2492 case GRO_DROP:
2493 err = NET_RX_DROP;
2494 /* fall through */
2495
2496 case GRO_MERGED_FREE:
2496 kfree_skb(skb); 2497 kfree_skb(skb);
2497 break; 2498 break;
2498 } 2499 }
2499 2500
2500 return NET_RX_SUCCESS; 2501 return err;
2502}
2503EXPORT_SYMBOL(napi_skb_finish);
2504
2505int napi_gro_receive(struct napi_struct *napi, struct sk_buff *skb)
2506{
2507 skb_gro_reset_offset(skb);
2508
2509 return napi_skb_finish(__napi_gro_receive(napi, skb), skb);
2501} 2510}
2502EXPORT_SYMBOL(napi_gro_receive); 2511EXPORT_SYMBOL(napi_gro_receive);
2503 2512
@@ -2515,6 +2524,9 @@ struct sk_buff *napi_fraginfo_skb(struct napi_struct *napi,
2515{ 2524{
2516 struct net_device *dev = napi->dev; 2525 struct net_device *dev = napi->dev;
2517 struct sk_buff *skb = napi->skb; 2526 struct sk_buff *skb = napi->skb;
2527 struct ethhdr *eth;
2528 skb_frag_t *frag;
2529 int i;
2518 2530
2519 napi->skb = NULL; 2531 napi->skb = NULL;
2520 2532
@@ -2527,20 +2539,36 @@ struct sk_buff *napi_fraginfo_skb(struct napi_struct *napi,
2527 } 2539 }
2528 2540
2529 BUG_ON(info->nr_frags > MAX_SKB_FRAGS); 2541 BUG_ON(info->nr_frags > MAX_SKB_FRAGS);
2542 frag = &info->frags[info->nr_frags - 1];
2543
2544 for (i = skb_shinfo(skb)->nr_frags; i < info->nr_frags; i++) {
2545 skb_fill_page_desc(skb, i, frag->page, frag->page_offset,
2546 frag->size);
2547 frag++;
2548 }
2530 skb_shinfo(skb)->nr_frags = info->nr_frags; 2549 skb_shinfo(skb)->nr_frags = info->nr_frags;
2531 memcpy(skb_shinfo(skb)->frags, info->frags, sizeof(info->frags));
2532 2550
2533 skb->data_len = info->len; 2551 skb->data_len = info->len;
2534 skb->len += info->len; 2552 skb->len += info->len;
2535 skb->truesize += info->len; 2553 skb->truesize += info->len;
2536 2554
2537 if (!pskb_may_pull(skb, ETH_HLEN)) { 2555 skb_reset_mac_header(skb);
2556 skb_gro_reset_offset(skb);
2557
2558 eth = skb_gro_header(skb, sizeof(*eth));
2559 if (!eth) {
2538 napi_reuse_skb(napi, skb); 2560 napi_reuse_skb(napi, skb);
2539 skb = NULL; 2561 skb = NULL;
2540 goto out; 2562 goto out;
2541 } 2563 }
2542 2564
2543 skb->protocol = eth_type_trans(skb, dev); 2565 skb_gro_pull(skb, sizeof(*eth));
2566
2567 /*
2568 * This works because the only protocols we care about don't require
2569 * special handling. We'll fix it up properly at the end.
2570 */
2571 skb->protocol = eth->h_proto;
2544 2572
2545 skb->ip_summed = info->ip_summed; 2573 skb->ip_summed = info->ip_summed;
2546 skb->csum = info->csum; 2574 skb->csum = info->csum;
@@ -2550,29 +2578,43 @@ out:
2550} 2578}
2551EXPORT_SYMBOL(napi_fraginfo_skb); 2579EXPORT_SYMBOL(napi_fraginfo_skb);
2552 2580
2553int napi_gro_frags(struct napi_struct *napi, struct napi_gro_fraginfo *info) 2581int napi_frags_finish(struct napi_struct *napi, struct sk_buff *skb, int ret)
2554{ 2582{
2555 struct sk_buff *skb = napi_fraginfo_skb(napi, info); 2583 int err = NET_RX_SUCCESS;
2556 int err = NET_RX_DROP;
2557 2584
2558 if (!skb) 2585 switch (ret) {
2559 goto out; 2586 case GRO_NORMAL:
2587 case GRO_HELD:
2588 skb->protocol = eth_type_trans(skb, napi->dev);
2560 2589
2561 err = NET_RX_SUCCESS; 2590 if (ret == GRO_NORMAL)
2591 return netif_receive_skb(skb);
2562 2592
2563 switch (__napi_gro_receive(napi, skb)) { 2593 skb_gro_pull(skb, -ETH_HLEN);
2564 case -1: 2594 break;
2565 return netif_receive_skb(skb);
2566 2595
2567 case 0: 2596 case GRO_DROP:
2568 goto out; 2597 err = NET_RX_DROP;
2569 } 2598 /* fall through */
2570 2599
2571 napi_reuse_skb(napi, skb); 2600 case GRO_MERGED_FREE:
2601 napi_reuse_skb(napi, skb);
2602 break;
2603 }
2572 2604
2573out:
2574 return err; 2605 return err;
2575} 2606}
2607EXPORT_SYMBOL(napi_frags_finish);
2608
2609int napi_gro_frags(struct napi_struct *napi, struct napi_gro_fraginfo *info)
2610{
2611 struct sk_buff *skb = napi_fraginfo_skb(napi, info);
2612
2613 if (!skb)
2614 return NET_RX_DROP;
2615
2616 return napi_frags_finish(napi, skb, __napi_gro_receive(napi, skb));
2617}
2576EXPORT_SYMBOL(napi_gro_frags); 2618EXPORT_SYMBOL(napi_gro_frags);
2577 2619
2578static int process_backlog(struct napi_struct *napi, int quota) 2620static int process_backlog(struct napi_struct *napi, int quota)
@@ -2594,11 +2636,9 @@ static int process_backlog(struct napi_struct *napi, int quota)
2594 } 2636 }
2595 local_irq_enable(); 2637 local_irq_enable();
2596 2638
2597 napi_gro_receive(napi, skb); 2639 netif_receive_skb(skb);
2598 } while (++work < quota && jiffies == start_time); 2640 } while (++work < quota && jiffies == start_time);
2599 2641
2600 napi_gro_flush(napi);
2601
2602 return work; 2642 return work;
2603} 2643}
2604 2644
@@ -2652,6 +2692,7 @@ void netif_napi_add(struct net_device *dev, struct napi_struct *napi,
2652 int (*poll)(struct napi_struct *, int), int weight) 2692 int (*poll)(struct napi_struct *, int), int weight)
2653{ 2693{
2654 INIT_LIST_HEAD(&napi->poll_list); 2694 INIT_LIST_HEAD(&napi->poll_list);
2695 napi->gro_count = 0;
2655 napi->gro_list = NULL; 2696 napi->gro_list = NULL;
2656 napi->skb = NULL; 2697 napi->skb = NULL;
2657 napi->poll = poll; 2698 napi->poll = poll;
@@ -2671,7 +2712,7 @@ void netif_napi_del(struct napi_struct *napi)
2671 struct sk_buff *skb, *next; 2712 struct sk_buff *skb, *next;
2672 2713
2673 list_del_init(&napi->dev_list); 2714 list_del_init(&napi->dev_list);
2674 kfree(napi->skb); 2715 kfree_skb(napi->skb);
2675 2716
2676 for (skb = napi->gro_list; skb; skb = next) { 2717 for (skb = napi->gro_list; skb; skb = next) {
2677 next = skb->next; 2718 next = skb->next;
@@ -2680,6 +2721,7 @@ void netif_napi_del(struct napi_struct *napi)
2680 } 2721 }
2681 2722
2682 napi->gro_list = NULL; 2723 napi->gro_list = NULL;
2724 napi->gro_count = 0;
2683} 2725}
2684EXPORT_SYMBOL(netif_napi_del); 2726EXPORT_SYMBOL(netif_napi_del);
2685 2727
@@ -3948,6 +3990,7 @@ static int dev_ifsioc(struct net *net, struct ifreq *ifr, unsigned int cmd)
3948 cmd == SIOCSMIIREG || 3990 cmd == SIOCSMIIREG ||
3949 cmd == SIOCBRADDIF || 3991 cmd == SIOCBRADDIF ||
3950 cmd == SIOCBRDELIF || 3992 cmd == SIOCBRDELIF ||
3993 cmd == SIOCSHWTSTAMP ||
3951 cmd == SIOCWANDEV) { 3994 cmd == SIOCWANDEV) {
3952 err = -EOPNOTSUPP; 3995 err = -EOPNOTSUPP;
3953 if (ops->ndo_do_ioctl) { 3996 if (ops->ndo_do_ioctl) {
@@ -4102,6 +4145,7 @@ int dev_ioctl(struct net *net, unsigned int cmd, void __user *arg)
4102 case SIOCBONDCHANGEACTIVE: 4145 case SIOCBONDCHANGEACTIVE:
4103 case SIOCBRADDIF: 4146 case SIOCBRADDIF:
4104 case SIOCBRDELIF: 4147 case SIOCBRDELIF:
4148 case SIOCSHWTSTAMP:
4105 if (!capable(CAP_NET_ADMIN)) 4149 if (!capable(CAP_NET_ADMIN))
4106 return -EPERM; 4150 return -EPERM;
4107 /* fall through */ 4151 /* fall through */
@@ -4282,6 +4326,39 @@ unsigned long netdev_fix_features(unsigned long features, const char *name)
4282} 4326}
4283EXPORT_SYMBOL(netdev_fix_features); 4327EXPORT_SYMBOL(netdev_fix_features);
4284 4328
4329/* Some devices need to (re-)set their netdev_ops inside
4330 * ->init() or similar. If that happens, we have to setup
4331 * the compat pointers again.
4332 */
4333void netdev_resync_ops(struct net_device *dev)
4334{
4335#ifdef CONFIG_COMPAT_NET_DEV_OPS
4336 const struct net_device_ops *ops = dev->netdev_ops;
4337
4338 dev->init = ops->ndo_init;
4339 dev->uninit = ops->ndo_uninit;
4340 dev->open = ops->ndo_open;
4341 dev->change_rx_flags = ops->ndo_change_rx_flags;
4342 dev->set_rx_mode = ops->ndo_set_rx_mode;
4343 dev->set_multicast_list = ops->ndo_set_multicast_list;
4344 dev->set_mac_address = ops->ndo_set_mac_address;
4345 dev->validate_addr = ops->ndo_validate_addr;
4346 dev->do_ioctl = ops->ndo_do_ioctl;
4347 dev->set_config = ops->ndo_set_config;
4348 dev->change_mtu = ops->ndo_change_mtu;
4349 dev->neigh_setup = ops->ndo_neigh_setup;
4350 dev->tx_timeout = ops->ndo_tx_timeout;
4351 dev->get_stats = ops->ndo_get_stats;
4352 dev->vlan_rx_register = ops->ndo_vlan_rx_register;
4353 dev->vlan_rx_add_vid = ops->ndo_vlan_rx_add_vid;
4354 dev->vlan_rx_kill_vid = ops->ndo_vlan_rx_kill_vid;
4355#ifdef CONFIG_NET_POLL_CONTROLLER
4356 dev->poll_controller = ops->ndo_poll_controller;
4357#endif
4358#endif
4359}
4360EXPORT_SYMBOL(netdev_resync_ops);
4361
4285/** 4362/**
4286 * register_netdevice - register a network device 4363 * register_netdevice - register a network device
4287 * @dev: device to register 4364 * @dev: device to register
@@ -4326,27 +4403,7 @@ int register_netdevice(struct net_device *dev)
4326 * This is temporary until all network devices are converted. 4403 * This is temporary until all network devices are converted.
4327 */ 4404 */
4328 if (dev->netdev_ops) { 4405 if (dev->netdev_ops) {
4329 const struct net_device_ops *ops = dev->netdev_ops; 4406 netdev_resync_ops(dev);
4330
4331 dev->init = ops->ndo_init;
4332 dev->uninit = ops->ndo_uninit;
4333 dev->open = ops->ndo_open;
4334 dev->change_rx_flags = ops->ndo_change_rx_flags;
4335 dev->set_rx_mode = ops->ndo_set_rx_mode;
4336 dev->set_multicast_list = ops->ndo_set_multicast_list;
4337 dev->set_mac_address = ops->ndo_set_mac_address;
4338 dev->validate_addr = ops->ndo_validate_addr;
4339 dev->do_ioctl = ops->ndo_do_ioctl;
4340 dev->set_config = ops->ndo_set_config;
4341 dev->change_mtu = ops->ndo_change_mtu;
4342 dev->tx_timeout = ops->ndo_tx_timeout;
4343 dev->get_stats = ops->ndo_get_stats;
4344 dev->vlan_rx_register = ops->ndo_vlan_rx_register;
4345 dev->vlan_rx_add_vid = ops->ndo_vlan_rx_add_vid;
4346 dev->vlan_rx_kill_vid = ops->ndo_vlan_rx_kill_vid;
4347#ifdef CONFIG_NET_POLL_CONTROLLER
4348 dev->poll_controller = ops->ndo_poll_controller;
4349#endif
4350 } else { 4407 } else {
4351 char drivername[64]; 4408 char drivername[64];
4352 pr_info("%s (%s): not using net_device_ops yet\n", 4409 pr_info("%s (%s): not using net_device_ops yet\n",
@@ -5185,6 +5242,7 @@ static int __init net_dev_init(void)
5185 queue->backlog.poll = process_backlog; 5242 queue->backlog.poll = process_backlog;
5186 queue->backlog.weight = weight_p; 5243 queue->backlog.weight = weight_p;
5187 queue->backlog.gro_list = NULL; 5244 queue->backlog.gro_list = NULL;
5245 queue->backlog.gro_count = 0;
5188 } 5246 }
5189 5247
5190 dev_boot_phase = 0; 5248 dev_boot_phase = 0;
@@ -5217,6 +5275,14 @@ out:
5217 5275
5218subsys_initcall(net_dev_init); 5276subsys_initcall(net_dev_init);
5219 5277
5278static int __init initialize_hashrnd(void)
5279{
5280 get_random_bytes(&skb_tx_hashrnd, sizeof(skb_tx_hashrnd));
5281 return 0;
5282}
5283
5284late_initcall_sync(initialize_hashrnd);
5285
5220EXPORT_SYMBOL(__dev_get_by_index); 5286EXPORT_SYMBOL(__dev_get_by_index);
5221EXPORT_SYMBOL(__dev_get_by_name); 5287EXPORT_SYMBOL(__dev_get_by_name);
5222EXPORT_SYMBOL(__dev_remove_pack); 5288EXPORT_SYMBOL(__dev_remove_pack);