aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2018-12-09 18:12:33 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2018-12-09 18:12:33 -0500
commitd48f782e4fb20dc7ec935ca0ca41ae31e4a69362 (patch)
tree482270b85d4ab9b1284e07e4cb439b4dc7af919f /drivers
parent8586ca8a214471e4573d76356aabe890bfecdc8a (diff)
parent35cc3cefc4de90001c9137e2d01dd9d06b11acfb (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Pull networking fixes from David Miller: "A decent batch of fixes here. I'd say about half are for problems that have existed for a while, and half are for new regressions added in the 4.20 merge window. 1) Fix 10G SFP phy module detection in mvpp2, from Baruch Siach. 2) Revert bogus emac driver change, from Benjamin Herrenschmidt. 3) Handle BPF exported data structure with pointers when building 32-bit userland, from Daniel Borkmann. 4) Memory leak fix in act_police, from Davide Caratti. 5) Check RX checksum offload in RX descriptors properly in aquantia driver, from Dmitry Bogdanov. 6) SKB unlink fix in various spots, from Edward Cree. 7) ndo_dflt_fdb_dump() only works with ethernet, enforce this, from Eric Dumazet. 8) Fix FID leak in mlxsw driver, from Ido Schimmel. 9) IOTLB locking fix in vhost, from Jean-Philippe Brucker. 10) Fix SKB truesize accounting in ipv4/ipv6/netfilter frag memory limits otherwise namespace exit can hang. From Jiri Wiesner. 11) Address block parsing length fixes in x25 from Martin Schiller. 12) IRQ and ring accounting fixes in bnxt_en, from Michael Chan. 13) For tun interfaces, only iface delete works with rtnl ops, enforce this by disallowing add. From Nicolas Dichtel. 14) Use after free in liquidio, from Pan Bian. 15) Fix SKB use after passing to netif_receive_skb(), from Prashant Bhole. 16) Static key accounting and other fixes in XPS from Sabrina Dubroca. 17) Partially initialized flow key passed to ip6_route_output(), from Shmulik Ladkani. 18) Fix RTNL deadlock during reset in ibmvnic driver, from Thomas Falcon. 19) Several small TCP fixes (off-by-one on window probe abort, NULL deref in tail loss probe, SNMP mis-estimations) from Yuchung Cheng" * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (93 commits) net/sched: cls_flower: Reject duplicated rules also under skip_sw bnxt_en: Fix _bnxt_get_max_rings() for 57500 chips. bnxt_en: Fix NQ/CP rings accounting on the new 57500 chips. bnxt_en: Keep track of reserved IRQs. bnxt_en: Fix CNP CoS queue regression. net/mlx4_core: Correctly set PFC param if global pause is turned off. Revert "net/ibm/emac: wrong bit is used for STA control" neighbour: Avoid writing before skb->head in neigh_hh_output() ipv6: Check available headroom in ip6_xmit() even without options tcp: lack of available data can also cause TSO defer ipv6: sr: properly initialize flowi6 prior passing to ip6_route_output mlxsw: spectrum_switchdev: Fix VLAN device deletion via ioctl mlxsw: spectrum_router: Relax GRE decap matching check mlxsw: spectrum_switchdev: Avoid leaking FID's reference count mlxsw: spectrum_nve: Remove easily triggerable warnings ipv4: ipv6: netfilter: Adjust the frag mem limit when truesize changes sctp: frag_point sanity check tcp: fix NULL ref in tail loss probe tcp: Do not underestimate rwnd_limited net: use skb_list_del_init() to remove from RX sublists ...
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/bonding/bond_3ad.c3
-rw-r--r--drivers/net/dsa/mv88e6060.c10
-rw-r--r--drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c2
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt.c60
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt.h1
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c2
-rw-r--r--drivers/net/ethernet/cavium/liquidio/lio_ethtool.c2
-rw-r--r--drivers/net/ethernet/cavium/liquidio/lio_vf_rep.c4
-rw-r--r--drivers/net/ethernet/freescale/fman/fman.c5
-rw-r--r--drivers/net/ethernet/ibm/emac/emac.h2
-rw-r--r--drivers/net/ethernet/ibm/ibmvnic.c2
-rw-r--r--drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c34
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/Kconfig2
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/en_ethtool.c4
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/en_netdev.c4
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/mlx4_en.h1
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en_rx.c6
-rw-r--r--drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c4
-rw-r--r--drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c5
-rw-r--r--drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c17
-rw-r--r--drivers/net/ethernet/netronome/nfp/flower/offload.c18
-rw-r--r--drivers/net/ethernet/realtek/8139cp.c5
-rw-r--r--drivers/net/ethernet/socionext/sni_ave.c24
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/stmmac_main.c23
-rw-r--r--drivers/net/macvlan.c7
-rw-r--r--drivers/net/phy/phy_device.c19
-rw-r--r--drivers/net/phy/sfp-bus.c2
-rw-r--r--drivers/net/tun.c9
-rw-r--r--drivers/net/virtio_net.c14
-rw-r--r--drivers/net/wireless/mac80211_hwsim.c20
-rw-r--r--drivers/vhost/vhost.c3
31 files changed, 205 insertions, 109 deletions
diff --git a/drivers/net/bonding/bond_3ad.c b/drivers/net/bonding/bond_3ad.c
index f43fb2f958a5..93dfcef8afc4 100644
--- a/drivers/net/bonding/bond_3ad.c
+++ b/drivers/net/bonding/bond_3ad.c
@@ -2086,6 +2086,9 @@ void bond_3ad_unbind_slave(struct slave *slave)
2086 aggregator->aggregator_identifier); 2086 aggregator->aggregator_identifier);
2087 2087
2088 /* Tell the partner that this port is not suitable for aggregation */ 2088 /* Tell the partner that this port is not suitable for aggregation */
2089 port->actor_oper_port_state &= ~AD_STATE_SYNCHRONIZATION;
2090 port->actor_oper_port_state &= ~AD_STATE_COLLECTING;
2091 port->actor_oper_port_state &= ~AD_STATE_DISTRIBUTING;
2089 port->actor_oper_port_state &= ~AD_STATE_AGGREGATION; 2092 port->actor_oper_port_state &= ~AD_STATE_AGGREGATION;
2090 __update_lacpdu_from_port(port); 2093 __update_lacpdu_from_port(port);
2091 ad_lacpdu_send(port); 2094 ad_lacpdu_send(port);
diff --git a/drivers/net/dsa/mv88e6060.c b/drivers/net/dsa/mv88e6060.c
index 65f10fec25b3..0b3e51f248c2 100644
--- a/drivers/net/dsa/mv88e6060.c
+++ b/drivers/net/dsa/mv88e6060.c
@@ -116,8 +116,7 @@ static int mv88e6060_switch_reset(struct dsa_switch *ds)
116 /* Reset the switch. */ 116 /* Reset the switch. */
117 REG_WRITE(REG_GLOBAL, GLOBAL_ATU_CONTROL, 117 REG_WRITE(REG_GLOBAL, GLOBAL_ATU_CONTROL,
118 GLOBAL_ATU_CONTROL_SWRESET | 118 GLOBAL_ATU_CONTROL_SWRESET |
119 GLOBAL_ATU_CONTROL_ATUSIZE_1024 | 119 GLOBAL_ATU_CONTROL_LEARNDIS);
120 GLOBAL_ATU_CONTROL_ATE_AGE_5MIN);
121 120
122 /* Wait up to one second for reset to complete. */ 121 /* Wait up to one second for reset to complete. */
123 timeout = jiffies + 1 * HZ; 122 timeout = jiffies + 1 * HZ;
@@ -142,13 +141,10 @@ static int mv88e6060_setup_global(struct dsa_switch *ds)
142 */ 141 */
143 REG_WRITE(REG_GLOBAL, GLOBAL_CONTROL, GLOBAL_CONTROL_MAX_FRAME_1536); 142 REG_WRITE(REG_GLOBAL, GLOBAL_CONTROL, GLOBAL_CONTROL_MAX_FRAME_1536);
144 143
145 /* Enable automatic address learning, set the address 144 /* Disable automatic address learning.
146 * database size to 1024 entries, and set the default aging
147 * time to 5 minutes.
148 */ 145 */
149 REG_WRITE(REG_GLOBAL, GLOBAL_ATU_CONTROL, 146 REG_WRITE(REG_GLOBAL, GLOBAL_ATU_CONTROL,
150 GLOBAL_ATU_CONTROL_ATUSIZE_1024 | 147 GLOBAL_ATU_CONTROL_LEARNDIS);
151 GLOBAL_ATU_CONTROL_ATE_AGE_5MIN);
152 148
153 return 0; 149 return 0;
154} 150}
diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c
index f02592f43fe3..a7e853fa43c2 100644
--- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c
+++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c
@@ -674,7 +674,7 @@ static int hw_atl_b0_hw_ring_rx_receive(struct aq_hw_s *self,
674 674
675 rx_stat = (0x0000003CU & rxd_wb->status) >> 2; 675 rx_stat = (0x0000003CU & rxd_wb->status) >> 2;
676 676
677 is_rx_check_sum_enabled = (rxd_wb->type) & (0x3U << 19); 677 is_rx_check_sum_enabled = (rxd_wb->type >> 19) & 0x3U;
678 678
679 pkt_type = 0xFFU & (rxd_wb->type >> 4); 679 pkt_type = 0xFFU & (rxd_wb->type >> 4);
680 680
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index d4c300117529..5d21c14853ac 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -5162,6 +5162,7 @@ static int bnxt_hwrm_get_rings(struct bnxt *bp)
5162 cp = le16_to_cpu(resp->alloc_cmpl_rings); 5162 cp = le16_to_cpu(resp->alloc_cmpl_rings);
5163 stats = le16_to_cpu(resp->alloc_stat_ctx); 5163 stats = le16_to_cpu(resp->alloc_stat_ctx);
5164 cp = min_t(u16, cp, stats); 5164 cp = min_t(u16, cp, stats);
5165 hw_resc->resv_irqs = cp;
5165 if (bp->flags & BNXT_FLAG_CHIP_P5) { 5166 if (bp->flags & BNXT_FLAG_CHIP_P5) {
5166 int rx = hw_resc->resv_rx_rings; 5167 int rx = hw_resc->resv_rx_rings;
5167 int tx = hw_resc->resv_tx_rings; 5168 int tx = hw_resc->resv_tx_rings;
@@ -5175,7 +5176,7 @@ static int bnxt_hwrm_get_rings(struct bnxt *bp)
5175 hw_resc->resv_rx_rings = rx; 5176 hw_resc->resv_rx_rings = rx;
5176 hw_resc->resv_tx_rings = tx; 5177 hw_resc->resv_tx_rings = tx;
5177 } 5178 }
5178 cp = le16_to_cpu(resp->alloc_msix); 5179 hw_resc->resv_irqs = le16_to_cpu(resp->alloc_msix);
5179 hw_resc->resv_hw_ring_grps = rx; 5180 hw_resc->resv_hw_ring_grps = rx;
5180 } 5181 }
5181 hw_resc->resv_cp_rings = cp; 5182 hw_resc->resv_cp_rings = cp;
@@ -5353,7 +5354,7 @@ static int bnxt_hwrm_reserve_rings(struct bnxt *bp, int tx, int rx, int grp,
5353 return bnxt_hwrm_reserve_vf_rings(bp, tx, rx, grp, cp, vnic); 5354 return bnxt_hwrm_reserve_vf_rings(bp, tx, rx, grp, cp, vnic);
5354} 5355}
5355 5356
5356static int bnxt_cp_rings_in_use(struct bnxt *bp) 5357static int bnxt_nq_rings_in_use(struct bnxt *bp)
5357{ 5358{
5358 int cp = bp->cp_nr_rings; 5359 int cp = bp->cp_nr_rings;
5359 int ulp_msix, ulp_base; 5360 int ulp_msix, ulp_base;
@@ -5368,10 +5369,22 @@ static int bnxt_cp_rings_in_use(struct bnxt *bp)
5368 return cp; 5369 return cp;
5369} 5370}
5370 5371
5372static int bnxt_cp_rings_in_use(struct bnxt *bp)
5373{
5374 int cp;
5375
5376 if (!(bp->flags & BNXT_FLAG_CHIP_P5))
5377 return bnxt_nq_rings_in_use(bp);
5378
5379 cp = bp->tx_nr_rings + bp->rx_nr_rings;
5380 return cp;
5381}
5382
5371static bool bnxt_need_reserve_rings(struct bnxt *bp) 5383static bool bnxt_need_reserve_rings(struct bnxt *bp)
5372{ 5384{
5373 struct bnxt_hw_resc *hw_resc = &bp->hw_resc; 5385 struct bnxt_hw_resc *hw_resc = &bp->hw_resc;
5374 int cp = bnxt_cp_rings_in_use(bp); 5386 int cp = bnxt_cp_rings_in_use(bp);
5387 int nq = bnxt_nq_rings_in_use(bp);
5375 int rx = bp->rx_nr_rings; 5388 int rx = bp->rx_nr_rings;
5376 int vnic = 1, grp = rx; 5389 int vnic = 1, grp = rx;
5377 5390
@@ -5387,7 +5400,7 @@ static bool bnxt_need_reserve_rings(struct bnxt *bp)
5387 rx <<= 1; 5400 rx <<= 1;
5388 if (BNXT_NEW_RM(bp) && 5401 if (BNXT_NEW_RM(bp) &&
5389 (hw_resc->resv_rx_rings != rx || hw_resc->resv_cp_rings != cp || 5402 (hw_resc->resv_rx_rings != rx || hw_resc->resv_cp_rings != cp ||
5390 hw_resc->resv_vnics != vnic || 5403 hw_resc->resv_irqs < nq || hw_resc->resv_vnics != vnic ||
5391 (hw_resc->resv_hw_ring_grps != grp && 5404 (hw_resc->resv_hw_ring_grps != grp &&
5392 !(bp->flags & BNXT_FLAG_CHIP_P5)))) 5405 !(bp->flags & BNXT_FLAG_CHIP_P5))))
5393 return true; 5406 return true;
@@ -5397,7 +5410,7 @@ static bool bnxt_need_reserve_rings(struct bnxt *bp)
5397static int __bnxt_reserve_rings(struct bnxt *bp) 5410static int __bnxt_reserve_rings(struct bnxt *bp)
5398{ 5411{
5399 struct bnxt_hw_resc *hw_resc = &bp->hw_resc; 5412 struct bnxt_hw_resc *hw_resc = &bp->hw_resc;
5400 int cp = bnxt_cp_rings_in_use(bp); 5413 int cp = bnxt_nq_rings_in_use(bp);
5401 int tx = bp->tx_nr_rings; 5414 int tx = bp->tx_nr_rings;
5402 int rx = bp->rx_nr_rings; 5415 int rx = bp->rx_nr_rings;
5403 int grp, rx_rings, rc; 5416 int grp, rx_rings, rc;
@@ -5422,7 +5435,7 @@ static int __bnxt_reserve_rings(struct bnxt *bp)
5422 tx = hw_resc->resv_tx_rings; 5435 tx = hw_resc->resv_tx_rings;
5423 if (BNXT_NEW_RM(bp)) { 5436 if (BNXT_NEW_RM(bp)) {
5424 rx = hw_resc->resv_rx_rings; 5437 rx = hw_resc->resv_rx_rings;
5425 cp = hw_resc->resv_cp_rings; 5438 cp = hw_resc->resv_irqs;
5426 grp = hw_resc->resv_hw_ring_grps; 5439 grp = hw_resc->resv_hw_ring_grps;
5427 vnic = hw_resc->resv_vnics; 5440 vnic = hw_resc->resv_vnics;
5428 } 5441 }
@@ -6292,6 +6305,8 @@ hwrm_func_qcaps_exit:
6292 return rc; 6305 return rc;
6293} 6306}
6294 6307
6308static int bnxt_hwrm_queue_qportcfg(struct bnxt *bp);
6309
6295static int bnxt_hwrm_func_qcaps(struct bnxt *bp) 6310static int bnxt_hwrm_func_qcaps(struct bnxt *bp)
6296{ 6311{
6297 int rc; 6312 int rc;
@@ -6299,6 +6314,11 @@ static int bnxt_hwrm_func_qcaps(struct bnxt *bp)
6299 rc = __bnxt_hwrm_func_qcaps(bp); 6314 rc = __bnxt_hwrm_func_qcaps(bp);
6300 if (rc) 6315 if (rc)
6301 return rc; 6316 return rc;
6317 rc = bnxt_hwrm_queue_qportcfg(bp);
6318 if (rc) {
6319 netdev_err(bp->dev, "hwrm query qportcfg failure rc: %d\n", rc);
6320 return rc;
6321 }
6302 if (bp->hwrm_spec_code >= 0x10803) { 6322 if (bp->hwrm_spec_code >= 0x10803) {
6303 rc = bnxt_alloc_ctx_mem(bp); 6323 rc = bnxt_alloc_ctx_mem(bp);
6304 if (rc) 6324 if (rc)
@@ -7026,7 +7046,12 @@ unsigned int bnxt_get_max_func_cp_rings(struct bnxt *bp)
7026 7046
7027unsigned int bnxt_get_max_func_cp_rings_for_en(struct bnxt *bp) 7047unsigned int bnxt_get_max_func_cp_rings_for_en(struct bnxt *bp)
7028{ 7048{
7029 return bp->hw_resc.max_cp_rings - bnxt_get_ulp_msix_num(bp); 7049 unsigned int cp = bp->hw_resc.max_cp_rings;
7050
7051 if (!(bp->flags & BNXT_FLAG_CHIP_P5))
7052 cp -= bnxt_get_ulp_msix_num(bp);
7053
7054 return cp;
7030} 7055}
7031 7056
7032static unsigned int bnxt_get_max_func_irqs(struct bnxt *bp) 7057static unsigned int bnxt_get_max_func_irqs(struct bnxt *bp)
@@ -7048,7 +7073,9 @@ int bnxt_get_avail_msix(struct bnxt *bp, int num)
7048 int total_req = bp->cp_nr_rings + num; 7073 int total_req = bp->cp_nr_rings + num;
7049 int max_idx, avail_msix; 7074 int max_idx, avail_msix;
7050 7075
7051 max_idx = min_t(int, bp->total_irqs, max_cp); 7076 max_idx = bp->total_irqs;
7077 if (!(bp->flags & BNXT_FLAG_CHIP_P5))
7078 max_idx = min_t(int, bp->total_irqs, max_cp);
7052 avail_msix = max_idx - bp->cp_nr_rings; 7079 avail_msix = max_idx - bp->cp_nr_rings;
7053 if (!BNXT_NEW_RM(bp) || avail_msix >= num) 7080 if (!BNXT_NEW_RM(bp) || avail_msix >= num)
7054 return avail_msix; 7081 return avail_msix;
@@ -7066,7 +7093,7 @@ static int bnxt_get_num_msix(struct bnxt *bp)
7066 if (!BNXT_NEW_RM(bp)) 7093 if (!BNXT_NEW_RM(bp))
7067 return bnxt_get_max_func_irqs(bp); 7094 return bnxt_get_max_func_irqs(bp);
7068 7095
7069 return bnxt_cp_rings_in_use(bp); 7096 return bnxt_nq_rings_in_use(bp);
7070} 7097}
7071 7098
7072static int bnxt_init_msix(struct bnxt *bp) 7099static int bnxt_init_msix(struct bnxt *bp)
@@ -7794,6 +7821,7 @@ static int bnxt_hwrm_if_change(struct bnxt *bp, bool up)
7794 7821
7795 rc = bnxt_hwrm_func_resc_qcaps(bp, true); 7822 rc = bnxt_hwrm_func_resc_qcaps(bp, true);
7796 hw_resc->resv_cp_rings = 0; 7823 hw_resc->resv_cp_rings = 0;
7824 hw_resc->resv_irqs = 0;
7797 hw_resc->resv_tx_rings = 0; 7825 hw_resc->resv_tx_rings = 0;
7798 hw_resc->resv_rx_rings = 0; 7826 hw_resc->resv_rx_rings = 0;
7799 hw_resc->resv_hw_ring_grps = 0; 7827 hw_resc->resv_hw_ring_grps = 0;
@@ -9799,13 +9827,16 @@ static void _bnxt_get_max_rings(struct bnxt *bp, int *max_rx, int *max_tx,
9799 int *max_cp) 9827 int *max_cp)
9800{ 9828{
9801 struct bnxt_hw_resc *hw_resc = &bp->hw_resc; 9829 struct bnxt_hw_resc *hw_resc = &bp->hw_resc;
9802 int max_ring_grps = 0; 9830 int max_ring_grps = 0, max_irq;
9803 9831
9804 *max_tx = hw_resc->max_tx_rings; 9832 *max_tx = hw_resc->max_tx_rings;
9805 *max_rx = hw_resc->max_rx_rings; 9833 *max_rx = hw_resc->max_rx_rings;
9806 *max_cp = min_t(int, bnxt_get_max_func_cp_rings_for_en(bp), 9834 *max_cp = bnxt_get_max_func_cp_rings_for_en(bp);
9807 hw_resc->max_irqs - bnxt_get_ulp_msix_num(bp)); 9835 max_irq = min_t(int, bnxt_get_max_func_irqs(bp) -
9808 *max_cp = min_t(int, *max_cp, hw_resc->max_stat_ctxs); 9836 bnxt_get_ulp_msix_num(bp),
9837 bnxt_get_max_func_stat_ctxs(bp));
9838 if (!(bp->flags & BNXT_FLAG_CHIP_P5))
9839 *max_cp = min_t(int, *max_cp, max_irq);
9809 max_ring_grps = hw_resc->max_hw_ring_grps; 9840 max_ring_grps = hw_resc->max_hw_ring_grps;
9810 if (BNXT_CHIP_TYPE_NITRO_A0(bp) && BNXT_PF(bp)) { 9841 if (BNXT_CHIP_TYPE_NITRO_A0(bp) && BNXT_PF(bp)) {
9811 *max_cp -= 1; 9842 *max_cp -= 1;
@@ -9813,6 +9844,11 @@ static void _bnxt_get_max_rings(struct bnxt *bp, int *max_rx, int *max_tx,
9813 } 9844 }
9814 if (bp->flags & BNXT_FLAG_AGG_RINGS) 9845 if (bp->flags & BNXT_FLAG_AGG_RINGS)
9815 *max_rx >>= 1; 9846 *max_rx >>= 1;
9847 if (bp->flags & BNXT_FLAG_CHIP_P5) {
9848 bnxt_trim_rings(bp, max_rx, max_tx, *max_cp, false);
9849 /* On P5 chips, max_cp output param should be available NQs */
9850 *max_cp = max_irq;
9851 }
9816 *max_rx = min_t(int, *max_rx, max_ring_grps); 9852 *max_rx = min_t(int, *max_rx, max_ring_grps);
9817} 9853}
9818 9854
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
index 9e99d4ab3e06..3030931ccaf8 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
@@ -928,6 +928,7 @@ struct bnxt_hw_resc {
928 u16 min_stat_ctxs; 928 u16 min_stat_ctxs;
929 u16 max_stat_ctxs; 929 u16 max_stat_ctxs;
930 u16 max_irqs; 930 u16 max_irqs;
931 u16 resv_irqs;
931}; 932};
932 933
933#if defined(CONFIG_BNXT_SRIOV) 934#if defined(CONFIG_BNXT_SRIOV)
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
index b59b382d34f9..0a3097baafde 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
@@ -168,7 +168,7 @@ static int bnxt_req_msix_vecs(struct bnxt_en_dev *edev, int ulp_id,
168 if (BNXT_NEW_RM(bp)) { 168 if (BNXT_NEW_RM(bp)) {
169 struct bnxt_hw_resc *hw_resc = &bp->hw_resc; 169 struct bnxt_hw_resc *hw_resc = &bp->hw_resc;
170 170
171 avail_msix = hw_resc->resv_cp_rings - bp->cp_nr_rings; 171 avail_msix = hw_resc->resv_irqs - bp->cp_nr_rings;
172 edev->ulp_tbl[ulp_id].msix_requested = avail_msix; 172 edev->ulp_tbl[ulp_id].msix_requested = avail_msix;
173 } 173 }
174 bnxt_fill_msix_vecs(bp, ent); 174 bnxt_fill_msix_vecs(bp, ent);
diff --git a/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c b/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c
index 4c3925af53bc..abe5d0dac851 100644
--- a/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c
+++ b/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c
@@ -111,7 +111,7 @@ static const char oct_stats_strings[][ETH_GSTRING_LEN] = {
111 "mac_tx_one_collision", 111 "mac_tx_one_collision",
112 "mac_tx_multi_collision", 112 "mac_tx_multi_collision",
113 "mac_tx_max_collision_fail", 113 "mac_tx_max_collision_fail",
114 "mac_tx_max_deferal_fail", 114 "mac_tx_max_deferral_fail",
115 "mac_tx_fifo_err", 115 "mac_tx_fifo_err",
116 "mac_tx_runts", 116 "mac_tx_runts",
117 117
diff --git a/drivers/net/ethernet/cavium/liquidio/lio_vf_rep.c b/drivers/net/ethernet/cavium/liquidio/lio_vf_rep.c
index ea9859e028d4..de61060721c4 100644
--- a/drivers/net/ethernet/cavium/liquidio/lio_vf_rep.c
+++ b/drivers/net/ethernet/cavium/liquidio/lio_vf_rep.c
@@ -349,13 +349,15 @@ lio_vf_rep_packet_sent_callback(struct octeon_device *oct,
349 struct octeon_soft_command *sc = (struct octeon_soft_command *)buf; 349 struct octeon_soft_command *sc = (struct octeon_soft_command *)buf;
350 struct sk_buff *skb = sc->ctxptr; 350 struct sk_buff *skb = sc->ctxptr;
351 struct net_device *ndev = skb->dev; 351 struct net_device *ndev = skb->dev;
352 u32 iq_no;
352 353
353 dma_unmap_single(&oct->pci_dev->dev, sc->dmadptr, 354 dma_unmap_single(&oct->pci_dev->dev, sc->dmadptr,
354 sc->datasize, DMA_TO_DEVICE); 355 sc->datasize, DMA_TO_DEVICE);
355 dev_kfree_skb_any(skb); 356 dev_kfree_skb_any(skb);
357 iq_no = sc->iq_no;
356 octeon_free_soft_command(oct, sc); 358 octeon_free_soft_command(oct, sc);
357 359
358 if (octnet_iq_is_full(oct, sc->iq_no)) 360 if (octnet_iq_is_full(oct, iq_no))
359 return; 361 return;
360 362
361 if (netif_queue_stopped(ndev)) 363 if (netif_queue_stopped(ndev))
diff --git a/drivers/net/ethernet/freescale/fman/fman.c b/drivers/net/ethernet/freescale/fman/fman.c
index c415ac67cb7b..e80fedb27cee 100644
--- a/drivers/net/ethernet/freescale/fman/fman.c
+++ b/drivers/net/ethernet/freescale/fman/fman.c
@@ -2786,7 +2786,7 @@ static struct fman *read_dts_node(struct platform_device *of_dev)
2786 if (!muram_node) { 2786 if (!muram_node) {
2787 dev_err(&of_dev->dev, "%s: could not find MURAM node\n", 2787 dev_err(&of_dev->dev, "%s: could not find MURAM node\n",
2788 __func__); 2788 __func__);
2789 goto fman_node_put; 2789 goto fman_free;
2790 } 2790 }
2791 2791
2792 err = of_address_to_resource(muram_node, 0, 2792 err = of_address_to_resource(muram_node, 0,
@@ -2795,11 +2795,10 @@ static struct fman *read_dts_node(struct platform_device *of_dev)
2795 of_node_put(muram_node); 2795 of_node_put(muram_node);
2796 dev_err(&of_dev->dev, "%s: of_address_to_resource() = %d\n", 2796 dev_err(&of_dev->dev, "%s: of_address_to_resource() = %d\n",
2797 __func__, err); 2797 __func__, err);
2798 goto fman_node_put; 2798 goto fman_free;
2799 } 2799 }
2800 2800
2801 of_node_put(muram_node); 2801 of_node_put(muram_node);
2802 of_node_put(fm_node);
2803 2802
2804 err = devm_request_irq(&of_dev->dev, irq, fman_irq, IRQF_SHARED, 2803 err = devm_request_irq(&of_dev->dev, irq, fman_irq, IRQF_SHARED,
2805 "fman", fman); 2804 "fman", fman);
diff --git a/drivers/net/ethernet/ibm/emac/emac.h b/drivers/net/ethernet/ibm/emac/emac.h
index e2f80cca9bed..0d2de6f67676 100644
--- a/drivers/net/ethernet/ibm/emac/emac.h
+++ b/drivers/net/ethernet/ibm/emac/emac.h
@@ -231,7 +231,7 @@ struct emac_regs {
231#define EMAC_STACR_PHYE 0x00004000 231#define EMAC_STACR_PHYE 0x00004000
232#define EMAC_STACR_STAC_MASK 0x00003000 232#define EMAC_STACR_STAC_MASK 0x00003000
233#define EMAC_STACR_STAC_READ 0x00001000 233#define EMAC_STACR_STAC_READ 0x00001000
234#define EMAC_STACR_STAC_WRITE 0x00000800 234#define EMAC_STACR_STAC_WRITE 0x00002000
235#define EMAC_STACR_OPBC_MASK 0x00000C00 235#define EMAC_STACR_OPBC_MASK 0x00000C00
236#define EMAC_STACR_OPBC_50 0x00000000 236#define EMAC_STACR_OPBC_50 0x00000000
237#define EMAC_STACR_OPBC_66 0x00000400 237#define EMAC_STACR_OPBC_66 0x00000400
diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
index c0203a0d5e3b..ed50b8dee44f 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -1859,7 +1859,7 @@ static int do_reset(struct ibmvnic_adapter *adapter,
1859 1859
1860 if (adapter->reset_reason != VNIC_RESET_FAILOVER && 1860 if (adapter->reset_reason != VNIC_RESET_FAILOVER &&
1861 adapter->reset_reason != VNIC_RESET_CHANGE_PARAM) 1861 adapter->reset_reason != VNIC_RESET_CHANGE_PARAM)
1862 netdev_notify_peers(netdev); 1862 call_netdevice_notifiers(NETDEV_NOTIFY_PEERS, netdev);
1863 1863
1864 netif_carrier_on(netdev); 1864 netif_carrier_on(netdev);
1865 1865
diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
index 7a37a37e3fb3..125ea99418df 100644
--- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
+++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
@@ -4375,8 +4375,27 @@ static void mvpp2_phylink_validate(struct net_device *dev,
4375 unsigned long *supported, 4375 unsigned long *supported,
4376 struct phylink_link_state *state) 4376 struct phylink_link_state *state)
4377{ 4377{
4378 struct mvpp2_port *port = netdev_priv(dev);
4378 __ETHTOOL_DECLARE_LINK_MODE_MASK(mask) = { 0, }; 4379 __ETHTOOL_DECLARE_LINK_MODE_MASK(mask) = { 0, };
4379 4380
4381 /* Invalid combinations */
4382 switch (state->interface) {
4383 case PHY_INTERFACE_MODE_10GKR:
4384 case PHY_INTERFACE_MODE_XAUI:
4385 if (port->gop_id != 0)
4386 goto empty_set;
4387 break;
4388 case PHY_INTERFACE_MODE_RGMII:
4389 case PHY_INTERFACE_MODE_RGMII_ID:
4390 case PHY_INTERFACE_MODE_RGMII_RXID:
4391 case PHY_INTERFACE_MODE_RGMII_TXID:
4392 if (port->gop_id == 0)
4393 goto empty_set;
4394 break;
4395 default:
4396 break;
4397 }
4398
4380 phylink_set(mask, Autoneg); 4399 phylink_set(mask, Autoneg);
4381 phylink_set_port_modes(mask); 4400 phylink_set_port_modes(mask);
4382 phylink_set(mask, Pause); 4401 phylink_set(mask, Pause);
@@ -4384,6 +4403,8 @@ static void mvpp2_phylink_validate(struct net_device *dev,
4384 4403
4385 switch (state->interface) { 4404 switch (state->interface) {
4386 case PHY_INTERFACE_MODE_10GKR: 4405 case PHY_INTERFACE_MODE_10GKR:
4406 case PHY_INTERFACE_MODE_XAUI:
4407 case PHY_INTERFACE_MODE_NA:
4387 phylink_set(mask, 10000baseCR_Full); 4408 phylink_set(mask, 10000baseCR_Full);
4388 phylink_set(mask, 10000baseSR_Full); 4409 phylink_set(mask, 10000baseSR_Full);
4389 phylink_set(mask, 10000baseLR_Full); 4410 phylink_set(mask, 10000baseLR_Full);
@@ -4391,7 +4412,11 @@ static void mvpp2_phylink_validate(struct net_device *dev,
4391 phylink_set(mask, 10000baseER_Full); 4412 phylink_set(mask, 10000baseER_Full);
4392 phylink_set(mask, 10000baseKR_Full); 4413 phylink_set(mask, 10000baseKR_Full);
4393 /* Fall-through */ 4414 /* Fall-through */
4394 default: 4415 case PHY_INTERFACE_MODE_RGMII:
4416 case PHY_INTERFACE_MODE_RGMII_ID:
4417 case PHY_INTERFACE_MODE_RGMII_RXID:
4418 case PHY_INTERFACE_MODE_RGMII_TXID:
4419 case PHY_INTERFACE_MODE_SGMII:
4395 phylink_set(mask, 10baseT_Half); 4420 phylink_set(mask, 10baseT_Half);
4396 phylink_set(mask, 10baseT_Full); 4421 phylink_set(mask, 10baseT_Full);
4397 phylink_set(mask, 100baseT_Half); 4422 phylink_set(mask, 100baseT_Half);
@@ -4403,11 +4428,18 @@ static void mvpp2_phylink_validate(struct net_device *dev,
4403 phylink_set(mask, 1000baseT_Full); 4428 phylink_set(mask, 1000baseT_Full);
4404 phylink_set(mask, 1000baseX_Full); 4429 phylink_set(mask, 1000baseX_Full);
4405 phylink_set(mask, 2500baseX_Full); 4430 phylink_set(mask, 2500baseX_Full);
4431 break;
4432 default:
4433 goto empty_set;
4406 } 4434 }
4407 4435
4408 bitmap_and(supported, supported, mask, __ETHTOOL_LINK_MODE_MASK_NBITS); 4436 bitmap_and(supported, supported, mask, __ETHTOOL_LINK_MODE_MASK_NBITS);
4409 bitmap_and(state->advertising, state->advertising, mask, 4437 bitmap_and(state->advertising, state->advertising, mask,
4410 __ETHTOOL_LINK_MODE_MASK_NBITS); 4438 __ETHTOOL_LINK_MODE_MASK_NBITS);
4439 return;
4440
4441empty_set:
4442 bitmap_zero(supported, __ETHTOOL_LINK_MODE_MASK_NBITS);
4411} 4443}
4412 4444
4413static void mvpp22_xlg_link_state(struct mvpp2_port *port, 4445static void mvpp22_xlg_link_state(struct mvpp2_port *port,
diff --git a/drivers/net/ethernet/mellanox/mlx4/Kconfig b/drivers/net/ethernet/mellanox/mlx4/Kconfig
index 36054e6fb9d3..f200b8c420d5 100644
--- a/drivers/net/ethernet/mellanox/mlx4/Kconfig
+++ b/drivers/net/ethernet/mellanox/mlx4/Kconfig
@@ -5,7 +5,7 @@
5config MLX4_EN 5config MLX4_EN
6 tristate "Mellanox Technologies 1/10/40Gbit Ethernet support" 6 tristate "Mellanox Technologies 1/10/40Gbit Ethernet support"
7 depends on MAY_USE_DEVLINK 7 depends on MAY_USE_DEVLINK
8 depends on PCI 8 depends on PCI && NETDEVICES && ETHERNET && INET
9 select MLX4_CORE 9 select MLX4_CORE
10 imply PTP_1588_CLOCK 10 imply PTP_1588_CLOCK
11 ---help--- 11 ---help---
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
index f11b45001cad..d290f0787dfb 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
@@ -1084,8 +1084,8 @@ static int mlx4_en_set_pauseparam(struct net_device *dev,
1084 1084
1085 tx_pause = !!(pause->tx_pause); 1085 tx_pause = !!(pause->tx_pause);
1086 rx_pause = !!(pause->rx_pause); 1086 rx_pause = !!(pause->rx_pause);
1087 rx_ppp = priv->prof->rx_ppp && !(tx_pause || rx_pause); 1087 rx_ppp = (tx_pause || rx_pause) ? 0 : priv->prof->rx_ppp;
1088 tx_ppp = priv->prof->tx_ppp && !(tx_pause || rx_pause); 1088 tx_ppp = (tx_pause || rx_pause) ? 0 : priv->prof->tx_ppp;
1089 1089
1090 err = mlx4_SET_PORT_general(mdev->dev, priv->port, 1090 err = mlx4_SET_PORT_general(mdev->dev, priv->port,
1091 priv->rx_skb_size + ETH_FCS_LEN, 1091 priv->rx_skb_size + ETH_FCS_LEN,
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
index b744cd49a785..6b88881b8e35 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
@@ -3493,8 +3493,8 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port,
3493 dev->gso_partial_features = NETIF_F_GSO_UDP_TUNNEL_CSUM; 3493 dev->gso_partial_features = NETIF_F_GSO_UDP_TUNNEL_CSUM;
3494 } 3494 }
3495 3495
3496 /* MTU range: 46 - hw-specific max */ 3496 /* MTU range: 68 - hw-specific max */
3497 dev->min_mtu = MLX4_EN_MIN_MTU; 3497 dev->min_mtu = ETH_MIN_MTU;
3498 dev->max_mtu = priv->max_mtu; 3498 dev->max_mtu = priv->max_mtu;
3499 3499
3500 mdev->pndev[port] = dev; 3500 mdev->pndev[port] = dev;
diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
index 485d856546c6..8137454e2534 100644
--- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
+++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
@@ -161,7 +161,6 @@
161#define MLX4_SELFTEST_LB_MIN_MTU (MLX4_LOOPBACK_TEST_PAYLOAD + NET_IP_ALIGN + \ 161#define MLX4_SELFTEST_LB_MIN_MTU (MLX4_LOOPBACK_TEST_PAYLOAD + NET_IP_ALIGN + \
162 ETH_HLEN + PREAMBLE_LEN) 162 ETH_HLEN + PREAMBLE_LEN)
163 163
164#define MLX4_EN_MIN_MTU 46
165/* VLAN_HLEN is added twice,to support skb vlan tagged with multiple 164/* VLAN_HLEN is added twice,to support skb vlan tagged with multiple
166 * headers. (For example: ETH_P_8021Q and ETH_P_8021AD). 165 * headers. (For example: ETH_P_8021Q and ETH_P_8021AD).
167 */ 166 */
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
index 16985ca3248d..624eed345b5d 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
@@ -724,9 +724,9 @@ static u32 mlx5e_get_fcs(const struct sk_buff *skb)
724 return __get_unaligned_cpu32(fcs_bytes); 724 return __get_unaligned_cpu32(fcs_bytes);
725} 725}
726 726
727static u8 get_ip_proto(struct sk_buff *skb, __be16 proto) 727static u8 get_ip_proto(struct sk_buff *skb, int network_depth, __be16 proto)
728{ 728{
729 void *ip_p = skb->data + sizeof(struct ethhdr); 729 void *ip_p = skb->data + network_depth;
730 730
731 return (proto == htons(ETH_P_IP)) ? ((struct iphdr *)ip_p)->protocol : 731 return (proto == htons(ETH_P_IP)) ? ((struct iphdr *)ip_p)->protocol :
732 ((struct ipv6hdr *)ip_p)->nexthdr; 732 ((struct ipv6hdr *)ip_p)->nexthdr;
@@ -755,7 +755,7 @@ static inline void mlx5e_handle_csum(struct net_device *netdev,
755 goto csum_unnecessary; 755 goto csum_unnecessary;
756 756
757 if (likely(is_last_ethertype_ip(skb, &network_depth, &proto))) { 757 if (likely(is_last_ethertype_ip(skb, &network_depth, &proto))) {
758 if (unlikely(get_ip_proto(skb, proto) == IPPROTO_SCTP)) 758 if (unlikely(get_ip_proto(skb, network_depth, proto) == IPPROTO_SCTP))
759 goto csum_unnecessary; 759 goto csum_unnecessary;
760 760
761 skb->ip_summed = CHECKSUM_COMPLETE; 761 skb->ip_summed = CHECKSUM_COMPLETE;
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c
index ad06d9969bc1..5c13674439f1 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c
@@ -560,7 +560,7 @@ static void mlxsw_sp_nve_mc_list_ip_del(struct mlxsw_sp *mlxsw_sp,
560 560
561 mc_record = mlxsw_sp_nve_mc_record_find(mc_list, proto, addr, 561 mc_record = mlxsw_sp_nve_mc_record_find(mc_list, proto, addr,
562 &mc_entry); 562 &mc_entry);
563 if (WARN_ON(!mc_record)) 563 if (!mc_record)
564 return; 564 return;
565 565
566 mlxsw_sp_nve_mc_record_entry_del(mc_record, mc_entry); 566 mlxsw_sp_nve_mc_record_entry_del(mc_record, mc_entry);
@@ -647,7 +647,7 @@ void mlxsw_sp_nve_flood_ip_del(struct mlxsw_sp *mlxsw_sp,
647 647
648 key.fid_index = mlxsw_sp_fid_index(fid); 648 key.fid_index = mlxsw_sp_fid_index(fid);
649 mc_list = mlxsw_sp_nve_mc_list_find(mlxsw_sp, &key); 649 mc_list = mlxsw_sp_nve_mc_list_find(mlxsw_sp, &key);
650 if (WARN_ON(!mc_list)) 650 if (!mc_list)
651 return; 651 return;
652 652
653 mlxsw_sp_nve_fid_flood_index_clear(fid, mc_list); 653 mlxsw_sp_nve_fid_flood_index_clear(fid, mc_list);
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
index 9e9bb57134f2..6ebf99cc3154 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
@@ -1275,15 +1275,12 @@ mlxsw_sp_ipip_entry_matches_decap(struct mlxsw_sp *mlxsw_sp,
1275{ 1275{
1276 u32 ul_tb_id = l3mdev_fib_table(ul_dev) ? : RT_TABLE_MAIN; 1276 u32 ul_tb_id = l3mdev_fib_table(ul_dev) ? : RT_TABLE_MAIN;
1277 enum mlxsw_sp_ipip_type ipipt = ipip_entry->ipipt; 1277 enum mlxsw_sp_ipip_type ipipt = ipip_entry->ipipt;
1278 struct net_device *ipip_ul_dev;
1279 1278
1280 if (mlxsw_sp->router->ipip_ops_arr[ipipt]->ul_proto != ul_proto) 1279 if (mlxsw_sp->router->ipip_ops_arr[ipipt]->ul_proto != ul_proto)
1281 return false; 1280 return false;
1282 1281
1283 ipip_ul_dev = __mlxsw_sp_ipip_netdev_ul_dev_get(ipip_entry->ol_dev);
1284 return mlxsw_sp_ipip_entry_saddr_matches(mlxsw_sp, ul_proto, ul_dip, 1282 return mlxsw_sp_ipip_entry_saddr_matches(mlxsw_sp, ul_proto, ul_dip,
1285 ul_tb_id, ipip_entry) && 1283 ul_tb_id, ipip_entry);
1286 (!ipip_ul_dev || ipip_ul_dev == ul_dev);
1287} 1284}
1288 1285
1289/* Given decap parameters, find the corresponding IPIP entry. */ 1286/* Given decap parameters, find the corresponding IPIP entry. */
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
index 739a51f0a366..50080c60a279 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
@@ -296,7 +296,13 @@ static bool
296mlxsw_sp_bridge_port_should_destroy(const struct mlxsw_sp_bridge_port * 296mlxsw_sp_bridge_port_should_destroy(const struct mlxsw_sp_bridge_port *
297 bridge_port) 297 bridge_port)
298{ 298{
299 struct mlxsw_sp *mlxsw_sp = mlxsw_sp_lower_get(bridge_port->dev); 299 struct net_device *dev = bridge_port->dev;
300 struct mlxsw_sp *mlxsw_sp;
301
302 if (is_vlan_dev(dev))
303 mlxsw_sp = mlxsw_sp_lower_get(vlan_dev_real_dev(dev));
304 else
305 mlxsw_sp = mlxsw_sp_lower_get(dev);
300 306
301 /* In case ports were pulled from out of a bridged LAG, then 307 /* In case ports were pulled from out of a bridged LAG, then
302 * it's possible the reference count isn't zero, yet the bridge 308 * it's possible the reference count isn't zero, yet the bridge
@@ -2109,7 +2115,7 @@ mlxsw_sp_bridge_8021d_port_leave(struct mlxsw_sp_bridge_device *bridge_device,
2109 2115
2110 vid = is_vlan_dev(dev) ? vlan_dev_vlan_id(dev) : 1; 2116 vid = is_vlan_dev(dev) ? vlan_dev_vlan_id(dev) : 1;
2111 mlxsw_sp_port_vlan = mlxsw_sp_port_vlan_find_by_vid(mlxsw_sp_port, vid); 2117 mlxsw_sp_port_vlan = mlxsw_sp_port_vlan_find_by_vid(mlxsw_sp_port, vid);
2112 if (WARN_ON(!mlxsw_sp_port_vlan)) 2118 if (!mlxsw_sp_port_vlan)
2113 return; 2119 return;
2114 2120
2115 mlxsw_sp_port_vlan_bridge_leave(mlxsw_sp_port_vlan); 2121 mlxsw_sp_port_vlan_bridge_leave(mlxsw_sp_port_vlan);
@@ -2134,8 +2140,10 @@ mlxsw_sp_bridge_8021d_vxlan_join(struct mlxsw_sp_bridge_device *bridge_device,
2134 if (!fid) 2140 if (!fid)
2135 return -EINVAL; 2141 return -EINVAL;
2136 2142
2137 if (mlxsw_sp_fid_vni_is_set(fid)) 2143 if (mlxsw_sp_fid_vni_is_set(fid)) {
2138 return -EINVAL; 2144 err = -EINVAL;
2145 goto err_vni_exists;
2146 }
2139 2147
2140 err = mlxsw_sp_nve_fid_enable(mlxsw_sp, fid, &params, extack); 2148 err = mlxsw_sp_nve_fid_enable(mlxsw_sp, fid, &params, extack);
2141 if (err) 2149 if (err)
@@ -2149,6 +2157,7 @@ mlxsw_sp_bridge_8021d_vxlan_join(struct mlxsw_sp_bridge_device *bridge_device,
2149 return 0; 2157 return 0;
2150 2158
2151err_nve_fid_enable: 2159err_nve_fid_enable:
2160err_vni_exists:
2152 mlxsw_sp_fid_put(fid); 2161 mlxsw_sp_fid_put(fid);
2153 return err; 2162 return err;
2154} 2163}
diff --git a/drivers/net/ethernet/netronome/nfp/flower/offload.c b/drivers/net/ethernet/netronome/nfp/flower/offload.c
index 29c95423ab64..2f49eb75f3cc 100644
--- a/drivers/net/ethernet/netronome/nfp/flower/offload.c
+++ b/drivers/net/ethernet/netronome/nfp/flower/offload.c
@@ -476,16 +476,16 @@ nfp_flower_add_offload(struct nfp_app *app, struct net_device *netdev,
476 if (err) 476 if (err)
477 goto err_destroy_flow; 477 goto err_destroy_flow;
478 478
479 err = nfp_flower_xmit_flow(netdev, flow_pay,
480 NFP_FLOWER_CMSG_TYPE_FLOW_ADD);
481 if (err)
482 goto err_destroy_flow;
483
484 flow_pay->tc_flower_cookie = flow->cookie; 479 flow_pay->tc_flower_cookie = flow->cookie;
485 err = rhashtable_insert_fast(&priv->flow_table, &flow_pay->fl_node, 480 err = rhashtable_insert_fast(&priv->flow_table, &flow_pay->fl_node,
486 nfp_flower_table_params); 481 nfp_flower_table_params);
487 if (err) 482 if (err)
488 goto err_destroy_flow; 483 goto err_release_metadata;
484
485 err = nfp_flower_xmit_flow(netdev, flow_pay,
486 NFP_FLOWER_CMSG_TYPE_FLOW_ADD);
487 if (err)
488 goto err_remove_rhash;
489 489
490 port->tc_offload_cnt++; 490 port->tc_offload_cnt++;
491 491
@@ -494,6 +494,12 @@ nfp_flower_add_offload(struct nfp_app *app, struct net_device *netdev,
494 494
495 return 0; 495 return 0;
496 496
497err_remove_rhash:
498 WARN_ON_ONCE(rhashtable_remove_fast(&priv->flow_table,
499 &flow_pay->fl_node,
500 nfp_flower_table_params));
501err_release_metadata:
502 nfp_modify_flow_metadata(app, flow_pay);
497err_destroy_flow: 503err_destroy_flow:
498 kfree(flow_pay->action_data); 504 kfree(flow_pay->action_data);
499 kfree(flow_pay->mask_data); 505 kfree(flow_pay->mask_data);
diff --git a/drivers/net/ethernet/realtek/8139cp.c b/drivers/net/ethernet/realtek/8139cp.c
index 81045dfa1cd8..44f6e4873aad 100644
--- a/drivers/net/ethernet/realtek/8139cp.c
+++ b/drivers/net/ethernet/realtek/8139cp.c
@@ -571,6 +571,7 @@ static irqreturn_t cp_interrupt (int irq, void *dev_instance)
571 struct cp_private *cp; 571 struct cp_private *cp;
572 int handled = 0; 572 int handled = 0;
573 u16 status; 573 u16 status;
574 u16 mask;
574 575
575 if (unlikely(dev == NULL)) 576 if (unlikely(dev == NULL))
576 return IRQ_NONE; 577 return IRQ_NONE;
@@ -578,6 +579,10 @@ static irqreturn_t cp_interrupt (int irq, void *dev_instance)
578 579
579 spin_lock(&cp->lock); 580 spin_lock(&cp->lock);
580 581
582 mask = cpr16(IntrMask);
583 if (!mask)
584 goto out_unlock;
585
581 status = cpr16(IntrStatus); 586 status = cpr16(IntrStatus);
582 if (!status || (status == 0xFFFF)) 587 if (!status || (status == 0xFFFF))
583 goto out_unlock; 588 goto out_unlock;
diff --git a/drivers/net/ethernet/socionext/sni_ave.c b/drivers/net/ethernet/socionext/sni_ave.c
index 6732f5cbde08..7c7cd9d94bcc 100644
--- a/drivers/net/ethernet/socionext/sni_ave.c
+++ b/drivers/net/ethernet/socionext/sni_ave.c
@@ -185,8 +185,8 @@
185 NETIF_MSG_TX_ERR) 185 NETIF_MSG_TX_ERR)
186 186
187/* Parameter for descriptor */ 187/* Parameter for descriptor */
188#define AVE_NR_TXDESC 32 /* Tx descriptor */ 188#define AVE_NR_TXDESC 64 /* Tx descriptor */
189#define AVE_NR_RXDESC 64 /* Rx descriptor */ 189#define AVE_NR_RXDESC 256 /* Rx descriptor */
190 190
191#define AVE_DESC_OFS_CMDSTS 0 191#define AVE_DESC_OFS_CMDSTS 0
192#define AVE_DESC_OFS_ADDRL 4 192#define AVE_DESC_OFS_ADDRL 4
@@ -194,6 +194,7 @@
194 194
195/* Parameter for ethernet frame */ 195/* Parameter for ethernet frame */
196#define AVE_MAX_ETHFRAME 1518 196#define AVE_MAX_ETHFRAME 1518
197#define AVE_FRAME_HEADROOM 2
197 198
198/* Parameter for interrupt */ 199/* Parameter for interrupt */
199#define AVE_INTM_COUNT 20 200#define AVE_INTM_COUNT 20
@@ -576,12 +577,13 @@ static int ave_rxdesc_prepare(struct net_device *ndev, int entry)
576 577
577 skb = priv->rx.desc[entry].skbs; 578 skb = priv->rx.desc[entry].skbs;
578 if (!skb) { 579 if (!skb) {
579 skb = netdev_alloc_skb_ip_align(ndev, 580 skb = netdev_alloc_skb(ndev, AVE_MAX_ETHFRAME);
580 AVE_MAX_ETHFRAME);
581 if (!skb) { 581 if (!skb) {
582 netdev_err(ndev, "can't allocate skb for Rx\n"); 582 netdev_err(ndev, "can't allocate skb for Rx\n");
583 return -ENOMEM; 583 return -ENOMEM;
584 } 584 }
585 skb->data += AVE_FRAME_HEADROOM;
586 skb->tail += AVE_FRAME_HEADROOM;
585 } 587 }
586 588
587 /* set disable to cmdsts */ 589 /* set disable to cmdsts */
@@ -594,12 +596,12 @@ static int ave_rxdesc_prepare(struct net_device *ndev, int entry)
594 * - Rx buffer begins with 2 byte headroom, and data will be put from 596 * - Rx buffer begins with 2 byte headroom, and data will be put from
595 * (buffer + 2). 597 * (buffer + 2).
596 * To satisfy this, specify the address to put back the buffer 598 * To satisfy this, specify the address to put back the buffer
597 * pointer advanced by NET_IP_ALIGN by netdev_alloc_skb_ip_align(), 599 * pointer advanced by AVE_FRAME_HEADROOM, and expand the map size
598 * and expand the map size by NET_IP_ALIGN. 600 * by AVE_FRAME_HEADROOM.
599 */ 601 */
600 ret = ave_dma_map(ndev, &priv->rx.desc[entry], 602 ret = ave_dma_map(ndev, &priv->rx.desc[entry],
601 skb->data - NET_IP_ALIGN, 603 skb->data - AVE_FRAME_HEADROOM,
602 AVE_MAX_ETHFRAME + NET_IP_ALIGN, 604 AVE_MAX_ETHFRAME + AVE_FRAME_HEADROOM,
603 DMA_FROM_DEVICE, &paddr); 605 DMA_FROM_DEVICE, &paddr);
604 if (ret) { 606 if (ret) {
605 netdev_err(ndev, "can't map skb for Rx\n"); 607 netdev_err(ndev, "can't map skb for Rx\n");
@@ -1689,9 +1691,10 @@ static int ave_probe(struct platform_device *pdev)
1689 pdev->name, pdev->id); 1691 pdev->name, pdev->id);
1690 1692
1691 /* Register as a NAPI supported driver */ 1693 /* Register as a NAPI supported driver */
1692 netif_napi_add(ndev, &priv->napi_rx, ave_napi_poll_rx, priv->rx.ndesc); 1694 netif_napi_add(ndev, &priv->napi_rx, ave_napi_poll_rx,
1695 NAPI_POLL_WEIGHT);
1693 netif_tx_napi_add(ndev, &priv->napi_tx, ave_napi_poll_tx, 1696 netif_tx_napi_add(ndev, &priv->napi_tx, ave_napi_poll_tx,
1694 priv->tx.ndesc); 1697 NAPI_POLL_WEIGHT);
1695 1698
1696 platform_set_drvdata(pdev, ndev); 1699 platform_set_drvdata(pdev, ndev);
1697 1700
@@ -1913,5 +1916,6 @@ static struct platform_driver ave_driver = {
1913}; 1916};
1914module_platform_driver(ave_driver); 1917module_platform_driver(ave_driver);
1915 1918
1919MODULE_AUTHOR("Kunihiko Hayashi <hayashi.kunihiko@socionext.com>");
1916MODULE_DESCRIPTION("Socionext UniPhier AVE ethernet driver"); 1920MODULE_DESCRIPTION("Socionext UniPhier AVE ethernet driver");
1917MODULE_LICENSE("GPL v2"); 1921MODULE_LICENSE("GPL v2");
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index 076a8be18d67..5551fead8f66 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -2550,12 +2550,6 @@ static int stmmac_hw_setup(struct net_device *dev, bool init_ptp)
2550 netdev_warn(priv->dev, "PTP init failed\n"); 2550 netdev_warn(priv->dev, "PTP init failed\n");
2551 } 2551 }
2552 2552
2553#ifdef CONFIG_DEBUG_FS
2554 ret = stmmac_init_fs(dev);
2555 if (ret < 0)
2556 netdev_warn(priv->dev, "%s: failed debugFS registration\n",
2557 __func__);
2558#endif
2559 priv->tx_lpi_timer = STMMAC_DEFAULT_TWT_LS; 2553 priv->tx_lpi_timer = STMMAC_DEFAULT_TWT_LS;
2560 2554
2561 if (priv->use_riwt) { 2555 if (priv->use_riwt) {
@@ -2756,10 +2750,6 @@ static int stmmac_release(struct net_device *dev)
2756 2750
2757 netif_carrier_off(dev); 2751 netif_carrier_off(dev);
2758 2752
2759#ifdef CONFIG_DEBUG_FS
2760 stmmac_exit_fs(dev);
2761#endif
2762
2763 stmmac_release_ptp(priv); 2753 stmmac_release_ptp(priv);
2764 2754
2765 return 0; 2755 return 0;
@@ -3899,6 +3889,9 @@ static int stmmac_sysfs_ring_read(struct seq_file *seq, void *v)
3899 u32 tx_count = priv->plat->tx_queues_to_use; 3889 u32 tx_count = priv->plat->tx_queues_to_use;
3900 u32 queue; 3890 u32 queue;
3901 3891
3892 if ((dev->flags & IFF_UP) == 0)
3893 return 0;
3894
3902 for (queue = 0; queue < rx_count; queue++) { 3895 for (queue = 0; queue < rx_count; queue++) {
3903 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue]; 3896 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
3904 3897
@@ -4397,6 +4390,13 @@ int stmmac_dvr_probe(struct device *device,
4397 goto error_netdev_register; 4390 goto error_netdev_register;
4398 } 4391 }
4399 4392
4393#ifdef CONFIG_DEBUG_FS
4394 ret = stmmac_init_fs(ndev);
4395 if (ret < 0)
4396 netdev_warn(priv->dev, "%s: failed debugFS registration\n",
4397 __func__);
4398#endif
4399
4400 return ret; 4400 return ret;
4401 4401
4402error_netdev_register: 4402error_netdev_register:
@@ -4432,6 +4432,9 @@ int stmmac_dvr_remove(struct device *dev)
4432 4432
4433 netdev_info(priv->dev, "%s: removing driver", __func__); 4433 netdev_info(priv->dev, "%s: removing driver", __func__);
4434 4434
4435#ifdef CONFIG_DEBUG_FS
4436 stmmac_exit_fs(ndev);
4437#endif
4435 stmmac_stop_all_dma(priv); 4438 stmmac_stop_all_dma(priv);
4436 4439
4437 stmmac_mac_set(priv, priv->ioaddr, false); 4440 stmmac_mac_set(priv, priv->ioaddr, false);
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
index fc8d5f1ee1ad..0da3d36b283b 100644
--- a/drivers/net/macvlan.c
+++ b/drivers/net/macvlan.c
@@ -608,7 +608,7 @@ static int macvlan_open(struct net_device *dev)
608 goto hash_add; 608 goto hash_add;
609 } 609 }
610 610
611 err = -EBUSY; 611 err = -EADDRINUSE;
612 if (macvlan_addr_busy(vlan->port, dev->dev_addr)) 612 if (macvlan_addr_busy(vlan->port, dev->dev_addr))
613 goto out; 613 goto out;
614 614
@@ -706,7 +706,7 @@ static int macvlan_sync_address(struct net_device *dev, unsigned char *addr)
706 } else { 706 } else {
707 /* Rehash and update the device filters */ 707 /* Rehash and update the device filters */
708 if (macvlan_addr_busy(vlan->port, addr)) 708 if (macvlan_addr_busy(vlan->port, addr))
709 return -EBUSY; 709 return -EADDRINUSE;
710 710
711 if (!macvlan_passthru(port)) { 711 if (!macvlan_passthru(port)) {
712 err = dev_uc_add(lowerdev, addr); 712 err = dev_uc_add(lowerdev, addr);
@@ -747,6 +747,9 @@ static int macvlan_set_mac_address(struct net_device *dev, void *p)
747 return dev_set_mac_address(vlan->lowerdev, addr); 747 return dev_set_mac_address(vlan->lowerdev, addr);
748 } 748 }
749 749
750 if (macvlan_addr_busy(vlan->port, addr->sa_data))
751 return -EADDRINUSE;
752
750 return macvlan_sync_address(dev, addr->sa_data); 753 return macvlan_sync_address(dev, addr->sa_data);
751} 754}
752 755
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index 23ee3967c166..18e92c19c5ab 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -1880,20 +1880,17 @@ EXPORT_SYMBOL(genphy_loopback);
1880 1880
1881static int __set_phy_supported(struct phy_device *phydev, u32 max_speed) 1881static int __set_phy_supported(struct phy_device *phydev, u32 max_speed)
1882{ 1882{
1883 phydev->supported &= ~(PHY_1000BT_FEATURES | PHY_100BT_FEATURES |
1884 PHY_10BT_FEATURES);
1885
1886 switch (max_speed) { 1883 switch (max_speed) {
1887 default: 1884 case SPEED_10:
1888 return -ENOTSUPP; 1885 phydev->supported &= ~PHY_100BT_FEATURES;
1889 case SPEED_1000:
1890 phydev->supported |= PHY_1000BT_FEATURES;
1891 /* fall through */ 1886 /* fall through */
1892 case SPEED_100: 1887 case SPEED_100:
1893 phydev->supported |= PHY_100BT_FEATURES; 1888 phydev->supported &= ~PHY_1000BT_FEATURES;
1894 /* fall through */ 1889 break;
1895 case SPEED_10: 1890 case SPEED_1000:
1896 phydev->supported |= PHY_10BT_FEATURES; 1891 break;
1892 default:
1893 return -ENOTSUPP;
1897 } 1894 }
1898 1895
1899 return 0; 1896 return 0;
diff --git a/drivers/net/phy/sfp-bus.c b/drivers/net/phy/sfp-bus.c
index 83060fb349f4..ad9db652874d 100644
--- a/drivers/net/phy/sfp-bus.c
+++ b/drivers/net/phy/sfp-bus.c
@@ -162,7 +162,7 @@ void sfp_parse_support(struct sfp_bus *bus, const struct sfp_eeprom_id *id,
162 /* 1000Base-PX or 1000Base-BX10 */ 162 /* 1000Base-PX or 1000Base-BX10 */
163 if ((id->base.e_base_px || id->base.e_base_bx10) && 163 if ((id->base.e_base_px || id->base.e_base_bx10) &&
164 br_min <= 1300 && br_max >= 1200) 164 br_min <= 1300 && br_max >= 1200)
165 phylink_set(support, 1000baseX_Full); 165 phylink_set(modes, 1000baseX_Full);
166 166
167 /* For active or passive cables, select the link modes 167 /* For active or passive cables, select the link modes
168 * based on the bit rates and the cable compliance bytes. 168 * based on the bit rates and the cable compliance bytes.
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index e244f5d7512a..005020042be9 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -2293,9 +2293,9 @@ static void tun_setup(struct net_device *dev)
2293static int tun_validate(struct nlattr *tb[], struct nlattr *data[], 2293static int tun_validate(struct nlattr *tb[], struct nlattr *data[],
2294 struct netlink_ext_ack *extack) 2294 struct netlink_ext_ack *extack)
2295{ 2295{
2296 if (!data) 2296 NL_SET_ERR_MSG(extack,
2297 return 0; 2297 "tun/tap creation via rtnetlink is not supported.");
2298 return -EINVAL; 2298 return -EOPNOTSUPP;
2299} 2299}
2300 2300
2301static size_t tun_get_size(const struct net_device *dev) 2301static size_t tun_get_size(const struct net_device *dev)
@@ -2385,6 +2385,7 @@ static int tun_xdp_one(struct tun_struct *tun,
2385 struct tun_file *tfile, 2385 struct tun_file *tfile,
2386 struct xdp_buff *xdp, int *flush) 2386 struct xdp_buff *xdp, int *flush)
2387{ 2387{
2388 unsigned int datasize = xdp->data_end - xdp->data;
2388 struct tun_xdp_hdr *hdr = xdp->data_hard_start; 2389 struct tun_xdp_hdr *hdr = xdp->data_hard_start;
2389 struct virtio_net_hdr *gso = &hdr->gso; 2390 struct virtio_net_hdr *gso = &hdr->gso;
2390 struct tun_pcpu_stats *stats; 2391 struct tun_pcpu_stats *stats;
@@ -2461,7 +2462,7 @@ build:
2461 stats = get_cpu_ptr(tun->pcpu_stats); 2462 stats = get_cpu_ptr(tun->pcpu_stats);
2462 u64_stats_update_begin(&stats->syncp); 2463 u64_stats_update_begin(&stats->syncp);
2463 stats->rx_packets++; 2464 stats->rx_packets++;
2464 stats->rx_bytes += skb->len; 2465 stats->rx_bytes += datasize;
2465 u64_stats_update_end(&stats->syncp); 2466 u64_stats_update_end(&stats->syncp);
2466 put_cpu_ptr(stats); 2467 put_cpu_ptr(stats);
2467 2468
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index cecfd77c9f3c..ea672145f6a6 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -365,7 +365,8 @@ static unsigned int mergeable_ctx_to_truesize(void *mrg_ctx)
365static struct sk_buff *page_to_skb(struct virtnet_info *vi, 365static struct sk_buff *page_to_skb(struct virtnet_info *vi,
366 struct receive_queue *rq, 366 struct receive_queue *rq,
367 struct page *page, unsigned int offset, 367 struct page *page, unsigned int offset,
368 unsigned int len, unsigned int truesize) 368 unsigned int len, unsigned int truesize,
369 bool hdr_valid)
369{ 370{
370 struct sk_buff *skb; 371 struct sk_buff *skb;
371 struct virtio_net_hdr_mrg_rxbuf *hdr; 372 struct virtio_net_hdr_mrg_rxbuf *hdr;
@@ -387,7 +388,8 @@ static struct sk_buff *page_to_skb(struct virtnet_info *vi,
387 else 388 else
388 hdr_padded_len = sizeof(struct padded_vnet_hdr); 389 hdr_padded_len = sizeof(struct padded_vnet_hdr);
389 390
390 memcpy(hdr, p, hdr_len); 391 if (hdr_valid)
392 memcpy(hdr, p, hdr_len);
391 393
392 len -= hdr_len; 394 len -= hdr_len;
393 offset += hdr_padded_len; 395 offset += hdr_padded_len;
@@ -739,7 +741,8 @@ static struct sk_buff *receive_big(struct net_device *dev,
739 struct virtnet_rq_stats *stats) 741 struct virtnet_rq_stats *stats)
740{ 742{
741 struct page *page = buf; 743 struct page *page = buf;
742 struct sk_buff *skb = page_to_skb(vi, rq, page, 0, len, PAGE_SIZE); 744 struct sk_buff *skb = page_to_skb(vi, rq, page, 0, len,
745 PAGE_SIZE, true);
743 746
744 stats->bytes += len - vi->hdr_len; 747 stats->bytes += len - vi->hdr_len;
745 if (unlikely(!skb)) 748 if (unlikely(!skb))
@@ -842,7 +845,8 @@ static struct sk_buff *receive_mergeable(struct net_device *dev,
842 rcu_read_unlock(); 845 rcu_read_unlock();
843 put_page(page); 846 put_page(page);
844 head_skb = page_to_skb(vi, rq, xdp_page, 847 head_skb = page_to_skb(vi, rq, xdp_page,
845 offset, len, PAGE_SIZE); 848 offset, len,
849 PAGE_SIZE, false);
846 return head_skb; 850 return head_skb;
847 } 851 }
848 break; 852 break;
@@ -898,7 +902,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev,
898 goto err_skb; 902 goto err_skb;
899 } 903 }
900 904
901 head_skb = page_to_skb(vi, rq, page, offset, len, truesize); 905 head_skb = page_to_skb(vi, rq, page, offset, len, truesize, !xdp_prog);
902 curr_skb = head_skb; 906 curr_skb = head_skb;
903 907
904 if (unlikely(!curr_skb)) 908 if (unlikely(!curr_skb))
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
index aa8058264d5b..d1464e3e1be2 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
@@ -2884,6 +2884,10 @@ static int mac80211_hwsim_new_radio(struct genl_info *info,
2884 2884
2885 wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST); 2885 wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
2886 2886
2887 tasklet_hrtimer_init(&data->beacon_timer,
2888 mac80211_hwsim_beacon,
2889 CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
2890
2887 err = ieee80211_register_hw(hw); 2891 err = ieee80211_register_hw(hw);
2888 if (err < 0) { 2892 if (err < 0) {
2889 pr_debug("mac80211_hwsim: ieee80211_register_hw failed (%d)\n", 2893 pr_debug("mac80211_hwsim: ieee80211_register_hw failed (%d)\n",
@@ -2908,10 +2912,6 @@ static int mac80211_hwsim_new_radio(struct genl_info *info,
2908 data->debugfs, 2912 data->debugfs,
2909 data, &hwsim_simulate_radar); 2913 data, &hwsim_simulate_radar);
2910 2914
2911 tasklet_hrtimer_init(&data->beacon_timer,
2912 mac80211_hwsim_beacon,
2913 CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
2914
2915 spin_lock_bh(&hwsim_radio_lock); 2915 spin_lock_bh(&hwsim_radio_lock);
2916 err = rhashtable_insert_fast(&hwsim_radios_rht, &data->rht, 2916 err = rhashtable_insert_fast(&hwsim_radios_rht, &data->rht,
2917 hwsim_rht_params); 2917 hwsim_rht_params);
@@ -3703,16 +3703,16 @@ static int __init init_mac80211_hwsim(void)
3703 if (err) 3703 if (err)
3704 goto out_unregister_pernet; 3704 goto out_unregister_pernet;
3705 3705
3706 err = hwsim_init_netlink();
3707 if (err)
3708 goto out_unregister_driver;
3709
3706 hwsim_class = class_create(THIS_MODULE, "mac80211_hwsim"); 3710 hwsim_class = class_create(THIS_MODULE, "mac80211_hwsim");
3707 if (IS_ERR(hwsim_class)) { 3711 if (IS_ERR(hwsim_class)) {
3708 err = PTR_ERR(hwsim_class); 3712 err = PTR_ERR(hwsim_class);
3709 goto out_unregister_driver; 3713 goto out_exit_netlink;
3710 } 3714 }
3711 3715
3712 err = hwsim_init_netlink();
3713 if (err < 0)
3714 goto out_unregister_driver;
3715
3716 for (i = 0; i < radios; i++) { 3716 for (i = 0; i < radios; i++) {
3717 struct hwsim_new_radio_params param = { 0 }; 3717 struct hwsim_new_radio_params param = { 0 };
3718 3718
@@ -3818,6 +3818,8 @@ out_free_mon:
3818 free_netdev(hwsim_mon); 3818 free_netdev(hwsim_mon);
3819out_free_radios: 3819out_free_radios:
3820 mac80211_hwsim_free(); 3820 mac80211_hwsim_free();
3821out_exit_netlink:
3822 hwsim_exit_netlink();
3821out_unregister_driver: 3823out_unregister_driver:
3822 platform_driver_unregister(&mac80211_hwsim_driver); 3824 platform_driver_unregister(&mac80211_hwsim_driver);
3823out_unregister_pernet: 3825out_unregister_pernet:
diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
index 3a5f81a66d34..6b98d8e3a5bf 100644
--- a/drivers/vhost/vhost.c
+++ b/drivers/vhost/vhost.c
@@ -944,10 +944,7 @@ static void vhost_iotlb_notify_vq(struct vhost_dev *d,
944 if (msg->iova <= vq_msg->iova && 944 if (msg->iova <= vq_msg->iova &&
945 msg->iova + msg->size - 1 >= vq_msg->iova && 945 msg->iova + msg->size - 1 >= vq_msg->iova &&
946 vq_msg->type == VHOST_IOTLB_MISS) { 946 vq_msg->type == VHOST_IOTLB_MISS) {
947 mutex_lock(&node->vq->mutex);
948 vhost_poll_queue(&node->vq->poll); 947 vhost_poll_queue(&node->vq->poll);
949 mutex_unlock(&node->vq->mutex);
950
951 list_del(&node->node); 948 list_del(&node->node);
952 kfree(node); 949 kfree(node);
953 } 950 }