Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net

Conflicts:
drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
drivers/net/ethernet/emulex/benet/be.h
include/net/tcp.h
net/mac802154/mac802154.h

Most conflicts were minor overlapping stuff.

The be2net driver brought in some fixes that added __vlan_put_tag
calls, which in net-next take an additional argument.

Signed-off-by: David S. Miller <davem@davemloft.net>

+293 -104
+1
drivers/isdn/mISDN/socket.c
··· 578 578 lock_sock(sk); 579 579 580 580 *addr_len = sizeof(*maddr); 581 + maddr->family = AF_ISDN; 581 582 maddr->dev = _pms(sk)->dev->id; 582 583 maddr->channel = _pms(sk)->ch.nr; 583 584 maddr->sapi = _pms(sk)->ch.addr & 0xff;
+2 -2
drivers/isdn/sc/init.c
··· 33 33 static bool do_reset = 0; 34 34 35 35 module_param_array(io, int, NULL, 0); 36 - module_param_array(irq, int, NULL, 0); 37 - module_param_array(ram, int, NULL, 0); 36 + module_param_array(irq, byte, NULL, 0); 37 + module_param_array(ram, long, NULL, 0); 38 38 module_param(do_reset, bool, 0); 39 39 40 40 static int identify_board(unsigned long, unsigned int);
+4 -2
drivers/net/bonding/bond_main.c
··· 1917 1917 bond_detach_slave(bond, new_slave); 1918 1918 if (bond->primary_slave == new_slave) 1919 1919 bond->primary_slave = NULL; 1920 - write_unlock_bh(&bond->lock); 1921 1920 if (bond->curr_active_slave == new_slave) { 1921 + bond_change_active_slave(bond, NULL); 1922 + write_unlock_bh(&bond->lock); 1922 1923 read_lock(&bond->lock); 1923 1924 write_lock_bh(&bond->curr_slave_lock); 1924 - bond_change_active_slave(bond, NULL); 1925 1925 bond_select_active_slave(bond); 1926 1926 write_unlock_bh(&bond->curr_slave_lock); 1927 1927 read_unlock(&bond->lock); 1928 + } else { 1929 + write_unlock_bh(&bond->lock); 1928 1930 } 1929 1931 slave_disable_netpoll(new_slave); 1930 1932
+1
drivers/net/caif/caif_spi.c
··· 863 863 driver_remove_file(&cfspi_spi_driver.driver, 864 864 &driver_attr_up_head_align); 865 865 err_create_up_head_align: 866 + platform_driver_unregister(&cfspi_spi_driver); 866 867 err_dev_register: 867 868 return result; 868 869 }
+7 -4
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
··· 1044 1044 DP(NETIF_MSG_INTR, 1045 1045 "got an MSI-X interrupt on IDX:SB [fp %d fw_sd %d igusb %d]\n", 1046 1046 fp->index, fp->fw_sb_id, fp->igu_sb_id); 1047 + 1047 1048 bnx2x_ack_sb(bp, fp->igu_sb_id, USTORM_ID, 0, IGU_INT_DISABLE, 0); 1048 1049 1049 1050 #ifdef BNX2X_STOP_ON_ERROR ··· 1726 1725 return request_irq(irq, bnx2x_interrupt, flags, bp->dev->name, bp->dev); 1727 1726 } 1728 1727 1729 - static int bnx2x_setup_irqs(struct bnx2x *bp) 1728 + int bnx2x_setup_irqs(struct bnx2x *bp) 1730 1729 { 1731 1730 int rc = 0; 1732 1731 if (bp->flags & USING_MSIX_FLAG && ··· 2582 2581 } 2583 2582 } 2584 2583 2584 + bnx2x_pre_irq_nic_init(bp); 2585 + 2585 2586 /* Connect to IRQs */ 2586 2587 rc = bnx2x_setup_irqs(bp); 2587 2588 if (rc) { ··· 2593 2590 LOAD_ERROR_EXIT(bp, load_error2); 2594 2591 } 2595 2592 2596 - /* Setup NIC internals and enable interrupts */ 2597 - bnx2x_nic_init(bp, load_code); 2598 - 2599 2593 /* Init per-function objects */ 2600 2594 if (IS_PF(bp)) { 2595 + /* Setup NIC internals and enable interrupts */ 2596 + bnx2x_post_irq_nic_init(bp, load_code); 2597 + 2601 2598 bnx2x_init_bp_objs(bp); 2602 2599 bnx2x_iov_nic_init(bp); 2603 2600
+16 -3
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
··· 295 295 void bnx2x_nic_init_cnic(struct bnx2x *bp); 296 296 297 297 /** 298 - * bnx2x_nic_init - init driver internals. 298 + * bnx2x_preirq_nic_init - init driver internals. 299 299 * 300 300 * @bp: driver handle 301 301 * 302 302 * Initializes: 303 - * - rings 303 + * - fastpath object 304 + * - fastpath rings 305 + * etc. 306 + */ 307 + void bnx2x_pre_irq_nic_init(struct bnx2x *bp); 308 + 309 + /** 310 + * bnx2x_postirq_nic_init - init driver internals. 311 + * 312 + * @bp: driver handle 313 + * @load_code: COMMON, PORT or FUNCTION 314 + * 315 + * Initializes: 304 316 * - status blocks 317 + * - slowpath rings 305 318 * - etc. 306 319 */ 307 - void bnx2x_nic_init(struct bnx2x *bp, u32 load_code); 320 + void bnx2x_post_irq_nic_init(struct bnx2x *bp, u32 load_code); 308 321 /** 309 322 * bnx2x_alloc_mem_cnic - allocate driver's memory for cnic. 310 323 *
+18 -14
drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
··· 6030 6030 mmiowb(); 6031 6031 } 6032 6032 6033 - void bnx2x_nic_init(struct bnx2x *bp, u32 load_code) 6033 + void bnx2x_pre_irq_nic_init(struct bnx2x *bp) 6034 6034 { 6035 6035 int i; 6036 6036 6037 + /* Setup NIC internals and enable interrupts */ 6037 6038 for_each_eth_queue(bp, i) 6038 6039 bnx2x_init_eth_fp(bp, i); 6039 6040 ··· 6042 6041 rmb(); 6043 6042 bnx2x_init_rx_rings(bp); 6044 6043 bnx2x_init_tx_rings(bp); 6044 + 6045 6045 if (IS_VF(bp)) { 6046 6046 bnx2x_memset_stats(bp); 6047 6047 return; 6048 6048 } 6049 6049 6050 - /* Initialize MOD_ABS interrupts */ 6051 - bnx2x_init_mod_abs_int(bp, &bp->link_vars, bp->common.chip_id, 6052 - bp->common.shmem_base, bp->common.shmem2_base, 6053 - BP_PORT(bp)); 6050 + if (IS_PF(bp)) { 6051 + /* Initialize MOD_ABS interrupts */ 6052 + bnx2x_init_mod_abs_int(bp, &bp->link_vars, bp->common.chip_id, 6053 + bp->common.shmem_base, 6054 + bp->common.shmem2_base, BP_PORT(bp)); 6054 6055 6055 - bnx2x_init_def_sb(bp); 6056 - bnx2x_update_dsb_idx(bp); 6057 - bnx2x_init_sp_ring(bp); 6056 + /* initialize the default status block and sp ring */ 6057 + bnx2x_init_def_sb(bp); 6058 + bnx2x_update_dsb_idx(bp); 6059 + bnx2x_init_sp_ring(bp); 6060 + } 6061 + } 6062 + 6063 + void bnx2x_post_irq_nic_init(struct bnx2x *bp, u32 load_code) 6064 + { 6058 6065 bnx2x_init_eq_ring(bp); 6059 6066 bnx2x_init_internal(bp, load_code); 6060 6067 bnx2x_pf_init(bp); ··· 6080 6071 AEU_INPUTS_ATTN_BITS_SPIO5); 6081 6072 } 6082 6073 6083 - /* end of nic init */ 6084 - 6085 - /* 6086 - * gzip service functions 6087 - */ 6088 - 6074 + /* gzip service functions */ 6089 6075 static int bnx2x_gunzip_init(struct bnx2x *bp) 6090 6076 { 6091 6077 bp->gunzip_buf = dma_alloc_coherent(&bp->pdev->dev, FW_BUF_SIZE,
+7
drivers/net/ethernet/emulex/benet/be.h
··· 329 329 #define BE_FLAGS_WORKER_SCHEDULED (1 << 3) 330 330 #define BE_UC_PMAC_COUNT 30 331 331 #define BE_VF_UC_PMAC_COUNT 2 332 + #define BE_FLAGS_QNQ_ASYNC_EVT_RCVD (1 << 11) 332 333 333 334 struct phy_info { 334 335 u8 transceiver; ··· 437 436 bool wol; 438 437 u32 uc_macs; /* Count of secondary UC MAC programmed */ 439 438 u16 asic_rev; 439 + u16 qnq_vid; 440 440 u32 msg_enable; 441 441 int be_get_temp_freq; 442 442 u16 max_mcast_mac; ··· 651 649 default: 652 650 return false; 653 651 } 652 + } 653 + 654 + static inline int qnq_async_evt_rcvd(struct be_adapter *adapter) 655 + { 656 + return adapter->flags & BE_FLAGS_QNQ_ASYNC_EVT_RCVD; 654 657 } 655 658 656 659 extern void be_cq_notify(struct be_adapter *adapter, u16 qid, bool arm,
+54 -16
drivers/net/ethernet/emulex/benet/be_cmds.c
··· 263 263 } 264 264 } 265 265 266 + static void be_async_dbg_evt_process(struct be_adapter *adapter, 267 + u32 trailer, struct be_mcc_compl *cmp) 268 + { 269 + u8 event_type = 0; 270 + struct be_async_event_qnq *evt = (struct be_async_event_qnq *) cmp; 271 + 272 + event_type = (trailer >> ASYNC_TRAILER_EVENT_TYPE_SHIFT) & 273 + ASYNC_TRAILER_EVENT_TYPE_MASK; 274 + 275 + switch (event_type) { 276 + case ASYNC_DEBUG_EVENT_TYPE_QNQ: 277 + if (evt->valid) 278 + adapter->qnq_vid = le16_to_cpu(evt->vlan_tag); 279 + adapter->flags |= BE_FLAGS_QNQ_ASYNC_EVT_RCVD; 280 + break; 281 + default: 282 + dev_warn(&adapter->pdev->dev, "Unknown debug event\n"); 283 + break; 284 + } 285 + } 286 + 266 287 static inline bool is_link_state_evt(u32 trailer) 267 288 { 268 289 return ((trailer >> ASYNC_TRAILER_EVENT_CODE_SHIFT) & ··· 296 275 return (((trailer >> ASYNC_TRAILER_EVENT_CODE_SHIFT) & 297 276 ASYNC_TRAILER_EVENT_CODE_MASK) == 298 277 ASYNC_EVENT_CODE_GRP_5); 278 + } 279 + 280 + static inline bool is_dbg_evt(u32 trailer) 281 + { 282 + return (((trailer >> ASYNC_TRAILER_EVENT_CODE_SHIFT) & 283 + ASYNC_TRAILER_EVENT_CODE_MASK) == 284 + ASYNC_EVENT_CODE_QNQ); 299 285 } 300 286 301 287 static struct be_mcc_compl *be_mcc_compl_get(struct be_adapter *adapter) ··· 352 324 (struct be_async_event_link_state *) compl); 353 325 else if (is_grp5_evt(compl->flags)) 354 326 be_async_grp5_evt_process(adapter, 327 + compl->flags, compl); 328 + else if (is_dbg_evt(compl->flags)) 329 + be_async_dbg_evt_process(adapter, 355 330 compl->flags, compl); 356 331 } else if (compl->flags & CQE_FLAGS_COMPLETED_MASK) { 357 332 status = be_mcc_compl_process(adapter, compl); ··· 1051 1020 1052 1021 /* Subscribe to Link State and Group 5 Events(bits 1 and 5 set) */ 1053 1022 req->async_event_bitmap[0] = cpu_to_le32(0x00000022); 1023 + req->async_event_bitmap[0] |= cpu_to_le32(1 << ASYNC_EVENT_CODE_QNQ); 1054 1024 be_dws_cpu_to_le(ctxt, sizeof(req->context)); 1055 1025 1056 1026 be_cmd_page_addrs_prepare(req->pages, ARRAY_SIZE(req->pages), q_mem); ··· 2489 2457 struct mgmt_controller_attrib *attribs; 2490 2458 struct be_dma_mem attribs_cmd; 2491 2459 2460 + if (mutex_lock_interruptible(&adapter->mbox_lock)) 2461 + return -1; 2462 + 2492 2463 memset(&attribs_cmd, 0, sizeof(struct be_dma_mem)); 2493 2464 attribs_cmd.size = sizeof(struct be_cmd_resp_cntl_attribs); 2494 2465 attribs_cmd.va = pci_alloc_consistent(adapter->pdev, attribs_cmd.size, ··· 2499 2464 if (!attribs_cmd.va) { 2500 2465 dev_err(&adapter->pdev->dev, 2501 2466 "Memory allocation failure\n"); 2502 - return -ENOMEM; 2467 + status = -ENOMEM; 2468 + goto err; 2503 2469 } 2504 - 2505 - if (mutex_lock_interruptible(&adapter->mbox_lock)) 2506 - return -1; 2507 2470 2508 2471 wrb = wrb_from_mbox(adapter); 2509 2472 if (!wrb) { ··· 2522 2489 2523 2490 err: 2524 2491 mutex_unlock(&adapter->mbox_lock); 2525 - pci_free_consistent(adapter->pdev, attribs_cmd.size, attribs_cmd.va, 2526 - attribs_cmd.dma); 2492 + if (attribs_cmd.va) 2493 + pci_free_consistent(adapter->pdev, attribs_cmd.size, 2494 + attribs_cmd.va, attribs_cmd.dma); 2527 2495 return status; 2528 2496 } 2529 2497 ··· 2822 2788 CMD_SUBSYSTEM_ETH)) 2823 2789 return -EPERM; 2824 2790 2791 + if (mutex_lock_interruptible(&adapter->mbox_lock)) 2792 + return -1; 2793 + 2825 2794 memset(&cmd, 0, sizeof(struct be_dma_mem)); 2826 2795 cmd.size = sizeof(struct be_cmd_resp_acpi_wol_magic_config_v1); 2827 2796 cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size, ··· 2832 2795 if (!cmd.va) { 2833 2796 dev_err(&adapter->pdev->dev, 2834 2797 "Memory allocation failure\n"); 2835 - return -ENOMEM; 2798 + status = -ENOMEM; 2799 + goto err; 2836 2800 } 2837 - 2838 - if (mutex_lock_interruptible(&adapter->mbox_lock)) 2839 - return -1; 2840 2801 2841 2802 wrb = wrb_from_mbox(adapter); 2842 2803 if (!wrb) { ··· 2866 2831 } 2867 2832 err: 2868 2833 mutex_unlock(&adapter->mbox_lock); 2869 - pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma); 2834 + if (cmd.va) 2835 + pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma); 2870 2836 return status; 2871 2837 2872 2838 } ··· 3000 2964 int status; 3001 2965 struct be_dma_mem cmd; 3002 2966 2967 + if (mutex_lock_interruptible(&adapter->mbox_lock)) 2968 + return -1; 2969 + 3003 2970 memset(&cmd, 0, sizeof(struct be_dma_mem)); 3004 2971 cmd.size = sizeof(struct be_cmd_resp_get_func_config); 3005 2972 cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size, 3006 2973 &cmd.dma); 3007 2974 if (!cmd.va) { 3008 2975 dev_err(&adapter->pdev->dev, "Memory alloc failure\n"); 3009 - return -ENOMEM; 2976 + status = -ENOMEM; 2977 + goto err; 3010 2978 } 3011 - if (mutex_lock_interruptible(&adapter->mbox_lock)) 3012 - return -1; 3013 2979 3014 2980 wrb = wrb_from_mbox(adapter); 3015 2981 if (!wrb) { ··· 3054 3016 } 3055 3017 err: 3056 3018 mutex_unlock(&adapter->mbox_lock); 3057 - pci_free_consistent(adapter->pdev, cmd.size, 3058 - cmd.va, cmd.dma); 3019 + if (cmd.va) 3020 + pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma); 3059 3021 return status; 3060 3022 } 3061 3023
+13
drivers/net/ethernet/emulex/benet/be_cmds.h
··· 84 84 #define ASYNC_EVENT_QOS_SPEED 0x1 85 85 #define ASYNC_EVENT_COS_PRIORITY 0x2 86 86 #define ASYNC_EVENT_PVID_STATE 0x3 87 + #define ASYNC_EVENT_CODE_QNQ 0x6 88 + #define ASYNC_DEBUG_EVENT_TYPE_QNQ 1 89 + 87 90 struct be_async_event_trailer { 88 91 u32 code; 89 92 }; ··· 144 141 u16 tag; 145 142 u32 event_tag; 146 143 u32 rsvd1; 144 + struct be_async_event_trailer trailer; 145 + } __packed; 146 + 147 + /* async event indicating outer VLAN tag in QnQ */ 148 + struct be_async_event_qnq { 149 + u8 valid; /* Indicates if outer VLAN is valid */ 150 + u8 rsvd0; 151 + u16 vlan_tag; 152 + u32 event_tag; 153 + u8 rsvd1[4]; 147 154 struct be_async_event_trailer trailer; 148 155 } __packed; 149 156
+2 -1
drivers/net/ethernet/emulex/benet/be_ethtool.c
··· 680 680 681 681 if (be_is_wol_supported(adapter)) { 682 682 wol->supported |= WAKE_MAGIC; 683 - wol->wolopts |= WAKE_MAGIC; 683 + if (adapter->wol) 684 + wol->wolopts |= WAKE_MAGIC; 684 685 } else 685 686 wol->wolopts = 0; 686 687 memset(&wol->sopass, 0, sizeof(wol->sopass));
+104 -17
drivers/net/ethernet/emulex/benet/be_main.c
··· 639 639 return vlan_tag; 640 640 } 641 641 642 - static int be_vlan_tag_chk(struct be_adapter *adapter, struct sk_buff *skb) 643 - { 644 - return vlan_tx_tag_present(skb) || adapter->pvid; 645 - } 646 - 647 642 static void wrb_fill_hdr(struct be_adapter *adapter, struct be_eth_hdr_wrb *hdr, 648 - struct sk_buff *skb, u32 wrb_cnt, u32 len) 643 + struct sk_buff *skb, u32 wrb_cnt, u32 len, bool skip_hw_vlan) 649 644 { 650 645 u16 vlan_tag; 651 646 ··· 667 672 AMAP_SET_BITS(struct amap_eth_hdr_wrb, vlan_tag, hdr, vlan_tag); 668 673 } 669 674 675 + /* To skip HW VLAN tagging: evt = 1, compl = 0 */ 676 + AMAP_SET_BITS(struct amap_eth_hdr_wrb, complete, hdr, !skip_hw_vlan); 670 677 AMAP_SET_BITS(struct amap_eth_hdr_wrb, event, hdr, 1); 671 - AMAP_SET_BITS(struct amap_eth_hdr_wrb, complete, hdr, 1); 672 678 AMAP_SET_BITS(struct amap_eth_hdr_wrb, num_wrb, hdr, wrb_cnt); 673 679 AMAP_SET_BITS(struct amap_eth_hdr_wrb, len, hdr, len); 674 680 } ··· 692 696 } 693 697 694 698 static int make_tx_wrbs(struct be_adapter *adapter, struct be_queue_info *txq, 695 - struct sk_buff *skb, u32 wrb_cnt, bool dummy_wrb) 699 + struct sk_buff *skb, u32 wrb_cnt, bool dummy_wrb, 700 + bool skip_hw_vlan) 696 701 { 697 702 dma_addr_t busaddr; 698 703 int i, copied = 0; ··· 742 745 queue_head_inc(txq); 743 746 } 744 747 745 - wrb_fill_hdr(adapter, hdr, first_skb, wrb_cnt, copied); 748 + wrb_fill_hdr(adapter, hdr, first_skb, wrb_cnt, copied, skip_hw_vlan); 746 749 be_dws_cpu_to_le(hdr, sizeof(*hdr)); 747 750 748 751 return copied; ··· 759 762 } 760 763 761 764 static struct sk_buff *be_insert_vlan_in_pkt(struct be_adapter *adapter, 762 - struct sk_buff *skb) 765 + struct sk_buff *skb, 766 + bool *skip_hw_vlan) 763 767 { 764 768 u16 vlan_tag = 0; 765 769 ··· 775 777 skb->vlan_tci = 0; 776 778 } 777 779 780 + if (qnq_async_evt_rcvd(adapter) && adapter->pvid) { 781 + if (!vlan_tag) 782 + vlan_tag = adapter->pvid; 783 + if (skip_hw_vlan) 784 + *skip_hw_vlan = true; 785 + } 786 + 787 + if (vlan_tag) { 788 + skb = __vlan_put_tag(skb, htons(ETH_P_8021Q), vlan_tag); 789 + if (unlikely(!skb)) 790 + return skb; 791 + 792 + skb->vlan_tci = 0; 793 + } 794 + 795 + /* Insert the outer VLAN, if any */ 796 + if (adapter->qnq_vid) { 797 + vlan_tag = adapter->qnq_vid; 798 + skb = __vlan_put_tag(skb, htons(ETH_P_8021Q), vlan_tag); 799 + if (unlikely(!skb)) 800 + return skb; 801 + if (skip_hw_vlan) 802 + *skip_hw_vlan = true; 803 + } 804 + 778 805 return skb; 806 + } 807 + 808 + static bool be_ipv6_exthdr_check(struct sk_buff *skb) 809 + { 810 + struct ethhdr *eh = (struct ethhdr *)skb->data; 811 + u16 offset = ETH_HLEN; 812 + 813 + if (eh->h_proto == htons(ETH_P_IPV6)) { 814 + struct ipv6hdr *ip6h = (struct ipv6hdr *)(skb->data + offset); 815 + 816 + offset += sizeof(struct ipv6hdr); 817 + if (ip6h->nexthdr != NEXTHDR_TCP && 818 + ip6h->nexthdr != NEXTHDR_UDP) { 819 + struct ipv6_opt_hdr *ehdr = 820 + (struct ipv6_opt_hdr *) (skb->data + offset); 821 + 822 + /* offending pkt: 2nd byte following IPv6 hdr is 0xff */ 823 + if (ehdr->hdrlen == 0xff) 824 + return true; 825 + } 826 + } 827 + return false; 828 + } 829 + 830 + static int be_vlan_tag_tx_chk(struct be_adapter *adapter, struct sk_buff *skb) 831 + { 832 + return vlan_tx_tag_present(skb) || adapter->pvid || adapter->qnq_vid; 833 + } 834 + 835 + static int be_ipv6_tx_stall_chk(struct be_adapter *adapter, struct sk_buff *skb) 836 + { 837 + return BE3_chip(adapter) && 838 + be_ipv6_exthdr_check(skb); 779 839 } 780 840 781 841 static netdev_tx_t be_xmit(struct sk_buff *skb, ··· 846 790 u32 wrb_cnt = 0, copied = 0; 847 791 u32 start = txq->head, eth_hdr_len; 848 792 bool dummy_wrb, stopped = false; 793 + bool skip_hw_vlan = false; 794 + struct vlan_ethhdr *veh = (struct vlan_ethhdr *)skb->data; 849 795 850 796 eth_hdr_len = ntohs(skb->protocol) == ETH_P_8021Q ? 851 797 VLAN_ETH_HLEN : ETH_HLEN; 852 798 853 - /* HW has a bug which considers padding bytes as legal 854 - * and modifies the IPv4 hdr's 'tot_len' field 799 + /* For padded packets, BE HW modifies tot_len field in IP header 800 + * incorrecly when VLAN tag is inserted by HW. 855 801 */ 856 - if (skb->len <= 60 && be_vlan_tag_chk(adapter, skb) && 857 - is_ipv4_pkt(skb)) { 802 + if (skb->len <= 60 && vlan_tx_tag_present(skb) && is_ipv4_pkt(skb)) { 858 803 ip = (struct iphdr *)ip_hdr(skb); 859 804 pskb_trim(skb, eth_hdr_len + ntohs(ip->tot_len)); 860 805 } 806 + 807 + /* If vlan tag is already inlined in the packet, skip HW VLAN 808 + * tagging in UMC mode 809 + */ 810 + if ((adapter->function_mode & UMC_ENABLED) && 811 + veh->h_vlan_proto == htons(ETH_P_8021Q)) 812 + skip_hw_vlan = true; 861 813 862 814 /* HW has a bug wherein it will calculate CSUM for VLAN 863 815 * pkts even though it is disabled. 864 816 * Manually insert VLAN in pkt. 865 817 */ 866 818 if (skb->ip_summed != CHECKSUM_PARTIAL && 867 - be_vlan_tag_chk(adapter, skb)) { 868 - skb = be_insert_vlan_in_pkt(adapter, skb); 819 + vlan_tx_tag_present(skb)) { 820 + skb = be_insert_vlan_in_pkt(adapter, skb, &skip_hw_vlan); 821 + if (unlikely(!skb)) 822 + goto tx_drop; 823 + } 824 + 825 + /* HW may lockup when VLAN HW tagging is requested on 826 + * certain ipv6 packets. Drop such pkts if the HW workaround to 827 + * skip HW tagging is not enabled by FW. 828 + */ 829 + if (unlikely(be_ipv6_tx_stall_chk(adapter, skb) && 830 + (adapter->pvid || adapter->qnq_vid) && 831 + !qnq_async_evt_rcvd(adapter))) 832 + goto tx_drop; 833 + 834 + /* Manual VLAN tag insertion to prevent: 835 + * ASIC lockup when the ASIC inserts VLAN tag into 836 + * certain ipv6 packets. Insert VLAN tags in driver, 837 + * and set event, completion, vlan bits accordingly 838 + * in the Tx WRB. 839 + */ 840 + if (be_ipv6_tx_stall_chk(adapter, skb) && 841 + be_vlan_tag_tx_chk(adapter, skb)) { 842 + skb = be_insert_vlan_in_pkt(adapter, skb, &skip_hw_vlan); 869 843 if (unlikely(!skb)) 870 844 goto tx_drop; 871 845 } 872 846 873 847 wrb_cnt = wrb_cnt_for_skb(adapter, skb, &dummy_wrb); 874 848 875 - copied = make_tx_wrbs(adapter, txq, skb, wrb_cnt, dummy_wrb); 849 + copied = make_tx_wrbs(adapter, txq, skb, wrb_cnt, dummy_wrb, 850 + skip_hw_vlan); 876 851 if (copied) { 877 852 int gso_segs = skb_shinfo(skb)->gso_segs; 878 853
+1 -2
drivers/net/ethernet/freescale/gianfar_ptp.c
··· 130 130 131 131 #define DRIVER "gianfar_ptp" 132 132 #define DEFAULT_CKSEL 1 133 - #define N_ALARM 1 /* first alarm is used internally to reset fipers */ 134 133 #define N_EXT_TS 2 135 134 #define REG_SIZE sizeof(struct gianfar_ptp_registers) 136 135 ··· 412 413 .owner = THIS_MODULE, 413 414 .name = "gianfar clock", 414 415 .max_adj = 512000, 415 - .n_alarm = N_ALARM, 416 + .n_alarm = 0, 416 417 .n_ext_ts = N_EXT_TS, 417 418 .n_per_out = 0, 418 419 .pps = 1,
+9
drivers/net/ethernet/realtek/r8169.c
··· 5896 5896 goto err_stop_0; 5897 5897 } 5898 5898 5899 + /* 8168evl does not automatically pad to minimum length. */ 5900 + if (unlikely(tp->mac_version == RTL_GIGA_MAC_VER_34 && 5901 + skb->len < ETH_ZLEN)) { 5902 + if (skb_padto(skb, ETH_ZLEN)) 5903 + goto err_update_stats; 5904 + skb_put(skb, ETH_ZLEN - skb->len); 5905 + } 5906 + 5899 5907 if (unlikely(le32_to_cpu(txd->opts1) & DescOwn)) 5900 5908 goto err_stop_0; 5901 5909 ··· 5975 5967 rtl8169_unmap_tx_skb(d, tp->tx_skb + entry, txd); 5976 5968 err_dma_0: 5977 5969 dev_kfree_skb(skb); 5970 + err_update_stats: 5978 5971 dev->stats.tx_dropped++; 5979 5972 return NETDEV_TX_OK; 5980 5973
+1 -1
drivers/net/ethernet/sfc/mcdi.c
··· 667 667 int efx_mcdi_get_board_cfg(struct efx_nic *efx, u8 *mac_address, 668 668 u16 *fw_subtype_list, u32 *capabilities) 669 669 { 670 - uint8_t outbuf[MC_CMD_GET_BOARD_CFG_OUT_LENMIN]; 670 + uint8_t outbuf[MC_CMD_GET_BOARD_CFG_OUT_LENMAX]; 671 671 size_t outlen, offset, i; 672 672 int port_num = efx_port_num(efx); 673 673 int rc;
+11 -4
drivers/net/tun.c
··· 1471 1471 if (!tun) 1472 1472 return -EBADFD; 1473 1473 1474 - if (flags & ~(MSG_DONTWAIT|MSG_TRUNC)) 1475 - return -EINVAL; 1474 + if (flags & ~(MSG_DONTWAIT|MSG_TRUNC)) { 1475 + ret = -EINVAL; 1476 + goto out; 1477 + } 1476 1478 ret = tun_do_read(tun, tfile, iocb, m->msg_iov, total_len, 1477 1479 flags & MSG_DONTWAIT); 1478 1480 if (ret > total_len) { 1479 1481 m->msg_flags |= MSG_TRUNC; 1480 1482 ret = flags & MSG_TRUNC ? ret : total_len; 1481 1483 } 1484 + out: 1482 1485 tun_put(tun); 1483 1486 return ret; 1484 1487 } ··· 1596 1593 return err; 1597 1594 1598 1595 if (tun->flags & TUN_TAP_MQ && 1599 - (tun->numqueues + tun->numdisabled > 1)) 1600 - return -EBUSY; 1596 + (tun->numqueues + tun->numdisabled > 1)) { 1597 + /* One or more queue has already been attached, no need 1598 + * to initialize the device again. 1599 + */ 1600 + return 0; 1601 + } 1601 1602 } 1602 1603 else { 1603 1604 char *name;
+1 -1
net/appletalk/ddp.c
··· 1253 1253 goto out; 1254 1254 1255 1255 *uaddr_len = sizeof(struct sockaddr_at); 1256 - memset(&sat.sat_zero, 0, sizeof(sat.sat_zero)); 1256 + memset(&sat, 0, sizeof(sat)); 1257 1257 1258 1258 if (peer) { 1259 1259 err = -ENOTCONN;
+5 -6
net/batman-adv/routing.c
··· 939 939 } 940 940 941 941 static int batadv_check_unicast_ttvn(struct batadv_priv *bat_priv, 942 - struct sk_buff *skb) { 942 + struct sk_buff *skb, int hdr_len) { 943 943 uint8_t curr_ttvn, old_ttvn; 944 944 struct batadv_orig_node *orig_node; 945 945 struct ethhdr *ethhdr; ··· 948 948 int is_old_ttvn; 949 949 950 950 /* check if there is enough data before accessing it */ 951 - if (pskb_may_pull(skb, sizeof(*unicast_packet) + ETH_HLEN) < 0) 951 + if (pskb_may_pull(skb, hdr_len + ETH_HLEN) < 0) 952 952 return 0; 953 953 954 954 /* create a copy of the skb (in case of for re-routing) to modify it. */ ··· 956 956 return 0; 957 957 958 958 unicast_packet = (struct batadv_unicast_packet *)skb->data; 959 - ethhdr = (struct ethhdr *)(skb->data + sizeof(*unicast_packet)); 959 + ethhdr = (struct ethhdr *)(skb->data + hdr_len); 960 960 961 961 /* check if the destination client was served by this node and it is now 962 962 * roaming. In this case, it means that the node has got a ROAM_ADV ··· 1072 1072 1073 1073 if (check < 0) 1074 1074 return NET_RX_DROP; 1075 - 1076 - if (!batadv_check_unicast_ttvn(bat_priv, skb)) 1075 + if (!batadv_check_unicast_ttvn(bat_priv, skb, hdr_size)) 1077 1076 return NET_RX_DROP; 1078 1077 1079 1078 /* packet for me */ ··· 1116 1117 if (batadv_check_unicast_packet(bat_priv, skb, hdr_size) < 0) 1117 1118 return NET_RX_DROP; 1118 1119 1119 - if (!batadv_check_unicast_ttvn(bat_priv, skb)) 1120 + if (!batadv_check_unicast_ttvn(bat_priv, skb, hdr_size)) 1120 1121 return NET_RX_DROP; 1121 1122 1122 1123 unicast_packet = (struct batadv_unicast_frag_packet *)skb->data;
+14 -8
net/core/datagram.c
··· 78 78 return autoremove_wake_function(wait, mode, sync, key); 79 79 } 80 80 /* 81 - * Wait for a packet.. 81 + * Wait for the last received packet to be different from skb 82 82 */ 83 - static int wait_for_packet(struct sock *sk, int *err, long *timeo_p) 83 + static int wait_for_more_packets(struct sock *sk, int *err, long *timeo_p, 84 + const struct sk_buff *skb) 84 85 { 85 86 int error; 86 87 DEFINE_WAIT_FUNC(wait, receiver_wake_function); ··· 93 92 if (error) 94 93 goto out_err; 95 94 96 - if (!skb_queue_empty(&sk->sk_receive_queue)) 95 + if (sk->sk_receive_queue.prev != skb) 97 96 goto out; 98 97 99 98 /* Socket shut down? */ ··· 132 131 * __skb_recv_datagram - Receive a datagram skbuff 133 132 * @sk: socket 134 133 * @flags: MSG_ flags 134 + * @peeked: returns non-zero if this packet has been seen before 135 135 * @off: an offset in bytes to peek skb from. Returns an offset 136 136 * within an skb where data actually starts 137 - * @peeked: returns non-zero if this packet has been seen before 138 137 * @err: error code returned 139 138 * 140 139 * Get a datagram skbuff, understands the peeking, nonblocking wakeups ··· 162 161 struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned int flags, 163 162 int *peeked, int *off, int *err) 164 163 { 165 - struct sk_buff *skb; 164 + struct sk_buff *skb, *last; 166 165 long timeo; 167 166 /* 168 167 * Caller is allowed not to check sk->sk_err before skb_recv_datagram() ··· 183 182 */ 184 183 unsigned long cpu_flags; 185 184 struct sk_buff_head *queue = &sk->sk_receive_queue; 185 + int _off = *off; 186 186 187 + last = (struct sk_buff *)queue; 187 188 spin_lock_irqsave(&queue->lock, cpu_flags); 188 189 skb_queue_walk(queue, skb) { 190 + last = skb; 189 191 *peeked = skb->peeked; 190 192 if (flags & MSG_PEEK) { 191 - if (*off >= skb->len && skb->len) { 192 - *off -= skb->len; 193 + if (_off >= skb->len && (skb->len || _off || 194 + skb->peeked)) { 195 + _off -= skb->len; 193 196 continue; 194 197 } 195 198 skb->peeked = 1; ··· 202 197 __skb_unlink(skb, queue); 203 198 204 199 spin_unlock_irqrestore(&queue->lock, cpu_flags); 200 + *off = _off; 205 201 return skb; 206 202 } 207 203 spin_unlock_irqrestore(&queue->lock, cpu_flags); ··· 212 206 if (!timeo) 213 207 goto no_packet; 214 208 215 - } while (!wait_for_packet(sk, err, &timeo)); 209 + } while (!wait_for_more_packets(sk, err, &timeo, last)); 216 210 217 211 return NULL; 218 212
+1
net/ipv4/tcp_ipv4.c
··· 1927 1927 skb_queue_len(&tp->ucopy.prequeue) == 0) 1928 1928 return false; 1929 1929 1930 + skb_dst_force(skb); 1930 1931 __skb_queue_tail(&tp->ucopy.prequeue, skb); 1931 1932 tp->ucopy.memory += skb->truesize; 1932 1933 if (tp->ucopy.memory > sk->sk_rcvbuf) {
+1 -1
net/mac802154/mac802154.h
··· 88 88 89 89 #define mac802154_to_priv(_hw) container_of(_hw, struct mac802154_priv, hw) 90 90 91 - #define MAC802154_CHAN_NONE (~(u8)0) /* No channel is assigned */ 91 + #define MAC802154_CHAN_NONE 0xff /* No channel is assigned */ 92 92 93 93 extern struct ieee802154_reduced_mlme_ops mac802154_mlme_reduced; 94 94 extern struct ieee802154_mlme_ops mac802154_mlme_wpan;
+1 -5
net/netfilter/ipvs/ip_vs_pe_sip.c
··· 38 38 if (ret > 0) 39 39 break; 40 40 if (!ret) 41 - return 0; 41 + return -EINVAL; 42 42 dataoff += *matchoff; 43 43 } 44 - 45 - /* Empty callid is useless */ 46 - if (!*matchlen) 47 - return -EINVAL; 48 44 49 45 /* Too large is useless */ 50 46 if (*matchlen > IP_VS_PEDATA_MAXLEN)
+2
net/netrom/af_netrom.c
··· 834 834 struct sock *sk = sock->sk; 835 835 struct nr_sock *nr = nr_sk(sk); 836 836 837 + memset(&sax->fsa_ax25, 0, sizeof(struct sockaddr_ax25)); 838 + 837 839 lock_sock(sk); 838 840 if (peer != 0) { 839 841 if (sk->sk_state != TCP_ESTABLISHED) {
+3 -2
net/nfc/llcp_sock.c
··· 508 508 pr_debug("%p %d %d %d\n", sk, llcp_sock->target_idx, 509 509 llcp_sock->dsap, llcp_sock->ssap); 510 510 511 - uaddr->sa_family = AF_NFC; 512 - 511 + memset(llcp_addr, 0, sizeof(*llcp_addr)); 513 512 *len = sizeof(struct sockaddr_nfc_llcp); 514 513 514 + llcp_addr->sa_family = AF_NFC; 515 515 llcp_addr->dev_idx = llcp_sock->dev->idx; 516 516 llcp_addr->target_idx = llcp_sock->target_idx; 517 + llcp_addr->nfc_protocol = llcp_sock->nfc_protocol; 517 518 llcp_addr->dsap = llcp_sock->dsap; 518 519 llcp_addr->ssap = llcp_sock->ssap; 519 520 llcp_addr->service_name_len = llcp_sock->service_name_len;
+12 -13
net/unix/af_unix.c
··· 1858 1858 } 1859 1859 1860 1860 /* 1861 - * Sleep until data has arrive. But check for races.. 1861 + * Sleep until more data has arrived. But check for races.. 1862 1862 */ 1863 - 1864 - static long unix_stream_data_wait(struct sock *sk, long timeo) 1863 + static long unix_stream_data_wait(struct sock *sk, long timeo, 1864 + struct sk_buff *last) 1865 1865 { 1866 1866 DEFINE_WAIT(wait); 1867 1867 ··· 1870 1870 for (;;) { 1871 1871 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE); 1872 1872 1873 - if (!skb_queue_empty(&sk->sk_receive_queue) || 1873 + if (skb_peek_tail(&sk->sk_receive_queue) != last || 1874 1874 sk->sk_err || 1875 1875 (sk->sk_shutdown & RCV_SHUTDOWN) || 1876 1876 signal_pending(current) || ··· 1888 1888 unix_state_unlock(sk); 1889 1889 return timeo; 1890 1890 } 1891 - 1892 - 1893 1891 1894 1892 static int unix_stream_recvmsg(struct kiocb *iocb, struct socket *sock, 1895 1893 struct msghdr *msg, size_t size, ··· 1933 1935 goto out; 1934 1936 } 1935 1937 1936 - skip = sk_peek_offset(sk, flags); 1937 - 1938 1938 do { 1939 1939 int chunk; 1940 - struct sk_buff *skb; 1940 + struct sk_buff *skb, *last; 1941 1941 1942 1942 unix_state_lock(sk); 1943 - skb = skb_peek(&sk->sk_receive_queue); 1943 + last = skb = skb_peek(&sk->sk_receive_queue); 1944 1944 again: 1945 1945 if (skb == NULL) { 1946 1946 unix_sk(sk)->recursion_level = 0; ··· 1961 1965 break; 1962 1966 mutex_unlock(&u->readlock); 1963 1967 1964 - timeo = unix_stream_data_wait(sk, timeo); 1968 + timeo = unix_stream_data_wait(sk, timeo, last); 1965 1969 1966 1970 if (signal_pending(current) 1967 1971 || mutex_lock_interruptible(&u->readlock)) { ··· 1975 1979 break; 1976 1980 } 1977 1981 1978 - if (skip >= skb->len) { 1982 + skip = sk_peek_offset(sk, flags); 1983 + while (skip >= skb->len) { 1979 1984 skip -= skb->len; 1985 + last = skb; 1980 1986 skb = skb_peek_next(skb, &sk->sk_receive_queue); 1981 - goto again; 1987 + if (!skb) 1988 + goto again; 1982 1989 } 1983 1990 1984 1991 unix_state_unlock(sk);
+2 -2
net/vmw_vsock/af_vsock.c
··· 165 165 static struct list_head vsock_connected_table[VSOCK_HASH_SIZE]; 166 166 static DEFINE_SPINLOCK(vsock_table_lock); 167 167 168 - static __init void vsock_init_tables(void) 168 + static void vsock_init_tables(void) 169 169 { 170 170 int i; 171 171 ··· 1932 1932 1933 1933 static struct miscdevice vsock_device = { 1934 1934 .name = "vsock", 1935 - .minor = MISC_DYNAMIC_MINOR, 1936 1935 .fops = &vsock_device_ops, 1937 1936 }; 1938 1937 ··· 1941 1942 1942 1943 vsock_init_tables(); 1943 1944 1945 + vsock_device.minor = MISC_DYNAMIC_MINOR; 1944 1946 err = misc_register(&vsock_device); 1945 1947 if (err) { 1946 1948 pr_err("Failed to register misc device\n");