History

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

Pull networking fixes from David Miller: 1) If the user gives us a msg_namelen of 0, don't try to interpret anything pointed to by msg_name. From Ani Sinha. 2) Fix some bnx2i/bnx2fc randconfig compilation errors. The gist of the issue is that we firstly have drivers that span both SCSI and networking. And at the top of that chain of dependencies we have things like SCSI_FC_ATTRS and SCSI_NETLINK which are selected. But since select is a sledgehammer and ignores dependencies, everything to select's SCSI_FC_ATTRS and/or SCSI_NETLINK has to also explicitly select their dependencies and so on and so forth. Generally speaking 'select' is supposed to only be used for child nodes, those which have no dependencies of their own. And this whole chain of dependencies in the scsi layer violates that rather strongly. So just make SCSI_NETLINK depend upon it's dependencies, and so on and so forth for the things selecting it (either directly or indirectly). From Anish Bhatt and Randy Dunlap. 3) Fix generation of blackhole routes in IPSEC, from Steffen Klassert. 4) Actually notice netdev feature changes in rtl_open() code, from Hayes Wang. 5) Fix divide by zero in bond enslaving, from Nikolay Aleksandrov. 6) Missing memory barrier in sunvnet driver, from David Stevens. 7) Don't leave anycast addresses around when ipv6 interface is destroyed, from Sabrina Dubroca. 8) Don't call efx_{arch}_filter_sync_rx_mode before addr_list_lock is initialized in SFC driver, from Edward Cree. 9) Fix missing DMA error checking in 3c59x, from Neal Horman. 10) Openvswitch doesn't emit OVS_FLOW_CMD_NEW notifications accidently, fix from Samuel Gauthier. 11) pch_gbe needs to select NET_PTP_CLASSIFY otherwise we can get a build error. 12) Fix macvlan regression wherein we stopped emitting broadcast/multicast frames over software devices. From Nicolas Dichtel. 13) Fix infiniband bug due to unintended overflow of skb->cb[], from Eric Dumazet. And add an assertion so this doesn't happen again. 14) dm9000_parse_dt() should return error pointers, not NULL. From Tobias Klauser. 15) IP tunneling code uses this_cpu_ptr() in preemptible contexts, fix from Eric Dumazet. * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (87 commits) net: bcmgenet: call bcmgenet_dma_teardown in bcmgenet_fini_dma net: bcmgenet: fix TX reclaim accounting for fragments ipv4: do not use this_cpu_ptr() in preemptible context dm9000: Return an ERR_PTR() in all error conditions of dm9000_parse_dt() r8169: fix an if condition r8152: disable ALDPS ipoib: validate struct ipoib_cb size net: sched: shrink struct qdisc_skb_cb to 28 bytes tg3: Work around HW/FW limitations with vlan encapsulated frames macvlan: allow to enqueue broadcast pkt on virtual device pch_gbe: 'select' NET_PTP_CLASSIFY. scsi: Use 'depends' with LIBFC instead of 'select'. openvswitch: restore OVS_FLOW_CMD_NEW notifications genetlink: add function genl_has_listeners() lib: rhashtable: remove second linux/log2.h inclusion net: allow macvlans to move to net namespace 3c59x: Fix bad offset spec in skb_frag_dma_map 3c59x: Add dma error checking and recovery sparc: bpf_jit: fix support for ldx/stx mem and SKF_AD_VLAN_TAG can: at91_can: add missing prepare and unprepare of the clock ...

Linus Torvalds committed 12 years ago

Commit 98f75b82 parents 9478303 e18b7fa85 files · +828 −355Browse files

Unified · Split

85 files
  1. Documentation/networking/filter.txt +3 −3
  2. arch/sparc/net/bpf_jit_comp.c +18 −7
  3. drivers/infiniband/hw/mlx4/main.c +1 −1
  4. drivers/infiniband/hw/mlx4/qp.c +1 −1
  5. drivers/infiniband/ulp/ipoib/ipoib.h +6 −0
  6. drivers/infiniband/ulp/ipoib/ipoib_main.c +2 −2
  7. drivers/message/fusion/Kconfig +1 −1
  8. drivers/net/bonding/bond_main.c +15 −4
  9. drivers/net/can/at91_can.c +5 −3
  10. drivers/net/can/c_can/c_can_platform.c +2 −2
  11. drivers/net/can/flexcan.c +44 −9
  12. drivers/net/can/sja1000/peak_pci.c +5 −1
  13. drivers/net/ethernet/3com/3c59x.c +41 −9
  14. drivers/net/ethernet/arc/emac_main.c +37 −16
  15. drivers/net/ethernet/broadcom/b44.c +1 −1
  16. drivers/net/ethernet/broadcom/bcmsysport.c +19 −12
  17. drivers/net/ethernet/broadcom/genet/bcmgenet.c +75 −68
  18. drivers/net/ethernet/broadcom/tg3.c +18 −2
  19. drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c +27 −22
  20. drivers/net/ethernet/davicom/dm9000.c +1 −1
  21. drivers/net/ethernet/mellanox/mlx4/cmd.c +21 −0
  22. drivers/net/ethernet/mellanox/mlx4/en_ethtool.c +3 −0
  23. drivers/net/ethernet/mellanox/mlx4/qp.c +10 −2
  24. drivers/net/ethernet/mellanox/mlx4/resource_tracker.c +28 −10
  25. drivers/net/ethernet/octeon/octeon_mgmt.c +3 −1
  26. drivers/net/ethernet/oki-semi/pch_gbe/Kconfig +1 −0
  27. drivers/net/ethernet/realtek/r8169.c +33 −34
  28. drivers/net/ethernet/sfc/farch.c +3 −0
  29. drivers/net/ethernet/sun/sunvnet.c +5 −2
  30. drivers/net/ethernet/ti/cpsw.c +47 −5
  31. drivers/net/macvlan.c +3 −1
  32. drivers/net/phy/micrel.c +1 −2
  33. drivers/net/usb/r8152.c +45 −17
  34. drivers/net/wireless/ath/ath9k/common-beacon.c +2 −3
  35. drivers/net/wireless/ath/ath9k/htc_drv_txrx.c +1 −1
  36. drivers/net/wireless/brcm80211/Kconfig +10 −0
  37. drivers/net/wireless/brcm80211/brcmfmac/Makefile +6 −4
  38. drivers/net/wireless/brcm80211/brcmfmac/bcdc.h +5 −2
  39. drivers/net/wireless/brcm80211/brcmfmac/fweh.c +9 −3
  40. drivers/net/wireless/brcm80211/brcmfmac/fweh.h +2 −0
  41. drivers/net/wireless/brcm80211/brcmfmac/msgbuf.h +9 −2
  42. drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c +7 −2
  43. drivers/net/wireless/iwlwifi/dvm/power.c +1 −1
  44. drivers/net/wireless/iwlwifi/iwl-7000.c +16 −0
  45. drivers/net/wireless/iwlwifi/iwl-config.h +3 −0
  46. drivers/net/wireless/iwlwifi/iwl-nvm-parse.c +1 −3
  47. drivers/net/wireless/iwlwifi/mvm/coex.c +3 −6
  48. drivers/net/wireless/iwlwifi/mvm/debugfs-vif.c +1 −2
  49. drivers/net/wireless/iwlwifi/mvm/fw-api.h +2 −2
  50. drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c +5 −5
  51. drivers/net/wireless/iwlwifi/mvm/mac80211.c +14 −11
  52. drivers/net/wireless/iwlwifi/mvm/power.c +2 −3
  53. drivers/net/wireless/iwlwifi/mvm/rx.c +3 −3
  54. drivers/net/wireless/iwlwifi/mvm/sf.c +1 −1
  55. drivers/net/wireless/iwlwifi/mvm/tx.c +6 −2
  56. drivers/net/wireless/iwlwifi/pcie/drv.c +7 −0
  57. drivers/scsi/Kconfig +10 −10
  58. drivers/scsi/bnx2fc/Kconfig +3 −2
  59. drivers/scsi/bnx2i/Kconfig +1 −0
  60. drivers/scsi/csiostor/Kconfig +1 −1
  61. drivers/scsi/qla2xxx/Kconfig +2 −2
  62. include/linux/mlx4/device.h +1 −0
  63. include/linux/mlx4/qp.h +10 −2
  64. include/net/addrconf.h +1 −0
  65. include/net/dst.h +15 −1
  66. include/net/genetlink.h +8 −0
  67. include/net/sch_generic.h +2 −1
  68. lib/rhashtable.c +0 −1
  69. net/bridge/br_private.h +3 −0
  70. net/bridge/br_vlan.c +13 −3
  71. net/core/dev.c +11 −7
  72. net/core/sock.c +1 −1
  73. net/ipv4/ip_tunnel.c +3 −3
  74. net/ipv4/route.c +3 −3
  75. net/ipv6/addrconf.c +5 −3
  76. net/ipv6/anycast.c +21 −0
  77. net/ipv6/ip6_output.c +2 −2
  78. net/mac80211/sta_info.c +1 −1
  79. net/openvswitch/datapath.c +5 −4
  80. net/rfkill/rfkill-gpio.c +1 −0
  81. net/rxrpc/ar-key.c +1 −1
  82. net/sched/sch_choke.c +14 −4
  83. net/socket.c +3 −0
  84. net/wireless/nl80211.c +6 −0
  85. net/xfrm/xfrm_policy.c +40 −8
Documentation/networking/filter.txt+3−3
@@ -462,9 +462,9 @@ JIT compiler · 461 unmodified lines
462462 ------------
463463
464464 The Linux kernel has a built-in BPF JIT compiler for x86_64, SPARC, PowerPC,
465−ARM and s390 and can be enabled through CONFIG_BPF_JIT. The JIT compiler is
466−transparently invoked for each attached filter from user space or for internal
467−kernel users if it has been previously enabled by root:
465+ARM, MIPS and s390 and can be enabled through CONFIG_BPF_JIT. The JIT compiler
466+is transparently invoked for each attached filter from user space or for
467+internal kernel users if it has been previously enabled by root:
468468
469469 echo 1 > /proc/sys/net/core/bpf_jit_enable
470470
arch/sparc/net/bpf_jit_comp.c+18−7
@@ -234,12 +234,18 @@ do { BUILD_BUG_ON(FIELD_SIZEOF(STRUCT, FIELD) != sizeof(u8)); \ · 233 unmodified lines
234234 __emit_load8(BASE, STRUCT, FIELD, DEST); \
235235 } while (0)
236236
237−#define emit_ldmem(OFF, DEST) \
238−do { *prog++ = LD32I | RS1(FP) | S13(-(OFF)) | RD(DEST); \
237+#ifdef CONFIG_SPARC64
238+#define BIAS (STACK_BIAS - 4)
239+#else
240+#define BIAS (-4)
241+#endif
242+
243+#define emit_ldmem(OFF, DEST) \
244+do { *prog++ = LD32I | RS1(SP) | S13(BIAS - (OFF)) | RD(DEST); \
239245 } while (0)
240246
241−#define emit_stmem(OFF, SRC) \
242−do { *prog++ = LD32I | RS1(FP) | S13(-(OFF)) | RD(SRC); \
247+#define emit_stmem(OFF, SRC) \
248+do { *prog++ = ST32I | RS1(SP) | S13(BIAS - (OFF)) | RD(SRC); \
243249 } while (0)
244250
245251 #ifdef CONFIG_SMP
@@ -615,10 +621,11 @@ void bpf_jit_compile(struct bpf_prog *fp) · 369 unmodified lines
615621 case BPF_ANC | SKF_AD_VLAN_TAG:
616622 case BPF_ANC | SKF_AD_VLAN_TAG_PRESENT:
617623 emit_skb_load16(vlan_tci, r_A);
618− if (code == (BPF_ANC | SKF_AD_VLAN_TAG)) {
619− emit_andi(r_A, VLAN_VID_MASK, r_A);
624+ if (code != (BPF_ANC | SKF_AD_VLAN_TAG)) {
625+ emit_alu_K(SRL, 12);
626+ emit_andi(r_A, 1, r_A);
620627 } else {
621− emit_loadimm(VLAN_TAG_PRESENT, r_TMP);
628+ emit_loadimm(~VLAN_TAG_PRESENT, r_TMP);
622629 emit_and(r_A, r_TMP, r_A);
623630 }
624631 break;
@@ -630,15 +637,19 @@ void bpf_jit_compile(struct bpf_prog *fp) · 5 unmodified lines
630637 emit_loadimm(K, r_X);
631638 break;
632639 case BPF_LD | BPF_MEM:
640+ seen |= SEEN_MEM;
633641 emit_ldmem(K * 4, r_A);
634642 break;
635643 case BPF_LDX | BPF_MEM:
644+ seen |= SEEN_MEM | SEEN_XREG;
636645 emit_ldmem(K * 4, r_X);
637646 break;
638647 case BPF_ST:
648+ seen |= SEEN_MEM;
639649 emit_stmem(K * 4, r_A);
640650 break;
641651 case BPF_STX:
652+ seen |= SEEN_MEM | SEEN_XREG;
642653 emit_stmem(K * 4, r_X);
643654 break;
644655
drivers/infiniband/hw/mlx4/main.c+1−1
@@ -1680,7 +1680,7 @@ static void mlx4_ib_update_qps(struct mlx4_ib_dev *ibdev, · 1679 unmodified lines
16801680 goto unlock;
16811681
16821682 update_params.smac_index = new_smac_index;
1683− if (mlx4_update_qp(ibdev->dev, &qp->mqp, MLX4_UPDATE_QP_SMAC,
1683+ if (mlx4_update_qp(ibdev->dev, qp->mqp.qpn, MLX4_UPDATE_QP_SMAC,
16841684 &update_params)) {
16851685 release_mac = new_smac;
16861686 goto unlock;
drivers/infiniband/hw/mlx4/qp.c+1−1
@@ -1682,7 +1682,7 @@ static int __mlx4_ib_modify_qp(struct ib_qp *ibqp, · 1681 unmodified lines
16821682 MLX4_IB_LINK_TYPE_ETH;
16831683 if (dev->dev->caps.tunnel_offload_mode == MLX4_TUNNEL_OFFLOAD_MODE_VXLAN) {
16841684 /* set QP to receive both tunneled & non-tunneled packets */
1685− if (!(context->flags & (1 << MLX4_RSS_QPC_FLAG_OFFSET)))
1685+ if (!(context->flags & cpu_to_be32(1 << MLX4_RSS_QPC_FLAG_OFFSET)))
16861686 context->srqn = cpu_to_be32(7 << 28);
16871687 }
16881688 }
drivers/infiniband/ulp/ipoib/ipoib.h+6−0
@@ -131,6 +131,12 @@ struct ipoib_cb { · 130 unmodified lines
131131 u8 hwaddr[INFINIBAND_ALEN];
132132 };
133133
134+static inline struct ipoib_cb *ipoib_skb_cb(const struct sk_buff *skb)
135+{
136+ BUILD_BUG_ON(sizeof(skb->cb) < sizeof(struct ipoib_cb));
137+ return (struct ipoib_cb *)skb->cb;
138+}
139+
134140 /* Used for all multicast joins (broadcast, IPv4 mcast and IPv6 mcast) */
135141 struct ipoib_mcast {
136142 struct ib_sa_mcmember_rec mcmember;
drivers/infiniband/ulp/ipoib/ipoib_main.c+2−2
@@ -716,7 +716,7 @@ static int ipoib_start_xmit(struct sk_buff *skb, struct net_device *dev) · 715 unmodified lines
716716 {
717717 struct ipoib_dev_priv *priv = netdev_priv(dev);
718718 struct ipoib_neigh *neigh;
719− struct ipoib_cb *cb = (struct ipoib_cb *) skb->cb;
719+ struct ipoib_cb *cb = ipoib_skb_cb(skb);
720720 struct ipoib_header *header;
721721 unsigned long flags;
722722
@@ -813,7 +813,7 @@ static int ipoib_hard_header(struct sk_buff *skb, · 90 unmodified lines
813813 const void *daddr, const void *saddr, unsigned len)
814814 {
815815 struct ipoib_header *header;
816− struct ipoib_cb *cb = (struct ipoib_cb *) skb->cb;
816+ struct ipoib_cb *cb = ipoib_skb_cb(skb);
817817
818818 header = (struct ipoib_header *) skb_push(skb, sizeof *header);
819819
drivers/message/fusion/Kconfig+1−1
@@ -29,7 +29,7 @@ config FUSION_SPI · 28 unmodified lines
2929 config FUSION_FC
3030 tristate "Fusion MPT ScsiHost drivers for FC"
3131 depends on PCI && SCSI
32− select SCSI_FC_ATTRS
32+ depends on SCSI_FC_ATTRS
3333 ---help---
3434 SCSI HOST support for a Fiber Channel host adapters.
3535
drivers/net/bonding/bond_main.c+15−4
@@ -175,7 +175,7 @@ MODULE_PARM_DESC(fail_over_mac, "For active-backup, do not set all slaves to " · 174 unmodified lines
175175 "the same MAC; 0 for none (default), "
176176 "1 for active, 2 for follow");
177177 module_param(all_slaves_active, int, 0);
178−MODULE_PARM_DESC(all_slaves_active, "Keep all frames received on an interface"
178+MODULE_PARM_DESC(all_slaves_active, "Keep all frames received on an interface "
179179 "by setting active flag for all slaves; "
180180 "0 for never (default), 1 for always.");
181181 module_param(resend_igmp, int, 0);
@@ -3659,8 +3659,14 @@ static int bond_xmit_roundrobin(struct sk_buff *skb, struct net_device *bond_dev · 3477 unmodified lines
36593659 else
36603660 bond_xmit_slave_id(bond, skb, 0);
36613661 } else {
3662− slave_id = bond_rr_gen_slave_id(bond);
3663− bond_xmit_slave_id(bond, skb, slave_id % bond->slave_cnt);
3662+ int slave_cnt = ACCESS_ONCE(bond->slave_cnt);
3663+
3664+ if (likely(slave_cnt)) {
3665+ slave_id = bond_rr_gen_slave_id(bond);
3666+ bond_xmit_slave_id(bond, skb, slave_id % slave_cnt);
3667+ } else {
3668+ dev_kfree_skb_any(skb);
3669+ }
36643670 }
36653671
36663672 return NETDEV_TX_OK;
@@ -3691,8 +3697,13 @@ static int bond_xmit_activebackup(struct sk_buff *skb, struct net_device *bond_d · 24 unmodified lines
36913697 static int bond_xmit_xor(struct sk_buff *skb, struct net_device *bond_dev)
36923698 {
36933699 struct bonding *bond = netdev_priv(bond_dev);
3700+ int slave_cnt = ACCESS_ONCE(bond->slave_cnt);
36943701
3695− bond_xmit_slave_id(bond, skb, bond_xmit_hash(bond, skb) % bond->slave_cnt);
3702+ if (likely(slave_cnt))
3703+ bond_xmit_slave_id(bond, skb,
3704+ bond_xmit_hash(bond, skb) % slave_cnt);
3705+ else
3706+ dev_kfree_skb_any(skb);
36963707
36973708 return NETDEV_TX_OK;
36983709 }
drivers/net/can/at91_can.c+5−3
@@ -1123,7 +1123,9 @@ static int at91_open(struct net_device *dev) · 1122 unmodified lines
11231123 struct at91_priv *priv = netdev_priv(dev);
11241124 int err;
11251125
1126− clk_enable(priv->clk);
1126+ err = clk_prepare_enable(priv->clk);
1127+ if (err)
1128+ return err;
11271129
11281130 /* check or determine and set bittime */
11291131 err = open_candev(dev);
@@ -1149,7 +1151,7 @@ static int at91_open(struct net_device *dev) · 19 unmodified lines
11491151 out_close:
11501152 close_candev(dev);
11511153 out:
1152− clk_disable(priv->clk);
1154+ clk_disable_unprepare(priv->clk);
11531155
11541156 return err;
11551157 }
@@ -1166,7 +1168,7 @@ static int at91_close(struct net_device *dev) · 10 unmodified lines
11661168 at91_chip_stop(dev, CAN_STATE_STOPPED);
11671169
11681170 free_irq(dev->irq, dev);
1169− clk_disable(priv->clk);
1171+ clk_disable_unprepare(priv->clk);
11701172
11711173 close_candev(dev);
11721174
drivers/net/can/c_can/c_can_platform.c+2−2
@@ -97,14 +97,14 @@ static void c_can_hw_raminit_ti(const struct c_can_priv *priv, bool enable) · 96 unmodified lines
9797 ctrl |= CAN_RAMINIT_DONE_MASK(priv->instance);
9898 writel(ctrl, priv->raminit_ctrlreg);
9999 ctrl &= ~CAN_RAMINIT_DONE_MASK(priv->instance);
100− c_can_hw_raminit_wait_ti(priv, ctrl, mask);
100+ c_can_hw_raminit_wait_ti(priv, mask, ctrl);
101101
102102 if (enable) {
103103 /* Set start bit and wait for the done bit. */
104104 ctrl |= CAN_RAMINIT_START_MASK(priv->instance);
105105 writel(ctrl, priv->raminit_ctrlreg);
106106 ctrl |= CAN_RAMINIT_DONE_MASK(priv->instance);
107− c_can_hw_raminit_wait_ti(priv, ctrl, mask);
107+ c_can_hw_raminit_wait_ti(priv, mask, ctrl);
108108 }
109109 spin_unlock(&raminit_lock);
110110 }
drivers/net/can/flexcan.c+44−9
@@ -62,7 +62,7 @@ · 61 unmodified lines
6262 #define FLEXCAN_MCR_BCC BIT(16)
6363 #define FLEXCAN_MCR_LPRIO_EN BIT(13)
6464 #define FLEXCAN_MCR_AEN BIT(12)
65−#define FLEXCAN_MCR_MAXMB(x) ((x) & 0x1f)
65+#define FLEXCAN_MCR_MAXMB(x) ((x) & 0x7f)
6666 #define FLEXCAN_MCR_IDAM_A (0 << 8)
6767 #define FLEXCAN_MCR_IDAM_B (1 << 8)
6868 #define FLEXCAN_MCR_IDAM_C (2 << 8)
@@ -125,7 +125,9 @@ · 56 unmodified lines
125125 FLEXCAN_ESR_BOFF_INT | FLEXCAN_ESR_ERR_INT)
126126
127127 /* FLEXCAN interrupt flag register (IFLAG) bits */
128−#define FLEXCAN_TX_BUF_ID 8
128+/* Errata ERR005829 step7: Reserve first valid MB */
129+#define FLEXCAN_TX_BUF_RESERVED 8
130+#define FLEXCAN_TX_BUF_ID 9
129131 #define FLEXCAN_IFLAG_BUF(x) BIT(x)
130132 #define FLEXCAN_IFLAG_RX_FIFO_OVERFLOW BIT(7)
131133 #define FLEXCAN_IFLAG_RX_FIFO_WARN BIT(6)
@@ -136,6 +138,17 @@ · 4 unmodified lines
136138
137139 /* FLEXCAN message buffers */
138140 #define FLEXCAN_MB_CNT_CODE(x) (((x) & 0xf) << 24)
141+#define FLEXCAN_MB_CODE_RX_INACTIVE (0x0 << 24)
142+#define FLEXCAN_MB_CODE_RX_EMPTY (0x4 << 24)
143+#define FLEXCAN_MB_CODE_RX_FULL (0x2 << 24)
144+#define FLEXCAN_MB_CODE_RX_OVERRRUN (0x6 << 24)
145+#define FLEXCAN_MB_CODE_RX_RANSWER (0xa << 24)
146+
147+#define FLEXCAN_MB_CODE_TX_INACTIVE (0x8 << 24)
148+#define FLEXCAN_MB_CODE_TX_ABORT (0x9 << 24)
149+#define FLEXCAN_MB_CODE_TX_DATA (0xc << 24)
150+#define FLEXCAN_MB_CODE_TX_TANSWER (0xe << 24)
151+
139152 #define FLEXCAN_MB_CNT_SRR BIT(22)
140153 #define FLEXCAN_MB_CNT_IDE BIT(21)
141154 #define FLEXCAN_MB_CNT_RTR BIT(20)
@@ -298,7 +311,7 @@ static int flexcan_chip_enable(struct flexcan_priv *priv) · 156 unmodified lines
298311 flexcan_write(reg, &regs->mcr);
299312
300313 while (timeout-- && (flexcan_read(&regs->mcr) & FLEXCAN_MCR_LPM_ACK))
301− usleep_range(10, 20);
314+ udelay(10);
302315
303316 if (flexcan_read(&regs->mcr) & FLEXCAN_MCR_LPM_ACK)
304317 return -ETIMEDOUT;
@@ -317,7 +330,7 @@ static int flexcan_chip_disable(struct flexcan_priv *priv) · 12 unmodified lines
317330 flexcan_write(reg, &regs->mcr);
318331
319332 while (timeout-- && !(flexcan_read(&regs->mcr) & FLEXCAN_MCR_LPM_ACK))
320− usleep_range(10, 20);
333+ udelay(10);
321334
322335 if (!(flexcan_read(&regs->mcr) & FLEXCAN_MCR_LPM_ACK))
323336 return -ETIMEDOUT;
@@ -336,7 +349,7 @@ static int flexcan_chip_freeze(struct flexcan_priv *priv) · 12 unmodified lines
336349 flexcan_write(reg, &regs->mcr);
337350
338351 while (timeout-- && !(flexcan_read(&regs->mcr) & FLEXCAN_MCR_FRZ_ACK))
339− usleep_range(100, 200);
352+ udelay(100);
340353
341354 if (!(flexcan_read(&regs->mcr) & FLEXCAN_MCR_FRZ_ACK))
342355 return -ETIMEDOUT;
@@ -355,7 +368,7 @@ static int flexcan_chip_unfreeze(struct flexcan_priv *priv) · 12 unmodified lines
355368 flexcan_write(reg, &regs->mcr);
356369
357370 while (timeout-- && (flexcan_read(&regs->mcr) & FLEXCAN_MCR_FRZ_ACK))
358− usleep_range(10, 20);
371+ udelay(10);
359372
360373 if (flexcan_read(&regs->mcr) & FLEXCAN_MCR_FRZ_ACK)
361374 return -ETIMEDOUT;
@@ -370,7 +383,7 @@ static int flexcan_chip_softreset(struct flexcan_priv *priv) · 8 unmodified lines
370383
371384 flexcan_write(FLEXCAN_MCR_SOFTRST, &regs->mcr);
372385 while (timeout-- && (flexcan_read(&regs->mcr) & FLEXCAN_MCR_SOFTRST))
373− usleep_range(10, 20);
386+ udelay(10);
374387
375388 if (flexcan_read(&regs->mcr) & FLEXCAN_MCR_SOFTRST)
376389 return -ETIMEDOUT;
@@ -428,6 +441,14 @@ static int flexcan_start_xmit(struct sk_buff *skb, struct net_device *dev) · 51 unmodified lines
428441 flexcan_write(can_id, &regs->cantxfg[FLEXCAN_TX_BUF_ID].can_id);
429442 flexcan_write(ctrl, &regs->cantxfg[FLEXCAN_TX_BUF_ID].can_ctrl);
430443
444+ /* Errata ERR005829 step8:
445+ * Write twice INACTIVE(0x8) code to first MB.
446+ */
447+ flexcan_write(FLEXCAN_MB_CODE_TX_INACTIVE,
448+ &regs->cantxfg[FLEXCAN_TX_BUF_RESERVED].can_ctrl);
449+ flexcan_write(FLEXCAN_MB_CODE_TX_INACTIVE,
450+ &regs->cantxfg[FLEXCAN_TX_BUF_RESERVED].can_ctrl);
451+
431452 return NETDEV_TX_OK;
432453 }
433454
@@ -744,6 +765,9 @@ static irqreturn_t flexcan_irq(int irq, void *dev_id) · 310 unmodified lines
744765 stats->tx_bytes += can_get_echo_skb(dev, 0);
745766 stats->tx_packets++;
746767 can_led_event(dev, CAN_LED_EVENT_TX);
768+ /* after sending a RTR frame mailbox is in RX mode */
769+ flexcan_write(FLEXCAN_MB_CODE_TX_INACTIVE,
770+ &regs->cantxfg[FLEXCAN_TX_BUF_ID].can_ctrl);
747771 flexcan_write((1 << FLEXCAN_TX_BUF_ID), &regs->iflag1);
748772 netif_wake_queue(dev);
749773 }
@@ -801,6 +825,7 @@ static int flexcan_chip_start(struct net_device *dev) · 51 unmodified lines
801825 struct flexcan_regs __iomem *regs = priv->base;
802826 int err;
803827 u32 reg_mcr, reg_ctrl;
828+ int i;
804829
805830 /* enable module */
806831 err = flexcan_chip_enable(priv);
@@ -867,8 +892,18 @@ static int flexcan_chip_start(struct net_device *dev) · 60 unmodified lines
867892 netdev_dbg(dev, "%s: writing ctrl=0x%08x", __func__, reg_ctrl);
868893 flexcan_write(reg_ctrl, &regs->ctrl);
869894
870− /* Abort any pending TX, mark Mailbox as INACTIVE */
871− flexcan_write(FLEXCAN_MB_CNT_CODE(0x4),
895+ /* clear and invalidate all mailboxes first */
896+ for (i = FLEXCAN_TX_BUF_ID; i < ARRAY_SIZE(regs->cantxfg); i++) {
897+ flexcan_write(FLEXCAN_MB_CODE_RX_INACTIVE,
898+ &regs->cantxfg[i].can_ctrl);
899+ }
900+
901+ /* Errata ERR005829: mark first TX mailbox as INACTIVE */
902+ flexcan_write(FLEXCAN_MB_CODE_TX_INACTIVE,
903+ &regs->cantxfg[FLEXCAN_TX_BUF_RESERVED].can_ctrl);
904+
905+ /* mark TX mailbox as INACTIVE */
906+ flexcan_write(FLEXCAN_MB_CODE_TX_INACTIVE,
872907 &regs->cantxfg[FLEXCAN_TX_BUF_ID].can_ctrl);
873908
874909 /* acceptance mask/acceptance code (accept everything) */
drivers/net/can/sja1000/peak_pci.c+5−1
@@ -70,6 +70,8 @@ struct peak_pci_chan { · 69 unmodified lines
7070 #define PEAK_PC_104P_DEVICE_ID 0x0006 /* PCAN-PC/104+ cards */
7171 #define PEAK_PCI_104E_DEVICE_ID 0x0007 /* PCAN-PCI/104 Express cards */
7272 #define PEAK_MPCIE_DEVICE_ID 0x0008 /* The miniPCIe slot cards */
73+#define PEAK_PCIE_OEM_ID 0x0009 /* PCAN-PCI Express OEM */
74+#define PEAK_PCIEC34_DEVICE_ID 0x000A /* PCAN-PCI Express 34 (one channel) */
7375
7476 #define PEAK_PCI_CHAN_MAX 4
7577
@@ -87,6 +89,7 @@ static const struct pci_device_id peak_pci_tbl[] = { · 11 unmodified lines
8789 {PEAK_PCI_VENDOR_ID, PEAK_CPCI_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,},
8890 #ifdef CONFIG_CAN_PEAK_PCIEC
8991 {PEAK_PCI_VENDOR_ID, PEAK_PCIEC_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,},
92+ {PEAK_PCI_VENDOR_ID, PEAK_PCIEC34_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,},
9093 #endif
9194 {0,}
9295 };
@@ -653,7 +656,8 @@ static int peak_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) · 560 unmodified lines
653656 * This must be done *before* register_sja1000dev() but
654657 * *after* devices linkage
655658 */
656− if (pdev->device == PEAK_PCIEC_DEVICE_ID) {
659+ if (pdev->device == PEAK_PCIEC_DEVICE_ID ||
660+ pdev->device == PEAK_PCIEC34_DEVICE_ID) {
657661 err = peak_pciec_probe(pdev, dev);
658662 if (err) {
659663 dev_err(&pdev->dev,
drivers/net/ethernet/3com/3c59x.c+41−9
@@ -2129,6 +2129,7 @@ boomerang_start_xmit(struct sk_buff *skb, struct net_device *dev) · 2128 unmodified lines
21292129 int entry = vp->cur_tx % TX_RING_SIZE;
21302130 struct boom_tx_desc *prev_entry = &vp->tx_ring[(vp->cur_tx-1) % TX_RING_SIZE];
21312131 unsigned long flags;
2132+ dma_addr_t dma_addr;
21322133
21332134 if (vortex_debug > 6) {
21342135 pr_debug("boomerang_start_xmit()\n");
@@ -2163,24 +2164,48 @@ boomerang_start_xmit(struct sk_buff *skb, struct net_device *dev) · 28 unmodified lines
21632164 vp->tx_ring[entry].status = cpu_to_le32(skb->len | TxIntrUploaded | AddTCPChksum | AddUDPChksum);
21642165
21652166 if (!skb_shinfo(skb)->nr_frags) {
2166− vp->tx_ring[entry].frag[0].addr = cpu_to_le32(pci_map_single(VORTEX_PCI(vp), skb->data,
2167− skb->len, PCI_DMA_TODEVICE));
2167+ dma_addr = pci_map_single(VORTEX_PCI(vp), skb->data, skb->len,
2168+ PCI_DMA_TODEVICE);
2169+ if (dma_mapping_error(&VORTEX_PCI(vp)->dev, dma_addr))
2170+ goto out_dma_err;
2171+
2172+ vp->tx_ring[entry].frag[0].addr = cpu_to_le32(dma_addr);
21682173 vp->tx_ring[entry].frag[0].length = cpu_to_le32(skb->len | LAST_FRAG);
21692174 } else {
21702175 int i;
21712176
2172− vp->tx_ring[entry].frag[0].addr = cpu_to_le32(pci_map_single(VORTEX_PCI(vp), skb->data,
2173− skb_headlen(skb), PCI_DMA_TODEVICE));
2177+ dma_addr = pci_map_single(VORTEX_PCI(vp), skb->data,
2178+ skb_headlen(skb), PCI_DMA_TODEVICE);
2179+ if (dma_mapping_error(&VORTEX_PCI(vp)->dev, dma_addr))
2180+ goto out_dma_err;
2181+
2182+ vp->tx_ring[entry].frag[0].addr = cpu_to_le32(dma_addr);
21742183 vp->tx_ring[entry].frag[0].length = cpu_to_le32(skb_headlen(skb));
21752184
21762185 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
21772186 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
21782187
2188+ dma_addr = skb_frag_dma_map(&VORTEX_PCI(vp)->dev, frag,
2189+ 0,
2190+ frag->size,
2191+ DMA_TO_DEVICE);
2192+ if (dma_mapping_error(&VORTEX_PCI(vp)->dev, dma_addr)) {
2193+ for(i = i-1; i >= 0; i--)
2194+ dma_unmap_page(&VORTEX_PCI(vp)->dev,
2195+ le32_to_cpu(vp->tx_ring[entry].frag[i+1].addr),
2196+ le32_to_cpu(vp->tx_ring[entry].frag[i+1].length),
2197+ DMA_TO_DEVICE);
2198+
2199+ pci_unmap_single(VORTEX_PCI(vp),
2200+ le32_to_cpu(vp->tx_ring[entry].frag[0].addr),
2201+ le32_to_cpu(vp->tx_ring[entry].frag[0].length),
2202+ PCI_DMA_TODEVICE);
2203+
2204+ goto out_dma_err;
2205+ }
2206+
21792207 vp->tx_ring[entry].frag[i+1].addr =
2180− cpu_to_le32(skb_frag_dma_map(
2181− &VORTEX_PCI(vp)->dev,
2182− frag,
2183− frag->page_offset, frag->size, DMA_TO_DEVICE));
2208+ cpu_to_le32(dma_addr);
21842209
21852210 if (i == skb_shinfo(skb)->nr_frags-1)
21862211 vp->tx_ring[entry].frag[i+1].length = cpu_to_le32(skb_frag_size(frag)|LAST_FRAG);
@@ -2189,7 +2214,10 @@ boomerang_start_xmit(struct sk_buff *skb, struct net_device *dev) · 2 unmodified lines
21892214 }
21902215 }
21912216 #else
2192− vp->tx_ring[entry].addr = cpu_to_le32(pci_map_single(VORTEX_PCI(vp), skb->data, skb->len, PCI_DMA_TODEVICE));
2217+ dma_addr = cpu_to_le32(pci_map_single(VORTEX_PCI(vp), skb->data, skb->len, PCI_DMA_TODEVICE));
2218+ if (dma_mapping_error(&VORTEX_PCI(vp)->dev, dma_addr))
2219+ goto out_dma_err;
2220+ vp->tx_ring[entry].addr = cpu_to_le32(dma_addr);
21932221 vp->tx_ring[entry].length = cpu_to_le32(skb->len | LAST_FRAG);
21942222 vp->tx_ring[entry].status = cpu_to_le32(skb->len | TxIntrUploaded);
21952223 #endif
@@ -2217,7 +2245,11 @@ boomerang_start_xmit(struct sk_buff *skb, struct net_device *dev) · 21 unmodified lines
22172245 skb_tx_timestamp(skb);
22182246 iowrite16(DownUnstall, ioaddr + EL3_CMD);
22192247 spin_unlock_irqrestore(&vp->lock, flags);
2248+out:
22202249 return NETDEV_TX_OK;
2250+out_dma_err:
2251+ dev_err(&VORTEX_PCI(vp)->dev, "Error mapping dma buffer\n");
2252+ goto out;
22212253 }
22222254
22232255 /* The interrupt handler does all of the Rx thread work and cleans up
drivers/net/ethernet/arc/emac_main.c+37−16
@@ -29,6 +29,17 @@ · 28 unmodified lines
2929 #define DRV_NAME "arc_emac"
3030 #define DRV_VERSION "1.0"
3131
32+/**
33+ * arc_emac_tx_avail - Return the number of available slots in the tx ring.
34+ * @priv: Pointer to ARC EMAC private data structure.
35+ *
36+ * returns: the number of slots available for transmission in tx the ring.
37+ */
38+static inline int arc_emac_tx_avail(struct arc_emac_priv *priv)
39+{
40+ return (priv->txbd_dirty + TX_BD_NUM - priv->txbd_curr - 1) % TX_BD_NUM;
41+}
42+
3243 /**
3344 * arc_emac_adjust_link - Adjust the PHY link duplex.
3445 * @ndev: Pointer to the net_device structure.
@@ -180,10 +191,15 @@ static void arc_emac_tx_clean(struct net_device *ndev) · 145 unmodified lines
180191 txbd->info = 0;
181192
182193 *txbd_dirty = (*txbd_dirty + 1) % TX_BD_NUM;
183−
184− if (netif_queue_stopped(ndev))
185− netif_wake_queue(ndev);
186194 }
195+
196+ /* Ensure that txbd_dirty is visible to tx() before checking
197+ * for queue stopped.
198+ */
199+ smp_mb();
200+
201+ if (netif_queue_stopped(ndev) && arc_emac_tx_avail(priv))
202+ netif_wake_queue(ndev);
187203 }
188204
189205 /**
@@ -298,7 +314,7 @@ static int arc_emac_poll(struct napi_struct *napi, int budget) · 108 unmodified lines
298314 work_done = arc_emac_rx(ndev, budget);
299315 if (work_done < budget) {
300316 napi_complete(napi);
301− arc_reg_or(priv, R_ENABLE, RXINT_MASK);
317+ arc_reg_or(priv, R_ENABLE, RXINT_MASK | TXINT_MASK);
302318 }
303319
304320 return work_done;
@@ -327,9 +343,9 @@ static irqreturn_t arc_emac_intr(int irq, void *dev_instance) · 22 unmodified lines
327343 /* Reset all flags except "MDIO complete" */
328344 arc_reg_set(priv, R_STATUS, status);
329345
330− if (status & RXINT_MASK) {
346+ if (status & (RXINT_MASK | TXINT_MASK)) {
331347 if (likely(napi_schedule_prep(&priv->napi))) {
332− arc_reg_clr(priv, R_ENABLE, RXINT_MASK);
348+ arc_reg_clr(priv, R_ENABLE, RXINT_MASK | TXINT_MASK);
333349 __napi_schedule(&priv->napi);
334350 }
335351 }
@@ -440,7 +456,7 @@ static int arc_emac_open(struct net_device *ndev) · 104 unmodified lines
440456 arc_reg_set(priv, R_TX_RING, (unsigned int)priv->txbd_dma);
441457
442458 /* Enable interrupts */
443− arc_reg_set(priv, R_ENABLE, RXINT_MASK | ERR_MASK);
459+ arc_reg_set(priv, R_ENABLE, RXINT_MASK | TXINT_MASK | ERR_MASK);
444460
445461 /* Set CONTROL */
446462 arc_reg_set(priv, R_CTRL,
@@ -511,7 +527,7 @@ static int arc_emac_stop(struct net_device *ndev) · 64 unmodified lines
511527 netif_stop_queue(ndev);
512528
513529 /* Disable interrupts */
514− arc_reg_clr(priv, R_ENABLE, RXINT_MASK | ERR_MASK);
530+ arc_reg_clr(priv, R_ENABLE, RXINT_MASK | TXINT_MASK | ERR_MASK);
515531
516532 /* Disable EMAC */
517533 arc_reg_clr(priv, R_CTRL, EN_MASK);
@@ -574,11 +590,9 @@ static int arc_emac_tx(struct sk_buff *skb, struct net_device *ndev) · 56 unmodified lines
574590
575591 len = max_t(unsigned int, ETH_ZLEN, skb->len);
576592
577− /* EMAC still holds this buffer in its possession.
578− * CPU must not modify this buffer descriptor
579− */
580− if (unlikely((le32_to_cpu(*info) & OWN_MASK) == FOR_EMAC)) {
593+ if (unlikely(!arc_emac_tx_avail(priv))) {
581594 netif_stop_queue(ndev);
595+ netdev_err(ndev, "BUG! Tx Ring full when queue awake!\n");
582596 return NETDEV_TX_BUSY;
583597 }
584598
@@ -607,12 +621,19 @@ static int arc_emac_tx(struct sk_buff *skb, struct net_device *ndev) · 22 unmodified lines
607621 /* Increment index to point to the next BD */
608622 *txbd_curr = (*txbd_curr + 1) % TX_BD_NUM;
609623
610− /* Get "info" of the next BD */
611− info = &priv->txbd[*txbd_curr].info;
624+ /* Ensure that tx_clean() sees the new txbd_curr before
625+ * checking the queue status. This prevents an unneeded wake
626+ * of the queue in tx_clean().
627+ */
628+ smp_mb();
612629
613− /* Check if if Tx BD ring is full - next BD is still owned by EMAC */
614− if (unlikely((le32_to_cpu(*info) & OWN_MASK) == FOR_EMAC))
630+ if (!arc_emac_tx_avail(priv)) {
615631 netif_stop_queue(ndev);
632+ /* Refresh tx_dirty */
633+ smp_mb();
634+ if (arc_emac_tx_avail(priv))
635+ netif_start_queue(ndev);
636+ }
616637
617638 arc_reg_set(priv, R_STATUS, TXPL_MASK);
618639
drivers/net/ethernet/broadcom/b44.c+1−1
@@ -1697,7 +1697,7 @@ static struct rtnl_link_stats64 *b44_get_stats64(struct net_device *dev, · 1696 unmodified lines
16971697 hwstat->tx_underruns +
16981698 hwstat->tx_excessive_cols +
16991699 hwstat->tx_late_cols);
1700− nstat->multicast = hwstat->tx_multicast_pkts;
1700+ nstat->multicast = hwstat->rx_multicast_pkts;
17011701 nstat->collisions = hwstat->tx_total_cols;
17021702
17031703 nstat->rx_length_errors = (hwstat->rx_oversize_pkts +
drivers/net/ethernet/broadcom/bcmsysport.c+19−12
@@ -534,6 +534,25 @@ static unsigned int bcm_sysport_desc_rx(struct bcm_sysport_priv *priv, · 533 unmodified lines
534534 while ((processed < to_process) && (processed < budget)) {
535535 cb = &priv->rx_cbs[priv->rx_read_ptr];
536536 skb = cb->skb;
537+
538+ processed++;
539+ priv->rx_read_ptr++;
540+
541+ if (priv->rx_read_ptr == priv->num_rx_bds)
542+ priv->rx_read_ptr = 0;
543+
544+ /* We do not have a backing SKB, so we do not a corresponding
545+ * DMA mapping for this incoming packet since
546+ * bcm_sysport_rx_refill always either has both skb and mapping
547+ * or none.
548+ */
549+ if (unlikely(!skb)) {
550+ netif_err(priv, rx_err, ndev, "out of memory!\n");
551+ ndev->stats.rx_dropped++;
552+ ndev->stats.rx_errors++;
553+ goto refill;
554+ }
555+
537556 dma_unmap_single(kdev, dma_unmap_addr(cb, dma_addr),
538557 RX_BUF_LENGTH, DMA_FROM_DEVICE);
539558
@@ -543,23 +562,11 @@ static unsigned int bcm_sysport_desc_rx(struct bcm_sysport_priv *priv, · 3 unmodified lines
543562 status = (rsb->rx_status_len >> DESC_STATUS_SHIFT) &
544563 DESC_STATUS_MASK;
545564
546− processed++;
547− priv->rx_read_ptr++;
548− if (priv->rx_read_ptr == priv->num_rx_bds)
549− priv->rx_read_ptr = 0;
550−
551565 netif_dbg(priv, rx_status, ndev,
552566 "p=%d, c=%d, rd_ptr=%d, len=%d, flag=0x%04x\n",
553567 p_index, priv->rx_c_index, priv->rx_read_ptr,
554568 len, status);
555569
556− if (unlikely(!skb)) {
557− netif_err(priv, rx_err, ndev, "out of memory!\n");
558− ndev->stats.rx_dropped++;
559− ndev->stats.rx_errors++;
560− goto refill;
561− }
562−
563570 if (unlikely(!(status & DESC_EOP) || !(status & DESC_SOP))) {
564571 netif_err(priv, rx_status, ndev, "fragmented packet!\n");
565572 ndev->stats.rx_dropped++;
drivers/net/ethernet/broadcom/genet/bcmgenet.c+75−68
@@ -875,6 +875,7 @@ static void __bcmgenet_tx_reclaim(struct net_device *dev, · 874 unmodified lines
875875 int last_tx_cn, last_c_index, num_tx_bds;
876876 struct enet_cb *tx_cb_ptr;
877877 struct netdev_queue *txq;
878+ unsigned int bds_compl;
878879 unsigned int c_index;
879880
880881 /* Compute how many buffers are transmitted since last xmit call */
@@ -899,7 +900,9 @@ static void __bcmgenet_tx_reclaim(struct net_device *dev, · 18 unmodified lines
899900 /* Reclaim transmitted buffers */
900901 while (last_tx_cn-- > 0) {
901902 tx_cb_ptr = ring->cbs + last_c_index;
903+ bds_compl = 0;
902904 if (tx_cb_ptr->skb) {
905+ bds_compl = skb_shinfo(tx_cb_ptr->skb)->nr_frags + 1;
903906 dev->stats.tx_bytes += tx_cb_ptr->skb->len;
904907 dma_unmap_single(&dev->dev,
905908 dma_unmap_addr(tx_cb_ptr, dma_addr),
@@ -916,7 +919,7 @@ static void __bcmgenet_tx_reclaim(struct net_device *dev, · 10 unmodified lines
916919 dma_unmap_addr_set(tx_cb_ptr, dma_addr, 0);
917920 }
918921 dev->stats.tx_packets++;
919− ring->free_bds += 1;
922+ ring->free_bds += bds_compl;
920923
921924 last_c_index++;
922925 last_c_index &= (num_tx_bds - 1);
@@ -1274,12 +1277,29 @@ static unsigned int bcmgenet_desc_rx(struct bcmgenet_priv *priv, · 351 unmodified lines
12741277
12751278 while ((rxpktprocessed < rxpkttoprocess) &&
12761279 (rxpktprocessed < budget)) {
1280+ cb = &priv->rx_cbs[priv->rx_read_ptr];
1281+ skb = cb->skb;
1282+
1283+ rxpktprocessed++;
1284+
1285+ priv->rx_read_ptr++;
1286+ priv->rx_read_ptr &= (priv->num_rx_bds - 1);
1287+
1288+ /* We do not have a backing SKB, so we do not have a
1289+ * corresponding DMA mapping for this incoming packet since
1290+ * bcmgenet_rx_refill always either has both skb and mapping or
1291+ * none.
1292+ */
1293+ if (unlikely(!skb)) {
1294+ dev->stats.rx_dropped++;
1295+ dev->stats.rx_errors++;
1296+ goto refill;
1297+ }
1298+
12771299 /* Unmap the packet contents such that we can use the
12781300 * RSV from the 64 bytes descriptor when enabled and save
12791301 * a 32-bits register read
12801302 */
1281− cb = &priv->rx_cbs[priv->rx_read_ptr];
1282− skb = cb->skb;
12831303 dma_unmap_single(&dev->dev, dma_unmap_addr(cb, dma_addr),
12841304 priv->rx_buf_len, DMA_FROM_DEVICE);
12851305
@@ -1307,18 +1327,6 @@ static unsigned int bcmgenet_desc_rx(struct bcmgenet_priv *priv, · 21 unmodified lines
13071327 __func__, p_index, priv->rx_c_index,
13081328 priv->rx_read_ptr, dma_length_status);
13091329
1310− rxpktprocessed++;
1311−
1312− priv->rx_read_ptr++;
1313− priv->rx_read_ptr &= (priv->num_rx_bds - 1);
1314−
1315− /* out of memory, just drop packets at the hardware level */
1316− if (unlikely(!skb)) {
1317− dev->stats.rx_dropped++;
1318− dev->stats.rx_errors++;
1319− goto refill;
1320− }
1321−
13221330 if (unlikely(!(dma_flag & DMA_EOP) || !(dma_flag & DMA_SOP))) {
13231331 netif_err(priv, rx_status, dev,
13241332 "dropping fragmented packet!\n");
@@ -1736,13 +1744,63 @@ static void bcmgenet_init_multiq(struct net_device *dev) · 411 unmodified lines
17361744 bcmgenet_tdma_writel(priv, reg, DMA_CTRL);
17371745 }
17381746
1747+static int bcmgenet_dma_teardown(struct bcmgenet_priv *priv)
1748+{
1749+ int ret = 0;
1750+ int timeout = 0;
1751+ u32 reg;
1752+
1753+ /* Disable TDMA to stop add more frames in TX DMA */
1754+ reg = bcmgenet_tdma_readl(priv, DMA_CTRL);
1755+ reg &= ~DMA_EN;
1756+ bcmgenet_tdma_writel(priv, reg, DMA_CTRL);
1757+
1758+ /* Check TDMA status register to confirm TDMA is disabled */
1759+ while (timeout++ < DMA_TIMEOUT_VAL) {
1760+ reg = bcmgenet_tdma_readl(priv, DMA_STATUS);
1761+ if (reg & DMA_DISABLED)
1762+ break;
1763+
1764+ udelay(1);
1765+ }
1766+
1767+ if (timeout == DMA_TIMEOUT_VAL) {
1768+ netdev_warn(priv->dev, "Timed out while disabling TX DMA\n");
1769+ ret = -ETIMEDOUT;
1770+ }
1771+
1772+ /* Wait 10ms for packet drain in both tx and rx dma */
1773+ usleep_range(10000, 20000);
1774+
1775+ /* Disable RDMA */
1776+ reg = bcmgenet_rdma_readl(priv, DMA_CTRL);
1777+ reg &= ~DMA_EN;
1778+ bcmgenet_rdma_writel(priv, reg, DMA_CTRL);
1779+
1780+ timeout = 0;
1781+ /* Check RDMA status register to confirm RDMA is disabled */
1782+ while (timeout++ < DMA_TIMEOUT_VAL) {
1783+ reg = bcmgenet_rdma_readl(priv, DMA_STATUS);
1784+ if (reg & DMA_DISABLED)
1785+ break;
1786+
1787+ udelay(1);
1788+ }
1789+
1790+ if (timeout == DMA_TIMEOUT_VAL) {
1791+ netdev_warn(priv->dev, "Timed out while disabling RX DMA\n");
1792+ ret = -ETIMEDOUT;
1793+ }
1794+
1795+ return ret;
1796+}
1797+
17391798 static void bcmgenet_fini_dma(struct bcmgenet_priv *priv)
17401799 {
17411800 int i;
17421801
17431802 /* disable DMA */
1744− bcmgenet_rdma_writel(priv, 0, DMA_CTRL);
1745− bcmgenet_tdma_writel(priv, 0, DMA_CTRL);
1803+ bcmgenet_dma_teardown(priv);
17461804
17471805 for (i = 0; i < priv->num_tx_bds; i++) {
17481806 if (priv->tx_cbs[i].skb != NULL) {
@@ -2101,57 +2159,6 @@ err_clk_disable: · 352 unmodified lines
21012159 return ret;
21022160 }
21032161
2104−static int bcmgenet_dma_teardown(struct bcmgenet_priv *priv)
2105−{
2106− int ret = 0;
2107− int timeout = 0;
2108− u32 reg;
2109−
2110− /* Disable TDMA to stop add more frames in TX DMA */
2111− reg = bcmgenet_tdma_readl(priv, DMA_CTRL);
2112− reg &= ~DMA_EN;
2113− bcmgenet_tdma_writel(priv, reg, DMA_CTRL);
2114−
2115− /* Check TDMA status register to confirm TDMA is disabled */
2116− while (timeout++ < DMA_TIMEOUT_VAL) {
2117− reg = bcmgenet_tdma_readl(priv, DMA_STATUS);
2118− if (reg & DMA_DISABLED)
2119− break;
2120−
2121− udelay(1);
2122− }
2123−
2124− if (timeout == DMA_TIMEOUT_VAL) {
2125− netdev_warn(priv->dev, "Timed out while disabling TX DMA\n");
2126− ret = -ETIMEDOUT;
2127− }
2128−
2129− /* Wait 10ms for packet drain in both tx and rx dma */
2130− usleep_range(10000, 20000);
2131−
2132− /* Disable RDMA */
2133− reg = bcmgenet_rdma_readl(priv, DMA_CTRL);
2134− reg &= ~DMA_EN;
2135− bcmgenet_rdma_writel(priv, reg, DMA_CTRL);
2136−
2137− timeout = 0;
2138− /* Check RDMA status register to confirm RDMA is disabled */
2139− while (timeout++ < DMA_TIMEOUT_VAL) {
2140− reg = bcmgenet_rdma_readl(priv, DMA_STATUS);
2141− if (reg & DMA_DISABLED)
2142− break;
2143−
2144− udelay(1);
2145− }
2146−
2147− if (timeout == DMA_TIMEOUT_VAL) {
2148− netdev_warn(priv->dev, "Timed out while disabling RX DMA\n");
2149− ret = -ETIMEDOUT;
2150− }
2151−
2152− return ret;
2153−}
2154−
21552162 static void bcmgenet_netif_stop(struct net_device *dev)
21562163 {
21572164 struct bcmgenet_priv *priv = netdev_priv(dev);
drivers/net/ethernet/broadcom/tg3.c+18−2
@@ -7914,8 +7914,6 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev) · 7913 unmodified lines
79147914
79157915 entry = tnapi->tx_prod;
79167916 base_flags = 0;
7917− if (skb->ip_summed == CHECKSUM_PARTIAL)
7918− base_flags |= TXD_FLAG_TCPUDP_CSUM;
79197917
79207918 mss = skb_shinfo(skb)->gso_size;
79217919 if (mss) {
@@ -7929,6 +7927,13 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev) · 7 unmodified lines
79297927
79307928 hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb) - ETH_HLEN;
79317929
7930+ /* HW/FW can not correctly segment packets that have been
7931+ * vlan encapsulated.
7932+ */
7933+ if (skb->protocol == htons(ETH_P_8021Q) ||
7934+ skb->protocol == htons(ETH_P_8021AD))
7935+ return tg3_tso_bug(tp, tnapi, txq, skb);
7936+
79327937 if (!skb_is_gso_v6(skb)) {
79337938 if (unlikely((ETH_HLEN + hdr_len) > 80) &&
79347939 tg3_flag(tp, TSO_BUG))
@@ -7979,6 +7984,17 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev) · 44 unmodified lines
79797984 base_flags |= tsflags << 12;
79807985 }
79817986 }
7987+ } else if (skb->ip_summed == CHECKSUM_PARTIAL) {
7988+ /* HW/FW can not correctly checksum packets that have been
7989+ * vlan encapsulated.
7990+ */
7991+ if (skb->protocol == htons(ETH_P_8021Q) ||
7992+ skb->protocol == htons(ETH_P_8021AD)) {
7993+ if (skb_checksum_help(skb))
7994+ goto drop;
7995+ } else {
7996+ base_flags |= TXD_FLAG_TCPUDP_CSUM;
7997+ }
79827998 }
79837999
79848000 if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c+27−22
@@ -6478,6 +6478,7 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent) · 6477 unmodified lines
64786478 struct port_info *pi;
64796479 bool highdma = false;
64806480 struct adapter *adapter = NULL;
6481+ void __iomem *regs;
64816482
64826483 printk_once(KERN_INFO "%s - version %s\n", DRV_DESC, DRV_VERSION);
64836484
@@ -6494,19 +6495,35 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent) · 10 unmodified lines
64946495 goto out_release_regions;
64956496 }
64966497
6498+ regs = pci_ioremap_bar(pdev, 0);
6499+ if (!regs) {
6500+ dev_err(&pdev->dev, "cannot map device registers\n");
6501+ err = -ENOMEM;
6502+ goto out_disable_device;
6503+ }
6504+
6505+ /* We control everything through one PF */
6506+ func = SOURCEPF_GET(readl(regs + PL_WHOAMI));
6507+ if (func != ent->driver_data) {
6508+ iounmap(regs);
6509+ pci_disable_device(pdev);
6510+ pci_save_state(pdev); /* to restore SR-IOV later */
6511+ goto sriov;
6512+ }
6513+
64976514 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
64986515 highdma = true;
64996516 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
65006517 if (err) {
65016518 dev_err(&pdev->dev, "unable to obtain 64-bit DMA for "
65026519 "coherent allocations\n");
6503− goto out_disable_device;
6520+ goto out_unmap_bar0;
65046521 }
65056522 } else {
65066523 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
65076524 if (err) {
65086525 dev_err(&pdev->dev, "no usable DMA configuration\n");
6509− goto out_disable_device;
6526+ goto out_unmap_bar0;
65106527 }
65116528 }
65126529
@@ -6518,7 +6535,7 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent) · 5 unmodified lines
65186535 adapter = kzalloc(sizeof(*adapter), GFP_KERNEL);
65196536 if (!adapter) {
65206537 err = -ENOMEM;
6521− goto out_disable_device;
6538+ goto out_unmap_bar0;
65226539 }
65236540
65246541 adapter->workq = create_singlethread_workqueue("cxgb4");
@@ -6530,20 +6547,7 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent) · 5 unmodified lines
65306547 /* PCI device has been enabled */
65316548 adapter->flags |= DEV_ENABLED;
65326549
6533− adapter->regs = pci_ioremap_bar(pdev, 0);
6534− if (!adapter->regs) {
6535− dev_err(&pdev->dev, "cannot map device registers\n");
6536− err = -ENOMEM;
6537− goto out_free_adapter;
6538− }
6539−
6540− /* We control everything through one PF */
6541− func = SOURCEPF_GET(readl(adapter->regs + PL_WHOAMI));
6542− if (func != ent->driver_data) {
6543− pci_save_state(pdev); /* to restore SR-IOV later */
6544− goto sriov;
6545− }
6546−
6550+ adapter->regs = regs;
65476551 adapter->pdev = pdev;
65486552 adapter->pdev_dev = &pdev->dev;
65496553 adapter->mbox = func;
@@ -6560,7 +6564,8 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent) · 10 unmodified lines
65606564
65616565 err = t4_prep_adapter(adapter);
65626566 if (err)
6563− goto out_unmap_bar0;
6567+ goto out_free_adapter;
6568+
65646569
65656570 if (!is_t4(adapter->params.chip)) {
65666571 s_qpp = QUEUESPERPAGEPF1 * adapter->fn;
@@ -6577,14 +6582,14 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent) · 10 unmodified lines
65776582 dev_err(&pdev->dev,
65786583 "Incorrect number of egress queues per page\n");
65796584 err = -EINVAL;
6580− goto out_unmap_bar0;
6585+ goto out_free_adapter;
65816586 }
65826587 adapter->bar2 = ioremap_wc(pci_resource_start(pdev, 2),
65836588 pci_resource_len(pdev, 2));
65846589 if (!adapter->bar2) {
65856590 dev_err(&pdev->dev, "cannot map device bar2 region\n");
65866591 err = -ENOMEM;
6587− goto out_unmap_bar0;
6592+ goto out_free_adapter;
65886593 }
65896594 }
65906595
@@ -6722,13 +6727,13 @@ sriov: · 131 unmodified lines
67226727 out_unmap_bar:
67236728 if (!is_t4(adapter->params.chip))
67246729 iounmap(adapter->bar2);
6725− out_unmap_bar0:
6726− iounmap(adapter->regs);
67276730 out_free_adapter:
67286731 if (adapter->workq)
67296732 destroy_workqueue(adapter->workq);
67306733
67316734 kfree(adapter);
6735+ out_unmap_bar0:
6736+ iounmap(regs);
67326737 out_disable_device:
67336738 pci_disable_pcie_error_reporting(pdev);
67346739 pci_disable_device(pdev);
drivers/net/ethernet/davicom/dm9000.c+1−1
@@ -1399,7 +1399,7 @@ static struct dm9000_plat_data *dm9000_parse_dt(struct device *dev) · 1398 unmodified lines
13991399 const void *mac_addr;
14001400
14011401 if (!IS_ENABLED(CONFIG_OF) || !np)
1402− return NULL;
1402+ return ERR_PTR(-ENXIO);
14031403
14041404 pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
14051405 if (!pdata)
drivers/net/ethernet/mellanox/mlx4/cmd.c+21−0
@@ -2389,6 +2389,22 @@ struct mlx4_slaves_pport mlx4_phys_to_slaves_pport_actv( · 2388 unmodified lines
23892389 }
23902390 EXPORT_SYMBOL_GPL(mlx4_phys_to_slaves_pport_actv);
23912391
2392+static int mlx4_slaves_closest_port(struct mlx4_dev *dev, int slave, int port)
2393+{
2394+ struct mlx4_active_ports actv_ports = mlx4_get_active_ports(dev, slave);
2395+ int min_port = find_first_bit(actv_ports.ports, dev->caps.num_ports)
2396+ + 1;
2397+ int max_port = min_port +
2398+ bitmap_weight(actv_ports.ports, dev->caps.num_ports);
2399+
2400+ if (port < min_port)
2401+ port = min_port;
2402+ else if (port >= max_port)
2403+ port = max_port - 1;
2404+
2405+ return port;
2406+}
2407+
23922408 int mlx4_set_vf_mac(struct mlx4_dev *dev, int port, int vf, u64 mac)
23932409 {
23942410 struct mlx4_priv *priv = mlx4_priv(dev);
@@ -2402,6 +2418,7 @@ int mlx4_set_vf_mac(struct mlx4_dev *dev, int port, int vf, u64 mac) · 7 unmodified lines
24022418 if (slave < 0)
24032419 return -EINVAL;
24042420
2421+ port = mlx4_slaves_closest_port(dev, slave, port);
24052422 s_info = &priv->mfunc.master.vf_admin[slave].vport[port];
24062423 s_info->mac = mac;
24072424 mlx4_info(dev, "default mac on vf %d port %d to %llX will take afect only after vf restart\n",
@@ -2428,6 +2445,7 @@ int mlx4_set_vf_vlan(struct mlx4_dev *dev, int port, int vf, u16 vlan, u8 qos) · 20 unmodified lines
24282445 if (slave < 0)
24292446 return -EINVAL;
24302447
2448+ port = mlx4_slaves_closest_port(dev, slave, port);
24312449 vf_admin = &priv->mfunc.master.vf_admin[slave].vport[port];
24322450
24332451 if ((0 == vlan) && (0 == qos))
@@ -2455,6 +2473,7 @@ bool mlx4_get_slave_default_vlan(struct mlx4_dev *dev, int port, int slave, · 21 unmodified lines
24552473 struct mlx4_priv *priv;
24562474
24572475 priv = mlx4_priv(dev);
2476+ port = mlx4_slaves_closest_port(dev, slave, port);
24582477 vp_oper = &priv->mfunc.master.vf_oper[slave].vport[port];
24592478
24602479 if (MLX4_VGT != vp_oper->state.default_vlan) {
@@ -2482,6 +2501,7 @@ int mlx4_set_vf_spoofchk(struct mlx4_dev *dev, int port, int vf, bool setting) · 21 unmodified lines
24822501 if (slave < 0)
24832502 return -EINVAL;
24842503
2504+ port = mlx4_slaves_closest_port(dev, slave, port);
24852505 s_info = &priv->mfunc.master.vf_admin[slave].vport[port];
24862506 s_info->spoofchk = setting;
24872507
@@ -2535,6 +2555,7 @@ int mlx4_set_vf_link_state(struct mlx4_dev *dev, int port, int vf, int link_stat · 47 unmodified lines
25352555 if (slave < 0)
25362556 return -EINVAL;
25372557
2558+ port = mlx4_slaves_closest_port(dev, slave, port);
25382559 switch (link_state) {
25392560 case IFLA_VF_LINK_STATE_AUTO:
25402561 /* get current link state */
drivers/net/ethernet/mellanox/mlx4/en_ethtool.c+3−0
@@ -487,6 +487,9 @@ static int mlx4_en_set_pauseparam(struct net_device *dev, · 486 unmodified lines
487487 struct mlx4_en_dev *mdev = priv->mdev;
488488 int err;
489489
490+ if (pause->autoneg)
491+ return -EINVAL;
492+
490493 priv->prof->tx_pause = pause->tx_pause != 0;
491494 priv->prof->rx_pause = pause->rx_pause != 0;
492495 err = mlx4_SET_PORT_general(mdev->dev, priv->port,
drivers/net/ethernet/mellanox/mlx4/qp.c+10−2
@@ -390,13 +390,14 @@ err_icm: · 389 unmodified lines
390390 EXPORT_SYMBOL_GPL(mlx4_qp_alloc);
391391
392392 #define MLX4_UPDATE_QP_SUPPORTED_ATTRS MLX4_UPDATE_QP_SMAC
393−int mlx4_update_qp(struct mlx4_dev *dev, struct mlx4_qp *qp,
393+int mlx4_update_qp(struct mlx4_dev *dev, u32 qpn,
394394 enum mlx4_update_qp_attr attr,
395395 struct mlx4_update_qp_params *params)
396396 {
397397 struct mlx4_cmd_mailbox *mailbox;
398398 struct mlx4_update_qp_context *cmd;
399399 u64 pri_addr_path_mask = 0;
400+ u64 qp_mask = 0;
400401 int err = 0;
401402
402403 mailbox = mlx4_alloc_cmd_mailbox(dev);
@@ -413,9 +414,16 @@ int mlx4_update_qp(struct mlx4_dev *dev, struct mlx4_qp *qp, · 10 unmodified lines
413414 cmd->qp_context.pri_path.grh_mylmc = params->smac_index;
414415 }
415416
417+ if (attr & MLX4_UPDATE_QP_VSD) {
418+ qp_mask |= 1ULL << MLX4_UPD_QP_MASK_VSD;
419+ if (params->flags & MLX4_UPDATE_QP_PARAMS_FLAGS_VSD_ENABLE)
420+ cmd->qp_context.param3 |= cpu_to_be32(MLX4_STRIP_VLAN);
421+ }
422+
416423 cmd->primary_addr_path_mask = cpu_to_be64(pri_addr_path_mask);
424+ cmd->qp_mask = cpu_to_be64(qp_mask);
417425
418− err = mlx4_cmd(dev, mailbox->dma, qp->qpn & 0xffffff, 0,
426+ err = mlx4_cmd(dev, mailbox->dma, qpn & 0xffffff, 0,
419427 MLX4_CMD_UPDATE_QP, MLX4_CMD_TIME_CLASS_A,
420428 MLX4_CMD_NATIVE);
421429
drivers/net/ethernet/mellanox/mlx4/resource_tracker.c+28−10
@@ -702,11 +702,13 @@ static int update_vport_qp_param(struct mlx4_dev *dev, · 701 unmodified lines
702702 struct mlx4_qp_context *qpc = inbox->buf + 8;
703703 struct mlx4_vport_oper_state *vp_oper;
704704 struct mlx4_priv *priv;
705+ u32 qp_type;
705706 int port;
706707
707708 port = (qpc->pri_path.sched_queue & 0x40) ? 2 : 1;
708709 priv = mlx4_priv(dev);
709710 vp_oper = &priv->mfunc.master.vf_oper[slave].vport[port];
711+ qp_type = (be32_to_cpu(qpc->flags) >> 16) & 0xff;
710712
711713 if (MLX4_VGT != vp_oper->state.default_vlan) {
712714 /* the reserved QPs (special, proxy, tunnel)
@@ -715,8 +717,20 @@ static int update_vport_qp_param(struct mlx4_dev *dev, · 2 unmodified lines
715717 if (mlx4_is_qp_reserved(dev, qpn))
716718 return 0;
717719
718− /* force strip vlan by clear vsd */
719− qpc->param3 &= ~cpu_to_be32(MLX4_STRIP_VLAN);
720+ /* force strip vlan by clear vsd, MLX QP refers to Raw Ethernet */
721+ if (qp_type == MLX4_QP_ST_UD ||
722+ (qp_type == MLX4_QP_ST_MLX && mlx4_is_eth(dev, port))) {
723+ if (dev->caps.bmme_flags & MLX4_BMME_FLAG_VSD_INIT2RTR) {
724+ *(__be32 *)inbox->buf =
725+ cpu_to_be32(be32_to_cpu(*(__be32 *)inbox->buf) |
726+ MLX4_QP_OPTPAR_VLAN_STRIPPING);
727+ qpc->param3 &= ~cpu_to_be32(MLX4_STRIP_VLAN);
728+ } else {
729+ struct mlx4_update_qp_params params = {.flags = 0};
730+
731+ mlx4_update_qp(dev, qpn, MLX4_UPDATE_QP_VSD, &params);
732+ }
733+ }
720734
721735 if (vp_oper->state.link_state == IFLA_VF_LINK_STATE_DISABLE &&
722736 dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_UPDATE_QP) {
@@ -3998,13 +4012,17 @@ int mlx4_UPDATE_QP_wrapper(struct mlx4_dev *dev, int slave, · 3275 unmodified lines
39984012 }
39994013
40004014 port = (rqp->sched_queue >> 6 & 1) + 1;
4001− smac_index = cmd->qp_context.pri_path.grh_mylmc;
4002− err = mac_find_smac_ix_in_slave(dev, slave, port,
4003− smac_index, &mac);
4004− if (err) {
4005− mlx4_err(dev, "Failed to update qpn 0x%x, MAC is invalid. smac_ix: %d\n",
4006− qpn, smac_index);
4007− goto err_mac;
4015+
4016+ if (pri_addr_path_mask & (1ULL << MLX4_UPD_QP_PATH_MASK_MAC_INDEX)) {
4017+ smac_index = cmd->qp_context.pri_path.grh_mylmc;
4018+ err = mac_find_smac_ix_in_slave(dev, slave, port,
4019+ smac_index, &mac);
4020+
4021+ if (err) {
4022+ mlx4_err(dev, "Failed to update qpn 0x%x, MAC is invalid. smac_ix: %d\n",
4023+ qpn, smac_index);
4024+ goto err_mac;
4025+ }
40084026 }
40094027
40104028 err = mlx4_cmd(dev, inbox->dma,
@@ -4818,7 +4836,7 @@ void mlx4_vf_immed_vlan_work_handler(struct work_struct *_work) · 807 unmodified lines
48184836 MLX4_VLAN_CTRL_ETH_RX_BLOCK_UNTAGGED;
48194837
48204838 upd_context = mailbox->buf;
4821− upd_context->qp_mask = cpu_to_be64(MLX4_UPD_QP_MASK_VSD);
4839+ upd_context->qp_mask = cpu_to_be64(1ULL << MLX4_UPD_QP_MASK_VSD);
48224840
48234841 spin_lock_irq(mlx4_tlock(dev));
48244842 list_for_each_entry_safe(qp, tmp, qp_list, com.list) {
drivers/net/ethernet/octeon/octeon_mgmt.c+3−1
@@ -290,9 +290,11 @@ static void octeon_mgmt_clean_tx_buffers(struct octeon_mgmt *p) · 289 unmodified lines
290290 /* Read the hardware TX timestamp if one was recorded */
291291 if (unlikely(re.s.tstamp)) {
292292 struct skb_shared_hwtstamps ts;
293+ u64 ns;
294+
293295 memset(&ts, 0, sizeof(ts));
294296 /* Read the timestamp */
295− u64 ns = cvmx_read_csr(CVMX_MIXX_TSTAMP(p->port));
297+ ns = cvmx_read_csr(CVMX_MIXX_TSTAMP(p->port));
296298 /* Remove the timestamp from the FIFO */
297299 cvmx_write_csr(CVMX_MIXX_TSCTL(p->port), 0);
298300 /* Tell the kernel about the timestamp */
drivers/net/ethernet/oki-semi/pch_gbe/Kconfig+1−0
@@ -7,6 +7,7 @@ config PCH_GBE · 6 unmodified lines
77 depends on PCI && (X86_32 || COMPILE_TEST)
88 select MII
99 select PTP_1588_CLOCK_PCH
10+ select NET_PTP_CLASSIFY
1011 ---help---
1112 This is a gigabit ethernet driver for EG20T PCH.
1213 EG20T PCH is the platform controller hub that is used in Intel's
drivers/net/ethernet/realtek/r8169.c+33−34
@@ -1783,33 +1783,31 @@ static void __rtl8169_set_features(struct net_device *dev, · 1782 unmodified lines
17831783 netdev_features_t features)
17841784 {
17851785 struct rtl8169_private *tp = netdev_priv(dev);
1786− netdev_features_t changed = features ^ dev->features;
17871786 void __iomem *ioaddr = tp->mmio_addr;
1787+ u32 rx_config;
17881788
1789− if (!(changed & (NETIF_F_RXALL | NETIF_F_RXCSUM |
1790− NETIF_F_HW_VLAN_CTAG_RX)))
1791− return;
1789+ rx_config = RTL_R32(RxConfig);
1790+ if (features & NETIF_F_RXALL)
1791+ rx_config |= (AcceptErr | AcceptRunt);
1792+ else
1793+ rx_config &= ~(AcceptErr | AcceptRunt);
17921794
1793− if (changed & (NETIF_F_RXCSUM | NETIF_F_HW_VLAN_CTAG_RX)) {
1794− if (features & NETIF_F_RXCSUM)
1795− tp->cp_cmd |= RxChkSum;
1796− else
1797− tp->cp_cmd &= ~RxChkSum;
1795+ RTL_W32(RxConfig, rx_config);
17981796
1799− if (dev->features & NETIF_F_HW_VLAN_CTAG_RX)
1800− tp->cp_cmd |= RxVlan;
1801− else
1802− tp->cp_cmd &= ~RxVlan;
1797+ if (features & NETIF_F_RXCSUM)
1798+ tp->cp_cmd |= RxChkSum;
1799+ else
1800+ tp->cp_cmd &= ~RxChkSum;
18031801
1804− RTL_W16(CPlusCmd, tp->cp_cmd);
1805− RTL_R16(CPlusCmd);
1806− }
1807− if (changed & NETIF_F_RXALL) {
1808− int tmp = (RTL_R32(RxConfig) & ~(AcceptErr | AcceptRunt));
1809− if (features & NETIF_F_RXALL)
1810− tmp |= (AcceptErr | AcceptRunt);
1811− RTL_W32(RxConfig, tmp);
1812− }
1802+ if (features & NETIF_F_HW_VLAN_CTAG_RX)
1803+ tp->cp_cmd |= RxVlan;
1804+ else
1805+ tp->cp_cmd &= ~RxVlan;
1806+
1807+ tp->cp_cmd |= RTL_R16(CPlusCmd) & ~(RxVlan | RxChkSum);
1808+
1809+ RTL_W16(CPlusCmd, tp->cp_cmd);
1810+ RTL_R16(CPlusCmd);
18131811 }
18141812
18151813 static int rtl8169_set_features(struct net_device *dev,
@@ -1817,8 +1815,11 @@ static int rtl8169_set_features(struct net_device *dev, · 1 unmodified line
18171815 {
18181816 struct rtl8169_private *tp = netdev_priv(dev);
18191817
1818+ features &= NETIF_F_RXALL | NETIF_F_RXCSUM | NETIF_F_HW_VLAN_CTAG_RX;
1819+
18201820 rtl_lock_work(tp);
1821− __rtl8169_set_features(dev, features);
1821+ if (features ^ dev->features)
1822+ __rtl8169_set_features(dev, features);
18221823 rtl_unlock_work(tp);
18231824
18241825 return 0;
@@ -7118,8 +7119,7 @@ static void rtl_hw_initialize(struct rtl8169_private *tp) · 5293 unmodified lines
71187119 }
71197120 }
71207121
7121−static int
7122−rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
7122+static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
71237123 {
71247124 const struct rtl_cfg_info *cfg = rtl_cfg_infos + ent->driver_data;
71257125 const unsigned int region = cfg->region;
@@ -7194,7 +7194,7 @@ rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) · 68 unmodified lines
71947194 goto err_out_mwi_2;
71957195 }
71967196
7197− tp->cp_cmd = RxChkSum;
7197+ tp->cp_cmd = 0;
71987198
71997199 if ((sizeof(dma_addr_t) > 4) &&
72007200 !pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) && use_dac) {
@@ -7235,13 +7235,6 @@ rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) · 34 unmodified lines
72357235
72367236 pci_set_master(pdev);
72377237
7238− /*
7239− * Pretend we are using VLANs; This bypasses a nasty bug where
7240− * Interrupts stop flowing on high load on 8110SCd controllers.
7241− */
7242− if (tp->mac_version == RTL_GIGA_MAC_VER_05)
7243− tp->cp_cmd |= RxVlan;
7244−
72457238 rtl_init_mdio_ops(tp);
72467239 rtl_init_pll_power_ops(tp);
72477240 rtl_init_jumbo_ops(tp);
@@ -7302,8 +7295,14 @@ rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) · 54 unmodified lines
73027295 dev->vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO |
73037296 NETIF_F_HIGHDMA;
73047297
7298+ tp->cp_cmd |= RxChkSum | RxVlan;
7299+
7300+ /*
7301+ * Pretend we are using VLANs; This bypasses a nasty bug where
7302+ * Interrupts stop flowing on high load on 8110SCd controllers.
7303+ */
73057304 if (tp->mac_version == RTL_GIGA_MAC_VER_05)
7306− /* 8110SCd requires hardware Rx VLAN - disallow toggling */
7305+ /* Disallow toggling */
73077306 dev->hw_features &= ~NETIF_F_HW_VLAN_CTAG_RX;
73087307
73097308 if (tp->txd_version == RTL_TD_0)
drivers/net/ethernet/sfc/farch.c+3−0
@@ -2933,6 +2933,9 @@ void efx_farch_filter_sync_rx_mode(struct efx_nic *efx) · 2932 unmodified lines
29332933 u32 crc;
29342934 int bit;
29352935
2936+ if (!efx_dev_registered(efx))
2937+ return;
2938+
29362939 netif_addr_lock_bh(net_dev);
29372940
29382941 efx->unicast_filter = !(net_dev->flags & IFF_PROMISC);
drivers/net/ethernet/sun/sunvnet.c+5−2
@@ -350,14 +350,17 @@ static int vnet_walk_rx_one(struct vnet_port *port, · 349 unmodified lines
350350 if (IS_ERR(desc))
351351 return PTR_ERR(desc);
352352
353+ if (desc->hdr.state != VIO_DESC_READY)
354+ return 1;
355+
356+ rmb();
357+
353358 viodbg(DATA, "vio_walk_rx_one desc[%02x:%02x:%08x:%08x:%llx:%llx]\n",
354359 desc->hdr.state, desc->hdr.ack,
355360 desc->size, desc->ncookies,
356361 desc->cookies[0].cookie_addr,
357362 desc->cookies[0].cookie_size);
358363
359− if (desc->hdr.state != VIO_DESC_READY)
360− return 1;
361364 err = vnet_rx_one(port, desc->size, desc->cookies, desc->ncookies);
362365 if (err == -ECONNRESET)
363366 return err;
drivers/net/ethernet/ti/cpsw.c+47−5
@@ -699,6 +699,28 @@ static void cpsw_rx_handler(void *token, int len, int status) · 698 unmodified lines
699699 cpsw_dual_emac_src_port_detect(status, priv, ndev, skb);
700700
701701 if (unlikely(status < 0) || unlikely(!netif_running(ndev))) {
702+ bool ndev_status = false;
703+ struct cpsw_slave *slave = priv->slaves;
704+ int n;
705+
706+ if (priv->data.dual_emac) {
707+ /* In dual emac mode check for all interfaces */
708+ for (n = priv->data.slaves; n; n--, slave++)
709+ if (netif_running(slave->ndev))
710+ ndev_status = true;
711+ }
712+
713+ if (ndev_status && (status >= 0)) {
714+ /* The packet received is for the interface which
715+ * is already down and the other interface is up
716+ * and running, intead of freeing which results
717+ * in reducing of the number of rx descriptor in
718+ * DMA engine, requeue skb back to cpdma.
719+ */
720+ new_skb = skb;
721+ goto requeue;
722+ }
723+
702724 /* the interface is going down, skbs are purged */
703725 dev_kfree_skb_any(skb);
704726 return;
@@ -717,6 +739,7 @@ static void cpsw_rx_handler(void *token, int len, int status) · 12 unmodified lines
717739 new_skb = skb;
718740 }
719741
742+requeue:
720743 ret = cpdma_chan_submit(priv->rxch, new_skb, new_skb->data,
721744 skb_tailroom(new_skb), 0);
722745 if (WARN_ON(ret < 0))
@@ -2311,10 +2334,19 @@ static int cpsw_suspend(struct device *dev) · 1588 unmodified lines
23112334 struct net_device *ndev = platform_get_drvdata(pdev);
23122335 struct cpsw_priv *priv = netdev_priv(ndev);
23132336
2314− if (netif_running(ndev))
2315− cpsw_ndo_stop(ndev);
2337+ if (priv->data.dual_emac) {
2338+ int i;
23162339
2317− for_each_slave(priv, soft_reset_slave);
2340+ for (i = 0; i < priv->data.slaves; i++) {
2341+ if (netif_running(priv->slaves[i].ndev))
2342+ cpsw_ndo_stop(priv->slaves[i].ndev);
2343+ soft_reset_slave(priv->slaves + i);
2344+ }
2345+ } else {
2346+ if (netif_running(ndev))
2347+ cpsw_ndo_stop(ndev);
2348+ for_each_slave(priv, soft_reset_slave);
2349+ }
23182350
23192351 pm_runtime_put_sync(&pdev->dev);
23202352
@@ -2328,14 +2360,24 @@ static int cpsw_resume(struct device *dev) · 7 unmodified lines
23282360 {
23292361 struct platform_device *pdev = to_platform_device(dev);
23302362 struct net_device *ndev = platform_get_drvdata(pdev);
2363+ struct cpsw_priv *priv = netdev_priv(ndev);
23312364
23322365 pm_runtime_get_sync(&pdev->dev);
23332366
23342367 /* Select default pin state */
23352368 pinctrl_pm_select_default_state(&pdev->dev);
23362369
2337− if (netif_running(ndev))
2338− cpsw_ndo_open(ndev);
2370+ if (priv->data.dual_emac) {
2371+ int i;
2372+
2373+ for (i = 0; i < priv->data.slaves; i++) {
2374+ if (netif_running(priv->slaves[i].ndev))
2375+ cpsw_ndo_open(priv->slaves[i].ndev);
2376+ }
2377+ } else {
2378+ if (netif_running(ndev))
2379+ cpsw_ndo_open(ndev);
2380+ }
23392381 return 0;
23402382 }
23412383
drivers/net/macvlan.c+3−1
@@ -36,6 +36,7 @@ · 35 unmodified lines
3636 #include <linux/netpoll.h>
3737
3838 #define MACVLAN_HASH_SIZE (1 << BITS_PER_BYTE)
39+#define MACVLAN_BC_QUEUE_LEN 1000
3940
4041 struct macvlan_port {
4142 struct net_device *dev;
@@ -248,7 +249,7 @@ static void macvlan_broadcast_enqueue(struct macvlan_port *port, · 206 unmodified lines
248249 goto err;
249250
250251 spin_lock(&port->bc_queue.lock);
251− if (skb_queue_len(&port->bc_queue) < skb->dev->tx_queue_len) {
252+ if (skb_queue_len(&port->bc_queue) < MACVLAN_BC_QUEUE_LEN) {
252253 __skb_queue_tail(&port->bc_queue, nskb);
253254 err = 0;
254255 }
@@ -806,6 +807,7 @@ static netdev_features_t macvlan_fix_features(struct net_device *dev, · 551 unmodified lines
806807 features,
807808 mask);
808809 features |= ALWAYS_ON_FEATURES;
810+ features &= ~NETIF_F_NETNS_LOCAL;
809811
810812 return features;
811813 }
drivers/net/phy/micrel.c+1−2
@@ -592,8 +592,7 @@ static struct phy_driver ksphy_driver[] = { · 591 unmodified lines
592592 .phy_id = PHY_ID_KSZ9031,
593593 .phy_id_mask = 0x00fffff0,
594594 .name = "Micrel KSZ9031 Gigabit PHY",
595− .features = (PHY_GBIT_FEATURES | SUPPORTED_Pause
596− | SUPPORTED_Asym_Pause),
595+ .features = (PHY_GBIT_FEATURES | SUPPORTED_Pause),
597596 .flags = PHY_HAS_MAGICANEG | PHY_HAS_INTERRUPT,
598597 .config_init = ksz9031_config_init,
599598 .config_aneg = genphy_config_aneg,
drivers/net/usb/r8152.c+45−17
@@ -2019,7 +2019,7 @@ static int rtl8153_enable(struct r8152 *tp) · 2018 unmodified lines
20192019 return rtl_enable(tp);
20202020 }
20212021
2022−static void rtl8152_disable(struct r8152 *tp)
2022+static void rtl_disable(struct r8152 *tp)
20232023 {
20242024 u32 ocp_data;
20252025 int i;
@@ -2232,6 +2232,13 @@ static inline void r8152b_enable_aldps(struct r8152 *tp) · 206 unmodified lines
22322232 LINKENA | DIS_SDSAVE);
22332233 }
22342234
2235+static void rtl8152_disable(struct r8152 *tp)
2236+{
2237+ r8152b_disable_aldps(tp);
2238+ rtl_disable(tp);
2239+ r8152b_enable_aldps(tp);
2240+}
2241+
22352242 static void r8152b_hw_phy_cfg(struct r8152 *tp)
22362243 {
22372244 u16 data;
@@ -2242,11 +2249,8 @@ static void r8152b_hw_phy_cfg(struct r8152 *tp) · 4 unmodified lines
22422249 r8152_mdio_write(tp, MII_BMCR, data);
22432250 }
22442251
2245− r8152b_disable_aldps(tp);
2246−
22472252 rtl_clear_bp(tp);
22482253
2249− r8152b_enable_aldps(tp);
22502254 set_bit(PHY_RESET, &tp->flags);
22512255 }
22522256
@@ -2255,9 +2259,6 @@ static void r8152b_exit_oob(struct r8152 *tp) · 2 unmodified lines
22552259 u32 ocp_data;
22562260 int i;
22572261
2258− if (test_bit(RTL8152_UNPLUG, &tp->flags))
2259− return;
2260−
22612262 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
22622263 ocp_data &= ~RCR_ACPT_ALL;
22632264 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
@@ -2347,7 +2348,7 @@ static void r8152b_enter_oob(struct r8152 *tp) · 83 unmodified lines
23472348 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_OOB);
23482349 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_OOB);
23492350
2350− rtl8152_disable(tp);
2351+ rtl_disable(tp);
23512352
23522353 for (i = 0; i < 1000; i++) {
23532354 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
@@ -2485,9 +2486,6 @@ static void r8153_first_init(struct r8152 *tp) · 131 unmodified lines
24852486 u32 ocp_data;
24862487 int i;
24872488
2488− if (test_bit(RTL8152_UNPLUG, &tp->flags))
2489− return;
2490−
24912489 rxdy_gated_en(tp, true);
24922490 r8153_teredo_off(tp);
24932491
@@ -2560,7 +2558,7 @@ static void r8153_enter_oob(struct r8152 *tp) · 66 unmodified lines
25602558 ocp_data &= ~NOW_IS_OOB;
25612559 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data);
25622560
2563− rtl8152_disable(tp);
2561+ rtl_disable(tp);
25642562
25652563 for (i = 0; i < 1000; i++) {
25662564 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
@@ -2624,6 +2622,13 @@ static void r8153_enable_aldps(struct r8152 *tp) · 57 unmodified lines
26242622 ocp_reg_write(tp, OCP_POWER_CFG, data);
26252623 }
26262624
2625+static void rtl8153_disable(struct r8152 *tp)
2626+{
2627+ r8153_disable_aldps(tp);
2628+ rtl_disable(tp);
2629+ r8153_enable_aldps(tp);
2630+}
2631+
26272632 static int rtl8152_set_speed(struct r8152 *tp, u8 autoneg, u16 speed, u8 duplex)
26282633 {
26292634 u16 bmcr, anar, gbcr;
@@ -2714,6 +2719,16 @@ out: · 84 unmodified lines
27142719 return ret;
27152720 }
27162721
2722+static void rtl8152_up(struct r8152 *tp)
2723+{
2724+ if (test_bit(RTL8152_UNPLUG, &tp->flags))
2725+ return;
2726+
2727+ r8152b_disable_aldps(tp);
2728+ r8152b_exit_oob(tp);
2729+ r8152b_enable_aldps(tp);
2730+}
2731+
27172732 static void rtl8152_down(struct r8152 *tp)
27182733 {
27192734 if (test_bit(RTL8152_UNPLUG, &tp->flags)) {
@@ -2727,6 +2742,16 @@ static void rtl8152_down(struct r8152 *tp) · 7 unmodified lines
27272742 r8152b_enable_aldps(tp);
27282743 }
27292744
2745+static void rtl8153_up(struct r8152 *tp)
2746+{
2747+ if (test_bit(RTL8152_UNPLUG, &tp->flags))
2748+ return;
2749+
2750+ r8153_disable_aldps(tp);
2751+ r8153_first_init(tp);
2752+ r8153_enable_aldps(tp);
2753+}
2754+
27302755 static void rtl8153_down(struct r8152 *tp)
27312756 {
27322757 if (test_bit(RTL8152_UNPLUG, &tp->flags)) {
@@ -2946,6 +2971,8 @@ static void r8152b_init(struct r8152 *tp) · 213 unmodified lines
29462971 if (test_bit(RTL8152_UNPLUG, &tp->flags))
29472972 return;
29482973
2974+ r8152b_disable_aldps(tp);
2975+
29492976 if (tp->version == RTL_VER_01) {
29502977 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE);
29512978 ocp_data &= ~LED_MODE_MASK;
@@ -2984,6 +3011,7 @@ static void r8153_init(struct r8152 *tp) · 32 unmodified lines
29843011 if (test_bit(RTL8152_UNPLUG, &tp->flags))
29853012 return;
29863013
3014+ r8153_disable_aldps(tp);
29873015 r8153_u1u2en(tp, false);
29883016
29893017 for (i = 0; i < 500; i++) {
@@ -3392,7 +3420,7 @@ static int rtl_ops_init(struct r8152 *tp, const struct usb_device_id *id) · 402 unmodified lines
33923420 ops->init = r8152b_init;
33933421 ops->enable = rtl8152_enable;
33943422 ops->disable = rtl8152_disable;
3395− ops->up = r8152b_exit_oob;
3423+ ops->up = rtl8152_up;
33963424 ops->down = rtl8152_down;
33973425 ops->unload = rtl8152_unload;
33983426 ret = 0;
@@ -3400,8 +3428,8 @@ static int rtl_ops_init(struct r8152 *tp, const struct usb_device_id *id) · 1 unmodified line
34003428 case PRODUCT_ID_RTL8153:
34013429 ops->init = r8153_init;
34023430 ops->enable = rtl8153_enable;
3403− ops->disable = rtl8152_disable;
3404− ops->up = r8153_first_init;
3431+ ops->disable = rtl8153_disable;
3432+ ops->up = rtl8153_up;
34053433 ops->down = rtl8153_down;
34063434 ops->unload = rtl8153_unload;
34073435 ret = 0;
@@ -3416,8 +3444,8 @@ static int rtl_ops_init(struct r8152 *tp, const struct usb_device_id *id) · 8 unmodified lines
34163444 case PRODUCT_ID_SAMSUNG:
34173445 ops->init = r8153_init;
34183446 ops->enable = rtl8153_enable;
3419− ops->disable = rtl8152_disable;
3420− ops->up = r8153_first_init;
3447+ ops->disable = rtl8153_disable;
3448+ ops->up = rtl8153_up;
34213449 ops->down = rtl8153_down;
34223450 ops->unload = rtl8153_unload;
34233451 ret = 0;
drivers/net/wireless/ath/ath9k/common-beacon.c+2−3
@@ -57,7 +57,7 @@ int ath9k_cmn_beacon_config_sta(struct ath_hw *ah, · 56 unmodified lines
5757 struct ath9k_beacon_state *bs)
5858 {
5959 struct ath_common *common = ath9k_hw_common(ah);
60− int dtim_intval, sleepduration;
60+ int dtim_intval;
6161 u64 tsf;
6262
6363 /* No need to configure beacon if we are not associated */
@@ -75,7 +75,6 @@ int ath9k_cmn_beacon_config_sta(struct ath_hw *ah, · 11 unmodified lines
7575 * last beacon we received (which may be none).
7676 */
7777 dtim_intval = conf->intval * conf->dtim_period;
78− sleepduration = ah->hw->conf.listen_interval * conf->intval;
7978
8079 /*
8180 * Pull nexttbtt forward to reflect the current
@@ -113,7 +112,7 @@ int ath9k_cmn_beacon_config_sta(struct ath_hw *ah, · 31 unmodified lines
113112 */
114113
115114 bs->bs_sleepduration = TU_TO_USEC(roundup(IEEE80211_MS_TO_TU(100),
116− sleepduration));
115+ conf->intval));
117116 if (bs->bs_sleepduration > bs->bs_dtimperiod)
118117 bs->bs_sleepduration = bs->bs_dtimperiod;
119118
drivers/net/wireless/ath/ath9k/htc_drv_txrx.c+1−1
@@ -978,7 +978,7 @@ static bool ath9k_rx_prepare(struct ath9k_htc_priv *priv, · 977 unmodified lines
978978 struct ath_hw *ah = common->ah;
979979 struct ath_htc_rx_status *rxstatus;
980980 struct ath_rx_status rx_stats;
981− bool decrypt_error;
981+ bool decrypt_error = false;
982982
983983 if (skb->len < HTC_RX_FRAME_HEADER_SIZE) {
984984 ath_err(common, "Corrupted RX frame, dropping (len: %d)\n",
drivers/net/wireless/brcm80211/Kconfig+10−0
@@ -27,10 +27,17 @@ config BRCMFMAC · 26 unmodified lines
2727 one of the bus interface support. If you choose to build a module,
2828 it'll be called brcmfmac.ko.
2929
30+config BRCMFMAC_PROTO_BCDC
31+ bool
32+
33+config BRCMFMAC_PROTO_MSGBUF
34+ bool
35+
3036 config BRCMFMAC_SDIO
3137 bool "SDIO bus interface support for FullMAC driver"
3238 depends on (MMC = y || MMC = BRCMFMAC)
3339 depends on BRCMFMAC
40+ select BRCMFMAC_PROTO_BCDC
3441 select FW_LOADER
3542 default y
3643 ---help---
@@ -42,6 +49,7 @@ config BRCMFMAC_USB · 5 unmodified lines
4249 bool "USB bus interface support for FullMAC driver"
4350 depends on (USB = y || USB = BRCMFMAC)
4451 depends on BRCMFMAC
52+ select BRCMFMAC_PROTO_BCDC
4553 select FW_LOADER
4654 ---help---
4755 This option enables the USB bus interface support for Broadcom
@@ -52,6 +60,8 @@ config BRCMFMAC_PCIE · 4 unmodified lines
5260 bool "PCIE bus interface support for FullMAC driver"
5361 depends on BRCMFMAC
5462 depends on PCI
63+ depends on HAS_DMA
64+ select BRCMFMAC_PROTO_MSGBUF
5565 select FW_LOADER
5666 ---help---
5767 This option enables the PCIE bus interface support for Broadcom
drivers/net/wireless/brcm80211/brcmfmac/Makefile+6−4
@@ -30,16 +30,18 @@ brcmfmac-objs += \ · 29 unmodified lines
3030 fwsignal.o \
3131 p2p.o \
3232 proto.o \
33− bcdc.o \
34− commonring.o \
35− flowring.o \
36− msgbuf.o \
3733 dhd_common.o \
3834 dhd_linux.o \
3935 firmware.o \
4036 feature.o \
4137 btcoex.o \
4238 vendor.o
39+brcmfmac-$(CONFIG_BRCMFMAC_PROTO_BCDC) += \
40+ bcdc.o
41+brcmfmac-$(CONFIG_BRCMFMAC_PROTO_MSGBUF) += \
42+ commonring.o \
43+ flowring.o \
44+ msgbuf.o
4345 brcmfmac-$(CONFIG_BRCMFMAC_SDIO) += \
4446 dhd_sdio.o \
4547 bcmsdh.o
drivers/net/wireless/brcm80211/brcmfmac/bcdc.h+5−2
@@ -16,9 +16,12 @@ · 15 unmodified lines
1616 #ifndef BRCMFMAC_BCDC_H
1717 #define BRCMFMAC_BCDC_H
1818
19−
19+#ifdef CONFIG_BRCMFMAC_PROTO_BCDC
2020 int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr);
2121 void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr);
22−
22+#else
23+static inline int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr) { return 0; }
24+static inline void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr) {}
25+#endif
2326
2427 #endif /* BRCMFMAC_BCDC_H */
drivers/net/wireless/brcm80211/brcmfmac/fweh.c+9−3
@@ -185,7 +185,13 @@ static void brcmf_fweh_handle_if_event(struct brcmf_pub *drvr, · 184 unmodified lines
185185 ifevent->action, ifevent->ifidx, ifevent->bssidx,
186186 ifevent->flags, ifevent->role);
187187
188− if (ifevent->flags & BRCMF_E_IF_FLAG_NOIF) {
188+ /* The P2P Device interface event must not be ignored
189+ * contrary to what firmware tells us. The only way to
190+ * distinguish the P2P Device is by looking at the ifidx
191+ * and bssidx received.
192+ */
193+ if (!(ifevent->ifidx == 0 && ifevent->bssidx == 1) &&
194+ (ifevent->flags & BRCMF_E_IF_FLAG_NOIF)) {
189195 brcmf_dbg(EVENT, "event can be ignored\n");
190196 return;
191197 }
@@ -210,12 +216,12 @@ static void brcmf_fweh_handle_if_event(struct brcmf_pub *drvr, · 18 unmodified lines
210216 return;
211217 }
212218
213− if (ifevent->action == BRCMF_E_IF_CHANGE)
219+ if (ifp && ifevent->action == BRCMF_E_IF_CHANGE)
214220 brcmf_fws_reset_interface(ifp);
215221
216222 err = brcmf_fweh_call_event_handler(ifp, emsg->event_code, emsg, data);
217223
218− if (ifevent->action == BRCMF_E_IF_DEL) {
224+ if (ifp && ifevent->action == BRCMF_E_IF_DEL) {
219225 brcmf_fws_del_interface(ifp);
220226 brcmf_del_if(drvr, ifevent->bssidx);
221227 }
drivers/net/wireless/brcm80211/brcmfmac/fweh.h+2−0
@@ -172,6 +172,8 @@ enum brcmf_fweh_event_code { · 171 unmodified lines
172172 #define BRCMF_E_IF_ROLE_STA 0
173173 #define BRCMF_E_IF_ROLE_AP 1
174174 #define BRCMF_E_IF_ROLE_WDS 2
175+#define BRCMF_E_IF_ROLE_P2P_GO 3
176+#define BRCMF_E_IF_ROLE_P2P_CLIENT 4
175177
176178 /**
177179 * definitions for event packet validation.
drivers/net/wireless/brcm80211/brcmfmac/msgbuf.h+9−2
@@ -15,6 +15,7 @@ · 14 unmodified lines
1515 #ifndef BRCMFMAC_MSGBUF_H
1616 #define BRCMFMAC_MSGBUF_H
1717
18+#ifdef CONFIG_BRCMFMAC_PROTO_MSGBUF
1819
1920 #define BRCMF_H2D_MSGRING_CONTROL_SUBMIT_MAX_ITEM 20
2021 #define BRCMF_H2D_MSGRING_RXPOST_SUBMIT_MAX_ITEM 256
@@ -32,9 +33,15 @@ · 11 unmodified lines
3233
3334
3435 int brcmf_proto_msgbuf_rx_trigger(struct device *dev);
36+void brcmf_msgbuf_delete_flowring(struct brcmf_pub *drvr, u8 flowid);
3537 int brcmf_proto_msgbuf_attach(struct brcmf_pub *drvr);
3638 void brcmf_proto_msgbuf_detach(struct brcmf_pub *drvr);
37−void brcmf_msgbuf_delete_flowring(struct brcmf_pub *drvr, u8 flowid);
38−
39+#else
40+static inline int brcmf_proto_msgbuf_attach(struct brcmf_pub *drvr)
41+{
42+ return 0;
43+}
44+static inline void brcmf_proto_msgbuf_detach(struct brcmf_pub *drvr) {}
45+#endif
3946
4047 #endif /* BRCMFMAC_MSGBUF_H */
drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c+7−2
@@ -497,8 +497,11 @@ brcmf_configure_arp_offload(struct brcmf_if *ifp, bool enable) · 496 unmodified lines
497497 static void
498498 brcmf_cfg80211_update_proto_addr_mode(struct wireless_dev *wdev)
499499 {
500− struct net_device *ndev = wdev->netdev;
501− struct brcmf_if *ifp = netdev_priv(ndev);
500+ struct brcmf_cfg80211_vif *vif;
501+ struct brcmf_if *ifp;
502+
503+ vif = container_of(wdev, struct brcmf_cfg80211_vif, wdev);
504+ ifp = vif->ifp;
502505
503506 if ((wdev->iftype == NL80211_IFTYPE_ADHOC) ||
504507 (wdev->iftype == NL80211_IFTYPE_AP) ||
@@ -5143,6 +5146,7 @@ static int brcmf_enable_bw40_2g(struct brcmf_cfg80211_info *cfg) · 4638 unmodified lines
51435146
51445147 ch.band = BRCMU_CHAN_BAND_2G;
51455148 ch.bw = BRCMU_CHAN_BW_40;
5149+ ch.sb = BRCMU_CHAN_SB_NONE;
51465150 ch.chnum = 0;
51475151 cfg->d11inf.encchspec(&ch);
51485152
@@ -5176,6 +5180,7 @@ static int brcmf_enable_bw40_2g(struct brcmf_cfg80211_info *cfg) · 27 unmodified lines
51765180
51775181 brcmf_update_bw40_channel_flag(&band->channels[j], &ch);
51785182 }
5183+ kfree(pbuf);
51795184 }
51805185 return err;
51815186 }
drivers/net/wireless/iwlwifi/dvm/power.c+1−1
@@ -40,7 +40,7 @@ · 39 unmodified lines
4040 #include "commands.h"
4141 #include "power.h"
4242
43−static bool force_cam;
43+static bool force_cam = true;
4444 module_param(force_cam, bool, 0644);
4545 MODULE_PARM_DESC(force_cam, "force continuously aware mode (no power saving at all)");
4646
drivers/net/wireless/iwlwifi/iwl-7000.c+16−0
@@ -83,6 +83,8 @@ · 82 unmodified lines
8383 #define IWL7260_TX_POWER_VERSION 0xffff /* meaningless */
8484 #define IWL3160_NVM_VERSION 0x709
8585 #define IWL3160_TX_POWER_VERSION 0xffff /* meaningless */
86+#define IWL3165_NVM_VERSION 0x709
87+#define IWL3165_TX_POWER_VERSION 0xffff /* meaningless */
8688 #define IWL7265_NVM_VERSION 0x0a1d
8789 #define IWL7265_TX_POWER_VERSION 0xffff /* meaningless */
8890
@@ -92,6 +94,9 @@ · 3 unmodified lines
9294 #define IWL3160_FW_PRE "iwlwifi-3160-"
9395 #define IWL3160_MODULE_FIRMWARE(api) IWL3160_FW_PRE __stringify(api) ".ucode"
9496
97+#define IWL3165_FW_PRE "iwlwifi-3165-"
98+#define IWL3165_MODULE_FIRMWARE(api) IWL3165_FW_PRE __stringify(api) ".ucode"
99+
95100 #define IWL7265_FW_PRE "iwlwifi-7265-"
96101 #define IWL7265_MODULE_FIRMWARE(api) IWL7265_FW_PRE __stringify(api) ".ucode"
97102
@@ -213,6 +218,16 @@ static const struct iwl_pwr_tx_backoff iwl7265_pwr_tx_backoffs[] = { · 115 unmodified lines
213218 {0},
214219 };
215220
221+const struct iwl_cfg iwl3165_2ac_cfg = {
222+ .name = "Intel(R) Dual Band Wireless AC 3165",
223+ .fw_name_pre = IWL3165_FW_PRE,
224+ IWL_DEVICE_7000,
225+ .ht_params = &iwl7000_ht_params,
226+ .nvm_ver = IWL3165_NVM_VERSION,
227+ .nvm_calib_ver = IWL3165_TX_POWER_VERSION,
228+ .pwr_tx_backoffs = iwl7265_pwr_tx_backoffs,
229+};
230+
216231 const struct iwl_cfg iwl7265_2ac_cfg = {
217232 .name = "Intel(R) Dual Band Wireless AC 7265",
218233 .fw_name_pre = IWL7265_FW_PRE,
@@ -245,4 +260,5 @@ const struct iwl_cfg iwl7265_n_cfg = { · 26 unmodified lines
245260
246261 MODULE_FIRMWARE(IWL7260_MODULE_FIRMWARE(IWL7260_UCODE_API_OK));
247262 MODULE_FIRMWARE(IWL3160_MODULE_FIRMWARE(IWL3160_UCODE_API_OK));
263+MODULE_FIRMWARE(IWL3165_MODULE_FIRMWARE(IWL3160_UCODE_API_OK));
248264 MODULE_FIRMWARE(IWL7265_MODULE_FIRMWARE(IWL7260_UCODE_API_OK));
drivers/net/wireless/iwlwifi/iwl-config.h+3−0
@@ -120,6 +120,8 @@ enum iwl_led_mode { · 119 unmodified lines
120120 #define IWL_LONG_WD_TIMEOUT 10000
121121 #define IWL_MAX_WD_TIMEOUT 120000
122122
123+#define IWL_DEFAULT_MAX_TX_POWER 22
124+
123125 /* Antenna presence definitions */
124126 #define ANT_NONE 0x0
125127 #define ANT_A BIT(0)
@@ -335,6 +337,7 @@ extern const struct iwl_cfg iwl7260_n_cfg; · 209 unmodified lines
335337 extern const struct iwl_cfg iwl3160_2ac_cfg;
336338 extern const struct iwl_cfg iwl3160_2n_cfg;
337339 extern const struct iwl_cfg iwl3160_n_cfg;
340+extern const struct iwl_cfg iwl3165_2ac_cfg;
338341 extern const struct iwl_cfg iwl7265_2ac_cfg;
339342 extern const struct iwl_cfg iwl7265_2n_cfg;
340343 extern const struct iwl_cfg iwl7265_n_cfg;
drivers/net/wireless/iwlwifi/iwl-nvm-parse.c+1−3
@@ -146,8 +146,6 @@ static const u8 iwl_nvm_channels_family_8000[] = { · 145 unmodified lines
146146 #define LAST_2GHZ_HT_PLUS 9
147147 #define LAST_5GHZ_HT 161
148148
149−#define DEFAULT_MAX_TX_POWER 16
150−
151149 /* rate data (static) */
152150 static struct ieee80211_rate iwl_cfg80211_rates[] = {
153151 { .bitrate = 1 * 10, .hw_value = 0, .hw_value_short = 0, },
@@ -295,7 +293,7 @@ static int iwl_init_channel_map(struct device *dev, const struct iwl_cfg *cfg, · 141 unmodified lines
295293 * Default value - highest tx power value. max_power
296294 * is not used in mvm, and is used for backwards compatibility
297295 */
298− channel->max_power = DEFAULT_MAX_TX_POWER;
296+ channel->max_power = IWL_DEFAULT_MAX_TX_POWER;
299297 is_5ghz = channel->band == IEEE80211_BAND_5GHZ;
300298 IWL_DEBUG_EEPROM(dev,
301299 "Ch. %d [%sGHz] %s%s%s%s%s%s%s(0x%02x %ddBm): Ad-Hoc %ssupported\n",
drivers/net/wireless/iwlwifi/mvm/coex.c+3−6
@@ -585,8 +585,6 @@ int iwl_send_bt_init_conf(struct iwl_mvm *mvm) · 584 unmodified lines
585585 lockdep_assert_held(&mvm->mutex);
586586
587587 if (unlikely(mvm->bt_force_ant_mode != BT_FORCE_ANT_DIS)) {
588− u32 mode;
589−
590588 switch (mvm->bt_force_ant_mode) {
591589 case BT_FORCE_ANT_BT:
592590 mode = BT_COEX_BT;
@@ -756,7 +754,8 @@ static void iwl_mvm_bt_notif_iterator(void *_data, u8 *mac, · 163 unmodified lines
756754 struct iwl_bt_iterator_data *data = _data;
757755 struct iwl_mvm *mvm = data->mvm;
758756 struct ieee80211_chanctx_conf *chanctx_conf;
759− enum ieee80211_smps_mode smps_mode;
757+ /* default smps_mode is AUTOMATIC - only used for client modes */
758+ enum ieee80211_smps_mode smps_mode = IEEE80211_SMPS_AUTOMATIC;
760759 u32 bt_activity_grading;
761760 int ave_rssi;
762761
@@ -764,8 +763,6 @@ static void iwl_mvm_bt_notif_iterator(void *_data, u8 *mac, · 1 unmodified line
764763
765764 switch (vif->type) {
766765 case NL80211_IFTYPE_STATION:
767− /* default smps_mode for BSS / P2P client is AUTOMATIC */
768− smps_mode = IEEE80211_SMPS_AUTOMATIC;
769766 break;
770767 case NL80211_IFTYPE_AP:
771768 if (!mvmvif->ap_ibss_active)
@@ -797,7 +794,7 @@ static void iwl_mvm_bt_notif_iterator(void *_data, u8 *mac, · 25 unmodified lines
797794 else if (bt_activity_grading >= BT_LOW_TRAFFIC)
798795 smps_mode = IEEE80211_SMPS_DYNAMIC;
799796
800− /* relax SMPS contraints for next association */
797+ /* relax SMPS constraints for next association */
801798 if (!vif->bss_conf.assoc)
802799 smps_mode = IEEE80211_SMPS_AUTOMATIC;
803800
drivers/net/wireless/iwlwifi/mvm/debugfs-vif.c+1−2
@@ -74,8 +74,7 @@ static void iwl_dbgfs_update_pm(struct iwl_mvm *mvm, · 73 unmodified lines
7474
7575 switch (param) {
7676 case MVM_DEBUGFS_PM_KEEP_ALIVE: {
77− struct ieee80211_hw *hw = mvm->hw;
78− int dtimper = hw->conf.ps_dtim_period ?: 1;
77+ int dtimper = vif->bss_conf.dtim_period ?: 1;
7978 int dtimper_msec = dtimper * vif->bss_conf.beacon_int;
8079
8180 IWL_DEBUG_POWER(mvm, "debugfs: set keep_alive= %d sec\n", val);
drivers/net/wireless/iwlwifi/mvm/fw-api.h+2−2
@@ -1563,14 +1563,14 @@ enum iwl_sf_scenario { · 1562 unmodified lines
15631563
15641564 /**
15651565 * Smart Fifo configuration command.
1566− * @state: smart fifo state, types listed in iwl_sf_sate.
1566+ * @state: smart fifo state, types listed in enum %iwl_sf_sate.
15671567 * @watermark: Minimum allowed availabe free space in RXF for transient state.
15681568 * @long_delay_timeouts: aging and idle timer values for each scenario
15691569 * in long delay state.
15701570 * @full_on_timeouts: timer values for each scenario in full on state.
15711571 */
15721572 struct iwl_sf_cfg_cmd {
1573− enum iwl_sf_state state;
1573+ __le32 state;
15741574 __le32 watermark[SF_TRANSIENT_STATES_NUMBER];
15751575 __le32 long_delay_timeouts[SF_NUM_SCENARIO][SF_NUM_TIMEOUT_TYPES];
15761576 __le32 full_on_timeouts[SF_NUM_SCENARIO][SF_NUM_TIMEOUT_TYPES];
drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c+5−5
@@ -721,11 +721,6 @@ static int iwl_mvm_mac_ctxt_cmd_sta(struct iwl_mvm *mvm, · 720 unmodified lines
721721 !force_assoc_off) {
722722 u32 dtim_offs;
723723
724− /* Allow beacons to pass through as long as we are not
725− * associated, or we do not have dtim period information.
726− */
727− cmd.filter_flags |= cpu_to_le32(MAC_FILTER_IN_BEACON);
728−
729724 /*
730725 * The DTIM count counts down, so when it is N that means N
731726 * more beacon intervals happen until the DTIM TBTT. Therefore
@@ -759,6 +754,11 @@ static int iwl_mvm_mac_ctxt_cmd_sta(struct iwl_mvm *mvm, · 27 unmodified lines
759754 ctxt_sta->is_assoc = cpu_to_le32(1);
760755 } else {
761756 ctxt_sta->is_assoc = cpu_to_le32(0);
757+
758+ /* Allow beacons to pass through as long as we are not
759+ * associated, or we do not have dtim period information.
760+ */
761+ cmd.filter_flags |= cpu_to_le32(MAC_FILTER_IN_BEACON);
762762 }
763763
764764 ctxt_sta->bi = cpu_to_le32(vif->bss_conf.beacon_int);
drivers/net/wireless/iwlwifi/mvm/mac80211.c+14−11
@@ -396,12 +396,14 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm) · 395 unmodified lines
396396 else
397397 hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
398398
399− /* TODO: enable that only for firmwares that don't crash */
400− /* hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_SCHED_SCAN; */
401− hw->wiphy->max_sched_scan_ssids = PROBE_OPTION_MAX;
402− hw->wiphy->max_match_sets = IWL_SCAN_MAX_PROFILES;
403− /* we create the 802.11 header and zero length SSID IE. */
404− hw->wiphy->max_sched_scan_ie_len = SCAN_OFFLOAD_PROBE_REQ_SIZE - 24 - 2;
399+ if (IWL_UCODE_API(mvm->fw->ucode_ver) >= 10) {
400+ hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_SCHED_SCAN;
401+ hw->wiphy->max_sched_scan_ssids = PROBE_OPTION_MAX;
402+ hw->wiphy->max_match_sets = IWL_SCAN_MAX_PROFILES;
403+ /* we create the 802.11 header and zero length SSID IE. */
404+ hw->wiphy->max_sched_scan_ie_len =
405+ SCAN_OFFLOAD_PROBE_REQ_SIZE - 24 - 2;
406+ }
405407
406408 hw->wiphy->features |= NL80211_FEATURE_P2P_GO_CTWIN |
407409 NL80211_FEATURE_LOW_PRIORITY_SCAN |
@@ -1524,11 +1526,6 @@ static void iwl_mvm_bss_info_changed_station(struct iwl_mvm *mvm, · 1116 unmodified lines
15241526 */
15251527 iwl_mvm_remove_time_event(mvm, mvmvif,
15261528 &mvmvif->time_event_data);
1527− } else if (changes & (BSS_CHANGED_PS | BSS_CHANGED_P2P_PS |
1528− BSS_CHANGED_QOS)) {
1529− ret = iwl_mvm_power_update_mac(mvm);
1530− if (ret)
1531− IWL_ERR(mvm, "failed to update power mode\n");
15321529 }
15331530
15341531 if (changes & BSS_CHANGED_BEACON_INFO) {
@@ -1536,6 +1533,12 @@ static void iwl_mvm_bss_info_changed_station(struct iwl_mvm *mvm, · 1 unmodified line
15361533 WARN_ON(iwl_mvm_enable_beacon_filter(mvm, vif, 0));
15371534 }
15381535
1536+ if (changes & (BSS_CHANGED_PS | BSS_CHANGED_P2P_PS | BSS_CHANGED_QOS)) {
1537+ ret = iwl_mvm_power_update_mac(mvm);
1538+ if (ret)
1539+ IWL_ERR(mvm, "failed to update power mode\n");
1540+ }
1541+
15391542 if (changes & BSS_CHANGED_TXPOWER) {
15401543 IWL_DEBUG_CALIB(mvm, "Changing TX Power to %d\n",
15411544 bss_conf->txpower);
drivers/net/wireless/iwlwifi/mvm/power.c+2−3
@@ -281,7 +281,6 @@ static void iwl_mvm_power_build_cmd(struct iwl_mvm *mvm, · 280 unmodified lines
281281 struct ieee80211_vif *vif,
282282 struct iwl_mac_power_cmd *cmd)
283283 {
284− struct ieee80211_hw *hw = mvm->hw;
285284 struct ieee80211_chanctx_conf *chanctx_conf;
286285 struct ieee80211_channel *chan;
287286 int dtimper, dtimper_msec;
@@ -292,7 +291,7 @@ static void iwl_mvm_power_build_cmd(struct iwl_mvm *mvm, · 4 unmodified lines
292291
293292 cmd->id_and_color = cpu_to_le32(FW_CMD_ID_AND_COLOR(mvmvif->id,
294293 mvmvif->color));
295− dtimper = hw->conf.ps_dtim_period ?: 1;
294+ dtimper = vif->bss_conf.dtim_period;
296295
297296 /*
298297 * Regardless of power management state the driver must set
@@ -885,7 +884,7 @@ int iwl_mvm_update_d0i3_power_mode(struct iwl_mvm *mvm, · 586 unmodified lines
885884 iwl_mvm_power_build_cmd(mvm, vif, &cmd);
886885 if (enable) {
887886 /* configure skip over dtim up to 300 msec */
888− int dtimper = mvm->hw->conf.ps_dtim_period ?: 1;
887+ int dtimper = vif->bss_conf.dtim_period ?: 1;
889888 int dtimper_msec = dtimper * vif->bss_conf.beacon_int;
890889
891890 if (WARN_ON(!dtimper_msec))
drivers/net/wireless/iwlwifi/mvm/rx.c+3−3
@@ -149,13 +149,13 @@ static void iwl_mvm_get_signal_strength(struct iwl_mvm *mvm, · 148 unmodified lines
149149 le32_to_cpu(phy_info->non_cfg_phy[IWL_RX_INFO_ENERGY_ANT_ABC_IDX]);
150150 energy_a = (val & IWL_RX_INFO_ENERGY_ANT_A_MSK) >>
151151 IWL_RX_INFO_ENERGY_ANT_A_POS;
152− energy_a = energy_a ? -energy_a : -256;
152+ energy_a = energy_a ? -energy_a : S8_MIN;
153153 energy_b = (val & IWL_RX_INFO_ENERGY_ANT_B_MSK) >>
154154 IWL_RX_INFO_ENERGY_ANT_B_POS;
155− energy_b = energy_b ? -energy_b : -256;
155+ energy_b = energy_b ? -energy_b : S8_MIN;
156156 energy_c = (val & IWL_RX_INFO_ENERGY_ANT_C_MSK) >>
157157 IWL_RX_INFO_ENERGY_ANT_C_POS;
158− energy_c = energy_c ? -energy_c : -256;
158+ energy_c = energy_c ? -energy_c : S8_MIN;
159159 max_energy = max(energy_a, energy_b);
160160 max_energy = max(max_energy, energy_c);
161161
drivers/net/wireless/iwlwifi/mvm/sf.c+1−1
@@ -172,7 +172,7 @@ static int iwl_mvm_sf_config(struct iwl_mvm *mvm, u8 sta_id, · 171 unmodified lines
172172 enum iwl_sf_state new_state)
173173 {
174174 struct iwl_sf_cfg_cmd sf_cmd = {
175− .state = new_state,
175+ .state = cpu_to_le32(new_state),
176176 };
177177 struct ieee80211_sta *sta;
178178 int ret = 0;
drivers/net/wireless/iwlwifi/mvm/tx.c+6−2
@@ -168,10 +168,14 @@ static void iwl_mvm_set_tx_cmd_rate(struct iwl_mvm *mvm, · 167 unmodified lines
168168
169169 /*
170170 * for data packets, rate info comes from the table inside the fw. This
171− * table is controlled by LINK_QUALITY commands
171+ * table is controlled by LINK_QUALITY commands. Exclude ctrl port
172+ * frames like EAPOLs which should be treated as mgmt frames. This
173+ * avoids them being sent initially in high rates which increases the
174+ * chances for completion of the 4-Way handshake.
172175 */
173176
174− if (ieee80211_is_data(fc) && sta) {
177+ if (ieee80211_is_data(fc) && sta &&
178+ !(info->control.flags & IEEE80211_TX_CTRL_PORT_CTRL_PROTO)) {
175179 tx_cmd->initial_rate_index = 0;
176180 tx_cmd->tx_flags |= cpu_to_le32(TX_CMD_FLG_STA_RATE);
177181 return;
drivers/net/wireless/iwlwifi/pcie/drv.c+7−0
@@ -352,11 +352,17 @@ static const struct pci_device_id iwl_hw_card_ids[] = { · 351 unmodified lines
352352 {IWL_PCI_DEVICE(0x08B3, 0x8060, iwl3160_2n_cfg)},
353353 {IWL_PCI_DEVICE(0x08B3, 0x8062, iwl3160_n_cfg)},
354354 {IWL_PCI_DEVICE(0x08B4, 0x8270, iwl3160_2ac_cfg)},
355+ {IWL_PCI_DEVICE(0x08B4, 0x8370, iwl3160_2ac_cfg)},
356+ {IWL_PCI_DEVICE(0x08B4, 0x8272, iwl3160_2ac_cfg)},
355357 {IWL_PCI_DEVICE(0x08B3, 0x8470, iwl3160_2ac_cfg)},
356358 {IWL_PCI_DEVICE(0x08B3, 0x8570, iwl3160_2ac_cfg)},
357359 {IWL_PCI_DEVICE(0x08B3, 0x1070, iwl3160_2ac_cfg)},
358360 {IWL_PCI_DEVICE(0x08B3, 0x1170, iwl3160_2ac_cfg)},
359361
362+/* 3165 Series */
363+ {IWL_PCI_DEVICE(0x3165, 0x4010, iwl3165_2ac_cfg)},
364+ {IWL_PCI_DEVICE(0x3165, 0x4210, iwl3165_2ac_cfg)},
365+
360366 /* 7265 Series */
361367 {IWL_PCI_DEVICE(0x095A, 0x5010, iwl7265_2ac_cfg)},
362368 {IWL_PCI_DEVICE(0x095A, 0x5110, iwl7265_2ac_cfg)},
@@ -378,6 +384,7 @@ static const struct pci_device_id iwl_hw_card_ids[] = { · 15 unmodified lines
378384 {IWL_PCI_DEVICE(0x095B, 0x5202, iwl7265_n_cfg)},
379385 {IWL_PCI_DEVICE(0x095A, 0x9010, iwl7265_2ac_cfg)},
380386 {IWL_PCI_DEVICE(0x095A, 0x9012, iwl7265_2ac_cfg)},
387+ {IWL_PCI_DEVICE(0x095A, 0x900A, iwl7265_2ac_cfg)},
381388 {IWL_PCI_DEVICE(0x095A, 0x9110, iwl7265_2ac_cfg)},
382389 {IWL_PCI_DEVICE(0x095A, 0x9112, iwl7265_2ac_cfg)},
383390 {IWL_PCI_DEVICE(0x095A, 0x9210, iwl7265_2ac_cfg)},
drivers/scsi/Kconfig+10−10
@@ -43,7 +43,7 @@ config SCSI_DMA · 42 unmodified lines
4343 config SCSI_NETLINK
4444 bool
4545 default n
46− select NET
46+ depends on NET
4747
4848 config SCSI_PROC_FS
4949 bool "legacy /proc/scsi/ support"
@@ -257,7 +257,7 @@ config SCSI_SPI_ATTRS · 207 unmodified lines
257257
258258 config SCSI_FC_ATTRS
259259 tristate "FiberChannel Transport Attributes"
260− depends on SCSI
260+ depends on SCSI && NET
261261 select SCSI_NETLINK
262262 help
263263 If you wish to export transport-specific information about
@@ -585,28 +585,28 @@ config HYPERV_STORAGE · 321 unmodified lines
585585
586586 config LIBFC
587587 tristate "LibFC module"
588− select SCSI_FC_ATTRS
588+ depends on SCSI_FC_ATTRS
589589 select CRC32
590590 ---help---
591591 Fibre Channel library module
592592
593593 config LIBFCOE
594594 tristate "LibFCoE module"
595− select LIBFC
595+ depends on LIBFC
596596 ---help---
597597 Library for Fibre Channel over Ethernet module
598598
599599 config FCOE
600600 tristate "FCoE module"
601601 depends on PCI
602− select LIBFCOE
602+ depends on LIBFCOE
603603 ---help---
604604 Fibre Channel over Ethernet module
605605
606606 config FCOE_FNIC
607607 tristate "Cisco FNIC Driver"
608608 depends on PCI && X86
609− select LIBFCOE
609+ depends on LIBFCOE
610610 help
611611 This is support for the Cisco PCI-Express FCoE HBA.
612612
@@ -816,7 +816,7 @@ config SCSI_IBMVSCSI · 203 unmodified lines
816816 config SCSI_IBMVFC
817817 tristate "IBM Virtual FC support"
818818 depends on PPC_PSERIES && SCSI
819− select SCSI_FC_ATTRS
819+ depends on SCSI_FC_ATTRS
820820 help
821821 This is the IBM POWER Virtual FC Client
822822
@@ -1266,7 +1266,7 @@ source "drivers/scsi/qla4xxx/Kconfig" · 443 unmodified lines
12661266 config SCSI_LPFC
12671267 tristate "Emulex LightPulse Fibre Channel Support"
12681268 depends on PCI && SCSI
1269− select SCSI_FC_ATTRS
1269+ depends on SCSI_FC_ATTRS
12701270 select CRC_T10DIF
12711271 help
12721272 This lpfc driver supports the Emulex LightPulse
@@ -1676,7 +1676,7 @@ config SCSI_SUNESP · 403 unmodified lines
16761676 config ZFCP
16771677 tristate "FCP host bus adapter driver for IBM eServer zSeries"
16781678 depends on S390 && QDIO && SCSI
1679− select SCSI_FC_ATTRS
1679+ depends on SCSI_FC_ATTRS
16801680 help
16811681 If you want to access SCSI devices attached to your IBM eServer
16821682 zSeries by means of Fibre Channel interfaces say Y.
@@ -1704,7 +1704,7 @@ config SCSI_PM8001 · 21 unmodified lines
17041704 config SCSI_BFA_FC
17051705 tristate "Brocade BFA Fibre Channel Support"
17061706 depends on PCI && SCSI
1707− select SCSI_FC_ATTRS
1707+ depends on SCSI_FC_ATTRS
17081708 help
17091709 This bfa driver supports all Brocade PCIe FC/FCOE host adapters.
17101710
drivers/scsi/bnx2fc/Kconfig+3−2
@@ -1,11 +1,12 @@
11 config SCSI_BNX2X_FCOE
22 tristate "QLogic NetXtreme II FCoE support"
33 depends on PCI
4+ depends on (IPV6 || IPV6=n)
5+ depends on LIBFC
6+ depends on LIBFCOE
47 select NETDEVICES
58 select ETHERNET
69 select NET_VENDOR_BROADCOM
7− select LIBFC
8− select LIBFCOE
910 select CNIC
1011 ---help---
1112 This driver supports FCoE offload for the QLogic NetXtreme II
drivers/scsi/bnx2i/Kconfig+1−0
@@ -2,6 +2,7 @@ config SCSI_BNX2_ISCSI · 1 unmodified line
22 tristate "QLogic NetXtreme II iSCSI support"
33 depends on NET
44 depends on PCI
5+ depends on (IPV6 || IPV6=n)
56 select SCSI_ISCSI_ATTRS
67 select NETDEVICES
78 select ETHERNET
drivers/scsi/csiostor/Kconfig+1−1
@@ -1,7 +1,7 @@
11 config SCSI_CHELSIO_FCOE
22 tristate "Chelsio Communications FCoE support"
33 depends on PCI && SCSI
4− select SCSI_FC_ATTRS
4+ depends on SCSI_FC_ATTRS
55 select FW_LOADER
66 help
77 This driver supports FCoE Offload functionality over
drivers/scsi/qla2xxx/Kconfig+2−2
@@ -1,7 +1,7 @@
11 config SCSI_QLA_FC
22 tristate "QLogic QLA2XXX Fibre Channel Support"
33 depends on PCI && SCSI
4− select SCSI_FC_ATTRS
4+ depends on SCSI_FC_ATTRS
55 select FW_LOADER
66 ---help---
77 This qla2xxx driver supports all QLogic Fibre Channel
@@ -31,7 +31,7 @@ config SCSI_QLA_FC · 23 unmodified lines
3131 config TCM_QLA2XXX
3232 tristate "TCM_QLA2XXX fabric module for Qlogic 2xxx series target mode HBAs"
3333 depends on SCSI_QLA_FC && TARGET_CORE
34− select LIBFC
34+ depends on LIBFC
3535 select BTREE
3636 default n
3737 ---help---
include/linux/mlx4/device.h+1−0
@@ -209,6 +209,7 @@ enum { · 208 unmodified lines
209209 MLX4_BMME_FLAG_TYPE_2_WIN = 1 << 9,
210210 MLX4_BMME_FLAG_RESERVED_LKEY = 1 << 10,
211211 MLX4_BMME_FLAG_FAST_REG_WR = 1 << 11,
212+ MLX4_BMME_FLAG_VSD_INIT2RTR = 1 << 28,
212213 };
213214
214215 enum mlx4_event {
include/linux/mlx4/qp.h+10−2
@@ -56,7 +56,8 @@ enum mlx4_qp_optpar { · 55 unmodified lines
5656 MLX4_QP_OPTPAR_RNR_RETRY = 1 << 13,
5757 MLX4_QP_OPTPAR_ACK_TIMEOUT = 1 << 14,
5858 MLX4_QP_OPTPAR_SCHED_QUEUE = 1 << 16,
59− MLX4_QP_OPTPAR_COUNTER_INDEX = 1 << 20
59+ MLX4_QP_OPTPAR_COUNTER_INDEX = 1 << 20,
60+ MLX4_QP_OPTPAR_VLAN_STRIPPING = 1 << 21,
6061 };
6162
6263 enum mlx4_qp_state {
@@ -423,13 +424,20 @@ struct mlx4_wqe_inline_seg { · 360 unmodified lines
423424
424425 enum mlx4_update_qp_attr {
425426 MLX4_UPDATE_QP_SMAC = 1 << 0,
427+ MLX4_UPDATE_QP_VSD = 1 << 2,
428+ MLX4_UPDATE_QP_SUPPORTED_ATTRS = (1 << 2) - 1
429+};
430+
431+enum mlx4_update_qp_params_flags {
432+ MLX4_UPDATE_QP_PARAMS_FLAGS_VSD_ENABLE = 1 << 0,
426433 };
427434
428435 struct mlx4_update_qp_params {
429436 u8 smac_index;
437+ u32 flags;
430438 };
431439
432−int mlx4_update_qp(struct mlx4_dev *dev, struct mlx4_qp *qp,
440+int mlx4_update_qp(struct mlx4_dev *dev, u32 qpn,
433441 enum mlx4_update_qp_attr attr,
434442 struct mlx4_update_qp_params *params);
435443 int mlx4_qp_modify(struct mlx4_dev *dev, struct mlx4_mtt *mtt,
include/net/addrconf.h+1−0
@@ -204,6 +204,7 @@ void ipv6_sock_ac_close(struct sock *sk); · 203 unmodified lines
204204
205205 int ipv6_dev_ac_inc(struct net_device *dev, const struct in6_addr *addr);
206206 int __ipv6_dev_ac_dec(struct inet6_dev *idev, const struct in6_addr *addr);
207+void ipv6_ac_destroy_dev(struct inet6_dev *idev);
207208 bool ipv6_chk_acast_addr(struct net *net, struct net_device *dev,
208209 const struct in6_addr *addr);
209210 bool ipv6_chk_acast_addr_src(struct net *net, struct net_device *dev,
include/net/dst.h+15−1
@@ -480,6 +480,7 @@ void dst_init(void); · 479 unmodified lines
480480 /* Flags for xfrm_lookup flags argument. */
481481 enum {
482482 XFRM_LOOKUP_ICMP = 1 << 0,
483+ XFRM_LOOKUP_QUEUE = 1 << 1,
483484 };
484485
485486 struct flowi;
@@ -490,7 +491,16 @@ static inline struct dst_entry *xfrm_lookup(struct net *net, · 4 unmodified lines
490491 int flags)
491492 {
492493 return dst_orig;
493−}
494+}
495+
496+static inline struct dst_entry *xfrm_lookup_route(struct net *net,
497+ struct dst_entry *dst_orig,
498+ const struct flowi *fl,
499+ struct sock *sk,
500+ int flags)
501+{
502+ return dst_orig;
503+}
494504
495505 static inline struct xfrm_state *dst_xfrm(const struct dst_entry *dst)
496506 {
@@ -502,6 +512,10 @@ struct dst_entry *xfrm_lookup(struct net *net, struct dst_entry *dst_orig, · 5 unmodified lines
502512 const struct flowi *fl, struct sock *sk,
503513 int flags);
504514
515+struct dst_entry *xfrm_lookup_route(struct net *net, struct dst_entry *dst_orig,
516+ const struct flowi *fl, struct sock *sk,
517+ int flags);
518+
505519 /* skb attached with this dst needs transformation if dst->xfrm is valid */
506520 static inline struct xfrm_state *dst_xfrm(const struct dst_entry *dst)
507521 {
include/net/genetlink.h+8−0
@@ -394,4 +394,12 @@ static inline int genl_set_err(struct genl_family *family, struct net *net, · 393 unmodified lines
394394 return netlink_set_err(net->genl_sock, portid, group, code);
395395 }
396396
397+static inline int genl_has_listeners(struct genl_family *family,
398+ struct sock *sk, unsigned int group)
399+{
400+ if (WARN_ON_ONCE(group >= family->n_mcgrps))
401+ return -EINVAL;
402+ group = family->mcgrp_offset + group;
403+ return netlink_has_listeners(sk, group);
404+}
397405 #endif /* __NET_GENERIC_NETLINK_H */
include/net/sch_generic.h+2−1
@@ -231,7 +231,8 @@ struct qdisc_skb_cb { · 230 unmodified lines
231231 unsigned int pkt_len;
232232 u16 slave_dev_queue_mapping;
233233 u16 _pad;
234− unsigned char data[24];
234+#define QDISC_CB_PRIV_LEN 20
235+ unsigned char data[QDISC_CB_PRIV_LEN];
235236 };
236237
237238 static inline void qdisc_cb_private_validate(const struct sk_buff *skb, int sz)
lib/rhashtable.c+0−1
@@ -23,7 +23,6 @@ · 22 unmodified lines
2323 #include <linux/hash.h>
2424 #include <linux/random.h>
2525 #include <linux/rhashtable.h>
26−#include <linux/log2.h>
2726
2827 #define HASH_DEFAULT_SIZE 64UL
2928 #define HASH_MIN_SIZE 4UL
net/bridge/br_private.h+3−0
@@ -309,6 +309,9 @@ struct br_input_skb_cb { · 308 unmodified lines
309309 int igmp;
310310 int mrouters_only;
311311 #endif
312+#ifdef CONFIG_BRIDGE_VLAN_FILTERING
313+ bool vlan_filtered;
314+#endif
312315 };
313316
314317 #define BR_INPUT_SKB_CB(__skb) ((struct br_input_skb_cb *)(__skb)->cb)
net/bridge/br_vlan.c+13−3
@@ -27,9 +27,13 @@ static void __vlan_add_flags(struct net_port_vlans *v, u16 vid, u16 flags) · 26 unmodified lines
2727 {
2828 if (flags & BRIDGE_VLAN_INFO_PVID)
2929 __vlan_add_pvid(v, vid);
30+ else
31+ __vlan_delete_pvid(v, vid);
3032
3133 if (flags & BRIDGE_VLAN_INFO_UNTAGGED)
3234 set_bit(vid, v->untagged_bitmap);
35+ else
36+ clear_bit(vid, v->untagged_bitmap);
3337 }
3438
3539 static int __vlan_add(struct net_port_vlans *v, u16 vid, u16 flags)
@@ -125,7 +129,8 @@ struct sk_buff *br_handle_vlan(struct net_bridge *br, · 89 unmodified lines
125129 {
126130 u16 vid;
127131
128− if (!br->vlan_enabled)
132+ /* If this packet was not filtered at input, let it pass */
133+ if (!BR_INPUT_SKB_CB(skb)->vlan_filtered)
129134 goto out;
130135
131136 /* Vlan filter table must be configured at this point. The
@@ -164,8 +169,10 @@ bool br_allowed_ingress(struct net_bridge *br, struct net_port_vlans *v, · 32 unmodified lines
164169 /* If VLAN filtering is disabled on the bridge, all packets are
165170 * permitted.
166171 */
167− if (!br->vlan_enabled)
172+ if (!br->vlan_enabled) {
173+ BR_INPUT_SKB_CB(skb)->vlan_filtered = false;
168174 return true;
175+ }
169176
170177 /* If there are no vlan in the permitted list, all packets are
171178 * rejected.
@@ -173,6 +180,7 @@ bool br_allowed_ingress(struct net_bridge *br, struct net_port_vlans *v, · 1 unmodified line
173180 if (!v)
174181 goto drop;
175182
183+ BR_INPUT_SKB_CB(skb)->vlan_filtered = true;
176184 proto = br->vlan_proto;
177185
178186 /* If vlan tx offload is disabled on bridge device and frame was
@@ -251,7 +259,8 @@ bool br_allowed_egress(struct net_bridge *br, · 72 unmodified lines
251259 {
252260 u16 vid;
253261
254− if (!br->vlan_enabled)
262+ /* If this packet was not filtered at input, let it pass */
263+ if (!BR_INPUT_SKB_CB(skb)->vlan_filtered)
255264 return true;
256265
257266 if (!v)
@@ -270,6 +279,7 @@ bool br_should_learn(struct net_bridge_port *p, struct sk_buff *skb, u16 *vid) · 12 unmodified lines
270279 struct net_bridge *br = p->br;
271280 struct net_port_vlans *v;
272281
282+ /* If filtering was disabled at input, let it pass. */
273283 if (!br->vlan_enabled)
274284 return true;
275285
net/core/dev.c+11−7
@@ -4809,9 +4809,14 @@ static void netdev_adjacent_sysfs_del(struct net_device *dev, · 4808 unmodified lines
48094809 sysfs_remove_link(&(dev->dev.kobj), linkname);
48104810 }
48114811
4812−#define netdev_adjacent_is_neigh_list(dev, dev_list) \
4813− (dev_list == &dev->adj_list.upper || \
4814− dev_list == &dev->adj_list.lower)
4812+static inline bool netdev_adjacent_is_neigh_list(struct net_device *dev,
4813+ struct net_device *adj_dev,
4814+ struct list_head *dev_list)
4815+{
4816+ return (dev_list == &dev->adj_list.upper ||
4817+ dev_list == &dev->adj_list.lower) &&
4818+ net_eq(dev_net(dev), dev_net(adj_dev));
4819+}
48154820
48164821 static int __netdev_adjacent_dev_insert(struct net_device *dev,
48174822 struct net_device *adj_dev,
@@ -4841,7 +4846,7 @@ static int __netdev_adjacent_dev_insert(struct net_device *dev, · 23 unmodified lines
48414846 pr_debug("dev_hold for %s, because of link added from %s to %s\n",
48424847 adj_dev->name, dev->name, adj_dev->name);
48434848
4844− if (netdev_adjacent_is_neigh_list(dev, dev_list)) {
4849+ if (netdev_adjacent_is_neigh_list(dev, adj_dev, dev_list)) {
48454850 ret = netdev_adjacent_sysfs_add(dev, adj_dev, dev_list);
48464851 if (ret)
48474852 goto free_adj;
@@ -4862,7 +4867,7 @@ static int __netdev_adjacent_dev_insert(struct net_device *dev, · 14 unmodified lines
48624867 return 0;
48634868
48644869 remove_symlinks:
4865− if (netdev_adjacent_is_neigh_list(dev, dev_list))
4870+ if (netdev_adjacent_is_neigh_list(dev, adj_dev, dev_list))
48664871 netdev_adjacent_sysfs_del(dev, adj_dev->name, dev_list);
48674872 free_adj:
48684873 kfree(adj);
@@ -4895,8 +4900,7 @@ static void __netdev_adjacent_dev_remove(struct net_device *dev, · 26 unmodified lines
48954900 if (adj->master)
48964901 sysfs_remove_link(&(dev->dev.kobj), "master");
48974902
4898− if (netdev_adjacent_is_neigh_list(dev, dev_list) &&
4899− net_eq(dev_net(dev),dev_net(adj_dev)))
4903+ if (netdev_adjacent_is_neigh_list(dev, adj_dev, dev_list))
49004904 netdev_adjacent_sysfs_del(dev, adj_dev->name, dev_list);
49014905
49024906 list_del_rcu(&adj->list);
net/core/sock.c+1−1
@@ -1866,7 +1866,7 @@ EXPORT_SYMBOL(sock_alloc_send_skb); · 1865 unmodified lines
18661866 * skb_page_frag_refill - check that a page_frag contains enough room
18671867 * @sz: minimum size of the fragment we want to get
18681868 * @pfrag: pointer to page_frag
1869− * @prio: priority for memory allocation
1869+ * @gfp: priority for memory allocation
18701870 *
18711871 * Note: While this allocator tries to use high order pages, there is
18721872 * no guarantee that allocations succeed. Therefore, @sz MUST be
net/ipv4/ip_tunnel.c+3−3
@@ -79,10 +79,10 @@ static void __tunnel_dst_set(struct ip_tunnel_dst *idst, · 78 unmodified lines
7979 idst->saddr = saddr;
8080 }
8181
82−static void tunnel_dst_set(struct ip_tunnel *t,
82+static noinline void tunnel_dst_set(struct ip_tunnel *t,
8383 struct dst_entry *dst, __be32 saddr)
8484 {
85− __tunnel_dst_set(this_cpu_ptr(t->dst_cache), dst, saddr);
85+ __tunnel_dst_set(raw_cpu_ptr(t->dst_cache), dst, saddr);
8686 }
8787
8888 static void tunnel_dst_reset(struct ip_tunnel *t)
@@ -106,7 +106,7 @@ static struct rtable *tunnel_rtable_get(struct ip_tunnel *t, · 17 unmodified lines
106106 struct dst_entry *dst;
107107
108108 rcu_read_lock();
109− idst = this_cpu_ptr(t->dst_cache);
109+ idst = raw_cpu_ptr(t->dst_cache);
110110 dst = rcu_dereference(idst->dst);
111111 if (dst && !atomic_inc_not_zero(&dst->__refcnt))
112112 dst = NULL;
net/ipv4/route.c+3−3
@@ -2265,9 +2265,9 @@ struct rtable *ip_route_output_flow(struct net *net, struct flowi4 *flp4, · 2264 unmodified lines
22652265 return rt;
22662266
22672267 if (flp4->flowi4_proto)
2268− rt = (struct rtable *) xfrm_lookup(net, &rt->dst,
2269− flowi4_to_flowi(flp4),
2270− sk, 0);
2268+ rt = (struct rtable *)xfrm_lookup_route(net, &rt->dst,
2269+ flowi4_to_flowi(flp4),
2270+ sk, 0);
22712271
22722272 return rt;
22732273 }
net/ipv6/addrconf.c+5−3
@@ -3094,11 +3094,13 @@ static int addrconf_ifdown(struct net_device *dev, int how) · 3093 unmodified lines
30943094
30953095 write_unlock_bh(&idev->lock);
30963096
3097− /* Step 5: Discard multicast list */
3098− if (how)
3097+ /* Step 5: Discard anycast and multicast list */
3098+ if (how) {
3099+ ipv6_ac_destroy_dev(idev);
30993100 ipv6_mc_destroy_dev(idev);
3100− else
3101+ } else {
31013102 ipv6_mc_down(idev);
3103+ }
31023104
31033105 idev->tstamp = jiffies;
31043106
net/ipv6/anycast.c+21−0
@@ -351,6 +351,27 @@ static int ipv6_dev_ac_dec(struct net_device *dev, const struct in6_addr *addr) · 350 unmodified lines
351351 return __ipv6_dev_ac_dec(idev, addr);
352352 }
353353
354+void ipv6_ac_destroy_dev(struct inet6_dev *idev)
355+{
356+ struct ifacaddr6 *aca;
357+
358+ write_lock_bh(&idev->lock);
359+ while ((aca = idev->ac_list) != NULL) {
360+ idev->ac_list = aca->aca_next;
361+ write_unlock_bh(&idev->lock);
362+
363+ addrconf_leave_solict(idev, &aca->aca_addr);
364+
365+ dst_hold(&aca->aca_rt->dst);
366+ ip6_del_rt(aca->aca_rt);
367+
368+ aca_put(aca);
369+
370+ write_lock_bh(&idev->lock);
371+ }
372+ write_unlock_bh(&idev->lock);
373+}
374+
354375 /*
355376 * check if the interface has this anycast address
356377 * called with rcu_read_lock()
net/ipv6/ip6_output.c+2−2
@@ -1009,7 +1009,7 @@ struct dst_entry *ip6_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6, · 1008 unmodified lines
10091009 if (final_dst)
10101010 fl6->daddr = *final_dst;
10111011
1012− return xfrm_lookup(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0);
1012+ return xfrm_lookup_route(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0);
10131013 }
10141014 EXPORT_SYMBOL_GPL(ip6_dst_lookup_flow);
10151015
@@ -1041,7 +1041,7 @@ struct dst_entry *ip6_sk_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6, · 25 unmodified lines
10411041 if (final_dst)
10421042 fl6->daddr = *final_dst;
10431043
1044− return xfrm_lookup(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0);
1044+ return xfrm_lookup_route(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0);
10451045 }
10461046 EXPORT_SYMBOL_GPL(ip6_sk_dst_lookup_flow);
10471047
net/mac80211/sta_info.c+1−1
@@ -1822,7 +1822,7 @@ void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo) · 1821 unmodified lines
18221822 sinfo->bss_param.flags |= BSS_PARAM_FLAGS_SHORT_PREAMBLE;
18231823 if (sdata->vif.bss_conf.use_short_slot)
18241824 sinfo->bss_param.flags |= BSS_PARAM_FLAGS_SHORT_SLOT_TIME;
1825− sinfo->bss_param.dtim_period = sdata->local->hw.conf.ps_dtim_period;
1825+ sinfo->bss_param.dtim_period = sdata->vif.bss_conf.dtim_period;
18261826 sinfo->bss_param.beacon_interval = sdata->vif.bss_conf.beacon_int;
18271827
18281828 sinfo->sta_flags.set = 0;
net/openvswitch/datapath.c+5−4
@@ -78,11 +78,12 @@ static const struct genl_multicast_group ovs_dp_vport_multicast_group = { · 77 unmodified lines
7878
7979 /* Check if need to build a reply message.
8080 * OVS userspace sets the NLM_F_ECHO flag if it needs the reply. */
81−static bool ovs_must_notify(struct genl_info *info,
82− const struct genl_multicast_group *grp)
81+static bool ovs_must_notify(struct genl_family *family, struct genl_info *info,
82+ unsigned int group)
8383 {
8484 return info->nlhdr->nlmsg_flags & NLM_F_ECHO ||
85− netlink_has_listeners(genl_info_net(info)->genl_sock, 0);
85+ genl_has_listeners(family, genl_info_net(info)->genl_sock,
86+ group);
8687 }
8788
8889 static void ovs_notify(struct genl_family *family,
@@ -763,7 +764,7 @@ static struct sk_buff *ovs_flow_cmd_alloc_info(const struct sw_flow_actions *act · 674 unmodified lines
763764 {
764765 struct sk_buff *skb;
765766
766− if (!always && !ovs_must_notify(info, &ovs_dp_flow_multicast_group))
767+ if (!always && !ovs_must_notify(&dp_flow_genl_family, info, 0))
767768 return NULL;
768769
769770 skb = genlmsg_new_unicast(ovs_flow_cmd_msg_size(acts), info, GFP_KERNEL);
net/rfkill/rfkill-gpio.c+1−0
@@ -163,6 +163,7 @@ static const struct acpi_device_id rfkill_acpi_match[] = { · 162 unmodified lines
163163 { "LNV4752", RFKILL_TYPE_GPS },
164164 { },
165165 };
166+MODULE_DEVICE_TABLE(acpi, rfkill_acpi_match);
166167 #endif
167168
168169 static struct platform_driver rfkill_gpio_driver = {
net/rxrpc/ar-key.c+1−1
@@ -1143,7 +1143,7 @@ static long rxrpc_read(const struct key *key, · 1142 unmodified lines
11431143 if (copy_to_user(xdr, (s), _l) != 0) \
11441144 goto fault; \
11451145 if (_l & 3 && \
1146− copy_to_user((u8 *)xdr + _l, &zero, 4 - (_l & 3)) != 0) \
1146+ copy_to_user((u8 __user *)xdr + _l, &zero, 4 - (_l & 3)) != 0) \
11471147 goto fault; \
11481148 xdr += (_l + 3) >> 2; \
11491149 } while(0)
net/sched/sch_choke.c+14−4
@@ -133,10 +133,16 @@ static void choke_drop_by_idx(struct Qdisc *sch, unsigned int idx) · 132 unmodified lines
133133 --sch->q.qlen;
134134 }
135135
136+/* private part of skb->cb[] that a qdisc is allowed to use
137+ * is limited to QDISC_CB_PRIV_LEN bytes.
138+ * As a flow key might be too large, we store a part of it only.
139+ */
140+#define CHOKE_K_LEN min_t(u32, sizeof(struct flow_keys), QDISC_CB_PRIV_LEN - 3)
141+
136142 struct choke_skb_cb {
137143 u16 classid;
138144 u8 keys_valid;
139− struct flow_keys keys;
145+ u8 keys[QDISC_CB_PRIV_LEN - 3];
140146 };
141147
142148 static inline struct choke_skb_cb *choke_skb_cb(const struct sk_buff *skb)
@@ -163,22 +169,26 @@ static u16 choke_get_classid(const struct sk_buff *skb) · 20 unmodified lines
163169 static bool choke_match_flow(struct sk_buff *skb1,
164170 struct sk_buff *skb2)
165171 {
172+ struct flow_keys temp;
173+
166174 if (skb1->protocol != skb2->protocol)
167175 return false;
168176
169177 if (!choke_skb_cb(skb1)->keys_valid) {
170178 choke_skb_cb(skb1)->keys_valid = 1;
171− skb_flow_dissect(skb1, &choke_skb_cb(skb1)->keys);
179+ skb_flow_dissect(skb1, &temp);
180+ memcpy(&choke_skb_cb(skb1)->keys, &temp, CHOKE_K_LEN);
172181 }
173182
174183 if (!choke_skb_cb(skb2)->keys_valid) {
175184 choke_skb_cb(skb2)->keys_valid = 1;
176− skb_flow_dissect(skb2, &choke_skb_cb(skb2)->keys);
185+ skb_flow_dissect(skb2, &temp);
186+ memcpy(&choke_skb_cb(skb2)->keys, &temp, CHOKE_K_LEN);
177187 }
178188
179189 return !memcmp(&choke_skb_cb(skb1)->keys,
180190 &choke_skb_cb(skb2)->keys,
181− sizeof(struct flow_keys));
191+ CHOKE_K_LEN);
182192 }
183193
184194 /*
net/socket.c+3−0
@@ -1996,6 +1996,9 @@ static int copy_msghdr_from_user(struct msghdr *kmsg, · 1995 unmodified lines
19961996 if (copy_from_user(kmsg, umsg, sizeof(struct msghdr)))
19971997 return -EFAULT;
19981998
1999+ if (kmsg->msg_name == NULL)
2000+ kmsg->msg_namelen = 0;
2001+
19992002 if (kmsg->msg_namelen < 0)
20002003 return -EINVAL;
20012004
net/wireless/nl80211.c+6−0
@@ -6969,6 +6969,9 @@ void __cfg80211_send_event_skb(struct sk_buff *skb, gfp_t gfp) · 6968 unmodified lines
69696969 struct nlattr *data = ((void **)skb->cb)[2];
69706970 enum nl80211_multicast_groups mcgrp = NL80211_MCGRP_TESTMODE;
69716971
6972+ /* clear CB data for netlink core to own from now on */
6973+ memset(skb->cb, 0, sizeof(skb->cb));
6974+
69726975 nla_nest_end(skb, data);
69736976 genlmsg_end(skb, hdr);
69746977
@@ -9294,6 +9297,9 @@ int cfg80211_vendor_cmd_reply(struct sk_buff *skb) · 2319 unmodified lines
92949297 void *hdr = ((void **)skb->cb)[1];
92959298 struct nlattr *data = ((void **)skb->cb)[2];
92969299
9300+ /* clear CB data for netlink core to own from now on */
9301+ memset(skb->cb, 0, sizeof(skb->cb));
9302+
92979303 if (WARN_ON(!rdev->cur_cmd_info)) {
92989304 kfree_skb(skb);
92999305 return -EINVAL;
net/xfrm/xfrm_policy.c+40−8
@@ -39,6 +39,11 @@ · 38 unmodified lines
3939 #define XFRM_QUEUE_TMO_MAX ((unsigned)(60*HZ))
4040 #define XFRM_MAX_QUEUE_LEN 100
4141
42+struct xfrm_flo {
43+ struct dst_entry *dst_orig;
44+ u8 flags;
45+};
46+
4247 static DEFINE_SPINLOCK(xfrm_policy_afinfo_lock);
4348 static struct xfrm_policy_afinfo __rcu *xfrm_policy_afinfo[NPROTO]
4449 __read_mostly;
@@ -1877,13 +1882,14 @@ static int xdst_queue_output(struct sock *sk, struct sk_buff *skb) · 1832 unmodified lines
18771882 }
18781883
18791884 static struct xfrm_dst *xfrm_create_dummy_bundle(struct net *net,
1880− struct dst_entry *dst,
1885+ struct xfrm_flo *xflo,
18811886 const struct flowi *fl,
18821887 int num_xfrms,
18831888 u16 family)
18841889 {
18851890 int err;
18861891 struct net_device *dev;
1892+ struct dst_entry *dst;
18871893 struct dst_entry *dst1;
18881894 struct xfrm_dst *xdst;
18891895
@@ -1891,9 +1897,12 @@ static struct xfrm_dst *xfrm_create_dummy_bundle(struct net *net, · 1 unmodified line
18911897 if (IS_ERR(xdst))
18921898 return xdst;
18931899
1894− if (net->xfrm.sysctl_larval_drop || num_xfrms <= 0)
1900+ if (!(xflo->flags & XFRM_LOOKUP_QUEUE) ||
1901+ net->xfrm.sysctl_larval_drop ||
1902+ num_xfrms <= 0)
18951903 return xdst;
18961904
1905+ dst = xflo->dst_orig;
18971906 dst1 = &xdst->u.dst;
18981907 dst_hold(dst);
18991908 xdst->route = dst;
@@ -1935,7 +1944,7 @@ static struct flow_cache_object * · 35 unmodified lines
19351944 xfrm_bundle_lookup(struct net *net, const struct flowi *fl, u16 family, u8 dir,
19361945 struct flow_cache_object *oldflo, void *ctx)
19371946 {
1938− struct dst_entry *dst_orig = (struct dst_entry *)ctx;
1947+ struct xfrm_flo *xflo = (struct xfrm_flo *)ctx;
19391948 struct xfrm_policy *pols[XFRM_POLICY_TYPE_MAX];
19401949 struct xfrm_dst *xdst, *new_xdst;
19411950 int num_pols = 0, num_xfrms = 0, i, err, pol_dead;
@@ -1976,7 +1985,8 @@ xfrm_bundle_lookup(struct net *net, const struct flowi *fl, u16 family, u8 dir, · 34 unmodified lines
19761985 goto make_dummy_bundle;
19771986 }
19781987
1979− new_xdst = xfrm_resolve_and_create_bundle(pols, num_pols, fl, family, dst_orig);
1988+ new_xdst = xfrm_resolve_and_create_bundle(pols, num_pols, fl, family,
1989+ xflo->dst_orig);
19801990 if (IS_ERR(new_xdst)) {
19811991 err = PTR_ERR(new_xdst);
19821992 if (err != -EAGAIN)
@@ -2010,7 +2020,7 @@ make_dummy_bundle: · 27 unmodified lines
20102020 /* We found policies, but there's no bundles to instantiate:
20112021 * either because the policy blocks, has no transformations or
20122022 * we could not build template (no xfrm_states).*/
2013− xdst = xfrm_create_dummy_bundle(net, dst_orig, fl, num_xfrms, family);
2023+ xdst = xfrm_create_dummy_bundle(net, xflo, fl, num_xfrms, family);
20142024 if (IS_ERR(xdst)) {
20152025 xfrm_pols_put(pols, num_pols);
20162026 return ERR_CAST(xdst);
@@ -2104,13 +2114,18 @@ struct dst_entry *xfrm_lookup(struct net *net, struct dst_entry *dst_orig, · 87 unmodified lines
21042114 }
21052115
21062116 if (xdst == NULL) {
2117+ struct xfrm_flo xflo;
2118+
2119+ xflo.dst_orig = dst_orig;
2120+ xflo.flags = flags;
2121+
21072122 /* To accelerate a bit... */
21082123 if ((dst_orig->flags & DST_NOXFRM) ||
21092124 !net->xfrm.policy_count[XFRM_POLICY_OUT])
21102125 goto nopol;
21112126
21122127 flo = flow_cache_lookup(net, fl, family, dir,
2113− xfrm_bundle_lookup, dst_orig);
2128+ xfrm_bundle_lookup, &xflo);
21142129 if (flo == NULL)
21152130 goto nopol;
21162131 if (IS_ERR(flo)) {
@@ -2138,7 +2153,7 @@ struct dst_entry *xfrm_lookup(struct net *net, struct dst_entry *dst_orig, · 21 unmodified lines
21382153 xfrm_pols_put(pols, drop_pols);
21392154 XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTNOSTATES);
21402155
2141− return make_blackhole(net, family, dst_orig);
2156+ return ERR_PTR(-EREMOTE);
21422157 }
21432158
21442159 err = -EAGAIN;
@@ -2195,6 +2210,23 @@ dropdst: · 50 unmodified lines
21952210 }
21962211 EXPORT_SYMBOL(xfrm_lookup);
21972212
2213+/* Callers of xfrm_lookup_route() must ensure a call to dst_output().
2214+ * Otherwise we may send out blackholed packets.
2215+ */
2216+struct dst_entry *xfrm_lookup_route(struct net *net, struct dst_entry *dst_orig,
2217+ const struct flowi *fl,
2218+ struct sock *sk, int flags)
2219+{
2220+ struct dst_entry *dst = xfrm_lookup(net, dst_orig, fl, sk,
2221+ flags | XFRM_LOOKUP_QUEUE);
2222+
2223+ if (IS_ERR(dst) && PTR_ERR(dst) == -EREMOTE)
2224+ return make_blackhole(net, dst_orig->ops->family, dst_orig);
2225+
2226+ return dst;
2227+}
2228+EXPORT_SYMBOL(xfrm_lookup_route);
2229+
21982230 static inline int
21992231 xfrm_secpath_reject(int idx, struct sk_buff *skb, const struct flowi *fl)
22002232 {
@@ -2460,7 +2492,7 @@ int __xfrm_route_forward(struct sk_buff *skb, unsigned short family) · 259 unmodified lines
24602492
24612493 skb_dst_force(skb);
24622494
2463− dst = xfrm_lookup(net, skb_dst(skb), &fl, NULL, 0);
2495+ dst = xfrm_lookup(net, skb_dst(skb), &fl, NULL, XFRM_LOOKUP_QUEUE);
24642496 if (IS_ERR(dst)) {
24652497 res = 0;
24662498 dst = NULL;