aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2018-10-03 19:09:11 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2018-10-03 19:09:11 -0400
commitcec4de302c5ff2c5eb3bfcb0c4845a095f5149b9 (patch)
treeda7eeaae52d6c9a5842db0cebf669476c2163f91
parent95773dc0862717ab9612d69bc07d0386bd104603 (diff)
parent4233cfe6ec4683497d7318f55ce7617e97f2e610 (diff)
Merge gitolite.kernel.org:/pub/scm/linux/kernel/git/davem/net
David writes: "Networking fixes: 1) Prefix length validation in xfrm layer, from Steffen Klassert. 2) TX status reporting fix in mac80211, from Andrei Otcheretianski. 3) Fix hangs due to TX_DROP in mac80211, from Bob Copeland. 4) Fix DMA error regression in b43, from Larry Finger. 5) Add input validation to xenvif_set_hash_mapping(), from Jan Beulich. 6) SMMU unmapping fix in hns driver, from Yunsheng Lin. 7) Bluetooh crash in unpairing on SMP, from Matias Karhumaa. 8) WoL handling fixes in the phy layer, from Heiner Kallweit. 9) Fix deadlock in bonding, from Mahesh Bandewar. 10) Fill ttl inherit infor in vxlan driver, from Hangbin Liu. 11) Fix TX timeouts during netpoll, from Michael Chan. 12) RXRPC layer fixes from David Howells. 13) Another batch of ndo_poll_controller() removals to deal with excessive resource consumption during load. From Eric Dumazet. 14) Fix a specific TIPC failure secnario, from LUU Duc Canh. 15) Really disable clocks in r8169 during suspend so that low power states can actually be reached. 16) Fix SYN backlog lockdep issue in tcp and dccp, from Eric Dumazet. 17) Fix RCU locking in netpoll SKB send, which shows up in bonding, from Dave Jones. 18) Fix TX stalls in r8169, from Heiner Kallweit. 19) Fix locksup in nfp due to control message storms, from Jakub Kicinski. 20) Various rmnet bug fixes from Subash Abhinov Kasiviswanathan and Sean Tranchetti. 21) Fix use after free in ip_cmsg_recv_dstaddr(), from Eric Dumazet." * gitolite.kernel.org:/pub/scm/linux/kernel/git/davem/net: (122 commits) ixgbe: check return value of napi_complete_done() sctp: fix fall-through annotation r8169: always autoneg on resume ipv4: fix use-after-free in ip_cmsg_recv_dstaddr() net: qualcomm: rmnet: Fix incorrect allocation flag in receive path net: qualcomm: rmnet: Fix incorrect allocation flag in transmit net: qualcomm: rmnet: Skip processing loopback packets net: systemport: Fix wake-up interrupt race during resume rtnl: limit IFLA_NUM_TX_QUEUES and IFLA_NUM_RX_QUEUES to 4096 bonding: fix warning message inet: make sure to grab rcu_read_lock before using ireq->ireq_opt nfp: avoid soft lockups under control message storm declance: Fix continuation with the adapter identification message net: fec: fix rare tx timeout r8169: fix network stalls due to missing bit TXCFG_AUTO_FIFO tun: napi flags belong to tfile tun: initialize napi_mutex unconditionally tun: remove unused parameters bond: take rcu lock in netpoll_send_skb_on_dev rtnetlink: Fail dump if target netnsid is invalid ...
-rw-r--r--Documentation/networking/ip-sysctl.txt2
-rw-r--r--MAINTAINERS8
-rw-r--r--drivers/net/bonding/bond_main.c65
-rw-r--r--drivers/net/ethernet/amazon/ena/ena_netdev.c22
-rw-r--r--drivers/net/ethernet/amd/declance.c10
-rw-r--r--drivers/net/ethernet/broadcom/bcmsysport.c28
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt.c13
-rw-r--r--drivers/net/ethernet/cadence/macb_main.c1
-rw-r--r--drivers/net/ethernet/freescale/fec_main.c8
-rw-r--r--drivers/net/ethernet/hisilicon/hns/hnae.c2
-rw-r--r--drivers/net/ethernet/hisilicon/hns/hns_enet.c48
-rw-r--r--drivers/net/ethernet/huawei/hinic/hinic_main.c20
-rw-r--r--drivers/net/ethernet/ibm/ehea/ehea_main.c14
-rw-r--r--drivers/net/ethernet/ibm/ibmvnic.c16
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_main.c12
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en.h1
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en/fs.h2
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en_main.c2
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en_tc.c65
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/eswitch.c4
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/transobj.c5
-rw-r--r--drivers/net/ethernet/netronome/nfp/nfp_net_common.c17
-rw-r--r--drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c23
-rw-r--r--drivers/net/ethernet/qlogic/qed/qed_hsi.h1
-rw-r--r--drivers/net/ethernet/qlogic/qed/qed_iwarp.c4
-rw-r--r--drivers/net/ethernet/qlogic/qed/qed_rdma.c2
-rw-r--r--drivers/net/ethernet/qlogic/qed/qed_roce.c15
-rw-r--r--drivers/net/ethernet/qlogic/qed/qed_sp_commands.c2
-rw-r--r--drivers/net/ethernet/qlogic/qed/qed_vf.c5
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic.h8
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c3
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h3
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h3
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c12
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c45
-rw-r--r--drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c7
-rw-r--r--drivers/net/ethernet/realtek/r8169.c32
-rw-r--r--drivers/net/ethernet/sfc/efx.c26
-rw-r--r--drivers/net/ethernet/sfc/falcon/efx.c26
-rw-r--r--drivers/net/ieee802154/adf7242.c3
-rw-r--r--drivers/net/ieee802154/ca8210.c6
-rw-r--r--drivers/net/ieee802154/mcr20a.c8
-rw-r--r--drivers/net/phy/phy_device.c12
-rw-r--r--drivers/net/phy/sfp.c7
-rw-r--r--drivers/net/tun.c37
-rw-r--r--drivers/net/usb/asix_common.c3
-rw-r--r--drivers/net/usb/ax88179_178a.c3
-rw-r--r--drivers/net/usb/lan78xx.c17
-rw-r--r--drivers/net/usb/r8152.c3
-rw-r--r--drivers/net/usb/smsc75xx.c3
-rw-r--r--drivers/net/usb/smsc95xx.c3
-rw-r--r--drivers/net/usb/sr9800.c3
-rw-r--r--drivers/net/virtio_net.c14
-rw-r--r--drivers/net/vxlan.c3
-rw-r--r--drivers/net/wimax/i2400m/control.c2
-rw-r--r--drivers/net/wireless/broadcom/b43/dma.c6
-rw-r--r--drivers/net/wireless/intel/iwlwifi/cfg/1000.c1
-rw-r--r--drivers/net/wireless/mac80211_hwsim.c36
-rw-r--r--drivers/net/wireless/mediatek/mt76/mt76x0/main.c3
-rw-r--r--drivers/net/xen-netback/common.h3
-rw-r--r--drivers/net/xen-netback/hash.c51
-rw-r--r--drivers/net/xen-netback/interface.c3
-rw-r--r--drivers/s390/net/qeth_core_main.c2
-rw-r--r--drivers/s390/net/qeth_core_mpc.c33
-rw-r--r--drivers/s390/net/qeth_core_mpc.h4
-rw-r--r--include/linux/mlx5/transobj.h2
-rw-r--r--include/linux/netdevice.h3
-rw-r--r--include/linux/netfilter.h2
-rw-r--r--include/net/bonding.h7
-rw-r--r--include/net/cfg80211.h2
-rw-r--r--include/net/inet_sock.h6
-rw-r--r--include/net/netlink.h2
-rw-r--r--include/trace/events/rxrpc.h4
-rw-r--r--net/bluetooth/mgmt.c7
-rw-r--r--net/bluetooth/smp.c29
-rw-r--r--net/bluetooth/smp.h3
-rw-r--r--net/bridge/br_netfilter_hooks.c3
-rw-r--r--net/core/ethtool.c9
-rw-r--r--net/core/netpoll.c22
-rw-r--r--net/core/rtnetlink.c12
-rw-r--r--net/dccp/input.c4
-rw-r--r--net/dccp/ipv4.c4
-rw-r--r--net/ipv4/inet_connection_sock.c5
-rw-r--r--net/ipv4/ip_sockglue.c3
-rw-r--r--net/ipv4/sysctl_net_ipv4.c6
-rw-r--r--net/ipv4/tcp_input.c4
-rw-r--r--net/ipv4/tcp_ipv4.c4
-rw-r--r--net/ipv4/xfrm4_input.c1
-rw-r--r--net/ipv4/xfrm4_mode_transport.c4
-rw-r--r--net/ipv6/route.c5
-rw-r--r--net/ipv6/xfrm6_input.c1
-rw-r--r--net/ipv6/xfrm6_mode_transport.c4
-rw-r--r--net/ipv6/xfrm6_output.c2
-rw-r--r--net/mac80211/iface.c3
-rw-r--r--net/mac80211/mesh.h3
-rw-r--r--net/mac80211/mesh_hwmp.c9
-rw-r--r--net/mac80211/status.c11
-rw-r--r--net/mac80211/tdls.c8
-rw-r--r--net/mac80211/tx.c6
-rw-r--r--net/netfilter/nf_conntrack_proto_tcp.c4
-rw-r--r--net/netfilter/nft_osf.c2
-rw-r--r--net/netfilter/nft_set_rbtree.c28
-rw-r--r--net/netfilter/xt_socket.c4
-rw-r--r--net/openvswitch/conntrack.c6
-rw-r--r--net/rxrpc/ar-internal.h36
-rw-r--r--net/rxrpc/call_accept.c45
-rw-r--r--net/rxrpc/call_object.c2
-rw-r--r--net/rxrpc/conn_client.c4
-rw-r--r--net/rxrpc/conn_object.c14
-rw-r--r--net/rxrpc/input.c90
-rw-r--r--net/rxrpc/local_object.c32
-rw-r--r--net/rxrpc/output.c54
-rw-r--r--net/rxrpc/peer_event.c46
-rw-r--r--net/rxrpc/peer_object.c52
-rw-r--r--net/rxrpc/protocol.h15
-rw-r--r--net/sched/act_ipt.c2
-rw-r--r--net/sctp/outqueue.c2
-rw-r--r--net/tipc/bearer.c12
-rw-r--r--net/tipc/link.c45
-rw-r--r--net/tipc/link.h3
-rw-r--r--net/tipc/node.c14
-rw-r--r--net/tipc/socket.c4
-rw-r--r--net/wireless/nl80211.c20
-rw-r--r--net/wireless/reg.c1
-rw-r--r--net/wireless/scan.c58
-rw-r--r--net/xfrm/xfrm_input.c1
-rw-r--r--net/xfrm/xfrm_output.c4
-rw-r--r--net/xfrm/xfrm_policy.c4
-rw-r--r--net/xfrm/xfrm_user.c15
129 files changed, 864 insertions, 806 deletions
diff --git a/Documentation/networking/ip-sysctl.txt b/Documentation/networking/ip-sysctl.txt
index 8313a636dd53..960de8fe3f40 100644
--- a/Documentation/networking/ip-sysctl.txt
+++ b/Documentation/networking/ip-sysctl.txt
@@ -425,7 +425,7 @@ tcp_mtu_probing - INTEGER
425 1 - Disabled by default, enabled when an ICMP black hole detected 425 1 - Disabled by default, enabled when an ICMP black hole detected
426 2 - Always enabled, use initial MSS of tcp_base_mss. 426 2 - Always enabled, use initial MSS of tcp_base_mss.
427 427
428tcp_probe_interval - INTEGER 428tcp_probe_interval - UNSIGNED INTEGER
429 Controls how often to start TCP Packetization-Layer Path MTU 429 Controls how often to start TCP Packetization-Layer Path MTU
430 Discovery reprobe. The default is reprobing every 10 minutes as 430 Discovery reprobe. The default is reprobing every 10 minutes as
431 per RFC4821. 431 per RFC4821.
diff --git a/MAINTAINERS b/MAINTAINERS
index d63705445bf8..22065048d89d 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2956,7 +2956,6 @@ F: include/linux/bcm963xx_tag.h
2956 2956
2957BROADCOM BNX2 GIGABIT ETHERNET DRIVER 2957BROADCOM BNX2 GIGABIT ETHERNET DRIVER
2958M: Rasesh Mody <rasesh.mody@cavium.com> 2958M: Rasesh Mody <rasesh.mody@cavium.com>
2959M: Harish Patil <harish.patil@cavium.com>
2960M: Dept-GELinuxNICDev@cavium.com 2959M: Dept-GELinuxNICDev@cavium.com
2961L: netdev@vger.kernel.org 2960L: netdev@vger.kernel.org
2962S: Supported 2961S: Supported
@@ -2977,6 +2976,7 @@ F: drivers/scsi/bnx2i/
2977 2976
2978BROADCOM BNX2X 10 GIGABIT ETHERNET DRIVER 2977BROADCOM BNX2X 10 GIGABIT ETHERNET DRIVER
2979M: Ariel Elior <ariel.elior@cavium.com> 2978M: Ariel Elior <ariel.elior@cavium.com>
2979M: Sudarsana Kalluru <sudarsana.kalluru@cavium.com>
2980M: everest-linux-l2@cavium.com 2980M: everest-linux-l2@cavium.com
2981L: netdev@vger.kernel.org 2981L: netdev@vger.kernel.org
2982S: Supported 2982S: Supported
@@ -5470,7 +5470,8 @@ S: Odd Fixes
5470F: drivers/net/ethernet/agere/ 5470F: drivers/net/ethernet/agere/
5471 5471
5472ETHERNET BRIDGE 5472ETHERNET BRIDGE
5473M: Stephen Hemminger <stephen@networkplumber.org> 5473M: Roopa Prabhu <roopa@cumulusnetworks.com>
5474M: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
5474L: bridge@lists.linux-foundation.org (moderated for non-subscribers) 5475L: bridge@lists.linux-foundation.org (moderated for non-subscribers)
5475L: netdev@vger.kernel.org 5476L: netdev@vger.kernel.org
5476W: http://www.linuxfoundation.org/en/Net:Bridge 5477W: http://www.linuxfoundation.org/en/Net:Bridge
@@ -11979,7 +11980,7 @@ F: Documentation/scsi/LICENSE.qla4xxx
11979F: drivers/scsi/qla4xxx/ 11980F: drivers/scsi/qla4xxx/
11980 11981
11981QLOGIC QLCNIC (1/10)Gb ETHERNET DRIVER 11982QLOGIC QLCNIC (1/10)Gb ETHERNET DRIVER
11982M: Harish Patil <harish.patil@cavium.com> 11983M: Shahed Shaikh <Shahed.Shaikh@cavium.com>
11983M: Manish Chopra <manish.chopra@cavium.com> 11984M: Manish Chopra <manish.chopra@cavium.com>
11984M: Dept-GELinuxNICDev@cavium.com 11985M: Dept-GELinuxNICDev@cavium.com
11985L: netdev@vger.kernel.org 11986L: netdev@vger.kernel.org
@@ -11987,7 +11988,6 @@ S: Supported
11987F: drivers/net/ethernet/qlogic/qlcnic/ 11988F: drivers/net/ethernet/qlogic/qlcnic/
11988 11989
11989QLOGIC QLGE 10Gb ETHERNET DRIVER 11990QLOGIC QLGE 10Gb ETHERNET DRIVER
11990M: Harish Patil <harish.patil@cavium.com>
11991M: Manish Chopra <manish.chopra@cavium.com> 11991M: Manish Chopra <manish.chopra@cavium.com>
11992M: Dept-GELinuxNICDev@cavium.com 11992M: Dept-GELinuxNICDev@cavium.com
11993L: netdev@vger.kernel.org 11993L: netdev@vger.kernel.org
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 0d87e11e7f1d..ee28ec9e0aba 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -210,6 +210,7 @@ static void bond_get_stats(struct net_device *bond_dev,
210static void bond_slave_arr_handler(struct work_struct *work); 210static void bond_slave_arr_handler(struct work_struct *work);
211static bool bond_time_in_interval(struct bonding *bond, unsigned long last_act, 211static bool bond_time_in_interval(struct bonding *bond, unsigned long last_act,
212 int mod); 212 int mod);
213static void bond_netdev_notify_work(struct work_struct *work);
213 214
214/*---------------------------- General routines -----------------------------*/ 215/*---------------------------- General routines -----------------------------*/
215 216
@@ -1170,9 +1171,27 @@ static rx_handler_result_t bond_handle_frame(struct sk_buff **pskb)
1170 } 1171 }
1171 } 1172 }
1172 1173
1173 /* don't change skb->dev for link-local packets */ 1174 /* Link-local multicast packets should be passed to the
1174 if (is_link_local_ether_addr(eth_hdr(skb)->h_dest)) 1175 * stack on the link they arrive as well as pass them to the
1176 * bond-master device. These packets are mostly usable when
1177 * stack receives it with the link on which they arrive
1178 * (e.g. LLDP) they also must be available on master. Some of
1179 * the use cases include (but are not limited to): LLDP agents
1180 * that must be able to operate both on enslaved interfaces as
1181 * well as on bonds themselves; linux bridges that must be able
1182 * to process/pass BPDUs from attached bonds when any kind of
1183 * STP version is enabled on the network.
1184 */
1185 if (is_link_local_ether_addr(eth_hdr(skb)->h_dest)) {
1186 struct sk_buff *nskb = skb_clone(skb, GFP_ATOMIC);
1187
1188 if (nskb) {
1189 nskb->dev = bond->dev;
1190 nskb->queue_mapping = 0;
1191 netif_rx(nskb);
1192 }
1175 return RX_HANDLER_PASS; 1193 return RX_HANDLER_PASS;
1194 }
1176 if (bond_should_deliver_exact_match(skb, slave, bond)) 1195 if (bond_should_deliver_exact_match(skb, slave, bond))
1177 return RX_HANDLER_EXACT; 1196 return RX_HANDLER_EXACT;
1178 1197
@@ -1269,6 +1288,8 @@ static struct slave *bond_alloc_slave(struct bonding *bond)
1269 return NULL; 1288 return NULL;
1270 } 1289 }
1271 } 1290 }
1291 INIT_DELAYED_WORK(&slave->notify_work, bond_netdev_notify_work);
1292
1272 return slave; 1293 return slave;
1273} 1294}
1274 1295
@@ -1276,6 +1297,7 @@ static void bond_free_slave(struct slave *slave)
1276{ 1297{
1277 struct bonding *bond = bond_get_bond_by_slave(slave); 1298 struct bonding *bond = bond_get_bond_by_slave(slave);
1278 1299
1300 cancel_delayed_work_sync(&slave->notify_work);
1279 if (BOND_MODE(bond) == BOND_MODE_8023AD) 1301 if (BOND_MODE(bond) == BOND_MODE_8023AD)
1280 kfree(SLAVE_AD_INFO(slave)); 1302 kfree(SLAVE_AD_INFO(slave));
1281 1303
@@ -1297,39 +1319,26 @@ static void bond_fill_ifslave(struct slave *slave, struct ifslave *info)
1297 info->link_failure_count = slave->link_failure_count; 1319 info->link_failure_count = slave->link_failure_count;
1298} 1320}
1299 1321
1300static void bond_netdev_notify(struct net_device *dev,
1301 struct netdev_bonding_info *info)
1302{
1303 rtnl_lock();
1304 netdev_bonding_info_change(dev, info);
1305 rtnl_unlock();
1306}
1307
1308static void bond_netdev_notify_work(struct work_struct *_work) 1322static void bond_netdev_notify_work(struct work_struct *_work)
1309{ 1323{
1310 struct netdev_notify_work *w = 1324 struct slave *slave = container_of(_work, struct slave,
1311 container_of(_work, struct netdev_notify_work, work.work); 1325 notify_work.work);
1326
1327 if (rtnl_trylock()) {
1328 struct netdev_bonding_info binfo;
1312 1329
1313 bond_netdev_notify(w->dev, &w->bonding_info); 1330 bond_fill_ifslave(slave, &binfo.slave);
1314 dev_put(w->dev); 1331 bond_fill_ifbond(slave->bond, &binfo.master);
1315 kfree(w); 1332 netdev_bonding_info_change(slave->dev, &binfo);
1333 rtnl_unlock();
1334 } else {
1335 queue_delayed_work(slave->bond->wq, &slave->notify_work, 1);
1336 }
1316} 1337}
1317 1338
1318void bond_queue_slave_event(struct slave *slave) 1339void bond_queue_slave_event(struct slave *slave)
1319{ 1340{
1320 struct bonding *bond = slave->bond; 1341 queue_delayed_work(slave->bond->wq, &slave->notify_work, 0);
1321 struct netdev_notify_work *nnw = kzalloc(sizeof(*nnw), GFP_ATOMIC);
1322
1323 if (!nnw)
1324 return;
1325
1326 dev_hold(slave->dev);
1327 nnw->dev = slave->dev;
1328 bond_fill_ifslave(slave, &nnw->bonding_info.slave);
1329 bond_fill_ifbond(bond, &nnw->bonding_info.master);
1330 INIT_DELAYED_WORK(&nnw->work, bond_netdev_notify_work);
1331
1332 queue_delayed_work(slave->bond->wq, &nnw->work, 0);
1333} 1342}
1334 1343
1335void bond_lower_state_changed(struct slave *slave) 1344void bond_lower_state_changed(struct slave *slave)
diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c b/drivers/net/ethernet/amazon/ena/ena_netdev.c
index 29b5774dd32d..25621a218f20 100644
--- a/drivers/net/ethernet/amazon/ena/ena_netdev.c
+++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c
@@ -2185,25 +2185,6 @@ error_drop_packet:
2185 return NETDEV_TX_OK; 2185 return NETDEV_TX_OK;
2186} 2186}
2187 2187
2188#ifdef CONFIG_NET_POLL_CONTROLLER
2189static void ena_netpoll(struct net_device *netdev)
2190{
2191 struct ena_adapter *adapter = netdev_priv(netdev);
2192 int i;
2193
2194 /* Dont schedule NAPI if the driver is in the middle of reset
2195 * or netdev is down.
2196 */
2197
2198 if (!test_bit(ENA_FLAG_DEV_UP, &adapter->flags) ||
2199 test_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags))
2200 return;
2201
2202 for (i = 0; i < adapter->num_queues; i++)
2203 napi_schedule(&adapter->ena_napi[i].napi);
2204}
2205#endif /* CONFIG_NET_POLL_CONTROLLER */
2206
2207static u16 ena_select_queue(struct net_device *dev, struct sk_buff *skb, 2188static u16 ena_select_queue(struct net_device *dev, struct sk_buff *skb,
2208 struct net_device *sb_dev, 2189 struct net_device *sb_dev,
2209 select_queue_fallback_t fallback) 2190 select_queue_fallback_t fallback)
@@ -2369,9 +2350,6 @@ static const struct net_device_ops ena_netdev_ops = {
2369 .ndo_change_mtu = ena_change_mtu, 2350 .ndo_change_mtu = ena_change_mtu,
2370 .ndo_set_mac_address = NULL, 2351 .ndo_set_mac_address = NULL,
2371 .ndo_validate_addr = eth_validate_addr, 2352 .ndo_validate_addr = eth_validate_addr,
2372#ifdef CONFIG_NET_POLL_CONTROLLER
2373 .ndo_poll_controller = ena_netpoll,
2374#endif /* CONFIG_NET_POLL_CONTROLLER */
2375}; 2353};
2376 2354
2377static int ena_device_validate_params(struct ena_adapter *adapter, 2355static int ena_device_validate_params(struct ena_adapter *adapter,
diff --git a/drivers/net/ethernet/amd/declance.c b/drivers/net/ethernet/amd/declance.c
index 116997a8b593..00332a1ea84b 100644
--- a/drivers/net/ethernet/amd/declance.c
+++ b/drivers/net/ethernet/amd/declance.c
@@ -1031,6 +1031,7 @@ static int dec_lance_probe(struct device *bdev, const int type)
1031 int i, ret; 1031 int i, ret;
1032 unsigned long esar_base; 1032 unsigned long esar_base;
1033 unsigned char *esar; 1033 unsigned char *esar;
1034 const char *desc;
1034 1035
1035 if (dec_lance_debug && version_printed++ == 0) 1036 if (dec_lance_debug && version_printed++ == 0)
1036 printk(version); 1037 printk(version);
@@ -1216,19 +1217,20 @@ static int dec_lance_probe(struct device *bdev, const int type)
1216 */ 1217 */
1217 switch (type) { 1218 switch (type) {
1218 case ASIC_LANCE: 1219 case ASIC_LANCE:
1219 printk("%s: IOASIC onboard LANCE", name); 1220 desc = "IOASIC onboard LANCE";
1220 break; 1221 break;
1221 case PMAD_LANCE: 1222 case PMAD_LANCE:
1222 printk("%s: PMAD-AA", name); 1223 desc = "PMAD-AA";
1223 break; 1224 break;
1224 case PMAX_LANCE: 1225 case PMAX_LANCE:
1225 printk("%s: PMAX onboard LANCE", name); 1226 desc = "PMAX onboard LANCE";
1226 break; 1227 break;
1227 } 1228 }
1228 for (i = 0; i < 6; i++) 1229 for (i = 0; i < 6; i++)
1229 dev->dev_addr[i] = esar[i * 4]; 1230 dev->dev_addr[i] = esar[i * 4];
1230 1231
1231 printk(", addr = %pM, irq = %d\n", dev->dev_addr, dev->irq); 1232 printk("%s: %s, addr = %pM, irq = %d\n",
1233 name, desc, dev->dev_addr, dev->irq);
1232 1234
1233 dev->netdev_ops = &lance_netdev_ops; 1235 dev->netdev_ops = &lance_netdev_ops;
1234 dev->watchdog_timeo = 5*HZ; 1236 dev->watchdog_timeo = 5*HZ;
diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c b/drivers/net/ethernet/broadcom/bcmsysport.c
index 147045757b10..c57238fce863 100644
--- a/drivers/net/ethernet/broadcom/bcmsysport.c
+++ b/drivers/net/ethernet/broadcom/bcmsysport.c
@@ -1069,9 +1069,6 @@ static void bcm_sysport_resume_from_wol(struct bcm_sysport_priv *priv)
1069{ 1069{
1070 u32 reg; 1070 u32 reg;
1071 1071
1072 /* Stop monitoring MPD interrupt */
1073 intrl2_0_mask_set(priv, INTRL2_0_MPD | INTRL2_0_BRCM_MATCH_TAG);
1074
1075 /* Disable RXCHK, active filters and Broadcom tag matching */ 1072 /* Disable RXCHK, active filters and Broadcom tag matching */
1076 reg = rxchk_readl(priv, RXCHK_CONTROL); 1073 reg = rxchk_readl(priv, RXCHK_CONTROL);
1077 reg &= ~(RXCHK_BRCM_TAG_MATCH_MASK << 1074 reg &= ~(RXCHK_BRCM_TAG_MATCH_MASK <<
@@ -1081,6 +1078,17 @@ static void bcm_sysport_resume_from_wol(struct bcm_sysport_priv *priv)
1081 /* Clear the MagicPacket detection logic */ 1078 /* Clear the MagicPacket detection logic */
1082 mpd_enable_set(priv, false); 1079 mpd_enable_set(priv, false);
1083 1080
1081 reg = intrl2_0_readl(priv, INTRL2_CPU_STATUS);
1082 if (reg & INTRL2_0_MPD)
1083 netdev_info(priv->netdev, "Wake-on-LAN (MPD) interrupt!\n");
1084
1085 if (reg & INTRL2_0_BRCM_MATCH_TAG) {
1086 reg = rxchk_readl(priv, RXCHK_BRCM_TAG_MATCH_STATUS) &
1087 RXCHK_BRCM_TAG_MATCH_MASK;
1088 netdev_info(priv->netdev,
1089 "Wake-on-LAN (filters 0x%02x) interrupt!\n", reg);
1090 }
1091
1084 netif_dbg(priv, wol, priv->netdev, "resumed from WOL\n"); 1092 netif_dbg(priv, wol, priv->netdev, "resumed from WOL\n");
1085} 1093}
1086 1094
@@ -1105,7 +1113,6 @@ static irqreturn_t bcm_sysport_rx_isr(int irq, void *dev_id)
1105 struct bcm_sysport_priv *priv = netdev_priv(dev); 1113 struct bcm_sysport_priv *priv = netdev_priv(dev);
1106 struct bcm_sysport_tx_ring *txr; 1114 struct bcm_sysport_tx_ring *txr;
1107 unsigned int ring, ring_bit; 1115 unsigned int ring, ring_bit;
1108 u32 reg;
1109 1116
1110 priv->irq0_stat = intrl2_0_readl(priv, INTRL2_CPU_STATUS) & 1117 priv->irq0_stat = intrl2_0_readl(priv, INTRL2_CPU_STATUS) &
1111 ~intrl2_0_readl(priv, INTRL2_CPU_MASK_STATUS); 1118 ~intrl2_0_readl(priv, INTRL2_CPU_MASK_STATUS);
@@ -1131,16 +1138,6 @@ static irqreturn_t bcm_sysport_rx_isr(int irq, void *dev_id)
1131 if (priv->irq0_stat & INTRL2_0_TX_RING_FULL) 1138 if (priv->irq0_stat & INTRL2_0_TX_RING_FULL)
1132 bcm_sysport_tx_reclaim_all(priv); 1139 bcm_sysport_tx_reclaim_all(priv);
1133 1140
1134 if (priv->irq0_stat & INTRL2_0_MPD)
1135 netdev_info(priv->netdev, "Wake-on-LAN (MPD) interrupt!\n");
1136
1137 if (priv->irq0_stat & INTRL2_0_BRCM_MATCH_TAG) {
1138 reg = rxchk_readl(priv, RXCHK_BRCM_TAG_MATCH_STATUS) &
1139 RXCHK_BRCM_TAG_MATCH_MASK;
1140 netdev_info(priv->netdev,
1141 "Wake-on-LAN (filters 0x%02x) interrupt!\n", reg);
1142 }
1143
1144 if (!priv->is_lite) 1141 if (!priv->is_lite)
1145 goto out; 1142 goto out;
1146 1143
@@ -2641,9 +2638,6 @@ static int bcm_sysport_suspend_to_wol(struct bcm_sysport_priv *priv)
2641 /* UniMAC receive needs to be turned on */ 2638 /* UniMAC receive needs to be turned on */
2642 umac_enable_set(priv, CMD_RX_EN, 1); 2639 umac_enable_set(priv, CMD_RX_EN, 1);
2643 2640
2644 /* Enable the interrupt wake-up source */
2645 intrl2_0_mask_clear(priv, INTRL2_0_MPD | INTRL2_0_BRCM_MATCH_TAG);
2646
2647 netif_dbg(priv, wol, ndev, "entered WOL mode\n"); 2641 netif_dbg(priv, wol, ndev, "entered WOL mode\n");
2648 2642
2649 return 0; 2643 return 0;
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 61957b0bbd8c..0478e562abac 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -1884,8 +1884,11 @@ static int bnxt_poll_work(struct bnxt *bp, struct bnxt_napi *bnapi, int budget)
1884 if (TX_CMP_TYPE(txcmp) == CMP_TYPE_TX_L2_CMP) { 1884 if (TX_CMP_TYPE(txcmp) == CMP_TYPE_TX_L2_CMP) {
1885 tx_pkts++; 1885 tx_pkts++;
1886 /* return full budget so NAPI will complete. */ 1886 /* return full budget so NAPI will complete. */
1887 if (unlikely(tx_pkts > bp->tx_wake_thresh)) 1887 if (unlikely(tx_pkts > bp->tx_wake_thresh)) {
1888 rx_pkts = budget; 1888 rx_pkts = budget;
1889 raw_cons = NEXT_RAW_CMP(raw_cons);
1890 break;
1891 }
1889 } else if ((TX_CMP_TYPE(txcmp) & 0x30) == 0x10) { 1892 } else if ((TX_CMP_TYPE(txcmp) & 0x30) == 0x10) {
1890 if (likely(budget)) 1893 if (likely(budget))
1891 rc = bnxt_rx_pkt(bp, bnapi, &raw_cons, &event); 1894 rc = bnxt_rx_pkt(bp, bnapi, &raw_cons, &event);
@@ -1913,7 +1916,7 @@ static int bnxt_poll_work(struct bnxt *bp, struct bnxt_napi *bnapi, int budget)
1913 } 1916 }
1914 raw_cons = NEXT_RAW_CMP(raw_cons); 1917 raw_cons = NEXT_RAW_CMP(raw_cons);
1915 1918
1916 if (rx_pkts == budget) 1919 if (rx_pkts && rx_pkts == budget)
1917 break; 1920 break;
1918 } 1921 }
1919 1922
@@ -2027,8 +2030,12 @@ static int bnxt_poll(struct napi_struct *napi, int budget)
2027 while (1) { 2030 while (1) {
2028 work_done += bnxt_poll_work(bp, bnapi, budget - work_done); 2031 work_done += bnxt_poll_work(bp, bnapi, budget - work_done);
2029 2032
2030 if (work_done >= budget) 2033 if (work_done >= budget) {
2034 if (!budget)
2035 BNXT_CP_DB_REARM(cpr->cp_doorbell,
2036 cpr->cp_raw_cons);
2031 break; 2037 break;
2038 }
2032 2039
2033 if (!bnxt_has_work(bp, cpr)) { 2040 if (!bnxt_has_work(bp, cpr)) {
2034 if (napi_complete_done(napi, work_done)) 2041 if (napi_complete_done(napi, work_done))
diff --git a/drivers/net/ethernet/cadence/macb_main.c b/drivers/net/ethernet/cadence/macb_main.c
index f1a86b422617..58b9744c4058 100644
--- a/drivers/net/ethernet/cadence/macb_main.c
+++ b/drivers/net/ethernet/cadence/macb_main.c
@@ -2160,6 +2160,7 @@ static void macb_configure_dma(struct macb *bp)
2160 else 2160 else
2161 dmacfg &= ~GEM_BIT(TXCOEN); 2161 dmacfg &= ~GEM_BIT(TXCOEN);
2162 2162
2163 dmacfg &= ~GEM_BIT(ADDR64);
2163#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 2164#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
2164 if (bp->hw_dma_cap & HW_DMA_CAP_64B) 2165 if (bp->hw_dma_cap & HW_DMA_CAP_64B)
2165 dmacfg |= GEM_BIT(ADDR64); 2166 dmacfg |= GEM_BIT(ADDR64);
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
index 2708297e7795..bf9b9fd6d2a0 100644
--- a/drivers/net/ethernet/freescale/fec_main.c
+++ b/drivers/net/ethernet/freescale/fec_main.c
@@ -1158,7 +1158,7 @@ static void fec_enet_timeout_work(struct work_struct *work)
1158 napi_disable(&fep->napi); 1158 napi_disable(&fep->napi);
1159 netif_tx_lock_bh(ndev); 1159 netif_tx_lock_bh(ndev);
1160 fec_restart(ndev); 1160 fec_restart(ndev);
1161 netif_wake_queue(ndev); 1161 netif_tx_wake_all_queues(ndev);
1162 netif_tx_unlock_bh(ndev); 1162 netif_tx_unlock_bh(ndev);
1163 napi_enable(&fep->napi); 1163 napi_enable(&fep->napi);
1164 } 1164 }
@@ -1273,7 +1273,7 @@ skb_done:
1273 1273
1274 /* Since we have freed up a buffer, the ring is no longer full 1274 /* Since we have freed up a buffer, the ring is no longer full
1275 */ 1275 */
1276 if (netif_queue_stopped(ndev)) { 1276 if (netif_tx_queue_stopped(nq)) {
1277 entries_free = fec_enet_get_free_txdesc_num(txq); 1277 entries_free = fec_enet_get_free_txdesc_num(txq);
1278 if (entries_free >= txq->tx_wake_threshold) 1278 if (entries_free >= txq->tx_wake_threshold)
1279 netif_tx_wake_queue(nq); 1279 netif_tx_wake_queue(nq);
@@ -1746,7 +1746,7 @@ static void fec_enet_adjust_link(struct net_device *ndev)
1746 napi_disable(&fep->napi); 1746 napi_disable(&fep->napi);
1747 netif_tx_lock_bh(ndev); 1747 netif_tx_lock_bh(ndev);
1748 fec_restart(ndev); 1748 fec_restart(ndev);
1749 netif_wake_queue(ndev); 1749 netif_tx_wake_all_queues(ndev);
1750 netif_tx_unlock_bh(ndev); 1750 netif_tx_unlock_bh(ndev);
1751 napi_enable(&fep->napi); 1751 napi_enable(&fep->napi);
1752 } 1752 }
@@ -2247,7 +2247,7 @@ static int fec_enet_set_pauseparam(struct net_device *ndev,
2247 napi_disable(&fep->napi); 2247 napi_disable(&fep->napi);
2248 netif_tx_lock_bh(ndev); 2248 netif_tx_lock_bh(ndev);
2249 fec_restart(ndev); 2249 fec_restart(ndev);
2250 netif_wake_queue(ndev); 2250 netif_tx_wake_all_queues(ndev);
2251 netif_tx_unlock_bh(ndev); 2251 netif_tx_unlock_bh(ndev);
2252 napi_enable(&fep->napi); 2252 napi_enable(&fep->napi);
2253 } 2253 }
diff --git a/drivers/net/ethernet/hisilicon/hns/hnae.c b/drivers/net/ethernet/hisilicon/hns/hnae.c
index a051e582d541..79d03f8ee7b1 100644
--- a/drivers/net/ethernet/hisilicon/hns/hnae.c
+++ b/drivers/net/ethernet/hisilicon/hns/hnae.c
@@ -84,7 +84,7 @@ static void hnae_unmap_buffer(struct hnae_ring *ring, struct hnae_desc_cb *cb)
84 if (cb->type == DESC_TYPE_SKB) 84 if (cb->type == DESC_TYPE_SKB)
85 dma_unmap_single(ring_to_dev(ring), cb->dma, cb->length, 85 dma_unmap_single(ring_to_dev(ring), cb->dma, cb->length,
86 ring_to_dma_dir(ring)); 86 ring_to_dma_dir(ring));
87 else 87 else if (cb->length)
88 dma_unmap_page(ring_to_dev(ring), cb->dma, cb->length, 88 dma_unmap_page(ring_to_dev(ring), cb->dma, cb->length,
89 ring_to_dma_dir(ring)); 89 ring_to_dma_dir(ring));
90} 90}
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
index f56855e63c96..28e907831b0e 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
@@ -40,9 +40,9 @@
40#define SKB_TMP_LEN(SKB) \ 40#define SKB_TMP_LEN(SKB) \
41 (((SKB)->transport_header - (SKB)->mac_header) + tcp_hdrlen(SKB)) 41 (((SKB)->transport_header - (SKB)->mac_header) + tcp_hdrlen(SKB))
42 42
43static void fill_v2_desc(struct hnae_ring *ring, void *priv, 43static void fill_v2_desc_hw(struct hnae_ring *ring, void *priv, int size,
44 int size, dma_addr_t dma, int frag_end, 44 int send_sz, dma_addr_t dma, int frag_end,
45 int buf_num, enum hns_desc_type type, int mtu) 45 int buf_num, enum hns_desc_type type, int mtu)
46{ 46{
47 struct hnae_desc *desc = &ring->desc[ring->next_to_use]; 47 struct hnae_desc *desc = &ring->desc[ring->next_to_use];
48 struct hnae_desc_cb *desc_cb = &ring->desc_cb[ring->next_to_use]; 48 struct hnae_desc_cb *desc_cb = &ring->desc_cb[ring->next_to_use];
@@ -64,7 +64,7 @@ static void fill_v2_desc(struct hnae_ring *ring, void *priv,
64 desc_cb->type = type; 64 desc_cb->type = type;
65 65
66 desc->addr = cpu_to_le64(dma); 66 desc->addr = cpu_to_le64(dma);
67 desc->tx.send_size = cpu_to_le16((u16)size); 67 desc->tx.send_size = cpu_to_le16((u16)send_sz);
68 68
69 /* config bd buffer end */ 69 /* config bd buffer end */
70 hnae_set_bit(rrcfv, HNSV2_TXD_VLD_B, 1); 70 hnae_set_bit(rrcfv, HNSV2_TXD_VLD_B, 1);
@@ -133,6 +133,14 @@ static void fill_v2_desc(struct hnae_ring *ring, void *priv,
133 ring_ptr_move_fw(ring, next_to_use); 133 ring_ptr_move_fw(ring, next_to_use);
134} 134}
135 135
136static void fill_v2_desc(struct hnae_ring *ring, void *priv,
137 int size, dma_addr_t dma, int frag_end,
138 int buf_num, enum hns_desc_type type, int mtu)
139{
140 fill_v2_desc_hw(ring, priv, size, size, dma, frag_end,
141 buf_num, type, mtu);
142}
143
136static const struct acpi_device_id hns_enet_acpi_match[] = { 144static const struct acpi_device_id hns_enet_acpi_match[] = {
137 { "HISI00C1", 0 }, 145 { "HISI00C1", 0 },
138 { "HISI00C2", 0 }, 146 { "HISI00C2", 0 },
@@ -289,15 +297,15 @@ static void fill_tso_desc(struct hnae_ring *ring, void *priv,
289 297
290 /* when the frag size is bigger than hardware, split this frag */ 298 /* when the frag size is bigger than hardware, split this frag */
291 for (k = 0; k < frag_buf_num; k++) 299 for (k = 0; k < frag_buf_num; k++)
292 fill_v2_desc(ring, priv, 300 fill_v2_desc_hw(ring, priv, k == 0 ? size : 0,
293 (k == frag_buf_num - 1) ? 301 (k == frag_buf_num - 1) ?
294 sizeoflast : BD_MAX_SEND_SIZE, 302 sizeoflast : BD_MAX_SEND_SIZE,
295 dma + BD_MAX_SEND_SIZE * k, 303 dma + BD_MAX_SEND_SIZE * k,
296 frag_end && (k == frag_buf_num - 1) ? 1 : 0, 304 frag_end && (k == frag_buf_num - 1) ? 1 : 0,
297 buf_num, 305 buf_num,
298 (type == DESC_TYPE_SKB && !k) ? 306 (type == DESC_TYPE_SKB && !k) ?
299 DESC_TYPE_SKB : DESC_TYPE_PAGE, 307 DESC_TYPE_SKB : DESC_TYPE_PAGE,
300 mtu); 308 mtu);
301} 309}
302 310
303netdev_tx_t hns_nic_net_xmit_hw(struct net_device *ndev, 311netdev_tx_t hns_nic_net_xmit_hw(struct net_device *ndev,
@@ -1495,21 +1503,6 @@ static int hns_nic_do_ioctl(struct net_device *netdev, struct ifreq *ifr,
1495 return phy_mii_ioctl(phy_dev, ifr, cmd); 1503 return phy_mii_ioctl(phy_dev, ifr, cmd);
1496} 1504}
1497 1505
1498/* use only for netconsole to poll with the device without interrupt */
1499#ifdef CONFIG_NET_POLL_CONTROLLER
1500static void hns_nic_poll_controller(struct net_device *ndev)
1501{
1502 struct hns_nic_priv *priv = netdev_priv(ndev);
1503 unsigned long flags;
1504 int i;
1505
1506 local_irq_save(flags);
1507 for (i = 0; i < priv->ae_handle->q_num * 2; i++)
1508 napi_schedule(&priv->ring_data[i].napi);
1509 local_irq_restore(flags);
1510}
1511#endif
1512
1513static netdev_tx_t hns_nic_net_xmit(struct sk_buff *skb, 1506static netdev_tx_t hns_nic_net_xmit(struct sk_buff *skb,
1514 struct net_device *ndev) 1507 struct net_device *ndev)
1515{ 1508{
@@ -1962,9 +1955,6 @@ static const struct net_device_ops hns_nic_netdev_ops = {
1962 .ndo_set_features = hns_nic_set_features, 1955 .ndo_set_features = hns_nic_set_features,
1963 .ndo_fix_features = hns_nic_fix_features, 1956 .ndo_fix_features = hns_nic_fix_features,
1964 .ndo_get_stats64 = hns_nic_get_stats64, 1957 .ndo_get_stats64 = hns_nic_get_stats64,
1965#ifdef CONFIG_NET_POLL_CONTROLLER
1966 .ndo_poll_controller = hns_nic_poll_controller,
1967#endif
1968 .ndo_set_rx_mode = hns_nic_set_rx_mode, 1958 .ndo_set_rx_mode = hns_nic_set_rx_mode,
1969 .ndo_select_queue = hns_nic_select_queue, 1959 .ndo_select_queue = hns_nic_select_queue,
1970}; 1960};
diff --git a/drivers/net/ethernet/huawei/hinic/hinic_main.c b/drivers/net/ethernet/huawei/hinic/hinic_main.c
index 09e9da10b786..4a8f82938ed5 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_main.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_main.c
@@ -789,23 +789,6 @@ static void hinic_get_stats64(struct net_device *netdev,
789 stats->tx_errors = nic_tx_stats->tx_dropped; 789 stats->tx_errors = nic_tx_stats->tx_dropped;
790} 790}
791 791
792#ifdef CONFIG_NET_POLL_CONTROLLER
793static void hinic_netpoll(struct net_device *netdev)
794{
795 struct hinic_dev *nic_dev = netdev_priv(netdev);
796 int i, num_qps;
797
798 num_qps = hinic_hwdev_num_qps(nic_dev->hwdev);
799 for (i = 0; i < num_qps; i++) {
800 struct hinic_txq *txq = &nic_dev->txqs[i];
801 struct hinic_rxq *rxq = &nic_dev->rxqs[i];
802
803 napi_schedule(&txq->napi);
804 napi_schedule(&rxq->napi);
805 }
806}
807#endif
808
809static const struct net_device_ops hinic_netdev_ops = { 792static const struct net_device_ops hinic_netdev_ops = {
810 .ndo_open = hinic_open, 793 .ndo_open = hinic_open,
811 .ndo_stop = hinic_close, 794 .ndo_stop = hinic_close,
@@ -818,9 +801,6 @@ static const struct net_device_ops hinic_netdev_ops = {
818 .ndo_start_xmit = hinic_xmit_frame, 801 .ndo_start_xmit = hinic_xmit_frame,
819 .ndo_tx_timeout = hinic_tx_timeout, 802 .ndo_tx_timeout = hinic_tx_timeout,
820 .ndo_get_stats64 = hinic_get_stats64, 803 .ndo_get_stats64 = hinic_get_stats64,
821#ifdef CONFIG_NET_POLL_CONTROLLER
822 .ndo_poll_controller = hinic_netpoll,
823#endif
824}; 804};
825 805
826static void netdev_features_init(struct net_device *netdev) 806static void netdev_features_init(struct net_device *netdev)
diff --git a/drivers/net/ethernet/ibm/ehea/ehea_main.c b/drivers/net/ethernet/ibm/ehea/ehea_main.c
index ba580bfae512..03f64f40b2a3 100644
--- a/drivers/net/ethernet/ibm/ehea/ehea_main.c
+++ b/drivers/net/ethernet/ibm/ehea/ehea_main.c
@@ -921,17 +921,6 @@ static int ehea_poll(struct napi_struct *napi, int budget)
921 return rx; 921 return rx;
922} 922}
923 923
924#ifdef CONFIG_NET_POLL_CONTROLLER
925static void ehea_netpoll(struct net_device *dev)
926{
927 struct ehea_port *port = netdev_priv(dev);
928 int i;
929
930 for (i = 0; i < port->num_def_qps; i++)
931 napi_schedule(&port->port_res[i].napi);
932}
933#endif
934
935static irqreturn_t ehea_recv_irq_handler(int irq, void *param) 924static irqreturn_t ehea_recv_irq_handler(int irq, void *param)
936{ 925{
937 struct ehea_port_res *pr = param; 926 struct ehea_port_res *pr = param;
@@ -2953,9 +2942,6 @@ static const struct net_device_ops ehea_netdev_ops = {
2953 .ndo_open = ehea_open, 2942 .ndo_open = ehea_open,
2954 .ndo_stop = ehea_stop, 2943 .ndo_stop = ehea_stop,
2955 .ndo_start_xmit = ehea_start_xmit, 2944 .ndo_start_xmit = ehea_start_xmit,
2956#ifdef CONFIG_NET_POLL_CONTROLLER
2957 .ndo_poll_controller = ehea_netpoll,
2958#endif
2959 .ndo_get_stats64 = ehea_get_stats64, 2945 .ndo_get_stats64 = ehea_get_stats64,
2960 .ndo_set_mac_address = ehea_set_mac_addr, 2946 .ndo_set_mac_address = ehea_set_mac_addr,
2961 .ndo_validate_addr = eth_validate_addr, 2947 .ndo_validate_addr = eth_validate_addr,
diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
index 4f0daf67b18d..699ef942b615 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -2207,19 +2207,6 @@ restart_poll:
2207 return frames_processed; 2207 return frames_processed;
2208} 2208}
2209 2209
2210#ifdef CONFIG_NET_POLL_CONTROLLER
2211static void ibmvnic_netpoll_controller(struct net_device *dev)
2212{
2213 struct ibmvnic_adapter *adapter = netdev_priv(dev);
2214 int i;
2215
2216 replenish_pools(netdev_priv(dev));
2217 for (i = 0; i < adapter->req_rx_queues; i++)
2218 ibmvnic_interrupt_rx(adapter->rx_scrq[i]->irq,
2219 adapter->rx_scrq[i]);
2220}
2221#endif
2222
2223static int wait_for_reset(struct ibmvnic_adapter *adapter) 2210static int wait_for_reset(struct ibmvnic_adapter *adapter)
2224{ 2211{
2225 int rc, ret; 2212 int rc, ret;
@@ -2292,9 +2279,6 @@ static const struct net_device_ops ibmvnic_netdev_ops = {
2292 .ndo_set_mac_address = ibmvnic_set_mac, 2279 .ndo_set_mac_address = ibmvnic_set_mac,
2293 .ndo_validate_addr = eth_validate_addr, 2280 .ndo_validate_addr = eth_validate_addr,
2294 .ndo_tx_timeout = ibmvnic_tx_timeout, 2281 .ndo_tx_timeout = ibmvnic_tx_timeout,
2295#ifdef CONFIG_NET_POLL_CONTROLLER
2296 .ndo_poll_controller = ibmvnic_netpoll_controller,
2297#endif
2298 .ndo_change_mtu = ibmvnic_change_mtu, 2282 .ndo_change_mtu = ibmvnic_change_mtu,
2299 .ndo_features_check = ibmvnic_features_check, 2283 .ndo_features_check = ibmvnic_features_check,
2300}; 2284};
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index f27d73a7bf16..6cdd58d9d461 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -3196,11 +3196,13 @@ int ixgbe_poll(struct napi_struct *napi, int budget)
3196 return budget; 3196 return budget;
3197 3197
3198 /* all work done, exit the polling mode */ 3198 /* all work done, exit the polling mode */
3199 napi_complete_done(napi, work_done); 3199 if (likely(napi_complete_done(napi, work_done))) {
3200 if (adapter->rx_itr_setting & 1) 3200 if (adapter->rx_itr_setting & 1)
3201 ixgbe_set_itr(q_vector); 3201 ixgbe_set_itr(q_vector);
3202 if (!test_bit(__IXGBE_DOWN, &adapter->state)) 3202 if (!test_bit(__IXGBE_DOWN, &adapter->state))
3203 ixgbe_irq_enable_queues(adapter, BIT_ULL(q_vector->v_idx)); 3203 ixgbe_irq_enable_queues(adapter,
3204 BIT_ULL(q_vector->v_idx));
3205 }
3204 3206
3205 return min(work_done, budget - 1); 3207 return min(work_done, budget - 1);
3206} 3208}
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en.h b/drivers/net/ethernet/mellanox/mlx5/core/en.h
index db2cfcd21d43..0f189f873859 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en.h
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en.h
@@ -54,6 +54,7 @@
54#include "en_stats.h" 54#include "en_stats.h"
55#include "en/fs.h" 55#include "en/fs.h"
56 56
57extern const struct net_device_ops mlx5e_netdev_ops;
57struct page_pool; 58struct page_pool;
58 59
59#define MLX5E_METADATA_ETHER_TYPE (0x8CE4) 60#define MLX5E_METADATA_ETHER_TYPE (0x8CE4)
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/fs.h b/drivers/net/ethernet/mellanox/mlx5/core/en/fs.h
index bbf69e859b78..1431232c9a09 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/fs.h
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/fs.h
@@ -16,6 +16,8 @@ struct mlx5e_tc_table {
16 16
17 DECLARE_HASHTABLE(mod_hdr_tbl, 8); 17 DECLARE_HASHTABLE(mod_hdr_tbl, 8);
18 DECLARE_HASHTABLE(hairpin_tbl, 8); 18 DECLARE_HASHTABLE(hairpin_tbl, 8);
19
20 struct notifier_block netdevice_nb;
19}; 21};
20 22
21struct mlx5e_flow_table { 23struct mlx5e_flow_table {
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
index 54118b77dc1f..f291d1bf1558 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
@@ -4315,7 +4315,7 @@ static int mlx5e_xdp(struct net_device *dev, struct netdev_bpf *xdp)
4315 } 4315 }
4316} 4316}
4317 4317
4318static const struct net_device_ops mlx5e_netdev_ops = { 4318const struct net_device_ops mlx5e_netdev_ops = {
4319 .ndo_open = mlx5e_open, 4319 .ndo_open = mlx5e_open,
4320 .ndo_stop = mlx5e_close, 4320 .ndo_stop = mlx5e_close,
4321 .ndo_start_xmit = mlx5e_xmit, 4321 .ndo_start_xmit = mlx5e_xmit,
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
index 9fed54017659..85796727093e 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
@@ -1368,6 +1368,9 @@ static int __parse_cls_flower(struct mlx5e_priv *priv,
1368 1368
1369 *match_level = MLX5_MATCH_L2; 1369 *match_level = MLX5_MATCH_L2;
1370 } 1370 }
1371 } else {
1372 MLX5_SET(fte_match_set_lyr_2_4, headers_c, svlan_tag, 1);
1373 MLX5_SET(fte_match_set_lyr_2_4, headers_c, cvlan_tag, 1);
1371 } 1374 }
1372 1375
1373 if (dissector_uses_key(f->dissector, FLOW_DISSECTOR_KEY_CVLAN)) { 1376 if (dissector_uses_key(f->dissector, FLOW_DISSECTOR_KEY_CVLAN)) {
@@ -2946,14 +2949,71 @@ int mlx5e_stats_flower(struct mlx5e_priv *priv,
2946 return 0; 2949 return 0;
2947} 2950}
2948 2951
2952static void mlx5e_tc_hairpin_update_dead_peer(struct mlx5e_priv *priv,
2953 struct mlx5e_priv *peer_priv)
2954{
2955 struct mlx5_core_dev *peer_mdev = peer_priv->mdev;
2956 struct mlx5e_hairpin_entry *hpe;
2957 u16 peer_vhca_id;
2958 int bkt;
2959
2960 if (!same_hw_devs(priv, peer_priv))
2961 return;
2962
2963 peer_vhca_id = MLX5_CAP_GEN(peer_mdev, vhca_id);
2964
2965 hash_for_each(priv->fs.tc.hairpin_tbl, bkt, hpe, hairpin_hlist) {
2966 if (hpe->peer_vhca_id == peer_vhca_id)
2967 hpe->hp->pair->peer_gone = true;
2968 }
2969}
2970
2971static int mlx5e_tc_netdev_event(struct notifier_block *this,
2972 unsigned long event, void *ptr)
2973{
2974 struct net_device *ndev = netdev_notifier_info_to_dev(ptr);
2975 struct mlx5e_flow_steering *fs;
2976 struct mlx5e_priv *peer_priv;
2977 struct mlx5e_tc_table *tc;
2978 struct mlx5e_priv *priv;
2979
2980 if (ndev->netdev_ops != &mlx5e_netdev_ops ||
2981 event != NETDEV_UNREGISTER ||
2982 ndev->reg_state == NETREG_REGISTERED)
2983 return NOTIFY_DONE;
2984
2985 tc = container_of(this, struct mlx5e_tc_table, netdevice_nb);
2986 fs = container_of(tc, struct mlx5e_flow_steering, tc);
2987 priv = container_of(fs, struct mlx5e_priv, fs);
2988 peer_priv = netdev_priv(ndev);
2989 if (priv == peer_priv ||
2990 !(priv->netdev->features & NETIF_F_HW_TC))
2991 return NOTIFY_DONE;
2992
2993 mlx5e_tc_hairpin_update_dead_peer(priv, peer_priv);
2994
2995 return NOTIFY_DONE;
2996}
2997
2949int mlx5e_tc_nic_init(struct mlx5e_priv *priv) 2998int mlx5e_tc_nic_init(struct mlx5e_priv *priv)
2950{ 2999{
2951 struct mlx5e_tc_table *tc = &priv->fs.tc; 3000 struct mlx5e_tc_table *tc = &priv->fs.tc;
3001 int err;
2952 3002
2953 hash_init(tc->mod_hdr_tbl); 3003 hash_init(tc->mod_hdr_tbl);
2954 hash_init(tc->hairpin_tbl); 3004 hash_init(tc->hairpin_tbl);
2955 3005
2956 return rhashtable_init(&tc->ht, &tc_ht_params); 3006 err = rhashtable_init(&tc->ht, &tc_ht_params);
3007 if (err)
3008 return err;
3009
3010 tc->netdevice_nb.notifier_call = mlx5e_tc_netdev_event;
3011 if (register_netdevice_notifier(&tc->netdevice_nb)) {
3012 tc->netdevice_nb.notifier_call = NULL;
3013 mlx5_core_warn(priv->mdev, "Failed to register netdev notifier\n");
3014 }
3015
3016 return err;
2957} 3017}
2958 3018
2959static void _mlx5e_tc_del_flow(void *ptr, void *arg) 3019static void _mlx5e_tc_del_flow(void *ptr, void *arg)
@@ -2969,6 +3029,9 @@ void mlx5e_tc_nic_cleanup(struct mlx5e_priv *priv)
2969{ 3029{
2970 struct mlx5e_tc_table *tc = &priv->fs.tc; 3030 struct mlx5e_tc_table *tc = &priv->fs.tc;
2971 3031
3032 if (tc->netdevice_nb.notifier_call)
3033 unregister_netdevice_notifier(&tc->netdevice_nb);
3034
2972 rhashtable_free_and_destroy(&tc->ht, _mlx5e_tc_del_flow, NULL); 3035 rhashtable_free_and_destroy(&tc->ht, _mlx5e_tc_del_flow, NULL);
2973 3036
2974 if (!IS_ERR_OR_NULL(tc->t)) { 3037 if (!IS_ERR_OR_NULL(tc->t)) {
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
index 2b252cde5cc2..ea7dedc2d5ad 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
@@ -2000,7 +2000,7 @@ static u32 calculate_vports_min_rate_divider(struct mlx5_eswitch *esw)
2000 u32 max_guarantee = 0; 2000 u32 max_guarantee = 0;
2001 int i; 2001 int i;
2002 2002
2003 for (i = 0; i <= esw->total_vports; i++) { 2003 for (i = 0; i < esw->total_vports; i++) {
2004 evport = &esw->vports[i]; 2004 evport = &esw->vports[i];
2005 if (!evport->enabled || evport->info.min_rate < max_guarantee) 2005 if (!evport->enabled || evport->info.min_rate < max_guarantee)
2006 continue; 2006 continue;
@@ -2020,7 +2020,7 @@ static int normalize_vports_min_rate(struct mlx5_eswitch *esw, u32 divider)
2020 int err; 2020 int err;
2021 int i; 2021 int i;
2022 2022
2023 for (i = 0; i <= esw->total_vports; i++) { 2023 for (i = 0; i < esw->total_vports; i++) {
2024 evport = &esw->vports[i]; 2024 evport = &esw->vports[i];
2025 if (!evport->enabled) 2025 if (!evport->enabled)
2026 continue; 2026 continue;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/transobj.c b/drivers/net/ethernet/mellanox/mlx5/core/transobj.c
index d2f76070ea7c..a1ee9a8a769e 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/transobj.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/transobj.c
@@ -475,7 +475,8 @@ static void mlx5_hairpin_destroy_queues(struct mlx5_hairpin *hp)
475 475
476 for (i = 0; i < hp->num_channels; i++) { 476 for (i = 0; i < hp->num_channels; i++) {
477 mlx5_core_destroy_rq(hp->func_mdev, hp->rqn[i]); 477 mlx5_core_destroy_rq(hp->func_mdev, hp->rqn[i]);
478 mlx5_core_destroy_sq(hp->peer_mdev, hp->sqn[i]); 478 if (!hp->peer_gone)
479 mlx5_core_destroy_sq(hp->peer_mdev, hp->sqn[i]);
479 } 480 }
480} 481}
481 482
@@ -567,6 +568,8 @@ static void mlx5_hairpin_unpair_queues(struct mlx5_hairpin *hp)
567 MLX5_RQC_STATE_RST, 0, 0); 568 MLX5_RQC_STATE_RST, 0, 0);
568 569
569 /* unset peer SQs */ 570 /* unset peer SQs */
571 if (hp->peer_gone)
572 return;
570 for (i = 0; i < hp->num_channels; i++) 573 for (i = 0; i < hp->num_channels; i++)
571 mlx5_hairpin_modify_sq(hp->peer_mdev, hp->sqn[i], MLX5_SQC_STATE_RDY, 574 mlx5_hairpin_modify_sq(hp->peer_mdev, hp->sqn[i], MLX5_SQC_STATE_RDY,
572 MLX5_SQC_STATE_RST, 0, 0); 575 MLX5_SQC_STATE_RST, 0, 0);
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
index 8ed38fd5a852..c6d29fdbb880 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
@@ -2077,14 +2077,17 @@ nfp_ctrl_rx_one(struct nfp_net *nn, struct nfp_net_dp *dp,
2077 return true; 2077 return true;
2078} 2078}
2079 2079
2080static void nfp_ctrl_rx(struct nfp_net_r_vector *r_vec) 2080static bool nfp_ctrl_rx(struct nfp_net_r_vector *r_vec)
2081{ 2081{
2082 struct nfp_net_rx_ring *rx_ring = r_vec->rx_ring; 2082 struct nfp_net_rx_ring *rx_ring = r_vec->rx_ring;
2083 struct nfp_net *nn = r_vec->nfp_net; 2083 struct nfp_net *nn = r_vec->nfp_net;
2084 struct nfp_net_dp *dp = &nn->dp; 2084 struct nfp_net_dp *dp = &nn->dp;
2085 unsigned int budget = 512;
2085 2086
2086 while (nfp_ctrl_rx_one(nn, dp, r_vec, rx_ring)) 2087 while (nfp_ctrl_rx_one(nn, dp, r_vec, rx_ring) && budget--)
2087 continue; 2088 continue;
2089
2090 return budget;
2088} 2091}
2089 2092
2090static void nfp_ctrl_poll(unsigned long arg) 2093static void nfp_ctrl_poll(unsigned long arg)
@@ -2096,9 +2099,13 @@ static void nfp_ctrl_poll(unsigned long arg)
2096 __nfp_ctrl_tx_queued(r_vec); 2099 __nfp_ctrl_tx_queued(r_vec);
2097 spin_unlock_bh(&r_vec->lock); 2100 spin_unlock_bh(&r_vec->lock);
2098 2101
2099 nfp_ctrl_rx(r_vec); 2102 if (nfp_ctrl_rx(r_vec)) {
2100 2103 nfp_net_irq_unmask(r_vec->nfp_net, r_vec->irq_entry);
2101 nfp_net_irq_unmask(r_vec->nfp_net, r_vec->irq_entry); 2104 } else {
2105 tasklet_schedule(&r_vec->tasklet);
2106 nn_dp_warn(&r_vec->nfp_net->dp,
2107 "control message budget exceeded!\n");
2108 }
2102} 2109}
2103 2110
2104/* Setup and Configuration 2111/* Setup and Configuration
diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
index 69aa7fc392c5..59c70be22a84 100644
--- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
+++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
@@ -72,9 +72,6 @@ static void netxen_schedule_work(struct netxen_adapter *adapter,
72 work_func_t func, int delay); 72 work_func_t func, int delay);
73static void netxen_cancel_fw_work(struct netxen_adapter *adapter); 73static void netxen_cancel_fw_work(struct netxen_adapter *adapter);
74static int netxen_nic_poll(struct napi_struct *napi, int budget); 74static int netxen_nic_poll(struct napi_struct *napi, int budget);
75#ifdef CONFIG_NET_POLL_CONTROLLER
76static void netxen_nic_poll_controller(struct net_device *netdev);
77#endif
78 75
79static void netxen_create_sysfs_entries(struct netxen_adapter *adapter); 76static void netxen_create_sysfs_entries(struct netxen_adapter *adapter);
80static void netxen_remove_sysfs_entries(struct netxen_adapter *adapter); 77static void netxen_remove_sysfs_entries(struct netxen_adapter *adapter);
@@ -581,9 +578,6 @@ static const struct net_device_ops netxen_netdev_ops = {
581 .ndo_tx_timeout = netxen_tx_timeout, 578 .ndo_tx_timeout = netxen_tx_timeout,
582 .ndo_fix_features = netxen_fix_features, 579 .ndo_fix_features = netxen_fix_features,
583 .ndo_set_features = netxen_set_features, 580 .ndo_set_features = netxen_set_features,
584#ifdef CONFIG_NET_POLL_CONTROLLER
585 .ndo_poll_controller = netxen_nic_poll_controller,
586#endif
587}; 581};
588 582
589static inline bool netxen_function_zero(struct pci_dev *pdev) 583static inline bool netxen_function_zero(struct pci_dev *pdev)
@@ -2402,23 +2396,6 @@ static int netxen_nic_poll(struct napi_struct *napi, int budget)
2402 return work_done; 2396 return work_done;
2403} 2397}
2404 2398
2405#ifdef CONFIG_NET_POLL_CONTROLLER
2406static void netxen_nic_poll_controller(struct net_device *netdev)
2407{
2408 int ring;
2409 struct nx_host_sds_ring *sds_ring;
2410 struct netxen_adapter *adapter = netdev_priv(netdev);
2411 struct netxen_recv_context *recv_ctx = &adapter->recv_ctx;
2412
2413 disable_irq(adapter->irq);
2414 for (ring = 0; ring < adapter->max_sds_rings; ring++) {
2415 sds_ring = &recv_ctx->sds_rings[ring];
2416 netxen_intr(adapter->irq, sds_ring);
2417 }
2418 enable_irq(adapter->irq);
2419}
2420#endif
2421
2422static int 2399static int
2423nx_incr_dev_ref_cnt(struct netxen_adapter *adapter) 2400nx_incr_dev_ref_cnt(struct netxen_adapter *adapter)
2424{ 2401{
diff --git a/drivers/net/ethernet/qlogic/qed/qed_hsi.h b/drivers/net/ethernet/qlogic/qed/qed_hsi.h
index 9b3ef00e5782..a71382687ef2 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_hsi.h
+++ b/drivers/net/ethernet/qlogic/qed/qed_hsi.h
@@ -11987,6 +11987,7 @@ struct public_global {
11987 u32 running_bundle_id; 11987 u32 running_bundle_id;
11988 s32 external_temperature; 11988 s32 external_temperature;
11989 u32 mdump_reason; 11989 u32 mdump_reason;
11990 u64 reserved;
11990 u32 data_ptr; 11991 u32 data_ptr;
11991 u32 data_size; 11992 u32 data_size;
11992}; 11993};
diff --git a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c
index 17f3dfa2cc94..e860bdf0f752 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c
@@ -1710,7 +1710,7 @@ qed_iwarp_parse_rx_pkt(struct qed_hwfn *p_hwfn,
1710 1710
1711 cm_info->local_ip[0] = ntohl(iph->daddr); 1711 cm_info->local_ip[0] = ntohl(iph->daddr);
1712 cm_info->remote_ip[0] = ntohl(iph->saddr); 1712 cm_info->remote_ip[0] = ntohl(iph->saddr);
1713 cm_info->ip_version = TCP_IPV4; 1713 cm_info->ip_version = QED_TCP_IPV4;
1714 1714
1715 ip_hlen = (iph->ihl) * sizeof(u32); 1715 ip_hlen = (iph->ihl) * sizeof(u32);
1716 *payload_len = ntohs(iph->tot_len) - ip_hlen; 1716 *payload_len = ntohs(iph->tot_len) - ip_hlen;
@@ -1730,7 +1730,7 @@ qed_iwarp_parse_rx_pkt(struct qed_hwfn *p_hwfn,
1730 cm_info->remote_ip[i] = 1730 cm_info->remote_ip[i] =
1731 ntohl(ip6h->saddr.in6_u.u6_addr32[i]); 1731 ntohl(ip6h->saddr.in6_u.u6_addr32[i]);
1732 } 1732 }
1733 cm_info->ip_version = TCP_IPV6; 1733 cm_info->ip_version = QED_TCP_IPV6;
1734 1734
1735 ip_hlen = sizeof(*ip6h); 1735 ip_hlen = sizeof(*ip6h);
1736 *payload_len = ntohs(ip6h->payload_len); 1736 *payload_len = ntohs(ip6h->payload_len);
diff --git a/drivers/net/ethernet/qlogic/qed/qed_rdma.c b/drivers/net/ethernet/qlogic/qed/qed_rdma.c
index be941cfaa2d4..c71391b9c757 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_rdma.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_rdma.c
@@ -228,7 +228,7 @@ static int qed_rdma_alloc(struct qed_hwfn *p_hwfn,
228 num_cons, "Toggle"); 228 num_cons, "Toggle");
229 if (rc) { 229 if (rc) {
230 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, 230 DP_VERBOSE(p_hwfn, QED_MSG_RDMA,
231 "Failed to allocate toogle bits, rc = %d\n", rc); 231 "Failed to allocate toggle bits, rc = %d\n", rc);
232 goto free_cq_map; 232 goto free_cq_map;
233 } 233 }
234 234
diff --git a/drivers/net/ethernet/qlogic/qed/qed_roce.c b/drivers/net/ethernet/qlogic/qed/qed_roce.c
index 7d7a64c55ff1..f9167d1354bb 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_roce.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_roce.c
@@ -140,23 +140,16 @@ static void qed_rdma_copy_gids(struct qed_rdma_qp *qp, __le32 *src_gid,
140 140
141static enum roce_flavor qed_roce_mode_to_flavor(enum roce_mode roce_mode) 141static enum roce_flavor qed_roce_mode_to_flavor(enum roce_mode roce_mode)
142{ 142{
143 enum roce_flavor flavor;
144
145 switch (roce_mode) { 143 switch (roce_mode) {
146 case ROCE_V1: 144 case ROCE_V1:
147 flavor = PLAIN_ROCE; 145 return PLAIN_ROCE;
148 break;
149 case ROCE_V2_IPV4: 146 case ROCE_V2_IPV4:
150 flavor = RROCE_IPV4; 147 return RROCE_IPV4;
151 break;
152 case ROCE_V2_IPV6: 148 case ROCE_V2_IPV6:
153 flavor = ROCE_V2_IPV6; 149 return RROCE_IPV6;
154 break;
155 default: 150 default:
156 flavor = MAX_ROCE_MODE; 151 return MAX_ROCE_FLAVOR;
157 break;
158 } 152 }
159 return flavor;
160} 153}
161 154
162static void qed_roce_free_cid_pair(struct qed_hwfn *p_hwfn, u16 cid) 155static void qed_roce_free_cid_pair(struct qed_hwfn *p_hwfn, u16 cid)
diff --git a/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c b/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c
index 8de644b4721e..77b6248ad3b9 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c
@@ -154,7 +154,7 @@ qed_set_pf_update_tunn_mode(struct qed_tunnel_info *p_tun,
154static void qed_set_tunn_cls_info(struct qed_tunnel_info *p_tun, 154static void qed_set_tunn_cls_info(struct qed_tunnel_info *p_tun,
155 struct qed_tunnel_info *p_src) 155 struct qed_tunnel_info *p_src)
156{ 156{
157 enum tunnel_clss type; 157 int type;
158 158
159 p_tun->b_update_rx_cls = p_src->b_update_rx_cls; 159 p_tun->b_update_rx_cls = p_src->b_update_rx_cls;
160 p_tun->b_update_tx_cls = p_src->b_update_tx_cls; 160 p_tun->b_update_tx_cls = p_src->b_update_tx_cls;
diff --git a/drivers/net/ethernet/qlogic/qed/qed_vf.c b/drivers/net/ethernet/qlogic/qed/qed_vf.c
index 3d4269659820..be118d057b92 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_vf.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_vf.c
@@ -413,7 +413,6 @@ static int qed_vf_pf_acquire(struct qed_hwfn *p_hwfn)
413 } 413 }
414 414
415 if (!p_iov->b_pre_fp_hsi && 415 if (!p_iov->b_pre_fp_hsi &&
416 ETH_HSI_VER_MINOR &&
417 (resp->pfdev_info.minor_fp_hsi < ETH_HSI_VER_MINOR)) { 416 (resp->pfdev_info.minor_fp_hsi < ETH_HSI_VER_MINOR)) {
418 DP_INFO(p_hwfn, 417 DP_INFO(p_hwfn,
419 "PF is using older fastpath HSI; %02x.%02x is configured\n", 418 "PF is using older fastpath HSI; %02x.%02x is configured\n",
@@ -572,7 +571,7 @@ free_p_iov:
572static void 571static void
573__qed_vf_prep_tunn_req_tlv(struct vfpf_update_tunn_param_tlv *p_req, 572__qed_vf_prep_tunn_req_tlv(struct vfpf_update_tunn_param_tlv *p_req,
574 struct qed_tunn_update_type *p_src, 573 struct qed_tunn_update_type *p_src,
575 enum qed_tunn_clss mask, u8 *p_cls) 574 enum qed_tunn_mode mask, u8 *p_cls)
576{ 575{
577 if (p_src->b_update_mode) { 576 if (p_src->b_update_mode) {
578 p_req->tun_mode_update_mask |= BIT(mask); 577 p_req->tun_mode_update_mask |= BIT(mask);
@@ -587,7 +586,7 @@ __qed_vf_prep_tunn_req_tlv(struct vfpf_update_tunn_param_tlv *p_req,
587static void 586static void
588qed_vf_prep_tunn_req_tlv(struct vfpf_update_tunn_param_tlv *p_req, 587qed_vf_prep_tunn_req_tlv(struct vfpf_update_tunn_param_tlv *p_req,
589 struct qed_tunn_update_type *p_src, 588 struct qed_tunn_update_type *p_src,
590 enum qed_tunn_clss mask, 589 enum qed_tunn_mode mask,
591 u8 *p_cls, struct qed_tunn_update_udp_port *p_port, 590 u8 *p_cls, struct qed_tunn_update_udp_port *p_port,
592 u8 *p_update_port, u16 *p_udp_port) 591 u8 *p_update_port, u16 *p_udp_port)
593{ 592{
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
index 81312924df14..0c443ea98479 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
@@ -1800,7 +1800,8 @@ struct qlcnic_hardware_ops {
1800 int (*config_loopback) (struct qlcnic_adapter *, u8); 1800 int (*config_loopback) (struct qlcnic_adapter *, u8);
1801 int (*clear_loopback) (struct qlcnic_adapter *, u8); 1801 int (*clear_loopback) (struct qlcnic_adapter *, u8);
1802 int (*config_promisc_mode) (struct qlcnic_adapter *, u32); 1802 int (*config_promisc_mode) (struct qlcnic_adapter *, u32);
1803 void (*change_l2_filter) (struct qlcnic_adapter *, u64 *, u16); 1803 void (*change_l2_filter)(struct qlcnic_adapter *adapter, u64 *addr,
1804 u16 vlan, struct qlcnic_host_tx_ring *tx_ring);
1804 int (*get_board_info) (struct qlcnic_adapter *); 1805 int (*get_board_info) (struct qlcnic_adapter *);
1805 void (*set_mac_filter_count) (struct qlcnic_adapter *); 1806 void (*set_mac_filter_count) (struct qlcnic_adapter *);
1806 void (*free_mac_list) (struct qlcnic_adapter *); 1807 void (*free_mac_list) (struct qlcnic_adapter *);
@@ -2064,9 +2065,10 @@ static inline int qlcnic_nic_set_promisc(struct qlcnic_adapter *adapter,
2064} 2065}
2065 2066
2066static inline void qlcnic_change_filter(struct qlcnic_adapter *adapter, 2067static inline void qlcnic_change_filter(struct qlcnic_adapter *adapter,
2067 u64 *addr, u16 id) 2068 u64 *addr, u16 vlan,
2069 struct qlcnic_host_tx_ring *tx_ring)
2068{ 2070{
2069 adapter->ahw->hw_ops->change_l2_filter(adapter, addr, id); 2071 adapter->ahw->hw_ops->change_l2_filter(adapter, addr, vlan, tx_ring);
2070} 2072}
2071 2073
2072static inline int qlcnic_get_board_info(struct qlcnic_adapter *adapter) 2074static inline int qlcnic_get_board_info(struct qlcnic_adapter *adapter)
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
index 569d54ededec..a79d84f99102 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
@@ -2135,7 +2135,8 @@ out:
2135} 2135}
2136 2136
2137void qlcnic_83xx_change_l2_filter(struct qlcnic_adapter *adapter, u64 *addr, 2137void qlcnic_83xx_change_l2_filter(struct qlcnic_adapter *adapter, u64 *addr,
2138 u16 vlan_id) 2138 u16 vlan_id,
2139 struct qlcnic_host_tx_ring *tx_ring)
2139{ 2140{
2140 u8 mac[ETH_ALEN]; 2141 u8 mac[ETH_ALEN];
2141 memcpy(&mac, addr, ETH_ALEN); 2142 memcpy(&mac, addr, ETH_ALEN);
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h
index b75a81246856..73fe2f64491d 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h
@@ -550,7 +550,8 @@ int qlcnic_83xx_wrt_reg_indirect(struct qlcnic_adapter *, ulong, u32);
550int qlcnic_83xx_nic_set_promisc(struct qlcnic_adapter *, u32); 550int qlcnic_83xx_nic_set_promisc(struct qlcnic_adapter *, u32);
551int qlcnic_83xx_config_hw_lro(struct qlcnic_adapter *, int); 551int qlcnic_83xx_config_hw_lro(struct qlcnic_adapter *, int);
552int qlcnic_83xx_config_rss(struct qlcnic_adapter *, int); 552int qlcnic_83xx_config_rss(struct qlcnic_adapter *, int);
553void qlcnic_83xx_change_l2_filter(struct qlcnic_adapter *, u64 *, u16); 553void qlcnic_83xx_change_l2_filter(struct qlcnic_adapter *adapter, u64 *addr,
554 u16 vlan, struct qlcnic_host_tx_ring *ring);
554int qlcnic_83xx_get_pci_info(struct qlcnic_adapter *, struct qlcnic_pci_info *); 555int qlcnic_83xx_get_pci_info(struct qlcnic_adapter *, struct qlcnic_pci_info *);
555int qlcnic_83xx_set_nic_info(struct qlcnic_adapter *, struct qlcnic_info *); 556int qlcnic_83xx_set_nic_info(struct qlcnic_adapter *, struct qlcnic_info *);
556void qlcnic_83xx_initialize_nic(struct qlcnic_adapter *, int); 557void qlcnic_83xx_initialize_nic(struct qlcnic_adapter *, int);
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h
index 4bb33af8e2b3..56a3bd9e37dc 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h
@@ -173,7 +173,8 @@ int qlcnic_82xx_napi_add(struct qlcnic_adapter *adapter,
173 struct net_device *netdev); 173 struct net_device *netdev);
174void qlcnic_82xx_get_beacon_state(struct qlcnic_adapter *); 174void qlcnic_82xx_get_beacon_state(struct qlcnic_adapter *);
175void qlcnic_82xx_change_filter(struct qlcnic_adapter *adapter, 175void qlcnic_82xx_change_filter(struct qlcnic_adapter *adapter,
176 u64 *uaddr, u16 vlan_id); 176 u64 *uaddr, u16 vlan_id,
177 struct qlcnic_host_tx_ring *tx_ring);
177int qlcnic_82xx_config_intr_coalesce(struct qlcnic_adapter *, 178int qlcnic_82xx_config_intr_coalesce(struct qlcnic_adapter *,
178 struct ethtool_coalesce *); 179 struct ethtool_coalesce *);
179int qlcnic_82xx_set_rx_coalesce(struct qlcnic_adapter *); 180int qlcnic_82xx_set_rx_coalesce(struct qlcnic_adapter *);
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c
index 84dd83031a1b..9647578cbe6a 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c
@@ -268,13 +268,12 @@ static void qlcnic_add_lb_filter(struct qlcnic_adapter *adapter,
268} 268}
269 269
270void qlcnic_82xx_change_filter(struct qlcnic_adapter *adapter, u64 *uaddr, 270void qlcnic_82xx_change_filter(struct qlcnic_adapter *adapter, u64 *uaddr,
271 u16 vlan_id) 271 u16 vlan_id, struct qlcnic_host_tx_ring *tx_ring)
272{ 272{
273 struct cmd_desc_type0 *hwdesc; 273 struct cmd_desc_type0 *hwdesc;
274 struct qlcnic_nic_req *req; 274 struct qlcnic_nic_req *req;
275 struct qlcnic_mac_req *mac_req; 275 struct qlcnic_mac_req *mac_req;
276 struct qlcnic_vlan_req *vlan_req; 276 struct qlcnic_vlan_req *vlan_req;
277 struct qlcnic_host_tx_ring *tx_ring = adapter->tx_ring;
278 u32 producer; 277 u32 producer;
279 u64 word; 278 u64 word;
280 279
@@ -301,7 +300,8 @@ void qlcnic_82xx_change_filter(struct qlcnic_adapter *adapter, u64 *uaddr,
301 300
302static void qlcnic_send_filter(struct qlcnic_adapter *adapter, 301static void qlcnic_send_filter(struct qlcnic_adapter *adapter,
303 struct cmd_desc_type0 *first_desc, 302 struct cmd_desc_type0 *first_desc,
304 struct sk_buff *skb) 303 struct sk_buff *skb,
304 struct qlcnic_host_tx_ring *tx_ring)
305{ 305{
306 struct vlan_ethhdr *vh = (struct vlan_ethhdr *)(skb->data); 306 struct vlan_ethhdr *vh = (struct vlan_ethhdr *)(skb->data);
307 struct ethhdr *phdr = (struct ethhdr *)(skb->data); 307 struct ethhdr *phdr = (struct ethhdr *)(skb->data);
@@ -335,7 +335,7 @@ static void qlcnic_send_filter(struct qlcnic_adapter *adapter,
335 tmp_fil->vlan_id == vlan_id) { 335 tmp_fil->vlan_id == vlan_id) {
336 if (jiffies > (QLCNIC_READD_AGE * HZ + tmp_fil->ftime)) 336 if (jiffies > (QLCNIC_READD_AGE * HZ + tmp_fil->ftime))
337 qlcnic_change_filter(adapter, &src_addr, 337 qlcnic_change_filter(adapter, &src_addr,
338 vlan_id); 338 vlan_id, tx_ring);
339 tmp_fil->ftime = jiffies; 339 tmp_fil->ftime = jiffies;
340 return; 340 return;
341 } 341 }
@@ -350,7 +350,7 @@ static void qlcnic_send_filter(struct qlcnic_adapter *adapter,
350 if (!fil) 350 if (!fil)
351 return; 351 return;
352 352
353 qlcnic_change_filter(adapter, &src_addr, vlan_id); 353 qlcnic_change_filter(adapter, &src_addr, vlan_id, tx_ring);
354 fil->ftime = jiffies; 354 fil->ftime = jiffies;
355 fil->vlan_id = vlan_id; 355 fil->vlan_id = vlan_id;
356 memcpy(fil->faddr, &src_addr, ETH_ALEN); 356 memcpy(fil->faddr, &src_addr, ETH_ALEN);
@@ -766,7 +766,7 @@ netdev_tx_t qlcnic_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
766 } 766 }
767 767
768 if (adapter->drv_mac_learn) 768 if (adapter->drv_mac_learn)
769 qlcnic_send_filter(adapter, first_desc, skb); 769 qlcnic_send_filter(adapter, first_desc, skb, tx_ring);
770 770
771 tx_ring->tx_stats.tx_bytes += skb->len; 771 tx_ring->tx_stats.tx_bytes += skb->len;
772 tx_ring->tx_stats.xmit_called++; 772 tx_ring->tx_stats.xmit_called++;
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
index 2d38d1ac2aae..dbd48012224f 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
@@ -59,9 +59,6 @@ static int qlcnic_close(struct net_device *netdev);
59static void qlcnic_tx_timeout(struct net_device *netdev); 59static void qlcnic_tx_timeout(struct net_device *netdev);
60static void qlcnic_attach_work(struct work_struct *work); 60static void qlcnic_attach_work(struct work_struct *work);
61static void qlcnic_fwinit_work(struct work_struct *work); 61static void qlcnic_fwinit_work(struct work_struct *work);
62#ifdef CONFIG_NET_POLL_CONTROLLER
63static void qlcnic_poll_controller(struct net_device *netdev);
64#endif
65 62
66static void qlcnic_idc_debug_info(struct qlcnic_adapter *adapter, u8 encoding); 63static void qlcnic_idc_debug_info(struct qlcnic_adapter *adapter, u8 encoding);
67static int qlcnic_can_start_firmware(struct qlcnic_adapter *adapter); 64static int qlcnic_can_start_firmware(struct qlcnic_adapter *adapter);
@@ -545,9 +542,6 @@ static const struct net_device_ops qlcnic_netdev_ops = {
545 .ndo_udp_tunnel_add = qlcnic_add_vxlan_port, 542 .ndo_udp_tunnel_add = qlcnic_add_vxlan_port,
546 .ndo_udp_tunnel_del = qlcnic_del_vxlan_port, 543 .ndo_udp_tunnel_del = qlcnic_del_vxlan_port,
547 .ndo_features_check = qlcnic_features_check, 544 .ndo_features_check = qlcnic_features_check,
548#ifdef CONFIG_NET_POLL_CONTROLLER
549 .ndo_poll_controller = qlcnic_poll_controller,
550#endif
551#ifdef CONFIG_QLCNIC_SRIOV 545#ifdef CONFIG_QLCNIC_SRIOV
552 .ndo_set_vf_mac = qlcnic_sriov_set_vf_mac, 546 .ndo_set_vf_mac = qlcnic_sriov_set_vf_mac,
553 .ndo_set_vf_rate = qlcnic_sriov_set_vf_tx_rate, 547 .ndo_set_vf_rate = qlcnic_sriov_set_vf_tx_rate,
@@ -3200,45 +3194,6 @@ static irqreturn_t qlcnic_msix_tx_intr(int irq, void *data)
3200 return IRQ_HANDLED; 3194 return IRQ_HANDLED;
3201} 3195}
3202 3196
3203#ifdef CONFIG_NET_POLL_CONTROLLER
3204static void qlcnic_poll_controller(struct net_device *netdev)
3205{
3206 struct qlcnic_adapter *adapter = netdev_priv(netdev);
3207 struct qlcnic_host_sds_ring *sds_ring;
3208 struct qlcnic_recv_context *recv_ctx;
3209 struct qlcnic_host_tx_ring *tx_ring;
3210 int ring;
3211
3212 if (!test_bit(__QLCNIC_DEV_UP, &adapter->state))
3213 return;
3214
3215 recv_ctx = adapter->recv_ctx;
3216
3217 for (ring = 0; ring < adapter->drv_sds_rings; ring++) {
3218 sds_ring = &recv_ctx->sds_rings[ring];
3219 qlcnic_disable_sds_intr(adapter, sds_ring);
3220 napi_schedule(&sds_ring->napi);
3221 }
3222
3223 if (adapter->flags & QLCNIC_MSIX_ENABLED) {
3224 /* Only Multi-Tx queue capable devices need to
3225 * schedule NAPI for TX rings
3226 */
3227 if ((qlcnic_83xx_check(adapter) &&
3228 (adapter->flags & QLCNIC_TX_INTR_SHARED)) ||
3229 (qlcnic_82xx_check(adapter) &&
3230 !qlcnic_check_multi_tx(adapter)))
3231 return;
3232
3233 for (ring = 0; ring < adapter->drv_tx_rings; ring++) {
3234 tx_ring = &adapter->tx_ring[ring];
3235 qlcnic_disable_tx_intr(adapter, tx_ring);
3236 napi_schedule(&tx_ring->napi);
3237 }
3238 }
3239}
3240#endif
3241
3242static void 3197static void
3243qlcnic_idc_debug_info(struct qlcnic_adapter *adapter, u8 encoding) 3198qlcnic_idc_debug_info(struct qlcnic_adapter *adapter, u8 encoding)
3244{ 3199{
diff --git a/drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c b/drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c
index 7fd86d40a337..11167abe5934 100644
--- a/drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c
+++ b/drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c
@@ -113,7 +113,7 @@ rmnet_map_ingress_handler(struct sk_buff *skb,
113 struct sk_buff *skbn; 113 struct sk_buff *skbn;
114 114
115 if (skb->dev->type == ARPHRD_ETHER) { 115 if (skb->dev->type == ARPHRD_ETHER) {
116 if (pskb_expand_head(skb, ETH_HLEN, 0, GFP_KERNEL)) { 116 if (pskb_expand_head(skb, ETH_HLEN, 0, GFP_ATOMIC)) {
117 kfree_skb(skb); 117 kfree_skb(skb);
118 return; 118 return;
119 } 119 }
@@ -147,7 +147,7 @@ static int rmnet_map_egress_handler(struct sk_buff *skb,
147 } 147 }
148 148
149 if (skb_headroom(skb) < required_headroom) { 149 if (skb_headroom(skb) < required_headroom) {
150 if (pskb_expand_head(skb, required_headroom, 0, GFP_KERNEL)) 150 if (pskb_expand_head(skb, required_headroom, 0, GFP_ATOMIC))
151 return -ENOMEM; 151 return -ENOMEM;
152 } 152 }
153 153
@@ -189,6 +189,9 @@ rx_handler_result_t rmnet_rx_handler(struct sk_buff **pskb)
189 if (!skb) 189 if (!skb)
190 goto done; 190 goto done;
191 191
192 if (skb->pkt_type == PACKET_LOOPBACK)
193 return RX_HANDLER_PASS;
194
192 dev = skb->dev; 195 dev = skb->dev;
193 port = rmnet_get_port(dev); 196 port = rmnet_get_port(dev);
194 197
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
index ab30aaeac6d3..9a5e2969df61 100644
--- a/drivers/net/ethernet/realtek/r8169.c
+++ b/drivers/net/ethernet/realtek/r8169.c
@@ -4072,13 +4072,12 @@ static void rtl8169_init_phy(struct net_device *dev, struct rtl8169_private *tp)
4072 4072
4073 genphy_soft_reset(dev->phydev); 4073 genphy_soft_reset(dev->phydev);
4074 4074
4075 /* It was reported that chip version 33 ends up with 10MBit/Half on a 4075 /* It was reported that several chips end up with 10MBit/Half on a
4076 * 1GBit link after resuming from S3. For whatever reason the PHY on 4076 * 1GBit link after resuming from S3. For whatever reason the PHY on
4077 * this chip doesn't properly start a renegotiation when soft-reset. 4077 * these chips doesn't properly start a renegotiation when soft-reset.
4078 * Explicitly requesting a renegotiation fixes this. 4078 * Explicitly requesting a renegotiation fixes this.
4079 */ 4079 */
4080 if (tp->mac_version == RTL_GIGA_MAC_VER_33 && 4080 if (dev->phydev->autoneg == AUTONEG_ENABLE)
4081 dev->phydev->autoneg == AUTONEG_ENABLE)
4082 phy_restart_aneg(dev->phydev); 4081 phy_restart_aneg(dev->phydev);
4083} 4082}
4084 4083
@@ -4536,9 +4535,14 @@ static void rtl8169_hw_reset(struct rtl8169_private *tp)
4536 4535
4537static void rtl_set_tx_config_registers(struct rtl8169_private *tp) 4536static void rtl_set_tx_config_registers(struct rtl8169_private *tp)
4538{ 4537{
4539 /* Set DMA burst size and Interframe Gap Time */ 4538 u32 val = TX_DMA_BURST << TxDMAShift |
4540 RTL_W32(tp, TxConfig, (TX_DMA_BURST << TxDMAShift) | 4539 InterFrameGap << TxInterFrameGapShift;
4541 (InterFrameGap << TxInterFrameGapShift)); 4540
4541 if (tp->mac_version >= RTL_GIGA_MAC_VER_34 &&
4542 tp->mac_version != RTL_GIGA_MAC_VER_39)
4543 val |= TXCFG_AUTO_FIFO;
4544
4545 RTL_W32(tp, TxConfig, val);
4542} 4546}
4543 4547
4544static void rtl_set_rx_max_size(struct rtl8169_private *tp) 4548static void rtl_set_rx_max_size(struct rtl8169_private *tp)
@@ -5033,7 +5037,6 @@ static void rtl_hw_start_8168e_2(struct rtl8169_private *tp)
5033 5037
5034 rtl_disable_clock_request(tp); 5038 rtl_disable_clock_request(tp);
5035 5039
5036 RTL_W32(tp, TxConfig, RTL_R32(tp, TxConfig) | TXCFG_AUTO_FIFO);
5037 RTL_W8(tp, MCU, RTL_R8(tp, MCU) & ~NOW_IS_OOB); 5040 RTL_W8(tp, MCU, RTL_R8(tp, MCU) & ~NOW_IS_OOB);
5038 5041
5039 /* Adjust EEE LED frequency */ 5042 /* Adjust EEE LED frequency */
@@ -5067,7 +5070,6 @@ static void rtl_hw_start_8168f(struct rtl8169_private *tp)
5067 5070
5068 rtl_disable_clock_request(tp); 5071 rtl_disable_clock_request(tp);
5069 5072
5070 RTL_W32(tp, TxConfig, RTL_R32(tp, TxConfig) | TXCFG_AUTO_FIFO);
5071 RTL_W8(tp, MCU, RTL_R8(tp, MCU) & ~NOW_IS_OOB); 5073 RTL_W8(tp, MCU, RTL_R8(tp, MCU) & ~NOW_IS_OOB);
5072 RTL_W8(tp, DLLPR, RTL_R8(tp, DLLPR) | PFM_EN); 5074 RTL_W8(tp, DLLPR, RTL_R8(tp, DLLPR) | PFM_EN);
5073 RTL_W32(tp, MISC, RTL_R32(tp, MISC) | PWM_EN); 5075 RTL_W32(tp, MISC, RTL_R32(tp, MISC) | PWM_EN);
@@ -5112,8 +5114,6 @@ static void rtl_hw_start_8411(struct rtl8169_private *tp)
5112 5114
5113static void rtl_hw_start_8168g(struct rtl8169_private *tp) 5115static void rtl_hw_start_8168g(struct rtl8169_private *tp)
5114{ 5116{
5115 RTL_W32(tp, TxConfig, RTL_R32(tp, TxConfig) | TXCFG_AUTO_FIFO);
5116
5117 rtl_eri_write(tp, 0xc8, ERIAR_MASK_0101, 0x080002, ERIAR_EXGMAC); 5117 rtl_eri_write(tp, 0xc8, ERIAR_MASK_0101, 0x080002, ERIAR_EXGMAC);
5118 rtl_eri_write(tp, 0xcc, ERIAR_MASK_0001, 0x38, ERIAR_EXGMAC); 5118 rtl_eri_write(tp, 0xcc, ERIAR_MASK_0001, 0x38, ERIAR_EXGMAC);
5119 rtl_eri_write(tp, 0xd0, ERIAR_MASK_0001, 0x48, ERIAR_EXGMAC); 5119 rtl_eri_write(tp, 0xd0, ERIAR_MASK_0001, 0x48, ERIAR_EXGMAC);
@@ -5211,8 +5211,6 @@ static void rtl_hw_start_8168h_1(struct rtl8169_private *tp)
5211 rtl_hw_aspm_clkreq_enable(tp, false); 5211 rtl_hw_aspm_clkreq_enable(tp, false);
5212 rtl_ephy_init(tp, e_info_8168h_1, ARRAY_SIZE(e_info_8168h_1)); 5212 rtl_ephy_init(tp, e_info_8168h_1, ARRAY_SIZE(e_info_8168h_1));
5213 5213
5214 RTL_W32(tp, TxConfig, RTL_R32(tp, TxConfig) | TXCFG_AUTO_FIFO);
5215
5216 rtl_eri_write(tp, 0xc8, ERIAR_MASK_0101, 0x00080002, ERIAR_EXGMAC); 5214 rtl_eri_write(tp, 0xc8, ERIAR_MASK_0101, 0x00080002, ERIAR_EXGMAC);
5217 rtl_eri_write(tp, 0xcc, ERIAR_MASK_0001, 0x38, ERIAR_EXGMAC); 5215 rtl_eri_write(tp, 0xcc, ERIAR_MASK_0001, 0x38, ERIAR_EXGMAC);
5218 rtl_eri_write(tp, 0xd0, ERIAR_MASK_0001, 0x48, ERIAR_EXGMAC); 5216 rtl_eri_write(tp, 0xd0, ERIAR_MASK_0001, 0x48, ERIAR_EXGMAC);
@@ -5295,8 +5293,6 @@ static void rtl_hw_start_8168ep(struct rtl8169_private *tp)
5295{ 5293{
5296 rtl8168ep_stop_cmac(tp); 5294 rtl8168ep_stop_cmac(tp);
5297 5295
5298 RTL_W32(tp, TxConfig, RTL_R32(tp, TxConfig) | TXCFG_AUTO_FIFO);
5299
5300 rtl_eri_write(tp, 0xc8, ERIAR_MASK_0101, 0x00080002, ERIAR_EXGMAC); 5296 rtl_eri_write(tp, 0xc8, ERIAR_MASK_0101, 0x00080002, ERIAR_EXGMAC);
5301 rtl_eri_write(tp, 0xcc, ERIAR_MASK_0001, 0x2f, ERIAR_EXGMAC); 5297 rtl_eri_write(tp, 0xcc, ERIAR_MASK_0001, 0x2f, ERIAR_EXGMAC);
5302 rtl_eri_write(tp, 0xd0, ERIAR_MASK_0001, 0x5f, ERIAR_EXGMAC); 5298 rtl_eri_write(tp, 0xd0, ERIAR_MASK_0001, 0x5f, ERIAR_EXGMAC);
@@ -5618,7 +5614,6 @@ static void rtl_hw_start_8402(struct rtl8169_private *tp)
5618 /* Force LAN exit from ASPM if Rx/Tx are not idle */ 5614 /* Force LAN exit from ASPM if Rx/Tx are not idle */
5619 RTL_W32(tp, FuncEvent, RTL_R32(tp, FuncEvent) | 0x002800); 5615 RTL_W32(tp, FuncEvent, RTL_R32(tp, FuncEvent) | 0x002800);
5620 5616
5621 RTL_W32(tp, TxConfig, RTL_R32(tp, TxConfig) | TXCFG_AUTO_FIFO);
5622 RTL_W8(tp, MCU, RTL_R8(tp, MCU) & ~NOW_IS_OOB); 5617 RTL_W8(tp, MCU, RTL_R8(tp, MCU) & ~NOW_IS_OOB);
5623 5618
5624 rtl_ephy_init(tp, e_info_8402, ARRAY_SIZE(e_info_8402)); 5619 rtl_ephy_init(tp, e_info_8402, ARRAY_SIZE(e_info_8402));
@@ -6869,8 +6864,10 @@ static int rtl8169_suspend(struct device *device)
6869{ 6864{
6870 struct pci_dev *pdev = to_pci_dev(device); 6865 struct pci_dev *pdev = to_pci_dev(device);
6871 struct net_device *dev = pci_get_drvdata(pdev); 6866 struct net_device *dev = pci_get_drvdata(pdev);
6867 struct rtl8169_private *tp = netdev_priv(dev);
6872 6868
6873 rtl8169_net_suspend(dev); 6869 rtl8169_net_suspend(dev);
6870 clk_disable_unprepare(tp->clk);
6874 6871
6875 return 0; 6872 return 0;
6876} 6873}
@@ -6898,6 +6895,9 @@ static int rtl8169_resume(struct device *device)
6898{ 6895{
6899 struct pci_dev *pdev = to_pci_dev(device); 6896 struct pci_dev *pdev = to_pci_dev(device);
6900 struct net_device *dev = pci_get_drvdata(pdev); 6897 struct net_device *dev = pci_get_drvdata(pdev);
6898 struct rtl8169_private *tp = netdev_priv(dev);
6899
6900 clk_prepare_enable(tp->clk);
6901 6901
6902 if (netif_running(dev)) 6902 if (netif_running(dev))
6903 __rtl8169_resume(dev); 6903 __rtl8169_resume(dev);
diff --git a/drivers/net/ethernet/sfc/efx.c b/drivers/net/ethernet/sfc/efx.c
index 330233286e78..3d0dd39c289e 100644
--- a/drivers/net/ethernet/sfc/efx.c
+++ b/drivers/net/ethernet/sfc/efx.c
@@ -2208,29 +2208,6 @@ static void efx_fini_napi(struct efx_nic *efx)
2208 2208
2209/************************************************************************** 2209/**************************************************************************
2210 * 2210 *
2211 * Kernel netpoll interface
2212 *
2213 *************************************************************************/
2214
2215#ifdef CONFIG_NET_POLL_CONTROLLER
2216
2217/* Although in the common case interrupts will be disabled, this is not
2218 * guaranteed. However, all our work happens inside the NAPI callback,
2219 * so no locking is required.
2220 */
2221static void efx_netpoll(struct net_device *net_dev)
2222{
2223 struct efx_nic *efx = netdev_priv(net_dev);
2224 struct efx_channel *channel;
2225
2226 efx_for_each_channel(channel, efx)
2227 efx_schedule_channel(channel);
2228}
2229
2230#endif
2231
2232/**************************************************************************
2233 *
2234 * Kernel net device interface 2211 * Kernel net device interface
2235 * 2212 *
2236 *************************************************************************/ 2213 *************************************************************************/
@@ -2509,9 +2486,6 @@ static const struct net_device_ops efx_netdev_ops = {
2509#endif 2486#endif
2510 .ndo_get_phys_port_id = efx_get_phys_port_id, 2487 .ndo_get_phys_port_id = efx_get_phys_port_id,
2511 .ndo_get_phys_port_name = efx_get_phys_port_name, 2488 .ndo_get_phys_port_name = efx_get_phys_port_name,
2512#ifdef CONFIG_NET_POLL_CONTROLLER
2513 .ndo_poll_controller = efx_netpoll,
2514#endif
2515 .ndo_setup_tc = efx_setup_tc, 2489 .ndo_setup_tc = efx_setup_tc,
2516#ifdef CONFIG_RFS_ACCEL 2490#ifdef CONFIG_RFS_ACCEL
2517 .ndo_rx_flow_steer = efx_filter_rfs, 2491 .ndo_rx_flow_steer = efx_filter_rfs,
diff --git a/drivers/net/ethernet/sfc/falcon/efx.c b/drivers/net/ethernet/sfc/falcon/efx.c
index dd5530a4f8c8..03e2455c502e 100644
--- a/drivers/net/ethernet/sfc/falcon/efx.c
+++ b/drivers/net/ethernet/sfc/falcon/efx.c
@@ -2054,29 +2054,6 @@ static void ef4_fini_napi(struct ef4_nic *efx)
2054 2054
2055/************************************************************************** 2055/**************************************************************************
2056 * 2056 *
2057 * Kernel netpoll interface
2058 *
2059 *************************************************************************/
2060
2061#ifdef CONFIG_NET_POLL_CONTROLLER
2062
2063/* Although in the common case interrupts will be disabled, this is not
2064 * guaranteed. However, all our work happens inside the NAPI callback,
2065 * so no locking is required.
2066 */
2067static void ef4_netpoll(struct net_device *net_dev)
2068{
2069 struct ef4_nic *efx = netdev_priv(net_dev);
2070 struct ef4_channel *channel;
2071
2072 ef4_for_each_channel(channel, efx)
2073 ef4_schedule_channel(channel);
2074}
2075
2076#endif
2077
2078/**************************************************************************
2079 *
2080 * Kernel net device interface 2057 * Kernel net device interface
2081 * 2058 *
2082 *************************************************************************/ 2059 *************************************************************************/
@@ -2250,9 +2227,6 @@ static const struct net_device_ops ef4_netdev_ops = {
2250 .ndo_set_mac_address = ef4_set_mac_address, 2227 .ndo_set_mac_address = ef4_set_mac_address,
2251 .ndo_set_rx_mode = ef4_set_rx_mode, 2228 .ndo_set_rx_mode = ef4_set_rx_mode,
2252 .ndo_set_features = ef4_set_features, 2229 .ndo_set_features = ef4_set_features,
2253#ifdef CONFIG_NET_POLL_CONTROLLER
2254 .ndo_poll_controller = ef4_netpoll,
2255#endif
2256 .ndo_setup_tc = ef4_setup_tc, 2230 .ndo_setup_tc = ef4_setup_tc,
2257#ifdef CONFIG_RFS_ACCEL 2231#ifdef CONFIG_RFS_ACCEL
2258 .ndo_rx_flow_steer = ef4_filter_rfs, 2232 .ndo_rx_flow_steer = ef4_filter_rfs,
diff --git a/drivers/net/ieee802154/adf7242.c b/drivers/net/ieee802154/adf7242.c
index 23a52b9293f3..cd1d8faccca5 100644
--- a/drivers/net/ieee802154/adf7242.c
+++ b/drivers/net/ieee802154/adf7242.c
@@ -1308,8 +1308,7 @@ static int adf7242_remove(struct spi_device *spi)
1308{ 1308{
1309 struct adf7242_local *lp = spi_get_drvdata(spi); 1309 struct adf7242_local *lp = spi_get_drvdata(spi);
1310 1310
1311 if (!IS_ERR_OR_NULL(lp->debugfs_root)) 1311 debugfs_remove_recursive(lp->debugfs_root);
1312 debugfs_remove_recursive(lp->debugfs_root);
1313 1312
1314 cancel_delayed_work_sync(&lp->work); 1313 cancel_delayed_work_sync(&lp->work);
1315 destroy_workqueue(lp->wqueue); 1314 destroy_workqueue(lp->wqueue);
diff --git a/drivers/net/ieee802154/ca8210.c b/drivers/net/ieee802154/ca8210.c
index 58299fb666ed..0ff5a403a8dc 100644
--- a/drivers/net/ieee802154/ca8210.c
+++ b/drivers/net/ieee802154/ca8210.c
@@ -634,10 +634,9 @@ static int ca8210_test_int_driver_write(
634 for (i = 0; i < len; i++) 634 for (i = 0; i < len; i++)
635 dev_dbg(&priv->spi->dev, "%#03x\n", buf[i]); 635 dev_dbg(&priv->spi->dev, "%#03x\n", buf[i]);
636 636
637 fifo_buffer = kmalloc(len, GFP_KERNEL); 637 fifo_buffer = kmemdup(buf, len, GFP_KERNEL);
638 if (!fifo_buffer) 638 if (!fifo_buffer)
639 return -ENOMEM; 639 return -ENOMEM;
640 memcpy(fifo_buffer, buf, len);
641 kfifo_in(&test->up_fifo, &fifo_buffer, 4); 640 kfifo_in(&test->up_fifo, &fifo_buffer, 4);
642 wake_up_interruptible(&priv->test.readq); 641 wake_up_interruptible(&priv->test.readq);
643 642
@@ -3044,8 +3043,7 @@ static void ca8210_test_interface_clear(struct ca8210_priv *priv)
3044{ 3043{
3045 struct ca8210_test *test = &priv->test; 3044 struct ca8210_test *test = &priv->test;
3046 3045
3047 if (!IS_ERR(test->ca8210_dfs_spi_int)) 3046 debugfs_remove(test->ca8210_dfs_spi_int);
3048 debugfs_remove(test->ca8210_dfs_spi_int);
3049 kfifo_free(&test->up_fifo); 3047 kfifo_free(&test->up_fifo);
3050 dev_info(&priv->spi->dev, "Test interface removed\n"); 3048 dev_info(&priv->spi->dev, "Test interface removed\n");
3051} 3049}
diff --git a/drivers/net/ieee802154/mcr20a.c b/drivers/net/ieee802154/mcr20a.c
index e428277781ac..04891429a554 100644
--- a/drivers/net/ieee802154/mcr20a.c
+++ b/drivers/net/ieee802154/mcr20a.c
@@ -903,19 +903,19 @@ mcr20a_irq_clean_complete(void *context)
903 903
904 switch (seq_state) { 904 switch (seq_state) {
905 /* TX IRQ, RX IRQ and SEQ IRQ */ 905 /* TX IRQ, RX IRQ and SEQ IRQ */
906 case (0x03): 906 case (DAR_IRQSTS1_TXIRQ | DAR_IRQSTS1_SEQIRQ):
907 if (lp->is_tx) { 907 if (lp->is_tx) {
908 lp->is_tx = 0; 908 lp->is_tx = 0;
909 dev_dbg(printdev(lp), "TX is done. No ACK\n"); 909 dev_dbg(printdev(lp), "TX is done. No ACK\n");
910 mcr20a_handle_tx_complete(lp); 910 mcr20a_handle_tx_complete(lp);
911 } 911 }
912 break; 912 break;
913 case (0x05): 913 case (DAR_IRQSTS1_RXIRQ | DAR_IRQSTS1_SEQIRQ):
914 /* rx is starting */ 914 /* rx is starting */
915 dev_dbg(printdev(lp), "RX is starting\n"); 915 dev_dbg(printdev(lp), "RX is starting\n");
916 mcr20a_handle_rx(lp); 916 mcr20a_handle_rx(lp);
917 break; 917 break;
918 case (0x07): 918 case (DAR_IRQSTS1_RXIRQ | DAR_IRQSTS1_TXIRQ | DAR_IRQSTS1_SEQIRQ):
919 if (lp->is_tx) { 919 if (lp->is_tx) {
920 /* tx is done */ 920 /* tx is done */
921 lp->is_tx = 0; 921 lp->is_tx = 0;
@@ -927,7 +927,7 @@ mcr20a_irq_clean_complete(void *context)
927 mcr20a_handle_rx(lp); 927 mcr20a_handle_rx(lp);
928 } 928 }
929 break; 929 break;
930 case (0x01): 930 case (DAR_IRQSTS1_SEQIRQ):
931 if (lp->is_tx) { 931 if (lp->is_tx) {
932 dev_dbg(printdev(lp), "TX is starting\n"); 932 dev_dbg(printdev(lp), "TX is starting\n");
933 mcr20a_handle_tx(lp); 933 mcr20a_handle_tx(lp);
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index db1172db1e7c..19ab8a7d1e48 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -93,7 +93,12 @@ static bool mdio_bus_phy_may_suspend(struct phy_device *phydev)
93 if (!netdev) 93 if (!netdev)
94 return !phydev->suspended; 94 return !phydev->suspended;
95 95
96 /* Don't suspend PHY if the attached netdev parent may wakeup. 96 if (netdev->wol_enabled)
97 return false;
98
99 /* As long as not all affected network drivers support the
100 * wol_enabled flag, let's check for hints that WoL is enabled.
101 * Don't suspend PHY if the attached netdev parent may wake up.
97 * The parent may point to a PCI device, as in tg3 driver. 102 * The parent may point to a PCI device, as in tg3 driver.
98 */ 103 */
99 if (netdev->dev.parent && device_may_wakeup(netdev->dev.parent)) 104 if (netdev->dev.parent && device_may_wakeup(netdev->dev.parent))
@@ -1132,9 +1137,9 @@ void phy_detach(struct phy_device *phydev)
1132 sysfs_remove_link(&dev->dev.kobj, "phydev"); 1137 sysfs_remove_link(&dev->dev.kobj, "phydev");
1133 sysfs_remove_link(&phydev->mdio.dev.kobj, "attached_dev"); 1138 sysfs_remove_link(&phydev->mdio.dev.kobj, "attached_dev");
1134 } 1139 }
1140 phy_suspend(phydev);
1135 phydev->attached_dev->phydev = NULL; 1141 phydev->attached_dev->phydev = NULL;
1136 phydev->attached_dev = NULL; 1142 phydev->attached_dev = NULL;
1137 phy_suspend(phydev);
1138 phydev->phylink = NULL; 1143 phydev->phylink = NULL;
1139 1144
1140 phy_led_triggers_unregister(phydev); 1145 phy_led_triggers_unregister(phydev);
@@ -1168,12 +1173,13 @@ EXPORT_SYMBOL(phy_detach);
1168int phy_suspend(struct phy_device *phydev) 1173int phy_suspend(struct phy_device *phydev)
1169{ 1174{
1170 struct phy_driver *phydrv = to_phy_driver(phydev->mdio.dev.driver); 1175 struct phy_driver *phydrv = to_phy_driver(phydev->mdio.dev.driver);
1176 struct net_device *netdev = phydev->attached_dev;
1171 struct ethtool_wolinfo wol = { .cmd = ETHTOOL_GWOL }; 1177 struct ethtool_wolinfo wol = { .cmd = ETHTOOL_GWOL };
1172 int ret = 0; 1178 int ret = 0;
1173 1179
1174 /* If the device has WOL enabled, we cannot suspend the PHY */ 1180 /* If the device has WOL enabled, we cannot suspend the PHY */
1175 phy_ethtool_get_wol(phydev, &wol); 1181 phy_ethtool_get_wol(phydev, &wol);
1176 if (wol.wolopts) 1182 if (wol.wolopts || (netdev && netdev->wol_enabled))
1177 return -EBUSY; 1183 return -EBUSY;
1178 1184
1179 if (phydev->drv && phydrv->suspend) 1185 if (phydev->drv && phydrv->suspend)
diff --git a/drivers/net/phy/sfp.c b/drivers/net/phy/sfp.c
index 52fffb98fde9..6e13b8832bc7 100644
--- a/drivers/net/phy/sfp.c
+++ b/drivers/net/phy/sfp.c
@@ -1098,8 +1098,11 @@ static int sfp_hwmon_insert(struct sfp *sfp)
1098 1098
1099static void sfp_hwmon_remove(struct sfp *sfp) 1099static void sfp_hwmon_remove(struct sfp *sfp)
1100{ 1100{
1101 hwmon_device_unregister(sfp->hwmon_dev); 1101 if (!IS_ERR_OR_NULL(sfp->hwmon_dev)) {
1102 kfree(sfp->hwmon_name); 1102 hwmon_device_unregister(sfp->hwmon_dev);
1103 sfp->hwmon_dev = NULL;
1104 kfree(sfp->hwmon_name);
1105 }
1103} 1106}
1104#else 1107#else
1105static int sfp_hwmon_insert(struct sfp *sfp) 1108static int sfp_hwmon_insert(struct sfp *sfp)
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index e2648b5a3861..50e9cc19023a 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -181,6 +181,7 @@ struct tun_file {
181 }; 181 };
182 struct napi_struct napi; 182 struct napi_struct napi;
183 bool napi_enabled; 183 bool napi_enabled;
184 bool napi_frags_enabled;
184 struct mutex napi_mutex; /* Protects access to the above napi */ 185 struct mutex napi_mutex; /* Protects access to the above napi */
185 struct list_head next; 186 struct list_head next;
186 struct tun_struct *detached; 187 struct tun_struct *detached;
@@ -313,32 +314,32 @@ static int tun_napi_poll(struct napi_struct *napi, int budget)
313} 314}
314 315
315static void tun_napi_init(struct tun_struct *tun, struct tun_file *tfile, 316static void tun_napi_init(struct tun_struct *tun, struct tun_file *tfile,
316 bool napi_en) 317 bool napi_en, bool napi_frags)
317{ 318{
318 tfile->napi_enabled = napi_en; 319 tfile->napi_enabled = napi_en;
320 tfile->napi_frags_enabled = napi_en && napi_frags;
319 if (napi_en) { 321 if (napi_en) {
320 netif_napi_add(tun->dev, &tfile->napi, tun_napi_poll, 322 netif_napi_add(tun->dev, &tfile->napi, tun_napi_poll,
321 NAPI_POLL_WEIGHT); 323 NAPI_POLL_WEIGHT);
322 napi_enable(&tfile->napi); 324 napi_enable(&tfile->napi);
323 mutex_init(&tfile->napi_mutex);
324 } 325 }
325} 326}
326 327
327static void tun_napi_disable(struct tun_struct *tun, struct tun_file *tfile) 328static void tun_napi_disable(struct tun_file *tfile)
328{ 329{
329 if (tfile->napi_enabled) 330 if (tfile->napi_enabled)
330 napi_disable(&tfile->napi); 331 napi_disable(&tfile->napi);
331} 332}
332 333
333static void tun_napi_del(struct tun_struct *tun, struct tun_file *tfile) 334static void tun_napi_del(struct tun_file *tfile)
334{ 335{
335 if (tfile->napi_enabled) 336 if (tfile->napi_enabled)
336 netif_napi_del(&tfile->napi); 337 netif_napi_del(&tfile->napi);
337} 338}
338 339
339static bool tun_napi_frags_enabled(const struct tun_struct *tun) 340static bool tun_napi_frags_enabled(const struct tun_file *tfile)
340{ 341{
341 return READ_ONCE(tun->flags) & IFF_NAPI_FRAGS; 342 return tfile->napi_frags_enabled;
342} 343}
343 344
344#ifdef CONFIG_TUN_VNET_CROSS_LE 345#ifdef CONFIG_TUN_VNET_CROSS_LE
@@ -690,8 +691,8 @@ static void __tun_detach(struct tun_file *tfile, bool clean)
690 tun = rtnl_dereference(tfile->tun); 691 tun = rtnl_dereference(tfile->tun);
691 692
692 if (tun && clean) { 693 if (tun && clean) {
693 tun_napi_disable(tun, tfile); 694 tun_napi_disable(tfile);
694 tun_napi_del(tun, tfile); 695 tun_napi_del(tfile);
695 } 696 }
696 697
697 if (tun && !tfile->detached) { 698 if (tun && !tfile->detached) {
@@ -758,7 +759,7 @@ static void tun_detach_all(struct net_device *dev)
758 for (i = 0; i < n; i++) { 759 for (i = 0; i < n; i++) {
759 tfile = rtnl_dereference(tun->tfiles[i]); 760 tfile = rtnl_dereference(tun->tfiles[i]);
760 BUG_ON(!tfile); 761 BUG_ON(!tfile);
761 tun_napi_disable(tun, tfile); 762 tun_napi_disable(tfile);
762 tfile->socket.sk->sk_shutdown = RCV_SHUTDOWN; 763 tfile->socket.sk->sk_shutdown = RCV_SHUTDOWN;
763 tfile->socket.sk->sk_data_ready(tfile->socket.sk); 764 tfile->socket.sk->sk_data_ready(tfile->socket.sk);
764 RCU_INIT_POINTER(tfile->tun, NULL); 765 RCU_INIT_POINTER(tfile->tun, NULL);
@@ -774,7 +775,7 @@ static void tun_detach_all(struct net_device *dev)
774 synchronize_net(); 775 synchronize_net();
775 for (i = 0; i < n; i++) { 776 for (i = 0; i < n; i++) {
776 tfile = rtnl_dereference(tun->tfiles[i]); 777 tfile = rtnl_dereference(tun->tfiles[i]);
777 tun_napi_del(tun, tfile); 778 tun_napi_del(tfile);
778 /* Drop read queue */ 779 /* Drop read queue */
779 tun_queue_purge(tfile); 780 tun_queue_purge(tfile);
780 xdp_rxq_info_unreg(&tfile->xdp_rxq); 781 xdp_rxq_info_unreg(&tfile->xdp_rxq);
@@ -793,7 +794,7 @@ static void tun_detach_all(struct net_device *dev)
793} 794}
794 795
795static int tun_attach(struct tun_struct *tun, struct file *file, 796static int tun_attach(struct tun_struct *tun, struct file *file,
796 bool skip_filter, bool napi) 797 bool skip_filter, bool napi, bool napi_frags)
797{ 798{
798 struct tun_file *tfile = file->private_data; 799 struct tun_file *tfile = file->private_data;
799 struct net_device *dev = tun->dev; 800 struct net_device *dev = tun->dev;
@@ -866,7 +867,7 @@ static int tun_attach(struct tun_struct *tun, struct file *file,
866 tun_enable_queue(tfile); 867 tun_enable_queue(tfile);
867 } else { 868 } else {
868 sock_hold(&tfile->sk); 869 sock_hold(&tfile->sk);
869 tun_napi_init(tun, tfile, napi); 870 tun_napi_init(tun, tfile, napi, napi_frags);
870 } 871 }
871 872
872 tun_set_real_num_queues(tun); 873 tun_set_real_num_queues(tun);
@@ -1709,7 +1710,7 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,
1709 int err; 1710 int err;
1710 u32 rxhash = 0; 1711 u32 rxhash = 0;
1711 int skb_xdp = 1; 1712 int skb_xdp = 1;
1712 bool frags = tun_napi_frags_enabled(tun); 1713 bool frags = tun_napi_frags_enabled(tfile);
1713 1714
1714 if (!(tun->dev->flags & IFF_UP)) 1715 if (!(tun->dev->flags & IFF_UP))
1715 return -EIO; 1716 return -EIO;
@@ -2534,7 +2535,8 @@ static int tun_set_iff(struct net *net, struct file *file, struct ifreq *ifr)
2534 return err; 2535 return err;
2535 2536
2536 err = tun_attach(tun, file, ifr->ifr_flags & IFF_NOFILTER, 2537 err = tun_attach(tun, file, ifr->ifr_flags & IFF_NOFILTER,
2537 ifr->ifr_flags & IFF_NAPI); 2538 ifr->ifr_flags & IFF_NAPI,
2539 ifr->ifr_flags & IFF_NAPI_FRAGS);
2538 if (err < 0) 2540 if (err < 0)
2539 return err; 2541 return err;
2540 2542
@@ -2632,7 +2634,8 @@ static int tun_set_iff(struct net *net, struct file *file, struct ifreq *ifr)
2632 (ifr->ifr_flags & TUN_FEATURES); 2634 (ifr->ifr_flags & TUN_FEATURES);
2633 2635
2634 INIT_LIST_HEAD(&tun->disabled); 2636 INIT_LIST_HEAD(&tun->disabled);
2635 err = tun_attach(tun, file, false, ifr->ifr_flags & IFF_NAPI); 2637 err = tun_attach(tun, file, false, ifr->ifr_flags & IFF_NAPI,
2638 ifr->ifr_flags & IFF_NAPI_FRAGS);
2636 if (err < 0) 2639 if (err < 0)
2637 goto err_free_flow; 2640 goto err_free_flow;
2638 2641
@@ -2781,7 +2784,8 @@ static int tun_set_queue(struct file *file, struct ifreq *ifr)
2781 ret = security_tun_dev_attach_queue(tun->security); 2784 ret = security_tun_dev_attach_queue(tun->security);
2782 if (ret < 0) 2785 if (ret < 0)
2783 goto unlock; 2786 goto unlock;
2784 ret = tun_attach(tun, file, false, tun->flags & IFF_NAPI); 2787 ret = tun_attach(tun, file, false, tun->flags & IFF_NAPI,
2788 tun->flags & IFF_NAPI_FRAGS);
2785 } else if (ifr->ifr_flags & IFF_DETACH_QUEUE) { 2789 } else if (ifr->ifr_flags & IFF_DETACH_QUEUE) {
2786 tun = rtnl_dereference(tfile->tun); 2790 tun = rtnl_dereference(tfile->tun);
2787 if (!tun || !(tun->flags & IFF_MULTI_QUEUE) || tfile->detached) 2791 if (!tun || !(tun->flags & IFF_MULTI_QUEUE) || tfile->detached)
@@ -3199,6 +3203,7 @@ static int tun_chr_open(struct inode *inode, struct file * file)
3199 return -ENOMEM; 3203 return -ENOMEM;
3200 } 3204 }
3201 3205
3206 mutex_init(&tfile->napi_mutex);
3202 RCU_INIT_POINTER(tfile->tun, NULL); 3207 RCU_INIT_POINTER(tfile->tun, NULL);
3203 tfile->flags = 0; 3208 tfile->flags = 0;
3204 tfile->ifindex = 0; 3209 tfile->ifindex = 0;
diff --git a/drivers/net/usb/asix_common.c b/drivers/net/usb/asix_common.c
index e95dd12edec4..023b8d0bf175 100644
--- a/drivers/net/usb/asix_common.c
+++ b/drivers/net/usb/asix_common.c
@@ -607,6 +607,9 @@ int asix_set_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo)
607 struct usbnet *dev = netdev_priv(net); 607 struct usbnet *dev = netdev_priv(net);
608 u8 opt = 0; 608 u8 opt = 0;
609 609
610 if (wolinfo->wolopts & ~(WAKE_PHY | WAKE_MAGIC))
611 return -EINVAL;
612
610 if (wolinfo->wolopts & WAKE_PHY) 613 if (wolinfo->wolopts & WAKE_PHY)
611 opt |= AX_MONITOR_LINK; 614 opt |= AX_MONITOR_LINK;
612 if (wolinfo->wolopts & WAKE_MAGIC) 615 if (wolinfo->wolopts & WAKE_MAGIC)
diff --git a/drivers/net/usb/ax88179_178a.c b/drivers/net/usb/ax88179_178a.c
index 9e8ad372f419..2207f7a7d1ff 100644
--- a/drivers/net/usb/ax88179_178a.c
+++ b/drivers/net/usb/ax88179_178a.c
@@ -566,6 +566,9 @@ ax88179_set_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo)
566 struct usbnet *dev = netdev_priv(net); 566 struct usbnet *dev = netdev_priv(net);
567 u8 opt = 0; 567 u8 opt = 0;
568 568
569 if (wolinfo->wolopts & ~(WAKE_PHY | WAKE_MAGIC))
570 return -EINVAL;
571
569 if (wolinfo->wolopts & WAKE_PHY) 572 if (wolinfo->wolopts & WAKE_PHY)
570 opt |= AX_MONITOR_MODE_RWLC; 573 opt |= AX_MONITOR_MODE_RWLC;
571 if (wolinfo->wolopts & WAKE_MAGIC) 574 if (wolinfo->wolopts & WAKE_MAGIC)
diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
index a9991c5f4736..c3c9ba44e2a1 100644
--- a/drivers/net/usb/lan78xx.c
+++ b/drivers/net/usb/lan78xx.c
@@ -1401,19 +1401,10 @@ static int lan78xx_set_wol(struct net_device *netdev,
1401 if (ret < 0) 1401 if (ret < 0)
1402 return ret; 1402 return ret;
1403 1403
1404 pdata->wol = 0; 1404 if (wol->wolopts & ~WAKE_ALL)
1405 if (wol->wolopts & WAKE_UCAST) 1405 return -EINVAL;
1406 pdata->wol |= WAKE_UCAST; 1406
1407 if (wol->wolopts & WAKE_MCAST) 1407 pdata->wol = wol->wolopts;
1408 pdata->wol |= WAKE_MCAST;
1409 if (wol->wolopts & WAKE_BCAST)
1410 pdata->wol |= WAKE_BCAST;
1411 if (wol->wolopts & WAKE_MAGIC)
1412 pdata->wol |= WAKE_MAGIC;
1413 if (wol->wolopts & WAKE_PHY)
1414 pdata->wol |= WAKE_PHY;
1415 if (wol->wolopts & WAKE_ARP)
1416 pdata->wol |= WAKE_ARP;
1417 1408
1418 device_set_wakeup_enable(&dev->udev->dev, (bool)wol->wolopts); 1409 device_set_wakeup_enable(&dev->udev->dev, (bool)wol->wolopts);
1419 1410
diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
index 2cd71bdb6484..f1b5201cc320 100644
--- a/drivers/net/usb/r8152.c
+++ b/drivers/net/usb/r8152.c
@@ -4506,6 +4506,9 @@ static int rtl8152_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
4506 if (!rtl_can_wakeup(tp)) 4506 if (!rtl_can_wakeup(tp))
4507 return -EOPNOTSUPP; 4507 return -EOPNOTSUPP;
4508 4508
4509 if (wol->wolopts & ~WAKE_ANY)
4510 return -EINVAL;
4511
4509 ret = usb_autopm_get_interface(tp->intf); 4512 ret = usb_autopm_get_interface(tp->intf);
4510 if (ret < 0) 4513 if (ret < 0)
4511 goto out_set_wol; 4514 goto out_set_wol;
diff --git a/drivers/net/usb/smsc75xx.c b/drivers/net/usb/smsc75xx.c
index 05553d252446..e5a4cbb366dc 100644
--- a/drivers/net/usb/smsc75xx.c
+++ b/drivers/net/usb/smsc75xx.c
@@ -731,6 +731,9 @@ static int smsc75xx_ethtool_set_wol(struct net_device *net,
731 struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]); 731 struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]);
732 int ret; 732 int ret;
733 733
734 if (wolinfo->wolopts & ~SUPPORTED_WAKE)
735 return -EINVAL;
736
734 pdata->wolopts = wolinfo->wolopts & SUPPORTED_WAKE; 737 pdata->wolopts = wolinfo->wolopts & SUPPORTED_WAKE;
735 738
736 ret = device_set_wakeup_enable(&dev->udev->dev, pdata->wolopts); 739 ret = device_set_wakeup_enable(&dev->udev->dev, pdata->wolopts);
diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
index 06b4d290784d..262e7a3c23cb 100644
--- a/drivers/net/usb/smsc95xx.c
+++ b/drivers/net/usb/smsc95xx.c
@@ -774,6 +774,9 @@ static int smsc95xx_ethtool_set_wol(struct net_device *net,
774 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); 774 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]);
775 int ret; 775 int ret;
776 776
777 if (wolinfo->wolopts & ~SUPPORTED_WAKE)
778 return -EINVAL;
779
777 pdata->wolopts = wolinfo->wolopts & SUPPORTED_WAKE; 780 pdata->wolopts = wolinfo->wolopts & SUPPORTED_WAKE;
778 781
779 ret = device_set_wakeup_enable(&dev->udev->dev, pdata->wolopts); 782 ret = device_set_wakeup_enable(&dev->udev->dev, pdata->wolopts);
diff --git a/drivers/net/usb/sr9800.c b/drivers/net/usb/sr9800.c
index 9277a0f228df..35f39f23d881 100644
--- a/drivers/net/usb/sr9800.c
+++ b/drivers/net/usb/sr9800.c
@@ -421,6 +421,9 @@ sr_set_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo)
421 struct usbnet *dev = netdev_priv(net); 421 struct usbnet *dev = netdev_priv(net);
422 u8 opt = 0; 422 u8 opt = 0;
423 423
424 if (wolinfo->wolopts & ~(WAKE_PHY | WAKE_MAGIC))
425 return -EINVAL;
426
424 if (wolinfo->wolopts & WAKE_PHY) 427 if (wolinfo->wolopts & WAKE_PHY)
425 opt |= SR_MONITOR_LINK; 428 opt |= SR_MONITOR_LINK;
426 if (wolinfo->wolopts & WAKE_MAGIC) 429 if (wolinfo->wolopts & WAKE_MAGIC)
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index 765920905226..dab504ec5e50 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -1699,17 +1699,6 @@ static void virtnet_stats(struct net_device *dev,
1699 tot->rx_frame_errors = dev->stats.rx_frame_errors; 1699 tot->rx_frame_errors = dev->stats.rx_frame_errors;
1700} 1700}
1701 1701
1702#ifdef CONFIG_NET_POLL_CONTROLLER
1703static void virtnet_netpoll(struct net_device *dev)
1704{
1705 struct virtnet_info *vi = netdev_priv(dev);
1706 int i;
1707
1708 for (i = 0; i < vi->curr_queue_pairs; i++)
1709 napi_schedule(&vi->rq[i].napi);
1710}
1711#endif
1712
1713static void virtnet_ack_link_announce(struct virtnet_info *vi) 1702static void virtnet_ack_link_announce(struct virtnet_info *vi)
1714{ 1703{
1715 rtnl_lock(); 1704 rtnl_lock();
@@ -2447,9 +2436,6 @@ static const struct net_device_ops virtnet_netdev = {
2447 .ndo_get_stats64 = virtnet_stats, 2436 .ndo_get_stats64 = virtnet_stats,
2448 .ndo_vlan_rx_add_vid = virtnet_vlan_rx_add_vid, 2437 .ndo_vlan_rx_add_vid = virtnet_vlan_rx_add_vid,
2449 .ndo_vlan_rx_kill_vid = virtnet_vlan_rx_kill_vid, 2438 .ndo_vlan_rx_kill_vid = virtnet_vlan_rx_kill_vid,
2450#ifdef CONFIG_NET_POLL_CONTROLLER
2451 .ndo_poll_controller = virtnet_netpoll,
2452#endif
2453 .ndo_bpf = virtnet_xdp, 2439 .ndo_bpf = virtnet_xdp,
2454 .ndo_xdp_xmit = virtnet_xdp_xmit, 2440 .ndo_xdp_xmit = virtnet_xdp_xmit,
2455 .ndo_features_check = passthru_features_check, 2441 .ndo_features_check = passthru_features_check,
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
index ababba37d735..2b8da2b7e721 100644
--- a/drivers/net/vxlan.c
+++ b/drivers/net/vxlan.c
@@ -3539,6 +3539,7 @@ static size_t vxlan_get_size(const struct net_device *dev)
3539 nla_total_size(sizeof(__u32)) + /* IFLA_VXLAN_LINK */ 3539 nla_total_size(sizeof(__u32)) + /* IFLA_VXLAN_LINK */
3540 nla_total_size(sizeof(struct in6_addr)) + /* IFLA_VXLAN_LOCAL{6} */ 3540 nla_total_size(sizeof(struct in6_addr)) + /* IFLA_VXLAN_LOCAL{6} */
3541 nla_total_size(sizeof(__u8)) + /* IFLA_VXLAN_TTL */ 3541 nla_total_size(sizeof(__u8)) + /* IFLA_VXLAN_TTL */
3542 nla_total_size(sizeof(__u8)) + /* IFLA_VXLAN_TTL_INHERIT */
3542 nla_total_size(sizeof(__u8)) + /* IFLA_VXLAN_TOS */ 3543 nla_total_size(sizeof(__u8)) + /* IFLA_VXLAN_TOS */
3543 nla_total_size(sizeof(__be32)) + /* IFLA_VXLAN_LABEL */ 3544 nla_total_size(sizeof(__be32)) + /* IFLA_VXLAN_LABEL */
3544 nla_total_size(sizeof(__u8)) + /* IFLA_VXLAN_LEARNING */ 3545 nla_total_size(sizeof(__u8)) + /* IFLA_VXLAN_LEARNING */
@@ -3603,6 +3604,8 @@ static int vxlan_fill_info(struct sk_buff *skb, const struct net_device *dev)
3603 } 3604 }
3604 3605
3605 if (nla_put_u8(skb, IFLA_VXLAN_TTL, vxlan->cfg.ttl) || 3606 if (nla_put_u8(skb, IFLA_VXLAN_TTL, vxlan->cfg.ttl) ||
3607 nla_put_u8(skb, IFLA_VXLAN_TTL_INHERIT,
3608 !!(vxlan->cfg.flags & VXLAN_F_TTL_INHERIT)) ||
3606 nla_put_u8(skb, IFLA_VXLAN_TOS, vxlan->cfg.tos) || 3609 nla_put_u8(skb, IFLA_VXLAN_TOS, vxlan->cfg.tos) ||
3607 nla_put_be32(skb, IFLA_VXLAN_LABEL, vxlan->cfg.label) || 3610 nla_put_be32(skb, IFLA_VXLAN_LABEL, vxlan->cfg.label) ||
3608 nla_put_u8(skb, IFLA_VXLAN_LEARNING, 3611 nla_put_u8(skb, IFLA_VXLAN_LEARNING,
diff --git a/drivers/net/wimax/i2400m/control.c b/drivers/net/wimax/i2400m/control.c
index 094cea775d0c..ef298d8525c5 100644
--- a/drivers/net/wimax/i2400m/control.c
+++ b/drivers/net/wimax/i2400m/control.c
@@ -257,7 +257,7 @@ static const struct
257 [I2400M_MS_ACCESSIBILITY_ERROR] = { "accesibility error", -EIO }, 257 [I2400M_MS_ACCESSIBILITY_ERROR] = { "accesibility error", -EIO },
258 [I2400M_MS_BUSY] = { "busy", -EBUSY }, 258 [I2400M_MS_BUSY] = { "busy", -EBUSY },
259 [I2400M_MS_CORRUPTED_TLV] = { "corrupted TLV", -EILSEQ }, 259 [I2400M_MS_CORRUPTED_TLV] = { "corrupted TLV", -EILSEQ },
260 [I2400M_MS_UNINITIALIZED] = { "not unitialized", -EILSEQ }, 260 [I2400M_MS_UNINITIALIZED] = { "uninitialized", -EILSEQ },
261 [I2400M_MS_UNKNOWN_ERROR] = { "unknown error", -EIO }, 261 [I2400M_MS_UNKNOWN_ERROR] = { "unknown error", -EIO },
262 [I2400M_MS_PRODUCTION_ERROR] = { "production error", -EIO }, 262 [I2400M_MS_PRODUCTION_ERROR] = { "production error", -EIO },
263 [I2400M_MS_NO_RF] = { "no RF", -EIO }, 263 [I2400M_MS_NO_RF] = { "no RF", -EIO },
diff --git a/drivers/net/wireless/broadcom/b43/dma.c b/drivers/net/wireless/broadcom/b43/dma.c
index 6b0e1ec346cb..d46d57b989ae 100644
--- a/drivers/net/wireless/broadcom/b43/dma.c
+++ b/drivers/net/wireless/broadcom/b43/dma.c
@@ -1518,13 +1518,15 @@ void b43_dma_handle_txstatus(struct b43_wldev *dev,
1518 } 1518 }
1519 } else { 1519 } else {
1520 /* More than a single header/data pair were missed. 1520 /* More than a single header/data pair were missed.
1521 * Report this error, and reset the controller to 1521 * Report this error. If running with open-source
1522 * firmware, then reset the controller to
1522 * revive operation. 1523 * revive operation.
1523 */ 1524 */
1524 b43dbg(dev->wl, 1525 b43dbg(dev->wl,
1525 "Out of order TX status report on DMA ring %d. Expected %d, but got %d\n", 1526 "Out of order TX status report on DMA ring %d. Expected %d, but got %d\n",
1526 ring->index, firstused, slot); 1527 ring->index, firstused, slot);
1527 b43_controller_restart(dev, "Out of order TX"); 1528 if (dev->fw.opensource)
1529 b43_controller_restart(dev, "Out of order TX");
1528 return; 1530 return;
1529 } 1531 }
1530 } 1532 }
diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/1000.c b/drivers/net/wireless/intel/iwlwifi/cfg/1000.c
index 591687984962..497fd766d87c 100644
--- a/drivers/net/wireless/intel/iwlwifi/cfg/1000.c
+++ b/drivers/net/wireless/intel/iwlwifi/cfg/1000.c
@@ -51,6 +51,7 @@
51 51
52static const struct iwl_base_params iwl1000_base_params = { 52static const struct iwl_base_params iwl1000_base_params = {
53 .num_of_queues = IWLAGN_NUM_QUEUES, 53 .num_of_queues = IWLAGN_NUM_QUEUES,
54 .max_tfd_queue_size = 256,
54 .eeprom_size = OTP_LOW_IMAGE_SIZE, 55 .eeprom_size = OTP_LOW_IMAGE_SIZE,
55 .pll_cfg = true, 56 .pll_cfg = true,
56 .max_ll_items = OTP_MAX_LL_ITEMS_1000, 57 .max_ll_items = OTP_MAX_LL_ITEMS_1000,
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
index 1068757ec42e..07442ada6dd0 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
@@ -520,7 +520,6 @@ struct mac80211_hwsim_data {
520 int channels, idx; 520 int channels, idx;
521 bool use_chanctx; 521 bool use_chanctx;
522 bool destroy_on_close; 522 bool destroy_on_close;
523 struct work_struct destroy_work;
524 u32 portid; 523 u32 portid;
525 char alpha2[2]; 524 char alpha2[2];
526 const struct ieee80211_regdomain *regd; 525 const struct ieee80211_regdomain *regd;
@@ -2935,8 +2934,7 @@ static int mac80211_hwsim_new_radio(struct genl_info *info,
2935 hwsim_radios_generation++; 2934 hwsim_radios_generation++;
2936 spin_unlock_bh(&hwsim_radio_lock); 2935 spin_unlock_bh(&hwsim_radio_lock);
2937 2936
2938 if (idx > 0) 2937 hwsim_mcast_new_radio(idx, info, param);
2939 hwsim_mcast_new_radio(idx, info, param);
2940 2938
2941 return idx; 2939 return idx;
2942 2940
@@ -3565,30 +3563,27 @@ static struct genl_family hwsim_genl_family __ro_after_init = {
3565 .n_mcgrps = ARRAY_SIZE(hwsim_mcgrps), 3563 .n_mcgrps = ARRAY_SIZE(hwsim_mcgrps),
3566}; 3564};
3567 3565
3568static void destroy_radio(struct work_struct *work)
3569{
3570 struct mac80211_hwsim_data *data =
3571 container_of(work, struct mac80211_hwsim_data, destroy_work);
3572
3573 hwsim_radios_generation++;
3574 mac80211_hwsim_del_radio(data, wiphy_name(data->hw->wiphy), NULL);
3575}
3576
3577static void remove_user_radios(u32 portid) 3566static void remove_user_radios(u32 portid)
3578{ 3567{
3579 struct mac80211_hwsim_data *entry, *tmp; 3568 struct mac80211_hwsim_data *entry, *tmp;
3569 LIST_HEAD(list);
3580 3570
3581 spin_lock_bh(&hwsim_radio_lock); 3571 spin_lock_bh(&hwsim_radio_lock);
3582 list_for_each_entry_safe(entry, tmp, &hwsim_radios, list) { 3572 list_for_each_entry_safe(entry, tmp, &hwsim_radios, list) {
3583 if (entry->destroy_on_close && entry->portid == portid) { 3573 if (entry->destroy_on_close && entry->portid == portid) {
3584 list_del(&entry->list); 3574 list_move(&entry->list, &list);
3585 rhashtable_remove_fast(&hwsim_radios_rht, &entry->rht, 3575 rhashtable_remove_fast(&hwsim_radios_rht, &entry->rht,
3586 hwsim_rht_params); 3576 hwsim_rht_params);
3587 INIT_WORK(&entry->destroy_work, destroy_radio); 3577 hwsim_radios_generation++;
3588 queue_work(hwsim_wq, &entry->destroy_work);
3589 } 3578 }
3590 } 3579 }
3591 spin_unlock_bh(&hwsim_radio_lock); 3580 spin_unlock_bh(&hwsim_radio_lock);
3581
3582 list_for_each_entry_safe(entry, tmp, &list, list) {
3583 list_del(&entry->list);
3584 mac80211_hwsim_del_radio(entry, wiphy_name(entry->hw->wiphy),
3585 NULL);
3586 }
3592} 3587}
3593 3588
3594static int mac80211_hwsim_netlink_notify(struct notifier_block *nb, 3589static int mac80211_hwsim_netlink_notify(struct notifier_block *nb,
@@ -3646,6 +3641,7 @@ static __net_init int hwsim_init_net(struct net *net)
3646static void __net_exit hwsim_exit_net(struct net *net) 3641static void __net_exit hwsim_exit_net(struct net *net)
3647{ 3642{
3648 struct mac80211_hwsim_data *data, *tmp; 3643 struct mac80211_hwsim_data *data, *tmp;
3644 LIST_HEAD(list);
3649 3645
3650 spin_lock_bh(&hwsim_radio_lock); 3646 spin_lock_bh(&hwsim_radio_lock);
3651 list_for_each_entry_safe(data, tmp, &hwsim_radios, list) { 3647 list_for_each_entry_safe(data, tmp, &hwsim_radios, list) {
@@ -3656,17 +3652,19 @@ static void __net_exit hwsim_exit_net(struct net *net)
3656 if (data->netgroup == hwsim_net_get_netgroup(&init_net)) 3652 if (data->netgroup == hwsim_net_get_netgroup(&init_net))
3657 continue; 3653 continue;
3658 3654
3659 list_del(&data->list); 3655 list_move(&data->list, &list);
3660 rhashtable_remove_fast(&hwsim_radios_rht, &data->rht, 3656 rhashtable_remove_fast(&hwsim_radios_rht, &data->rht,
3661 hwsim_rht_params); 3657 hwsim_rht_params);
3662 hwsim_radios_generation++; 3658 hwsim_radios_generation++;
3663 spin_unlock_bh(&hwsim_radio_lock); 3659 }
3660 spin_unlock_bh(&hwsim_radio_lock);
3661
3662 list_for_each_entry_safe(data, tmp, &list, list) {
3663 list_del(&data->list);
3664 mac80211_hwsim_del_radio(data, 3664 mac80211_hwsim_del_radio(data,
3665 wiphy_name(data->hw->wiphy), 3665 wiphy_name(data->hw->wiphy),
3666 NULL); 3666 NULL);
3667 spin_lock_bh(&hwsim_radio_lock);
3668 } 3667 }
3669 spin_unlock_bh(&hwsim_radio_lock);
3670 3668
3671 ida_simple_remove(&hwsim_netgroup_ida, hwsim_net_get_netgroup(net)); 3669 ida_simple_remove(&hwsim_netgroup_ida, hwsim_net_get_netgroup(net));
3672} 3670}
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x0/main.c b/drivers/net/wireless/mediatek/mt76/mt76x0/main.c
index cf6ffb1ba4a2..22bc9d368728 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x0/main.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x0/main.c
@@ -77,9 +77,8 @@ static void mt76x0_remove_interface(struct ieee80211_hw *hw,
77{ 77{
78 struct mt76x0_dev *dev = hw->priv; 78 struct mt76x0_dev *dev = hw->priv;
79 struct mt76_vif *mvif = (struct mt76_vif *) vif->drv_priv; 79 struct mt76_vif *mvif = (struct mt76_vif *) vif->drv_priv;
80 unsigned int wcid = mvif->group_wcid.idx;
81 80
82 dev->wcid_mask[wcid / BITS_PER_LONG] &= ~BIT(wcid % BITS_PER_LONG); 81 dev->vif_mask &= ~BIT(mvif->idx);
83} 82}
84 83
85static int mt76x0_config(struct ieee80211_hw *hw, u32 changed) 84static int mt76x0_config(struct ieee80211_hw *hw, u32 changed)
diff --git a/drivers/net/xen-netback/common.h b/drivers/net/xen-netback/common.h
index a46a1e94505d..936c0b3e0ba2 100644
--- a/drivers/net/xen-netback/common.h
+++ b/drivers/net/xen-netback/common.h
@@ -241,8 +241,9 @@ struct xenvif_hash_cache {
241struct xenvif_hash { 241struct xenvif_hash {
242 unsigned int alg; 242 unsigned int alg;
243 u32 flags; 243 u32 flags;
244 bool mapping_sel;
244 u8 key[XEN_NETBK_MAX_HASH_KEY_SIZE]; 245 u8 key[XEN_NETBK_MAX_HASH_KEY_SIZE];
245 u32 mapping[XEN_NETBK_MAX_HASH_MAPPING_SIZE]; 246 u32 mapping[2][XEN_NETBK_MAX_HASH_MAPPING_SIZE];
246 unsigned int size; 247 unsigned int size;
247 struct xenvif_hash_cache cache; 248 struct xenvif_hash_cache cache;
248}; 249};
diff --git a/drivers/net/xen-netback/hash.c b/drivers/net/xen-netback/hash.c
index 3c4c58b9fe76..0ccb021f1e78 100644
--- a/drivers/net/xen-netback/hash.c
+++ b/drivers/net/xen-netback/hash.c
@@ -324,7 +324,8 @@ u32 xenvif_set_hash_mapping_size(struct xenvif *vif, u32 size)
324 return XEN_NETIF_CTRL_STATUS_INVALID_PARAMETER; 324 return XEN_NETIF_CTRL_STATUS_INVALID_PARAMETER;
325 325
326 vif->hash.size = size; 326 vif->hash.size = size;
327 memset(vif->hash.mapping, 0, sizeof(u32) * size); 327 memset(vif->hash.mapping[vif->hash.mapping_sel], 0,
328 sizeof(u32) * size);
328 329
329 return XEN_NETIF_CTRL_STATUS_SUCCESS; 330 return XEN_NETIF_CTRL_STATUS_SUCCESS;
330} 331}
@@ -332,31 +333,49 @@ u32 xenvif_set_hash_mapping_size(struct xenvif *vif, u32 size)
332u32 xenvif_set_hash_mapping(struct xenvif *vif, u32 gref, u32 len, 333u32 xenvif_set_hash_mapping(struct xenvif *vif, u32 gref, u32 len,
333 u32 off) 334 u32 off)
334{ 335{
335 u32 *mapping = &vif->hash.mapping[off]; 336 u32 *mapping = vif->hash.mapping[!vif->hash.mapping_sel];
336 struct gnttab_copy copy_op = { 337 unsigned int nr = 1;
338 struct gnttab_copy copy_op[2] = {{
337 .source.u.ref = gref, 339 .source.u.ref = gref,
338 .source.domid = vif->domid, 340 .source.domid = vif->domid,
339 .dest.u.gmfn = virt_to_gfn(mapping),
340 .dest.domid = DOMID_SELF, 341 .dest.domid = DOMID_SELF,
341 .dest.offset = xen_offset_in_page(mapping), 342 .len = len * sizeof(*mapping),
342 .len = len * sizeof(u32),
343 .flags = GNTCOPY_source_gref 343 .flags = GNTCOPY_source_gref
344 }; 344 }};
345 345
346 if ((off + len > vif->hash.size) || copy_op.len > XEN_PAGE_SIZE) 346 if ((off + len < off) || (off + len > vif->hash.size) ||
347 len > XEN_PAGE_SIZE / sizeof(*mapping))
347 return XEN_NETIF_CTRL_STATUS_INVALID_PARAMETER; 348 return XEN_NETIF_CTRL_STATUS_INVALID_PARAMETER;
348 349
349 while (len-- != 0) 350 copy_op[0].dest.u.gmfn = virt_to_gfn(mapping + off);
350 if (mapping[off++] >= vif->num_queues) 351 copy_op[0].dest.offset = xen_offset_in_page(mapping + off);
351 return XEN_NETIF_CTRL_STATUS_INVALID_PARAMETER; 352 if (copy_op[0].dest.offset + copy_op[0].len > XEN_PAGE_SIZE) {
353 copy_op[1] = copy_op[0];
354 copy_op[1].source.offset = XEN_PAGE_SIZE - copy_op[0].dest.offset;
355 copy_op[1].dest.u.gmfn = virt_to_gfn(mapping + off + len);
356 copy_op[1].dest.offset = 0;
357 copy_op[1].len = copy_op[0].len - copy_op[1].source.offset;
358 copy_op[0].len = copy_op[1].source.offset;
359 nr = 2;
360 }
352 361
353 if (copy_op.len != 0) { 362 memcpy(mapping, vif->hash.mapping[vif->hash.mapping_sel],
354 gnttab_batch_copy(&copy_op, 1); 363 vif->hash.size * sizeof(*mapping));
355 364
356 if (copy_op.status != GNTST_okay) 365 if (copy_op[0].len != 0) {
366 gnttab_batch_copy(copy_op, nr);
367
368 if (copy_op[0].status != GNTST_okay ||
369 copy_op[nr - 1].status != GNTST_okay)
357 return XEN_NETIF_CTRL_STATUS_INVALID_PARAMETER; 370 return XEN_NETIF_CTRL_STATUS_INVALID_PARAMETER;
358 } 371 }
359 372
373 while (len-- != 0)
374 if (mapping[off++] >= vif->num_queues)
375 return XEN_NETIF_CTRL_STATUS_INVALID_PARAMETER;
376
377 vif->hash.mapping_sel = !vif->hash.mapping_sel;
378
360 return XEN_NETIF_CTRL_STATUS_SUCCESS; 379 return XEN_NETIF_CTRL_STATUS_SUCCESS;
361} 380}
362 381
@@ -408,6 +427,8 @@ void xenvif_dump_hash_info(struct xenvif *vif, struct seq_file *m)
408 } 427 }
409 428
410 if (vif->hash.size != 0) { 429 if (vif->hash.size != 0) {
430 const u32 *mapping = vif->hash.mapping[vif->hash.mapping_sel];
431
411 seq_puts(m, "\nHash Mapping:\n"); 432 seq_puts(m, "\nHash Mapping:\n");
412 433
413 for (i = 0; i < vif->hash.size; ) { 434 for (i = 0; i < vif->hash.size; ) {
@@ -420,7 +441,7 @@ void xenvif_dump_hash_info(struct xenvif *vif, struct seq_file *m)
420 seq_printf(m, "[%4u - %4u]: ", i, i + n - 1); 441 seq_printf(m, "[%4u - %4u]: ", i, i + n - 1);
421 442
422 for (j = 0; j < n; j++, i++) 443 for (j = 0; j < n; j++, i++)
423 seq_printf(m, "%4u ", vif->hash.mapping[i]); 444 seq_printf(m, "%4u ", mapping[i]);
424 445
425 seq_puts(m, "\n"); 446 seq_puts(m, "\n");
426 } 447 }
diff --git a/drivers/net/xen-netback/interface.c b/drivers/net/xen-netback/interface.c
index 92274c237200..f6ae23fc3f6b 100644
--- a/drivers/net/xen-netback/interface.c
+++ b/drivers/net/xen-netback/interface.c
@@ -162,7 +162,8 @@ static u16 xenvif_select_queue(struct net_device *dev, struct sk_buff *skb,
162 if (size == 0) 162 if (size == 0)
163 return skb_get_hash_raw(skb) % dev->real_num_tx_queues; 163 return skb_get_hash_raw(skb) % dev->real_num_tx_queues;
164 164
165 return vif->hash.mapping[skb_get_hash_raw(skb) % size]; 165 return vif->hash.mapping[vif->hash.mapping_sel]
166 [skb_get_hash_raw(skb) % size];
166} 167}
167 168
168static int xenvif_start_xmit(struct sk_buff *skb, struct net_device *dev) 169static int xenvif_start_xmit(struct sk_buff *skb, struct net_device *dev)
diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c
index de8282420f96..ffce6f39828a 100644
--- a/drivers/s390/net/qeth_core_main.c
+++ b/drivers/s390/net/qeth_core_main.c
@@ -610,7 +610,7 @@ static void qeth_put_reply(struct qeth_reply *reply)
610static void qeth_issue_ipa_msg(struct qeth_ipa_cmd *cmd, int rc, 610static void qeth_issue_ipa_msg(struct qeth_ipa_cmd *cmd, int rc,
611 struct qeth_card *card) 611 struct qeth_card *card)
612{ 612{
613 char *ipa_name; 613 const char *ipa_name;
614 int com = cmd->hdr.command; 614 int com = cmd->hdr.command;
615 ipa_name = qeth_get_ipa_cmd_name(com); 615 ipa_name = qeth_get_ipa_cmd_name(com);
616 if (rc) 616 if (rc)
diff --git a/drivers/s390/net/qeth_core_mpc.c b/drivers/s390/net/qeth_core_mpc.c
index 5bcb8dafc3ee..e891c0b52f4c 100644
--- a/drivers/s390/net/qeth_core_mpc.c
+++ b/drivers/s390/net/qeth_core_mpc.c
@@ -148,10 +148,10 @@ EXPORT_SYMBOL_GPL(IPA_PDU_HEADER);
148 148
149struct ipa_rc_msg { 149struct ipa_rc_msg {
150 enum qeth_ipa_return_codes rc; 150 enum qeth_ipa_return_codes rc;
151 char *msg; 151 const char *msg;
152}; 152};
153 153
154static struct ipa_rc_msg qeth_ipa_rc_msg[] = { 154static const struct ipa_rc_msg qeth_ipa_rc_msg[] = {
155 {IPA_RC_SUCCESS, "success"}, 155 {IPA_RC_SUCCESS, "success"},
156 {IPA_RC_NOTSUPP, "Command not supported"}, 156 {IPA_RC_NOTSUPP, "Command not supported"},
157 {IPA_RC_IP_TABLE_FULL, "Add Addr IP Table Full - ipv6"}, 157 {IPA_RC_IP_TABLE_FULL, "Add Addr IP Table Full - ipv6"},
@@ -219,23 +219,23 @@ static struct ipa_rc_msg qeth_ipa_rc_msg[] = {
219 219
220 220
221 221
222char *qeth_get_ipa_msg(enum qeth_ipa_return_codes rc) 222const char *qeth_get_ipa_msg(enum qeth_ipa_return_codes rc)
223{ 223{
224 int x = 0; 224 int x;
225 qeth_ipa_rc_msg[sizeof(qeth_ipa_rc_msg) / 225
226 sizeof(struct ipa_rc_msg) - 1].rc = rc; 226 for (x = 0; x < ARRAY_SIZE(qeth_ipa_rc_msg) - 1; x++)
227 while (qeth_ipa_rc_msg[x].rc != rc) 227 if (qeth_ipa_rc_msg[x].rc == rc)
228 x++; 228 return qeth_ipa_rc_msg[x].msg;
229 return qeth_ipa_rc_msg[x].msg; 229 return qeth_ipa_rc_msg[x].msg;
230} 230}
231 231
232 232
233struct ipa_cmd_names { 233struct ipa_cmd_names {
234 enum qeth_ipa_cmds cmd; 234 enum qeth_ipa_cmds cmd;
235 char *name; 235 const char *name;
236}; 236};
237 237
238static struct ipa_cmd_names qeth_ipa_cmd_names[] = { 238static const struct ipa_cmd_names qeth_ipa_cmd_names[] = {
239 {IPA_CMD_STARTLAN, "startlan"}, 239 {IPA_CMD_STARTLAN, "startlan"},
240 {IPA_CMD_STOPLAN, "stoplan"}, 240 {IPA_CMD_STOPLAN, "stoplan"},
241 {IPA_CMD_SETVMAC, "setvmac"}, 241 {IPA_CMD_SETVMAC, "setvmac"},
@@ -267,13 +267,12 @@ static struct ipa_cmd_names qeth_ipa_cmd_names[] = {
267 {IPA_CMD_UNKNOWN, "unknown"}, 267 {IPA_CMD_UNKNOWN, "unknown"},
268}; 268};
269 269
270char *qeth_get_ipa_cmd_name(enum qeth_ipa_cmds cmd) 270const char *qeth_get_ipa_cmd_name(enum qeth_ipa_cmds cmd)
271{ 271{
272 int x = 0; 272 int x;
273 qeth_ipa_cmd_names[ 273
274 sizeof(qeth_ipa_cmd_names) / 274 for (x = 0; x < ARRAY_SIZE(qeth_ipa_cmd_names) - 1; x++)
275 sizeof(struct ipa_cmd_names)-1].cmd = cmd; 275 if (qeth_ipa_cmd_names[x].cmd == cmd)
276 while (qeth_ipa_cmd_names[x].cmd != cmd) 276 return qeth_ipa_cmd_names[x].name;
277 x++;
278 return qeth_ipa_cmd_names[x].name; 277 return qeth_ipa_cmd_names[x].name;
279} 278}
diff --git a/drivers/s390/net/qeth_core_mpc.h b/drivers/s390/net/qeth_core_mpc.h
index aa8b9196b089..aa5de1fe01e1 100644
--- a/drivers/s390/net/qeth_core_mpc.h
+++ b/drivers/s390/net/qeth_core_mpc.h
@@ -797,8 +797,8 @@ enum qeth_ipa_arp_return_codes {
797 QETH_IPA_ARP_RC_Q_NO_DATA = 0x0008, 797 QETH_IPA_ARP_RC_Q_NO_DATA = 0x0008,
798}; 798};
799 799
800extern char *qeth_get_ipa_msg(enum qeth_ipa_return_codes rc); 800extern const char *qeth_get_ipa_msg(enum qeth_ipa_return_codes rc);
801extern char *qeth_get_ipa_cmd_name(enum qeth_ipa_cmds cmd); 801extern const char *qeth_get_ipa_cmd_name(enum qeth_ipa_cmds cmd);
802 802
803#define QETH_SETASS_BASE_LEN (sizeof(struct qeth_ipacmd_hdr) + \ 803#define QETH_SETASS_BASE_LEN (sizeof(struct qeth_ipacmd_hdr) + \
804 sizeof(struct qeth_ipacmd_setassparms_hdr)) 804 sizeof(struct qeth_ipacmd_setassparms_hdr))
diff --git a/include/linux/mlx5/transobj.h b/include/linux/mlx5/transobj.h
index 83a33a1873a6..7f5ca2cd3a32 100644
--- a/include/linux/mlx5/transobj.h
+++ b/include/linux/mlx5/transobj.h
@@ -90,6 +90,8 @@ struct mlx5_hairpin {
90 90
91 u32 *rqn; 91 u32 *rqn;
92 u32 *sqn; 92 u32 *sqn;
93
94 bool peer_gone;
93}; 95};
94 96
95struct mlx5_hairpin * 97struct mlx5_hairpin *
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index ca5ab98053c8..c7861e4b402c 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -1730,6 +1730,8 @@ enum netdev_priv_flags {
1730 * switch driver and used to set the phys state of the 1730 * switch driver and used to set the phys state of the
1731 * switch port. 1731 * switch port.
1732 * 1732 *
1733 * @wol_enabled: Wake-on-LAN is enabled
1734 *
1733 * FIXME: cleanup struct net_device such that network protocol info 1735 * FIXME: cleanup struct net_device such that network protocol info
1734 * moves out. 1736 * moves out.
1735 */ 1737 */
@@ -2014,6 +2016,7 @@ struct net_device {
2014 struct lock_class_key *qdisc_tx_busylock; 2016 struct lock_class_key *qdisc_tx_busylock;
2015 struct lock_class_key *qdisc_running_key; 2017 struct lock_class_key *qdisc_running_key;
2016 bool proto_down; 2018 bool proto_down;
2019 unsigned wol_enabled:1;
2017}; 2020};
2018#define to_net_dev(d) container_of(d, struct net_device, dev) 2021#define to_net_dev(d) container_of(d, struct net_device, dev)
2019 2022
diff --git a/include/linux/netfilter.h b/include/linux/netfilter.h
index 07efffd0c759..bbe99d2b28b4 100644
--- a/include/linux/netfilter.h
+++ b/include/linux/netfilter.h
@@ -215,6 +215,8 @@ static inline int nf_hook(u_int8_t pf, unsigned int hook, struct net *net,
215 break; 215 break;
216 case NFPROTO_ARP: 216 case NFPROTO_ARP:
217#ifdef CONFIG_NETFILTER_FAMILY_ARP 217#ifdef CONFIG_NETFILTER_FAMILY_ARP
218 if (WARN_ON_ONCE(hook >= ARRAY_SIZE(net->nf.hooks_arp)))
219 break;
218 hook_head = rcu_dereference(net->nf.hooks_arp[hook]); 220 hook_head = rcu_dereference(net->nf.hooks_arp[hook]);
219#endif 221#endif
220 break; 222 break;
diff --git a/include/net/bonding.h b/include/net/bonding.h
index a2d058170ea3..b46d68acf701 100644
--- a/include/net/bonding.h
+++ b/include/net/bonding.h
@@ -139,12 +139,6 @@ struct bond_parm_tbl {
139 int mode; 139 int mode;
140}; 140};
141 141
142struct netdev_notify_work {
143 struct delayed_work work;
144 struct net_device *dev;
145 struct netdev_bonding_info bonding_info;
146};
147
148struct slave { 142struct slave {
149 struct net_device *dev; /* first - useful for panic debug */ 143 struct net_device *dev; /* first - useful for panic debug */
150 struct bonding *bond; /* our master */ 144 struct bonding *bond; /* our master */
@@ -172,6 +166,7 @@ struct slave {
172#ifdef CONFIG_NET_POLL_CONTROLLER 166#ifdef CONFIG_NET_POLL_CONTROLLER
173 struct netpoll *np; 167 struct netpoll *np;
174#endif 168#endif
169 struct delayed_work notify_work;
175 struct kobject kobj; 170 struct kobject kobj;
176 struct rtnl_link_stats64 slave_stats; 171 struct rtnl_link_stats64 slave_stats;
177}; 172};
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 8ebabc9873d1..4de121e24ce5 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -4852,8 +4852,6 @@ const char *reg_initiator_name(enum nl80211_reg_initiator initiator);
4852 * 4852 *
4853 * @alpha2: the ISO/IEC 3166 alpha2 wmm rule to be queried. 4853 * @alpha2: the ISO/IEC 3166 alpha2 wmm rule to be queried.
4854 * @freq: the freqency(in MHz) to be queried. 4854 * @freq: the freqency(in MHz) to be queried.
4855 * @ptr: pointer where the regdb wmm data is to be stored (or %NULL if
4856 * irrelevant). This can be used later for deduplication.
4857 * @rule: pointer to store the wmm rule from the regulatory db. 4855 * @rule: pointer to store the wmm rule from the regulatory db.
4858 * 4856 *
4859 * Self-managed wireless drivers can use this function to query 4857 * Self-managed wireless drivers can use this function to query
diff --git a/include/net/inet_sock.h b/include/net/inet_sock.h
index e03b93360f33..a80fd0ac4563 100644
--- a/include/net/inet_sock.h
+++ b/include/net/inet_sock.h
@@ -130,12 +130,6 @@ static inline int inet_request_bound_dev_if(const struct sock *sk,
130 return sk->sk_bound_dev_if; 130 return sk->sk_bound_dev_if;
131} 131}
132 132
133static inline struct ip_options_rcu *ireq_opt_deref(const struct inet_request_sock *ireq)
134{
135 return rcu_dereference_check(ireq->ireq_opt,
136 refcount_read(&ireq->req.rsk_refcnt) > 0);
137}
138
139struct inet_cork { 133struct inet_cork {
140 unsigned int flags; 134 unsigned int flags;
141 __be32 addr; 135 __be32 addr;
diff --git a/include/net/netlink.h b/include/net/netlink.h
index 0c154f98e987..39e1d875d507 100644
--- a/include/net/netlink.h
+++ b/include/net/netlink.h
@@ -153,7 +153,7 @@
153 * nla_find() find attribute in stream of attributes 153 * nla_find() find attribute in stream of attributes
154 * nla_find_nested() find attribute in nested attributes 154 * nla_find_nested() find attribute in nested attributes
155 * nla_parse() parse and validate stream of attrs 155 * nla_parse() parse and validate stream of attrs
156 * nla_parse_nested() parse nested attribuets 156 * nla_parse_nested() parse nested attributes
157 * nla_for_each_attr() loop over all attributes 157 * nla_for_each_attr() loop over all attributes
158 * nla_for_each_nested() loop over the nested attributes 158 * nla_for_each_nested() loop over the nested attributes
159 *========================================================================= 159 *=========================================================================
diff --git a/include/trace/events/rxrpc.h b/include/trace/events/rxrpc.h
index 196587b8f204..837393fa897b 100644
--- a/include/trace/events/rxrpc.h
+++ b/include/trace/events/rxrpc.h
@@ -56,7 +56,6 @@ enum rxrpc_peer_trace {
56 rxrpc_peer_new, 56 rxrpc_peer_new,
57 rxrpc_peer_processing, 57 rxrpc_peer_processing,
58 rxrpc_peer_put, 58 rxrpc_peer_put,
59 rxrpc_peer_queued_error,
60}; 59};
61 60
62enum rxrpc_conn_trace { 61enum rxrpc_conn_trace {
@@ -257,8 +256,7 @@ enum rxrpc_tx_point {
257 EM(rxrpc_peer_got, "GOT") \ 256 EM(rxrpc_peer_got, "GOT") \
258 EM(rxrpc_peer_new, "NEW") \ 257 EM(rxrpc_peer_new, "NEW") \
259 EM(rxrpc_peer_processing, "PRO") \ 258 EM(rxrpc_peer_processing, "PRO") \
260 EM(rxrpc_peer_put, "PUT") \ 259 E_(rxrpc_peer_put, "PUT")
261 E_(rxrpc_peer_queued_error, "QER")
262 260
263#define rxrpc_conn_traces \ 261#define rxrpc_conn_traces \
264 EM(rxrpc_conn_got, "GOT") \ 262 EM(rxrpc_conn_got, "GOT") \
diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
index 3bdc8f3ca259..ccce954f8146 100644
--- a/net/bluetooth/mgmt.c
+++ b/net/bluetooth/mgmt.c
@@ -2434,9 +2434,8 @@ static int unpair_device(struct sock *sk, struct hci_dev *hdev, void *data,
2434 /* LE address type */ 2434 /* LE address type */
2435 addr_type = le_addr_type(cp->addr.type); 2435 addr_type = le_addr_type(cp->addr.type);
2436 2436
2437 hci_remove_irk(hdev, &cp->addr.bdaddr, addr_type); 2437 /* Abort any ongoing SMP pairing. Removes ltk and irk if they exist. */
2438 2438 err = smp_cancel_and_remove_pairing(hdev, &cp->addr.bdaddr, addr_type);
2439 err = hci_remove_ltk(hdev, &cp->addr.bdaddr, addr_type);
2440 if (err < 0) { 2439 if (err < 0) {
2441 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE, 2440 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE,
2442 MGMT_STATUS_NOT_PAIRED, &rp, 2441 MGMT_STATUS_NOT_PAIRED, &rp,
@@ -2450,8 +2449,6 @@ static int unpair_device(struct sock *sk, struct hci_dev *hdev, void *data,
2450 goto done; 2449 goto done;
2451 } 2450 }
2452 2451
2453 /* Abort any ongoing SMP pairing */
2454 smp_cancel_pairing(conn);
2455 2452
2456 /* Defer clearing up the connection parameters until closing to 2453 /* Defer clearing up the connection parameters until closing to
2457 * give a chance of keeping them if a repairing happens. 2454 * give a chance of keeping them if a repairing happens.
diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c
index 3a7b0773536b..73f7211d0431 100644
--- a/net/bluetooth/smp.c
+++ b/net/bluetooth/smp.c
@@ -2422,30 +2422,51 @@ unlock:
2422 return ret; 2422 return ret;
2423} 2423}
2424 2424
2425void smp_cancel_pairing(struct hci_conn *hcon) 2425int smp_cancel_and_remove_pairing(struct hci_dev *hdev, bdaddr_t *bdaddr,
2426 u8 addr_type)
2426{ 2427{
2427 struct l2cap_conn *conn = hcon->l2cap_data; 2428 struct hci_conn *hcon;
2429 struct l2cap_conn *conn;
2428 struct l2cap_chan *chan; 2430 struct l2cap_chan *chan;
2429 struct smp_chan *smp; 2431 struct smp_chan *smp;
2432 int err;
2433
2434 err = hci_remove_ltk(hdev, bdaddr, addr_type);
2435 hci_remove_irk(hdev, bdaddr, addr_type);
2436
2437 hcon = hci_conn_hash_lookup_le(hdev, bdaddr, addr_type);
2438 if (!hcon)
2439 goto done;
2430 2440
2441 conn = hcon->l2cap_data;
2431 if (!conn) 2442 if (!conn)
2432 return; 2443 goto done;
2433 2444
2434 chan = conn->smp; 2445 chan = conn->smp;
2435 if (!chan) 2446 if (!chan)
2436 return; 2447 goto done;
2437 2448
2438 l2cap_chan_lock(chan); 2449 l2cap_chan_lock(chan);
2439 2450
2440 smp = chan->data; 2451 smp = chan->data;
2441 if (smp) { 2452 if (smp) {
2453 /* Set keys to NULL to make sure smp_failure() does not try to
2454 * remove and free already invalidated rcu list entries. */
2455 smp->ltk = NULL;
2456 smp->slave_ltk = NULL;
2457 smp->remote_irk = NULL;
2458
2442 if (test_bit(SMP_FLAG_COMPLETE, &smp->flags)) 2459 if (test_bit(SMP_FLAG_COMPLETE, &smp->flags))
2443 smp_failure(conn, 0); 2460 smp_failure(conn, 0);
2444 else 2461 else
2445 smp_failure(conn, SMP_UNSPECIFIED); 2462 smp_failure(conn, SMP_UNSPECIFIED);
2463 err = 0;
2446 } 2464 }
2447 2465
2448 l2cap_chan_unlock(chan); 2466 l2cap_chan_unlock(chan);
2467
2468done:
2469 return err;
2449} 2470}
2450 2471
2451static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb) 2472static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb)
diff --git a/net/bluetooth/smp.h b/net/bluetooth/smp.h
index 0ff6247eaa6c..121edadd5f8d 100644
--- a/net/bluetooth/smp.h
+++ b/net/bluetooth/smp.h
@@ -181,7 +181,8 @@ enum smp_key_pref {
181}; 181};
182 182
183/* SMP Commands */ 183/* SMP Commands */
184void smp_cancel_pairing(struct hci_conn *hcon); 184int smp_cancel_and_remove_pairing(struct hci_dev *hdev, bdaddr_t *bdaddr,
185 u8 addr_type);
185bool smp_sufficient_security(struct hci_conn *hcon, u8 sec_level, 186bool smp_sufficient_security(struct hci_conn *hcon, u8 sec_level,
186 enum smp_key_pref key_pref); 187 enum smp_key_pref key_pref);
187int smp_conn_security(struct hci_conn *hcon, __u8 sec_level); 188int smp_conn_security(struct hci_conn *hcon, __u8 sec_level);
diff --git a/net/bridge/br_netfilter_hooks.c b/net/bridge/br_netfilter_hooks.c
index 6e0dc6bcd32a..37278dc280eb 100644
--- a/net/bridge/br_netfilter_hooks.c
+++ b/net/bridge/br_netfilter_hooks.c
@@ -835,7 +835,8 @@ static unsigned int ip_sabotage_in(void *priv,
835 struct sk_buff *skb, 835 struct sk_buff *skb,
836 const struct nf_hook_state *state) 836 const struct nf_hook_state *state)
837{ 837{
838 if (skb->nf_bridge && !skb->nf_bridge->in_prerouting) { 838 if (skb->nf_bridge && !skb->nf_bridge->in_prerouting &&
839 !netif_is_l3_master(skb->dev)) {
839 state->okfn(state->net, state->sk, skb); 840 state->okfn(state->net, state->sk, skb);
840 return NF_STOLEN; 841 return NF_STOLEN;
841 } 842 }
diff --git a/net/core/ethtool.c b/net/core/ethtool.c
index 234a0ec2e932..0762aaf8e964 100644
--- a/net/core/ethtool.c
+++ b/net/core/ethtool.c
@@ -1483,6 +1483,7 @@ static int ethtool_get_wol(struct net_device *dev, char __user *useraddr)
1483static int ethtool_set_wol(struct net_device *dev, char __user *useraddr) 1483static int ethtool_set_wol(struct net_device *dev, char __user *useraddr)
1484{ 1484{
1485 struct ethtool_wolinfo wol; 1485 struct ethtool_wolinfo wol;
1486 int ret;
1486 1487
1487 if (!dev->ethtool_ops->set_wol) 1488 if (!dev->ethtool_ops->set_wol)
1488 return -EOPNOTSUPP; 1489 return -EOPNOTSUPP;
@@ -1490,7 +1491,13 @@ static int ethtool_set_wol(struct net_device *dev, char __user *useraddr)
1490 if (copy_from_user(&wol, useraddr, sizeof(wol))) 1491 if (copy_from_user(&wol, useraddr, sizeof(wol)))
1491 return -EFAULT; 1492 return -EFAULT;
1492 1493
1493 return dev->ethtool_ops->set_wol(dev, &wol); 1494 ret = dev->ethtool_ops->set_wol(dev, &wol);
1495 if (ret)
1496 return ret;
1497
1498 dev->wol_enabled = !!wol.wolopts;
1499
1500 return 0;
1494} 1501}
1495 1502
1496static int ethtool_get_eee(struct net_device *dev, char __user *useraddr) 1503static int ethtool_get_eee(struct net_device *dev, char __user *useraddr)
diff --git a/net/core/netpoll.c b/net/core/netpoll.c
index 3219a2932463..de1d1ba92f2d 100644
--- a/net/core/netpoll.c
+++ b/net/core/netpoll.c
@@ -135,27 +135,9 @@ static void queue_process(struct work_struct *work)
135 } 135 }
136} 136}
137 137
138/*
139 * Check whether delayed processing was scheduled for our NIC. If so,
140 * we attempt to grab the poll lock and use ->poll() to pump the card.
141 * If this fails, either we've recursed in ->poll() or it's already
142 * running on another CPU.
143 *
144 * Note: we don't mask interrupts with this lock because we're using
145 * trylock here and interrupts are already disabled in the softirq
146 * case. Further, we test the poll_owner to avoid recursion on UP
147 * systems where the lock doesn't exist.
148 */
149static void poll_one_napi(struct napi_struct *napi) 138static void poll_one_napi(struct napi_struct *napi)
150{ 139{
151 int work = 0; 140 int work;
152
153 /* net_rx_action's ->poll() invocations and our's are
154 * synchronized by this test which is only made while
155 * holding the napi->poll_lock.
156 */
157 if (!test_bit(NAPI_STATE_SCHED, &napi->state))
158 return;
159 141
160 /* If we set this bit but see that it has already been set, 142 /* If we set this bit but see that it has already been set,
161 * that indicates that napi has been disabled and we need 143 * that indicates that napi has been disabled and we need
@@ -330,6 +312,7 @@ void netpoll_send_skb_on_dev(struct netpoll *np, struct sk_buff *skb,
330 /* It is up to the caller to keep npinfo alive. */ 312 /* It is up to the caller to keep npinfo alive. */
331 struct netpoll_info *npinfo; 313 struct netpoll_info *npinfo;
332 314
315 rcu_read_lock_bh();
333 lockdep_assert_irqs_disabled(); 316 lockdep_assert_irqs_disabled();
334 317
335 npinfo = rcu_dereference_bh(np->dev->npinfo); 318 npinfo = rcu_dereference_bh(np->dev->npinfo);
@@ -374,6 +357,7 @@ void netpoll_send_skb_on_dev(struct netpoll *np, struct sk_buff *skb,
374 skb_queue_tail(&npinfo->txq, skb); 357 skb_queue_tail(&npinfo->txq, skb);
375 schedule_delayed_work(&npinfo->tx_work,0); 358 schedule_delayed_work(&npinfo->tx_work,0);
376 } 359 }
360 rcu_read_unlock_bh();
377} 361}
378EXPORT_SYMBOL(netpoll_send_skb_on_dev); 362EXPORT_SYMBOL(netpoll_send_skb_on_dev);
379 363
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 63ce2283a456..448703312fed 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -1898,10 +1898,8 @@ static int rtnl_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb)
1898 if (tb[IFLA_IF_NETNSID]) { 1898 if (tb[IFLA_IF_NETNSID]) {
1899 netnsid = nla_get_s32(tb[IFLA_IF_NETNSID]); 1899 netnsid = nla_get_s32(tb[IFLA_IF_NETNSID]);
1900 tgt_net = get_target_net(skb->sk, netnsid); 1900 tgt_net = get_target_net(skb->sk, netnsid);
1901 if (IS_ERR(tgt_net)) { 1901 if (IS_ERR(tgt_net))
1902 tgt_net = net; 1902 return PTR_ERR(tgt_net);
1903 netnsid = -1;
1904 }
1905 } 1903 }
1906 1904
1907 if (tb[IFLA_EXT_MASK]) 1905 if (tb[IFLA_EXT_MASK])
@@ -2837,6 +2835,12 @@ struct net_device *rtnl_create_link(struct net *net,
2837 else if (ops->get_num_rx_queues) 2835 else if (ops->get_num_rx_queues)
2838 num_rx_queues = ops->get_num_rx_queues(); 2836 num_rx_queues = ops->get_num_rx_queues();
2839 2837
2838 if (num_tx_queues < 1 || num_tx_queues > 4096)
2839 return ERR_PTR(-EINVAL);
2840
2841 if (num_rx_queues < 1 || num_rx_queues > 4096)
2842 return ERR_PTR(-EINVAL);
2843
2840 dev = alloc_netdev_mqs(ops->priv_size, ifname, name_assign_type, 2844 dev = alloc_netdev_mqs(ops->priv_size, ifname, name_assign_type,
2841 ops->setup, num_tx_queues, num_rx_queues); 2845 ops->setup, num_tx_queues, num_rx_queues);
2842 if (!dev) 2846 if (!dev)
diff --git a/net/dccp/input.c b/net/dccp/input.c
index d28d46bff6ab..85d6c879383d 100644
--- a/net/dccp/input.c
+++ b/net/dccp/input.c
@@ -606,11 +606,13 @@ int dccp_rcv_state_process(struct sock *sk, struct sk_buff *skb,
606 if (sk->sk_state == DCCP_LISTEN) { 606 if (sk->sk_state == DCCP_LISTEN) {
607 if (dh->dccph_type == DCCP_PKT_REQUEST) { 607 if (dh->dccph_type == DCCP_PKT_REQUEST) {
608 /* It is possible that we process SYN packets from backlog, 608 /* It is possible that we process SYN packets from backlog,
609 * so we need to make sure to disable BH right there. 609 * so we need to make sure to disable BH and RCU right there.
610 */ 610 */
611 rcu_read_lock();
611 local_bh_disable(); 612 local_bh_disable();
612 acceptable = inet_csk(sk)->icsk_af_ops->conn_request(sk, skb) >= 0; 613 acceptable = inet_csk(sk)->icsk_af_ops->conn_request(sk, skb) >= 0;
613 local_bh_enable(); 614 local_bh_enable();
615 rcu_read_unlock();
614 if (!acceptable) 616 if (!acceptable)
615 return 1; 617 return 1;
616 consume_skb(skb); 618 consume_skb(skb);
diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c
index b08feb219b44..8e08cea6f178 100644
--- a/net/dccp/ipv4.c
+++ b/net/dccp/ipv4.c
@@ -493,9 +493,11 @@ static int dccp_v4_send_response(const struct sock *sk, struct request_sock *req
493 493
494 dh->dccph_checksum = dccp_v4_csum_finish(skb, ireq->ir_loc_addr, 494 dh->dccph_checksum = dccp_v4_csum_finish(skb, ireq->ir_loc_addr,
495 ireq->ir_rmt_addr); 495 ireq->ir_rmt_addr);
496 rcu_read_lock();
496 err = ip_build_and_send_pkt(skb, sk, ireq->ir_loc_addr, 497 err = ip_build_and_send_pkt(skb, sk, ireq->ir_loc_addr,
497 ireq->ir_rmt_addr, 498 ireq->ir_rmt_addr,
498 ireq_opt_deref(ireq)); 499 rcu_dereference(ireq->ireq_opt));
500 rcu_read_unlock();
499 err = net_xmit_eval(err); 501 err = net_xmit_eval(err);
500 } 502 }
501 503
diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c
index dfd5009f96ef..15e7f7915a21 100644
--- a/net/ipv4/inet_connection_sock.c
+++ b/net/ipv4/inet_connection_sock.c
@@ -544,7 +544,8 @@ struct dst_entry *inet_csk_route_req(const struct sock *sk,
544 struct ip_options_rcu *opt; 544 struct ip_options_rcu *opt;
545 struct rtable *rt; 545 struct rtable *rt;
546 546
547 opt = ireq_opt_deref(ireq); 547 rcu_read_lock();
548 opt = rcu_dereference(ireq->ireq_opt);
548 549
549 flowi4_init_output(fl4, ireq->ir_iif, ireq->ir_mark, 550 flowi4_init_output(fl4, ireq->ir_iif, ireq->ir_mark,
550 RT_CONN_FLAGS(sk), RT_SCOPE_UNIVERSE, 551 RT_CONN_FLAGS(sk), RT_SCOPE_UNIVERSE,
@@ -558,11 +559,13 @@ struct dst_entry *inet_csk_route_req(const struct sock *sk,
558 goto no_route; 559 goto no_route;
559 if (opt && opt->opt.is_strictroute && rt->rt_uses_gateway) 560 if (opt && opt->opt.is_strictroute && rt->rt_uses_gateway)
560 goto route_err; 561 goto route_err;
562 rcu_read_unlock();
561 return &rt->dst; 563 return &rt->dst;
562 564
563route_err: 565route_err:
564 ip_rt_put(rt); 566 ip_rt_put(rt);
565no_route: 567no_route:
568 rcu_read_unlock();
566 __IP_INC_STATS(net, IPSTATS_MIB_OUTNOROUTES); 569 __IP_INC_STATS(net, IPSTATS_MIB_OUTNOROUTES);
567 return NULL; 570 return NULL;
568} 571}
diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c
index c0fe5ad996f2..26c36cccabdc 100644
--- a/net/ipv4/ip_sockglue.c
+++ b/net/ipv4/ip_sockglue.c
@@ -149,7 +149,6 @@ static void ip_cmsg_recv_security(struct msghdr *msg, struct sk_buff *skb)
149static void ip_cmsg_recv_dstaddr(struct msghdr *msg, struct sk_buff *skb) 149static void ip_cmsg_recv_dstaddr(struct msghdr *msg, struct sk_buff *skb)
150{ 150{
151 struct sockaddr_in sin; 151 struct sockaddr_in sin;
152 const struct iphdr *iph = ip_hdr(skb);
153 __be16 *ports; 152 __be16 *ports;
154 int end; 153 int end;
155 154
@@ -164,7 +163,7 @@ static void ip_cmsg_recv_dstaddr(struct msghdr *msg, struct sk_buff *skb)
164 ports = (__be16 *)skb_transport_header(skb); 163 ports = (__be16 *)skb_transport_header(skb);
165 164
166 sin.sin_family = AF_INET; 165 sin.sin_family = AF_INET;
167 sin.sin_addr.s_addr = iph->daddr; 166 sin.sin_addr.s_addr = ip_hdr(skb)->daddr;
168 sin.sin_port = ports[1]; 167 sin.sin_port = ports[1];
169 memset(sin.sin_zero, 0, sizeof(sin.sin_zero)); 168 memset(sin.sin_zero, 0, sizeof(sin.sin_zero));
170 169
diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c
index b92f422f2fa8..891ed2f91467 100644
--- a/net/ipv4/sysctl_net_ipv4.c
+++ b/net/ipv4/sysctl_net_ipv4.c
@@ -48,6 +48,7 @@ static int tcp_syn_retries_max = MAX_TCP_SYNCNT;
48static int ip_ping_group_range_min[] = { 0, 0 }; 48static int ip_ping_group_range_min[] = { 0, 0 };
49static int ip_ping_group_range_max[] = { GID_T_MAX, GID_T_MAX }; 49static int ip_ping_group_range_max[] = { GID_T_MAX, GID_T_MAX };
50static int comp_sack_nr_max = 255; 50static int comp_sack_nr_max = 255;
51static u32 u32_max_div_HZ = UINT_MAX / HZ;
51 52
52/* obsolete */ 53/* obsolete */
53static int sysctl_tcp_low_latency __read_mostly; 54static int sysctl_tcp_low_latency __read_mostly;
@@ -745,9 +746,10 @@ static struct ctl_table ipv4_net_table[] = {
745 { 746 {
746 .procname = "tcp_probe_interval", 747 .procname = "tcp_probe_interval",
747 .data = &init_net.ipv4.sysctl_tcp_probe_interval, 748 .data = &init_net.ipv4.sysctl_tcp_probe_interval,
748 .maxlen = sizeof(int), 749 .maxlen = sizeof(u32),
749 .mode = 0644, 750 .mode = 0644,
750 .proc_handler = proc_dointvec, 751 .proc_handler = proc_douintvec_minmax,
752 .extra2 = &u32_max_div_HZ,
751 }, 753 },
752 { 754 {
753 .procname = "igmp_link_local_mcast_reports", 755 .procname = "igmp_link_local_mcast_reports",
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 4cf2f7bb2802..47e08c1b5bc3 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -6009,11 +6009,13 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb)
6009 if (th->fin) 6009 if (th->fin)
6010 goto discard; 6010 goto discard;
6011 /* It is possible that we process SYN packets from backlog, 6011 /* It is possible that we process SYN packets from backlog,
6012 * so we need to make sure to disable BH right there. 6012 * so we need to make sure to disable BH and RCU right there.
6013 */ 6013 */
6014 rcu_read_lock();
6014 local_bh_disable(); 6015 local_bh_disable();
6015 acceptable = icsk->icsk_af_ops->conn_request(sk, skb) >= 0; 6016 acceptable = icsk->icsk_af_ops->conn_request(sk, skb) >= 0;
6016 local_bh_enable(); 6017 local_bh_enable();
6018 rcu_read_unlock();
6017 6019
6018 if (!acceptable) 6020 if (!acceptable)
6019 return 1; 6021 return 1;
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index 44c09eddbb78..cd426313a298 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -943,9 +943,11 @@ static int tcp_v4_send_synack(const struct sock *sk, struct dst_entry *dst,
943 if (skb) { 943 if (skb) {
944 __tcp_v4_send_check(skb, ireq->ir_loc_addr, ireq->ir_rmt_addr); 944 __tcp_v4_send_check(skb, ireq->ir_loc_addr, ireq->ir_rmt_addr);
945 945
946 rcu_read_lock();
946 err = ip_build_and_send_pkt(skb, sk, ireq->ir_loc_addr, 947 err = ip_build_and_send_pkt(skb, sk, ireq->ir_loc_addr,
947 ireq->ir_rmt_addr, 948 ireq->ir_rmt_addr,
948 ireq_opt_deref(ireq)); 949 rcu_dereference(ireq->ireq_opt));
950 rcu_read_unlock();
949 err = net_xmit_eval(err); 951 err = net_xmit_eval(err);
950 } 952 }
951 953
diff --git a/net/ipv4/xfrm4_input.c b/net/ipv4/xfrm4_input.c
index bcfc00e88756..f8de2482a529 100644
--- a/net/ipv4/xfrm4_input.c
+++ b/net/ipv4/xfrm4_input.c
@@ -67,6 +67,7 @@ int xfrm4_transport_finish(struct sk_buff *skb, int async)
67 67
68 if (xo && (xo->flags & XFRM_GRO)) { 68 if (xo && (xo->flags & XFRM_GRO)) {
69 skb_mac_header_rebuild(skb); 69 skb_mac_header_rebuild(skb);
70 skb_reset_transport_header(skb);
70 return 0; 71 return 0;
71 } 72 }
72 73
diff --git a/net/ipv4/xfrm4_mode_transport.c b/net/ipv4/xfrm4_mode_transport.c
index 3d36644890bb..1ad2c2c4e250 100644
--- a/net/ipv4/xfrm4_mode_transport.c
+++ b/net/ipv4/xfrm4_mode_transport.c
@@ -46,7 +46,6 @@ static int xfrm4_transport_output(struct xfrm_state *x, struct sk_buff *skb)
46static int xfrm4_transport_input(struct xfrm_state *x, struct sk_buff *skb) 46static int xfrm4_transport_input(struct xfrm_state *x, struct sk_buff *skb)
47{ 47{
48 int ihl = skb->data - skb_transport_header(skb); 48 int ihl = skb->data - skb_transport_header(skb);
49 struct xfrm_offload *xo = xfrm_offload(skb);
50 49
51 if (skb->transport_header != skb->network_header) { 50 if (skb->transport_header != skb->network_header) {
52 memmove(skb_transport_header(skb), 51 memmove(skb_transport_header(skb),
@@ -54,8 +53,7 @@ static int xfrm4_transport_input(struct xfrm_state *x, struct sk_buff *skb)
54 skb->network_header = skb->transport_header; 53 skb->network_header = skb->transport_header;
55 } 54 }
56 ip_hdr(skb)->tot_len = htons(skb->len + ihl); 55 ip_hdr(skb)->tot_len = htons(skb->len + ihl);
57 if (!xo || !(xo->flags & XFRM_GRO)) 56 skb_reset_transport_header(skb);
58 skb_reset_transport_header(skb);
59 return 0; 57 return 0;
60} 58}
61 59
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index 826b14de7dbb..a366c05a239d 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -4321,11 +4321,6 @@ static int ip6_route_info_append(struct net *net,
4321 if (!nh) 4321 if (!nh)
4322 return -ENOMEM; 4322 return -ENOMEM;
4323 nh->fib6_info = rt; 4323 nh->fib6_info = rt;
4324 err = ip6_convert_metrics(net, rt, r_cfg);
4325 if (err) {
4326 kfree(nh);
4327 return err;
4328 }
4329 memcpy(&nh->r_cfg, r_cfg, sizeof(*r_cfg)); 4324 memcpy(&nh->r_cfg, r_cfg, sizeof(*r_cfg));
4330 list_add_tail(&nh->next, rt6_nh_list); 4325 list_add_tail(&nh->next, rt6_nh_list);
4331 4326
diff --git a/net/ipv6/xfrm6_input.c b/net/ipv6/xfrm6_input.c
index 841f4a07438e..9ef490dddcea 100644
--- a/net/ipv6/xfrm6_input.c
+++ b/net/ipv6/xfrm6_input.c
@@ -59,6 +59,7 @@ int xfrm6_transport_finish(struct sk_buff *skb, int async)
59 59
60 if (xo && (xo->flags & XFRM_GRO)) { 60 if (xo && (xo->flags & XFRM_GRO)) {
61 skb_mac_header_rebuild(skb); 61 skb_mac_header_rebuild(skb);
62 skb_reset_transport_header(skb);
62 return -1; 63 return -1;
63 } 64 }
64 65
diff --git a/net/ipv6/xfrm6_mode_transport.c b/net/ipv6/xfrm6_mode_transport.c
index 9ad07a91708e..3c29da5defe6 100644
--- a/net/ipv6/xfrm6_mode_transport.c
+++ b/net/ipv6/xfrm6_mode_transport.c
@@ -51,7 +51,6 @@ static int xfrm6_transport_output(struct xfrm_state *x, struct sk_buff *skb)
51static int xfrm6_transport_input(struct xfrm_state *x, struct sk_buff *skb) 51static int xfrm6_transport_input(struct xfrm_state *x, struct sk_buff *skb)
52{ 52{
53 int ihl = skb->data - skb_transport_header(skb); 53 int ihl = skb->data - skb_transport_header(skb);
54 struct xfrm_offload *xo = xfrm_offload(skb);
55 54
56 if (skb->transport_header != skb->network_header) { 55 if (skb->transport_header != skb->network_header) {
57 memmove(skb_transport_header(skb), 56 memmove(skb_transport_header(skb),
@@ -60,8 +59,7 @@ static int xfrm6_transport_input(struct xfrm_state *x, struct sk_buff *skb)
60 } 59 }
61 ipv6_hdr(skb)->payload_len = htons(skb->len + ihl - 60 ipv6_hdr(skb)->payload_len = htons(skb->len + ihl -
62 sizeof(struct ipv6hdr)); 61 sizeof(struct ipv6hdr));
63 if (!xo || !(xo->flags & XFRM_GRO)) 62 skb_reset_transport_header(skb);
64 skb_reset_transport_header(skb);
65 return 0; 63 return 0;
66} 64}
67 65
diff --git a/net/ipv6/xfrm6_output.c b/net/ipv6/xfrm6_output.c
index 5959ce9620eb..6a74080005cf 100644
--- a/net/ipv6/xfrm6_output.c
+++ b/net/ipv6/xfrm6_output.c
@@ -170,9 +170,11 @@ static int __xfrm6_output(struct net *net, struct sock *sk, struct sk_buff *skb)
170 170
171 if (toobig && xfrm6_local_dontfrag(skb)) { 171 if (toobig && xfrm6_local_dontfrag(skb)) {
172 xfrm6_local_rxpmtu(skb, mtu); 172 xfrm6_local_rxpmtu(skb, mtu);
173 kfree_skb(skb);
173 return -EMSGSIZE; 174 return -EMSGSIZE;
174 } else if (!skb->ignore_df && toobig && skb->sk) { 175 } else if (!skb->ignore_df && toobig && skb->sk) {
175 xfrm_local_error(skb, mtu); 176 xfrm_local_error(skb, mtu);
177 kfree_skb(skb);
176 return -EMSGSIZE; 178 return -EMSGSIZE;
177 } 179 }
178 180
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
index 5e6cf2cee965..5836ddeac9e3 100644
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
@@ -1756,7 +1756,8 @@ int ieee80211_if_add(struct ieee80211_local *local, const char *name,
1756 1756
1757 if (local->ops->wake_tx_queue && 1757 if (local->ops->wake_tx_queue &&
1758 type != NL80211_IFTYPE_AP_VLAN && 1758 type != NL80211_IFTYPE_AP_VLAN &&
1759 type != NL80211_IFTYPE_MONITOR) 1759 (type != NL80211_IFTYPE_MONITOR ||
1760 (params->flags & MONITOR_FLAG_ACTIVE)))
1760 txq_size += sizeof(struct txq_info) + 1761 txq_size += sizeof(struct txq_info) +
1761 local->hw.txq_data_size; 1762 local->hw.txq_data_size;
1762 1763
diff --git a/net/mac80211/mesh.h b/net/mac80211/mesh.h
index ee56f18cad3f..21526630bf65 100644
--- a/net/mac80211/mesh.h
+++ b/net/mac80211/mesh.h
@@ -217,7 +217,8 @@ void mesh_rmc_free(struct ieee80211_sub_if_data *sdata);
217int mesh_rmc_init(struct ieee80211_sub_if_data *sdata); 217int mesh_rmc_init(struct ieee80211_sub_if_data *sdata);
218void ieee80211s_init(void); 218void ieee80211s_init(void);
219void ieee80211s_update_metric(struct ieee80211_local *local, 219void ieee80211s_update_metric(struct ieee80211_local *local,
220 struct sta_info *sta, struct sk_buff *skb); 220 struct sta_info *sta,
221 struct ieee80211_tx_status *st);
221void ieee80211_mesh_init_sdata(struct ieee80211_sub_if_data *sdata); 222void ieee80211_mesh_init_sdata(struct ieee80211_sub_if_data *sdata);
222void ieee80211_mesh_teardown_sdata(struct ieee80211_sub_if_data *sdata); 223void ieee80211_mesh_teardown_sdata(struct ieee80211_sub_if_data *sdata);
223int ieee80211_start_mesh(struct ieee80211_sub_if_data *sdata); 224int ieee80211_start_mesh(struct ieee80211_sub_if_data *sdata);
diff --git a/net/mac80211/mesh_hwmp.c b/net/mac80211/mesh_hwmp.c
index daf9db3c8f24..6950cd0bf594 100644
--- a/net/mac80211/mesh_hwmp.c
+++ b/net/mac80211/mesh_hwmp.c
@@ -295,15 +295,12 @@ int mesh_path_error_tx(struct ieee80211_sub_if_data *sdata,
295} 295}
296 296
297void ieee80211s_update_metric(struct ieee80211_local *local, 297void ieee80211s_update_metric(struct ieee80211_local *local,
298 struct sta_info *sta, struct sk_buff *skb) 298 struct sta_info *sta,
299 struct ieee80211_tx_status *st)
299{ 300{
300 struct ieee80211_tx_info *txinfo = IEEE80211_SKB_CB(skb); 301 struct ieee80211_tx_info *txinfo = st->info;
301 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
302 int failed; 302 int failed;
303 303
304 if (!ieee80211_is_data(hdr->frame_control))
305 return;
306
307 failed = !(txinfo->flags & IEEE80211_TX_STAT_ACK); 304 failed = !(txinfo->flags & IEEE80211_TX_STAT_ACK);
308 305
309 /* moving average, scaled to 100. 306 /* moving average, scaled to 100.
diff --git a/net/mac80211/status.c b/net/mac80211/status.c
index 9a6d7208bf4f..91d7c0cd1882 100644
--- a/net/mac80211/status.c
+++ b/net/mac80211/status.c
@@ -479,11 +479,6 @@ static void ieee80211_report_ack_skb(struct ieee80211_local *local,
479 if (!skb) 479 if (!skb)
480 return; 480 return;
481 481
482 if (dropped) {
483 dev_kfree_skb_any(skb);
484 return;
485 }
486
487 if (info->flags & IEEE80211_TX_INTFL_NL80211_FRAME_TX) { 482 if (info->flags & IEEE80211_TX_INTFL_NL80211_FRAME_TX) {
488 u64 cookie = IEEE80211_SKB_CB(skb)->ack.cookie; 483 u64 cookie = IEEE80211_SKB_CB(skb)->ack.cookie;
489 struct ieee80211_sub_if_data *sdata; 484 struct ieee80211_sub_if_data *sdata;
@@ -507,6 +502,8 @@ static void ieee80211_report_ack_skb(struct ieee80211_local *local,
507 rcu_read_unlock(); 502 rcu_read_unlock();
508 503
509 dev_kfree_skb_any(skb); 504 dev_kfree_skb_any(skb);
505 } else if (dropped) {
506 dev_kfree_skb_any(skb);
510 } else { 507 } else {
511 /* consumes skb */ 508 /* consumes skb */
512 skb_complete_wifi_ack(skb, acked); 509 skb_complete_wifi_ack(skb, acked);
@@ -811,7 +808,7 @@ static void __ieee80211_tx_status(struct ieee80211_hw *hw,
811 808
812 rate_control_tx_status(local, sband, status); 809 rate_control_tx_status(local, sband, status);
813 if (ieee80211_vif_is_mesh(&sta->sdata->vif)) 810 if (ieee80211_vif_is_mesh(&sta->sdata->vif))
814 ieee80211s_update_metric(local, sta, skb); 811 ieee80211s_update_metric(local, sta, status);
815 812
816 if (!(info->flags & IEEE80211_TX_CTL_INJECTED) && acked) 813 if (!(info->flags & IEEE80211_TX_CTL_INJECTED) && acked)
817 ieee80211_frame_acked(sta, skb); 814 ieee80211_frame_acked(sta, skb);
@@ -972,6 +969,8 @@ void ieee80211_tx_status_ext(struct ieee80211_hw *hw,
972 } 969 }
973 970
974 rate_control_tx_status(local, sband, status); 971 rate_control_tx_status(local, sband, status);
972 if (ieee80211_vif_is_mesh(&sta->sdata->vif))
973 ieee80211s_update_metric(local, sta, status);
975 } 974 }
976 975
977 if (acked || noack_success) { 976 if (acked || noack_success) {
diff --git a/net/mac80211/tdls.c b/net/mac80211/tdls.c
index 5cd5e6e5834e..6c647f425e05 100644
--- a/net/mac80211/tdls.c
+++ b/net/mac80211/tdls.c
@@ -16,6 +16,7 @@
16#include "ieee80211_i.h" 16#include "ieee80211_i.h"
17#include "driver-ops.h" 17#include "driver-ops.h"
18#include "rate.h" 18#include "rate.h"
19#include "wme.h"
19 20
20/* give usermode some time for retries in setting up the TDLS session */ 21/* give usermode some time for retries in setting up the TDLS session */
21#define TDLS_PEER_SETUP_TIMEOUT (15 * HZ) 22#define TDLS_PEER_SETUP_TIMEOUT (15 * HZ)
@@ -1010,14 +1011,13 @@ ieee80211_tdls_prep_mgmt_packet(struct wiphy *wiphy, struct net_device *dev,
1010 switch (action_code) { 1011 switch (action_code) {
1011 case WLAN_TDLS_SETUP_REQUEST: 1012 case WLAN_TDLS_SETUP_REQUEST:
1012 case WLAN_TDLS_SETUP_RESPONSE: 1013 case WLAN_TDLS_SETUP_RESPONSE:
1013 skb_set_queue_mapping(skb, IEEE80211_AC_BK); 1014 skb->priority = 256 + 2;
1014 skb->priority = 2;
1015 break; 1015 break;
1016 default: 1016 default:
1017 skb_set_queue_mapping(skb, IEEE80211_AC_VI); 1017 skb->priority = 256 + 5;
1018 skb->priority = 5;
1019 break; 1018 break;
1020 } 1019 }
1020 skb_set_queue_mapping(skb, ieee80211_select_queue(sdata, skb));
1021 1021
1022 /* 1022 /*
1023 * Set the WLAN_TDLS_TEARDOWN flag to indicate a teardown in progress. 1023 * Set the WLAN_TDLS_TEARDOWN flag to indicate a teardown in progress.
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index f353d9db54bc..25ba24bef8f5 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -214,6 +214,7 @@ ieee80211_tx_h_dynamic_ps(struct ieee80211_tx_data *tx)
214{ 214{
215 struct ieee80211_local *local = tx->local; 215 struct ieee80211_local *local = tx->local;
216 struct ieee80211_if_managed *ifmgd; 216 struct ieee80211_if_managed *ifmgd;
217 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb);
217 218
218 /* driver doesn't support power save */ 219 /* driver doesn't support power save */
219 if (!ieee80211_hw_check(&local->hw, SUPPORTS_PS)) 220 if (!ieee80211_hw_check(&local->hw, SUPPORTS_PS))
@@ -242,6 +243,9 @@ ieee80211_tx_h_dynamic_ps(struct ieee80211_tx_data *tx)
242 if (tx->sdata->vif.type != NL80211_IFTYPE_STATION) 243 if (tx->sdata->vif.type != NL80211_IFTYPE_STATION)
243 return TX_CONTINUE; 244 return TX_CONTINUE;
244 245
246 if (unlikely(info->flags & IEEE80211_TX_INTFL_OFFCHAN_TX_OK))
247 return TX_CONTINUE;
248
245 ifmgd = &tx->sdata->u.mgd; 249 ifmgd = &tx->sdata->u.mgd;
246 250
247 /* 251 /*
@@ -1890,7 +1894,7 @@ static bool ieee80211_tx(struct ieee80211_sub_if_data *sdata,
1890 sdata->vif.hw_queue[skb_get_queue_mapping(skb)]; 1894 sdata->vif.hw_queue[skb_get_queue_mapping(skb)];
1891 1895
1892 if (invoke_tx_handlers_early(&tx)) 1896 if (invoke_tx_handlers_early(&tx))
1893 return false; 1897 return true;
1894 1898
1895 if (ieee80211_queue_skb(local, sdata, tx.sta, tx.skb)) 1899 if (ieee80211_queue_skb(local, sdata, tx.sta, tx.skb))
1896 return true; 1900 return true;
diff --git a/net/netfilter/nf_conntrack_proto_tcp.c b/net/netfilter/nf_conntrack_proto_tcp.c
index b4bdf9eda7b7..247b89784a6f 100644
--- a/net/netfilter/nf_conntrack_proto_tcp.c
+++ b/net/netfilter/nf_conntrack_proto_tcp.c
@@ -1213,8 +1213,8 @@ static const struct nla_policy tcp_nla_policy[CTA_PROTOINFO_TCP_MAX+1] = {
1213#define TCP_NLATTR_SIZE ( \ 1213#define TCP_NLATTR_SIZE ( \
1214 NLA_ALIGN(NLA_HDRLEN + 1) + \ 1214 NLA_ALIGN(NLA_HDRLEN + 1) + \
1215 NLA_ALIGN(NLA_HDRLEN + 1) + \ 1215 NLA_ALIGN(NLA_HDRLEN + 1) + \
1216 NLA_ALIGN(NLA_HDRLEN + sizeof(sizeof(struct nf_ct_tcp_flags))) + \ 1216 NLA_ALIGN(NLA_HDRLEN + sizeof(struct nf_ct_tcp_flags)) + \
1217 NLA_ALIGN(NLA_HDRLEN + sizeof(sizeof(struct nf_ct_tcp_flags)))) 1217 NLA_ALIGN(NLA_HDRLEN + sizeof(struct nf_ct_tcp_flags)))
1218 1218
1219static int nlattr_to_tcp(struct nlattr *cda[], struct nf_conn *ct) 1219static int nlattr_to_tcp(struct nlattr *cda[], struct nf_conn *ct)
1220{ 1220{
diff --git a/net/netfilter/nft_osf.c b/net/netfilter/nft_osf.c
index 5af74b37f423..a35fb59ace73 100644
--- a/net/netfilter/nft_osf.c
+++ b/net/netfilter/nft_osf.c
@@ -49,7 +49,7 @@ static int nft_osf_init(const struct nft_ctx *ctx,
49 49
50 priv->dreg = nft_parse_register(tb[NFTA_OSF_DREG]); 50 priv->dreg = nft_parse_register(tb[NFTA_OSF_DREG]);
51 err = nft_validate_register_store(ctx, priv->dreg, NULL, 51 err = nft_validate_register_store(ctx, priv->dreg, NULL,
52 NFTA_DATA_VALUE, NFT_OSF_MAXGENRELEN); 52 NFT_DATA_VALUE, NFT_OSF_MAXGENRELEN);
53 if (err < 0) 53 if (err < 0)
54 return err; 54 return err;
55 55
diff --git a/net/netfilter/nft_set_rbtree.c b/net/netfilter/nft_set_rbtree.c
index 55e2d9215c0d..0e5ec126f6ad 100644
--- a/net/netfilter/nft_set_rbtree.c
+++ b/net/netfilter/nft_set_rbtree.c
@@ -355,12 +355,11 @@ cont:
355 355
356static void nft_rbtree_gc(struct work_struct *work) 356static void nft_rbtree_gc(struct work_struct *work)
357{ 357{
358 struct nft_rbtree_elem *rbe, *rbe_end = NULL, *rbe_prev = NULL;
358 struct nft_set_gc_batch *gcb = NULL; 359 struct nft_set_gc_batch *gcb = NULL;
359 struct rb_node *node, *prev = NULL;
360 struct nft_rbtree_elem *rbe;
361 struct nft_rbtree *priv; 360 struct nft_rbtree *priv;
361 struct rb_node *node;
362 struct nft_set *set; 362 struct nft_set *set;
363 int i;
364 363
365 priv = container_of(work, struct nft_rbtree, gc_work.work); 364 priv = container_of(work, struct nft_rbtree, gc_work.work);
366 set = nft_set_container_of(priv); 365 set = nft_set_container_of(priv);
@@ -371,7 +370,7 @@ static void nft_rbtree_gc(struct work_struct *work)
371 rbe = rb_entry(node, struct nft_rbtree_elem, node); 370 rbe = rb_entry(node, struct nft_rbtree_elem, node);
372 371
373 if (nft_rbtree_interval_end(rbe)) { 372 if (nft_rbtree_interval_end(rbe)) {
374 prev = node; 373 rbe_end = rbe;
375 continue; 374 continue;
376 } 375 }
377 if (!nft_set_elem_expired(&rbe->ext)) 376 if (!nft_set_elem_expired(&rbe->ext))
@@ -379,29 +378,30 @@ static void nft_rbtree_gc(struct work_struct *work)
379 if (nft_set_elem_mark_busy(&rbe->ext)) 378 if (nft_set_elem_mark_busy(&rbe->ext))
380 continue; 379 continue;
381 380
381 if (rbe_prev) {
382 rb_erase(&rbe_prev->node, &priv->root);
383 rbe_prev = NULL;
384 }
382 gcb = nft_set_gc_batch_check(set, gcb, GFP_ATOMIC); 385 gcb = nft_set_gc_batch_check(set, gcb, GFP_ATOMIC);
383 if (!gcb) 386 if (!gcb)
384 break; 387 break;
385 388
386 atomic_dec(&set->nelems); 389 atomic_dec(&set->nelems);
387 nft_set_gc_batch_add(gcb, rbe); 390 nft_set_gc_batch_add(gcb, rbe);
391 rbe_prev = rbe;
388 392
389 if (prev) { 393 if (rbe_end) {
390 rbe = rb_entry(prev, struct nft_rbtree_elem, node);
391 atomic_dec(&set->nelems); 394 atomic_dec(&set->nelems);
392 nft_set_gc_batch_add(gcb, rbe); 395 nft_set_gc_batch_add(gcb, rbe_end);
393 prev = NULL; 396 rb_erase(&rbe_end->node, &priv->root);
397 rbe_end = NULL;
394 } 398 }
395 node = rb_next(node); 399 node = rb_next(node);
396 if (!node) 400 if (!node)
397 break; 401 break;
398 } 402 }
399 if (gcb) { 403 if (rbe_prev)
400 for (i = 0; i < gcb->head.cnt; i++) { 404 rb_erase(&rbe_prev->node, &priv->root);
401 rbe = gcb->elems[i];
402 rb_erase(&rbe->node, &priv->root);
403 }
404 }
405 write_seqcount_end(&priv->count); 405 write_seqcount_end(&priv->count);
406 write_unlock_bh(&priv->lock); 406 write_unlock_bh(&priv->lock);
407 407
diff --git a/net/netfilter/xt_socket.c b/net/netfilter/xt_socket.c
index 0472f3472842..ada144e5645b 100644
--- a/net/netfilter/xt_socket.c
+++ b/net/netfilter/xt_socket.c
@@ -56,7 +56,7 @@ socket_match(const struct sk_buff *skb, struct xt_action_param *par,
56 struct sk_buff *pskb = (struct sk_buff *)skb; 56 struct sk_buff *pskb = (struct sk_buff *)skb;
57 struct sock *sk = skb->sk; 57 struct sock *sk = skb->sk;
58 58
59 if (!net_eq(xt_net(par), sock_net(sk))) 59 if (sk && !net_eq(xt_net(par), sock_net(sk)))
60 sk = NULL; 60 sk = NULL;
61 61
62 if (!sk) 62 if (!sk)
@@ -117,7 +117,7 @@ socket_mt6_v1_v2_v3(const struct sk_buff *skb, struct xt_action_param *par)
117 struct sk_buff *pskb = (struct sk_buff *)skb; 117 struct sk_buff *pskb = (struct sk_buff *)skb;
118 struct sock *sk = skb->sk; 118 struct sock *sk = skb->sk;
119 119
120 if (!net_eq(xt_net(par), sock_net(sk))) 120 if (sk && !net_eq(xt_net(par), sock_net(sk)))
121 sk = NULL; 121 sk = NULL;
122 122
123 if (!sk) 123 if (!sk)
diff --git a/net/openvswitch/conntrack.c b/net/openvswitch/conntrack.c
index 86a75105af1a..0aeb34c6389d 100644
--- a/net/openvswitch/conntrack.c
+++ b/net/openvswitch/conntrack.c
@@ -1624,10 +1624,6 @@ int ovs_ct_copy_action(struct net *net, const struct nlattr *attr,
1624 OVS_NLERR(log, "Failed to allocate conntrack template"); 1624 OVS_NLERR(log, "Failed to allocate conntrack template");
1625 return -ENOMEM; 1625 return -ENOMEM;
1626 } 1626 }
1627
1628 __set_bit(IPS_CONFIRMED_BIT, &ct_info.ct->status);
1629 nf_conntrack_get(&ct_info.ct->ct_general);
1630
1631 if (helper) { 1627 if (helper) {
1632 err = ovs_ct_add_helper(&ct_info, helper, key, log); 1628 err = ovs_ct_add_helper(&ct_info, helper, key, log);
1633 if (err) 1629 if (err)
@@ -1639,6 +1635,8 @@ int ovs_ct_copy_action(struct net *net, const struct nlattr *attr,
1639 if (err) 1635 if (err)
1640 goto err_free_ct; 1636 goto err_free_ct;
1641 1637
1638 __set_bit(IPS_CONFIRMED_BIT, &ct_info.ct->status);
1639 nf_conntrack_get(&ct_info.ct->ct_general);
1642 return 0; 1640 return 0;
1643err_free_ct: 1641err_free_ct:
1644 __ovs_ct_free_action(&ct_info); 1642 __ovs_ct_free_action(&ct_info);
diff --git a/net/rxrpc/ar-internal.h b/net/rxrpc/ar-internal.h
index c97558710421..ef9554131434 100644
--- a/net/rxrpc/ar-internal.h
+++ b/net/rxrpc/ar-internal.h
@@ -40,17 +40,12 @@ struct rxrpc_crypt {
40struct rxrpc_connection; 40struct rxrpc_connection;
41 41
42/* 42/*
43 * Mark applied to socket buffers. 43 * Mark applied to socket buffers in skb->mark. skb->priority is used
44 * to pass supplementary information.
44 */ 45 */
45enum rxrpc_skb_mark { 46enum rxrpc_skb_mark {
46 RXRPC_SKB_MARK_DATA, /* data message */ 47 RXRPC_SKB_MARK_REJECT_BUSY, /* Reject with BUSY */
47 RXRPC_SKB_MARK_FINAL_ACK, /* final ACK received message */ 48 RXRPC_SKB_MARK_REJECT_ABORT, /* Reject with ABORT (code in skb->priority) */
48 RXRPC_SKB_MARK_BUSY, /* server busy message */
49 RXRPC_SKB_MARK_REMOTE_ABORT, /* remote abort message */
50 RXRPC_SKB_MARK_LOCAL_ABORT, /* local abort message */
51 RXRPC_SKB_MARK_NET_ERROR, /* network error message */
52 RXRPC_SKB_MARK_LOCAL_ERROR, /* local error message */
53 RXRPC_SKB_MARK_NEW_CALL, /* local error message */
54}; 49};
55 50
56/* 51/*
@@ -293,7 +288,6 @@ struct rxrpc_peer {
293 struct hlist_node hash_link; 288 struct hlist_node hash_link;
294 struct rxrpc_local *local; 289 struct rxrpc_local *local;
295 struct hlist_head error_targets; /* targets for net error distribution */ 290 struct hlist_head error_targets; /* targets for net error distribution */
296 struct work_struct error_distributor;
297 struct rb_root service_conns; /* Service connections */ 291 struct rb_root service_conns; /* Service connections */
298 struct list_head keepalive_link; /* Link in net->peer_keepalive[] */ 292 struct list_head keepalive_link; /* Link in net->peer_keepalive[] */
299 time64_t last_tx_at; /* Last time packet sent here */ 293 time64_t last_tx_at; /* Last time packet sent here */
@@ -304,8 +298,6 @@ struct rxrpc_peer {
304 unsigned int maxdata; /* data size (MTU - hdrsize) */ 298 unsigned int maxdata; /* data size (MTU - hdrsize) */
305 unsigned short hdrsize; /* header size (IP + UDP + RxRPC) */ 299 unsigned short hdrsize; /* header size (IP + UDP + RxRPC) */
306 int debug_id; /* debug ID for printks */ 300 int debug_id; /* debug ID for printks */
307 int error_report; /* Net (+0) or local (+1000000) to distribute */
308#define RXRPC_LOCAL_ERROR_OFFSET 1000000
309 struct sockaddr_rxrpc srx; /* remote address */ 301 struct sockaddr_rxrpc srx; /* remote address */
310 302
311 /* calculated RTT cache */ 303 /* calculated RTT cache */
@@ -463,6 +455,16 @@ struct rxrpc_connection {
463 u8 out_clientflag; /* RXRPC_CLIENT_INITIATED if we are client */ 455 u8 out_clientflag; /* RXRPC_CLIENT_INITIATED if we are client */
464}; 456};
465 457
458static inline bool rxrpc_to_server(const struct rxrpc_skb_priv *sp)
459{
460 return sp->hdr.flags & RXRPC_CLIENT_INITIATED;
461}
462
463static inline bool rxrpc_to_client(const struct rxrpc_skb_priv *sp)
464{
465 return !rxrpc_to_server(sp);
466}
467
466/* 468/*
467 * Flags in call->flags. 469 * Flags in call->flags.
468 */ 470 */
@@ -717,6 +719,8 @@ extern struct workqueue_struct *rxrpc_workqueue;
717int rxrpc_service_prealloc(struct rxrpc_sock *, gfp_t); 719int rxrpc_service_prealloc(struct rxrpc_sock *, gfp_t);
718void rxrpc_discard_prealloc(struct rxrpc_sock *); 720void rxrpc_discard_prealloc(struct rxrpc_sock *);
719struct rxrpc_call *rxrpc_new_incoming_call(struct rxrpc_local *, 721struct rxrpc_call *rxrpc_new_incoming_call(struct rxrpc_local *,
722 struct rxrpc_sock *,
723 struct rxrpc_peer *,
720 struct rxrpc_connection *, 724 struct rxrpc_connection *,
721 struct sk_buff *); 725 struct sk_buff *);
722void rxrpc_accept_incoming_calls(struct rxrpc_local *); 726void rxrpc_accept_incoming_calls(struct rxrpc_local *);
@@ -908,7 +912,8 @@ extern unsigned int rxrpc_closed_conn_expiry;
908 912
909struct rxrpc_connection *rxrpc_alloc_connection(gfp_t); 913struct rxrpc_connection *rxrpc_alloc_connection(gfp_t);
910struct rxrpc_connection *rxrpc_find_connection_rcu(struct rxrpc_local *, 914struct rxrpc_connection *rxrpc_find_connection_rcu(struct rxrpc_local *,
911 struct sk_buff *); 915 struct sk_buff *,
916 struct rxrpc_peer **);
912void __rxrpc_disconnect_call(struct rxrpc_connection *, struct rxrpc_call *); 917void __rxrpc_disconnect_call(struct rxrpc_connection *, struct rxrpc_call *);
913void rxrpc_disconnect_call(struct rxrpc_call *); 918void rxrpc_disconnect_call(struct rxrpc_call *);
914void rxrpc_kill_connection(struct rxrpc_connection *); 919void rxrpc_kill_connection(struct rxrpc_connection *);
@@ -1031,7 +1036,6 @@ void rxrpc_send_keepalive(struct rxrpc_peer *);
1031 * peer_event.c 1036 * peer_event.c
1032 */ 1037 */
1033void rxrpc_error_report(struct sock *); 1038void rxrpc_error_report(struct sock *);
1034void rxrpc_peer_error_distributor(struct work_struct *);
1035void rxrpc_peer_add_rtt(struct rxrpc_call *, enum rxrpc_rtt_rx_trace, 1039void rxrpc_peer_add_rtt(struct rxrpc_call *, enum rxrpc_rtt_rx_trace,
1036 rxrpc_serial_t, rxrpc_serial_t, ktime_t, ktime_t); 1040 rxrpc_serial_t, rxrpc_serial_t, ktime_t, ktime_t);
1037void rxrpc_peer_keepalive_worker(struct work_struct *); 1041void rxrpc_peer_keepalive_worker(struct work_struct *);
@@ -1044,13 +1048,11 @@ struct rxrpc_peer *rxrpc_lookup_peer_rcu(struct rxrpc_local *,
1044struct rxrpc_peer *rxrpc_lookup_peer(struct rxrpc_local *, 1048struct rxrpc_peer *rxrpc_lookup_peer(struct rxrpc_local *,
1045 struct sockaddr_rxrpc *, gfp_t); 1049 struct sockaddr_rxrpc *, gfp_t);
1046struct rxrpc_peer *rxrpc_alloc_peer(struct rxrpc_local *, gfp_t); 1050struct rxrpc_peer *rxrpc_alloc_peer(struct rxrpc_local *, gfp_t);
1047struct rxrpc_peer *rxrpc_lookup_incoming_peer(struct rxrpc_local *, 1051void rxrpc_new_incoming_peer(struct rxrpc_local *, struct rxrpc_peer *);
1048 struct rxrpc_peer *);
1049void rxrpc_destroy_all_peers(struct rxrpc_net *); 1052void rxrpc_destroy_all_peers(struct rxrpc_net *);
1050struct rxrpc_peer *rxrpc_get_peer(struct rxrpc_peer *); 1053struct rxrpc_peer *rxrpc_get_peer(struct rxrpc_peer *);
1051struct rxrpc_peer *rxrpc_get_peer_maybe(struct rxrpc_peer *); 1054struct rxrpc_peer *rxrpc_get_peer_maybe(struct rxrpc_peer *);
1052void rxrpc_put_peer(struct rxrpc_peer *); 1055void rxrpc_put_peer(struct rxrpc_peer *);
1053void __rxrpc_queue_peer_error(struct rxrpc_peer *);
1054 1056
1055/* 1057/*
1056 * proc.c 1058 * proc.c
diff --git a/net/rxrpc/call_accept.c b/net/rxrpc/call_accept.c
index 9d1e298b784c..9c7f26d06a52 100644
--- a/net/rxrpc/call_accept.c
+++ b/net/rxrpc/call_accept.c
@@ -249,11 +249,11 @@ void rxrpc_discard_prealloc(struct rxrpc_sock *rx)
249 */ 249 */
250static struct rxrpc_call *rxrpc_alloc_incoming_call(struct rxrpc_sock *rx, 250static struct rxrpc_call *rxrpc_alloc_incoming_call(struct rxrpc_sock *rx,
251 struct rxrpc_local *local, 251 struct rxrpc_local *local,
252 struct rxrpc_peer *peer,
252 struct rxrpc_connection *conn, 253 struct rxrpc_connection *conn,
253 struct sk_buff *skb) 254 struct sk_buff *skb)
254{ 255{
255 struct rxrpc_backlog *b = rx->backlog; 256 struct rxrpc_backlog *b = rx->backlog;
256 struct rxrpc_peer *peer, *xpeer;
257 struct rxrpc_call *call; 257 struct rxrpc_call *call;
258 unsigned short call_head, conn_head, peer_head; 258 unsigned short call_head, conn_head, peer_head;
259 unsigned short call_tail, conn_tail, peer_tail; 259 unsigned short call_tail, conn_tail, peer_tail;
@@ -276,21 +276,18 @@ static struct rxrpc_call *rxrpc_alloc_incoming_call(struct rxrpc_sock *rx,
276 return NULL; 276 return NULL;
277 277
278 if (!conn) { 278 if (!conn) {
279 /* No connection. We're going to need a peer to start off 279 if (peer && !rxrpc_get_peer_maybe(peer))
280 * with. If one doesn't yet exist, use a spare from the 280 peer = NULL;
281 * preallocation set. We dump the address into the spare in 281 if (!peer) {
282 * anticipation - and to save on stack space. 282 peer = b->peer_backlog[peer_tail];
283 */ 283 if (rxrpc_extract_addr_from_skb(local, &peer->srx, skb) < 0)
284 xpeer = b->peer_backlog[peer_tail]; 284 return NULL;
285 if (rxrpc_extract_addr_from_skb(local, &xpeer->srx, skb) < 0)
286 return NULL;
287
288 peer = rxrpc_lookup_incoming_peer(local, xpeer);
289 if (peer == xpeer) {
290 b->peer_backlog[peer_tail] = NULL; 285 b->peer_backlog[peer_tail] = NULL;
291 smp_store_release(&b->peer_backlog_tail, 286 smp_store_release(&b->peer_backlog_tail,
292 (peer_tail + 1) & 287 (peer_tail + 1) &
293 (RXRPC_BACKLOG_MAX - 1)); 288 (RXRPC_BACKLOG_MAX - 1));
289
290 rxrpc_new_incoming_peer(local, peer);
294 } 291 }
295 292
296 /* Now allocate and set up the connection */ 293 /* Now allocate and set up the connection */
@@ -335,45 +332,31 @@ static struct rxrpc_call *rxrpc_alloc_incoming_call(struct rxrpc_sock *rx,
335 * The call is returned with the user access mutex held. 332 * The call is returned with the user access mutex held.
336 */ 333 */
337struct rxrpc_call *rxrpc_new_incoming_call(struct rxrpc_local *local, 334struct rxrpc_call *rxrpc_new_incoming_call(struct rxrpc_local *local,
335 struct rxrpc_sock *rx,
336 struct rxrpc_peer *peer,
338 struct rxrpc_connection *conn, 337 struct rxrpc_connection *conn,
339 struct sk_buff *skb) 338 struct sk_buff *skb)
340{ 339{
341 struct rxrpc_skb_priv *sp = rxrpc_skb(skb); 340 struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
342 struct rxrpc_sock *rx;
343 struct rxrpc_call *call; 341 struct rxrpc_call *call;
344 u16 service_id = sp->hdr.serviceId;
345 342
346 _enter(""); 343 _enter("");
347 344
348 /* Get the socket providing the service */
349 rx = rcu_dereference(local->service);
350 if (rx && (service_id == rx->srx.srx_service ||
351 service_id == rx->second_service))
352 goto found_service;
353
354 trace_rxrpc_abort(0, "INV", sp->hdr.cid, sp->hdr.callNumber, sp->hdr.seq,
355 RX_INVALID_OPERATION, EOPNOTSUPP);
356 skb->mark = RXRPC_SKB_MARK_LOCAL_ABORT;
357 skb->priority = RX_INVALID_OPERATION;
358 _leave(" = NULL [service]");
359 return NULL;
360
361found_service:
362 spin_lock(&rx->incoming_lock); 345 spin_lock(&rx->incoming_lock);
363 if (rx->sk.sk_state == RXRPC_SERVER_LISTEN_DISABLED || 346 if (rx->sk.sk_state == RXRPC_SERVER_LISTEN_DISABLED ||
364 rx->sk.sk_state == RXRPC_CLOSE) { 347 rx->sk.sk_state == RXRPC_CLOSE) {
365 trace_rxrpc_abort(0, "CLS", sp->hdr.cid, sp->hdr.callNumber, 348 trace_rxrpc_abort(0, "CLS", sp->hdr.cid, sp->hdr.callNumber,
366 sp->hdr.seq, RX_INVALID_OPERATION, ESHUTDOWN); 349 sp->hdr.seq, RX_INVALID_OPERATION, ESHUTDOWN);
367 skb->mark = RXRPC_SKB_MARK_LOCAL_ABORT; 350 skb->mark = RXRPC_SKB_MARK_REJECT_ABORT;
368 skb->priority = RX_INVALID_OPERATION; 351 skb->priority = RX_INVALID_OPERATION;
369 _leave(" = NULL [close]"); 352 _leave(" = NULL [close]");
370 call = NULL; 353 call = NULL;
371 goto out; 354 goto out;
372 } 355 }
373 356
374 call = rxrpc_alloc_incoming_call(rx, local, conn, skb); 357 call = rxrpc_alloc_incoming_call(rx, local, peer, conn, skb);
375 if (!call) { 358 if (!call) {
376 skb->mark = RXRPC_SKB_MARK_BUSY; 359 skb->mark = RXRPC_SKB_MARK_REJECT_BUSY;
377 _leave(" = NULL [busy]"); 360 _leave(" = NULL [busy]");
378 call = NULL; 361 call = NULL;
379 goto out; 362 goto out;
diff --git a/net/rxrpc/call_object.c b/net/rxrpc/call_object.c
index 9486293fef5c..799f75b6900d 100644
--- a/net/rxrpc/call_object.c
+++ b/net/rxrpc/call_object.c
@@ -400,7 +400,7 @@ void rxrpc_incoming_call(struct rxrpc_sock *rx,
400 rcu_assign_pointer(conn->channels[chan].call, call); 400 rcu_assign_pointer(conn->channels[chan].call, call);
401 401
402 spin_lock(&conn->params.peer->lock); 402 spin_lock(&conn->params.peer->lock);
403 hlist_add_head(&call->error_link, &conn->params.peer->error_targets); 403 hlist_add_head_rcu(&call->error_link, &conn->params.peer->error_targets);
404 spin_unlock(&conn->params.peer->lock); 404 spin_unlock(&conn->params.peer->lock);
405 405
406 _net("CALL incoming %d on CONN %d", call->debug_id, call->conn->debug_id); 406 _net("CALL incoming %d on CONN %d", call->debug_id, call->conn->debug_id);
diff --git a/net/rxrpc/conn_client.c b/net/rxrpc/conn_client.c
index f8f37188a932..8acf74fe24c0 100644
--- a/net/rxrpc/conn_client.c
+++ b/net/rxrpc/conn_client.c
@@ -710,8 +710,8 @@ int rxrpc_connect_call(struct rxrpc_call *call,
710 } 710 }
711 711
712 spin_lock_bh(&call->conn->params.peer->lock); 712 spin_lock_bh(&call->conn->params.peer->lock);
713 hlist_add_head(&call->error_link, 713 hlist_add_head_rcu(&call->error_link,
714 &call->conn->params.peer->error_targets); 714 &call->conn->params.peer->error_targets);
715 spin_unlock_bh(&call->conn->params.peer->lock); 715 spin_unlock_bh(&call->conn->params.peer->lock);
716 716
717out: 717out:
diff --git a/net/rxrpc/conn_object.c b/net/rxrpc/conn_object.c
index 77440a356b14..885dae829f4a 100644
--- a/net/rxrpc/conn_object.c
+++ b/net/rxrpc/conn_object.c
@@ -69,10 +69,14 @@ struct rxrpc_connection *rxrpc_alloc_connection(gfp_t gfp)
69 * If successful, a pointer to the connection is returned, but no ref is taken. 69 * If successful, a pointer to the connection is returned, but no ref is taken.
70 * NULL is returned if there is no match. 70 * NULL is returned if there is no match.
71 * 71 *
72 * When searching for a service call, if we find a peer but no connection, we
73 * return that through *_peer in case we need to create a new service call.
74 *
72 * The caller must be holding the RCU read lock. 75 * The caller must be holding the RCU read lock.
73 */ 76 */
74struct rxrpc_connection *rxrpc_find_connection_rcu(struct rxrpc_local *local, 77struct rxrpc_connection *rxrpc_find_connection_rcu(struct rxrpc_local *local,
75 struct sk_buff *skb) 78 struct sk_buff *skb,
79 struct rxrpc_peer **_peer)
76{ 80{
77 struct rxrpc_connection *conn; 81 struct rxrpc_connection *conn;
78 struct rxrpc_conn_proto k; 82 struct rxrpc_conn_proto k;
@@ -85,9 +89,6 @@ struct rxrpc_connection *rxrpc_find_connection_rcu(struct rxrpc_local *local,
85 if (rxrpc_extract_addr_from_skb(local, &srx, skb) < 0) 89 if (rxrpc_extract_addr_from_skb(local, &srx, skb) < 0)
86 goto not_found; 90 goto not_found;
87 91
88 k.epoch = sp->hdr.epoch;
89 k.cid = sp->hdr.cid & RXRPC_CIDMASK;
90
91 /* We may have to handle mixing IPv4 and IPv6 */ 92 /* We may have to handle mixing IPv4 and IPv6 */
92 if (srx.transport.family != local->srx.transport.family) { 93 if (srx.transport.family != local->srx.transport.family) {
93 pr_warn_ratelimited("AF_RXRPC: Protocol mismatch %u not %u\n", 94 pr_warn_ratelimited("AF_RXRPC: Protocol mismatch %u not %u\n",
@@ -99,7 +100,7 @@ struct rxrpc_connection *rxrpc_find_connection_rcu(struct rxrpc_local *local,
99 k.epoch = sp->hdr.epoch; 100 k.epoch = sp->hdr.epoch;
100 k.cid = sp->hdr.cid & RXRPC_CIDMASK; 101 k.cid = sp->hdr.cid & RXRPC_CIDMASK;
101 102
102 if (sp->hdr.flags & RXRPC_CLIENT_INITIATED) { 103 if (rxrpc_to_server(sp)) {
103 /* We need to look up service connections by the full protocol 104 /* We need to look up service connections by the full protocol
104 * parameter set. We look up the peer first as an intermediate 105 * parameter set. We look up the peer first as an intermediate
105 * step and then the connection from the peer's tree. 106 * step and then the connection from the peer's tree.
@@ -107,6 +108,7 @@ struct rxrpc_connection *rxrpc_find_connection_rcu(struct rxrpc_local *local,
107 peer = rxrpc_lookup_peer_rcu(local, &srx); 108 peer = rxrpc_lookup_peer_rcu(local, &srx);
108 if (!peer) 109 if (!peer)
109 goto not_found; 110 goto not_found;
111 *_peer = peer;
110 conn = rxrpc_find_service_conn_rcu(peer, skb); 112 conn = rxrpc_find_service_conn_rcu(peer, skb);
111 if (!conn || atomic_read(&conn->usage) == 0) 113 if (!conn || atomic_read(&conn->usage) == 0)
112 goto not_found; 114 goto not_found;
@@ -214,7 +216,7 @@ void rxrpc_disconnect_call(struct rxrpc_call *call)
214 call->peer->cong_cwnd = call->cong_cwnd; 216 call->peer->cong_cwnd = call->cong_cwnd;
215 217
216 spin_lock_bh(&conn->params.peer->lock); 218 spin_lock_bh(&conn->params.peer->lock);
217 hlist_del_init(&call->error_link); 219 hlist_del_rcu(&call->error_link);
218 spin_unlock_bh(&conn->params.peer->lock); 220 spin_unlock_bh(&conn->params.peer->lock);
219 221
220 if (rxrpc_is_client_call(call)) 222 if (rxrpc_is_client_call(call))
diff --git a/net/rxrpc/input.c b/net/rxrpc/input.c
index cfdc199c6351..800f5b8a1baa 100644
--- a/net/rxrpc/input.c
+++ b/net/rxrpc/input.c
@@ -622,13 +622,14 @@ static void rxrpc_input_requested_ack(struct rxrpc_call *call,
622 if (!skb) 622 if (!skb)
623 continue; 623 continue;
624 624
625 sent_at = skb->tstamp;
626 smp_rmb(); /* Read timestamp before serial. */
625 sp = rxrpc_skb(skb); 627 sp = rxrpc_skb(skb);
626 if (sp->hdr.serial != orig_serial) 628 if (sp->hdr.serial != orig_serial)
627 continue; 629 continue;
628 smp_rmb();
629 sent_at = skb->tstamp;
630 goto found; 630 goto found;
631 } 631 }
632
632 return; 633 return;
633 634
634found: 635found:
@@ -1124,12 +1125,14 @@ void rxrpc_data_ready(struct sock *udp_sk)
1124{ 1125{
1125 struct rxrpc_connection *conn; 1126 struct rxrpc_connection *conn;
1126 struct rxrpc_channel *chan; 1127 struct rxrpc_channel *chan;
1127 struct rxrpc_call *call; 1128 struct rxrpc_call *call = NULL;
1128 struct rxrpc_skb_priv *sp; 1129 struct rxrpc_skb_priv *sp;
1129 struct rxrpc_local *local = udp_sk->sk_user_data; 1130 struct rxrpc_local *local = udp_sk->sk_user_data;
1131 struct rxrpc_peer *peer = NULL;
1132 struct rxrpc_sock *rx = NULL;
1130 struct sk_buff *skb; 1133 struct sk_buff *skb;
1131 unsigned int channel; 1134 unsigned int channel;
1132 int ret, skew; 1135 int ret, skew = 0;
1133 1136
1134 _enter("%p", udp_sk); 1137 _enter("%p", udp_sk);
1135 1138
@@ -1143,6 +1146,9 @@ void rxrpc_data_ready(struct sock *udp_sk)
1143 return; 1146 return;
1144 } 1147 }
1145 1148
1149 if (skb->tstamp == 0)
1150 skb->tstamp = ktime_get_real();
1151
1146 rxrpc_new_skb(skb, rxrpc_skb_rx_received); 1152 rxrpc_new_skb(skb, rxrpc_skb_rx_received);
1147 1153
1148 _net("recv skb %p", skb); 1154 _net("recv skb %p", skb);
@@ -1177,46 +1183,75 @@ void rxrpc_data_ready(struct sock *udp_sk)
1177 1183
1178 trace_rxrpc_rx_packet(sp); 1184 trace_rxrpc_rx_packet(sp);
1179 1185
1180 _net("Rx RxRPC %s ep=%x call=%x:%x",
1181 sp->hdr.flags & RXRPC_CLIENT_INITIATED ? "ToServer" : "ToClient",
1182 sp->hdr.epoch, sp->hdr.cid, sp->hdr.callNumber);
1183
1184 if (sp->hdr.type >= RXRPC_N_PACKET_TYPES ||
1185 !((RXRPC_SUPPORTED_PACKET_TYPES >> sp->hdr.type) & 1)) {
1186 _proto("Rx Bad Packet Type %u", sp->hdr.type);
1187 goto bad_message;
1188 }
1189
1190 switch (sp->hdr.type) { 1186 switch (sp->hdr.type) {
1191 case RXRPC_PACKET_TYPE_VERSION: 1187 case RXRPC_PACKET_TYPE_VERSION:
1192 if (!(sp->hdr.flags & RXRPC_CLIENT_INITIATED)) 1188 if (rxrpc_to_client(sp))
1193 goto discard; 1189 goto discard;
1194 rxrpc_post_packet_to_local(local, skb); 1190 rxrpc_post_packet_to_local(local, skb);
1195 goto out; 1191 goto out;
1196 1192
1197 case RXRPC_PACKET_TYPE_BUSY: 1193 case RXRPC_PACKET_TYPE_BUSY:
1198 if (sp->hdr.flags & RXRPC_CLIENT_INITIATED) 1194 if (rxrpc_to_server(sp))
1199 goto discard; 1195 goto discard;
1200 /* Fall through */ 1196 /* Fall through */
1197 case RXRPC_PACKET_TYPE_ACK:
1198 case RXRPC_PACKET_TYPE_ACKALL:
1199 if (sp->hdr.callNumber == 0)
1200 goto bad_message;
1201 /* Fall through */
1202 case RXRPC_PACKET_TYPE_ABORT:
1203 break;
1201 1204
1202 case RXRPC_PACKET_TYPE_DATA: 1205 case RXRPC_PACKET_TYPE_DATA:
1203 if (sp->hdr.callNumber == 0) 1206 if (sp->hdr.callNumber == 0 ||
1207 sp->hdr.seq == 0)
1204 goto bad_message; 1208 goto bad_message;
1205 if (sp->hdr.flags & RXRPC_JUMBO_PACKET && 1209 if (sp->hdr.flags & RXRPC_JUMBO_PACKET &&
1206 !rxrpc_validate_jumbo(skb)) 1210 !rxrpc_validate_jumbo(skb))
1207 goto bad_message; 1211 goto bad_message;
1208 break; 1212 break;
1209 1213
1214 case RXRPC_PACKET_TYPE_CHALLENGE:
1215 if (rxrpc_to_server(sp))
1216 goto discard;
1217 break;
1218 case RXRPC_PACKET_TYPE_RESPONSE:
1219 if (rxrpc_to_client(sp))
1220 goto discard;
1221 break;
1222
1210 /* Packet types 9-11 should just be ignored. */ 1223 /* Packet types 9-11 should just be ignored. */
1211 case RXRPC_PACKET_TYPE_PARAMS: 1224 case RXRPC_PACKET_TYPE_PARAMS:
1212 case RXRPC_PACKET_TYPE_10: 1225 case RXRPC_PACKET_TYPE_10:
1213 case RXRPC_PACKET_TYPE_11: 1226 case RXRPC_PACKET_TYPE_11:
1214 goto discard; 1227 goto discard;
1228
1229 default:
1230 _proto("Rx Bad Packet Type %u", sp->hdr.type);
1231 goto bad_message;
1215 } 1232 }
1216 1233
1234 if (sp->hdr.serviceId == 0)
1235 goto bad_message;
1236
1217 rcu_read_lock(); 1237 rcu_read_lock();
1218 1238
1219 conn = rxrpc_find_connection_rcu(local, skb); 1239 if (rxrpc_to_server(sp)) {
1240 /* Weed out packets to services we're not offering. Packets
1241 * that would begin a call are explicitly rejected and the rest
1242 * are just discarded.
1243 */
1244 rx = rcu_dereference(local->service);
1245 if (!rx || (sp->hdr.serviceId != rx->srx.srx_service &&
1246 sp->hdr.serviceId != rx->second_service)) {
1247 if (sp->hdr.type == RXRPC_PACKET_TYPE_DATA &&
1248 sp->hdr.seq == 1)
1249 goto unsupported_service;
1250 goto discard_unlock;
1251 }
1252 }
1253
1254 conn = rxrpc_find_connection_rcu(local, skb, &peer);
1220 if (conn) { 1255 if (conn) {
1221 if (sp->hdr.securityIndex != conn->security_ix) 1256 if (sp->hdr.securityIndex != conn->security_ix)
1222 goto wrong_security; 1257 goto wrong_security;
@@ -1280,7 +1315,7 @@ void rxrpc_data_ready(struct sock *udp_sk)
1280 call = rcu_dereference(chan->call); 1315 call = rcu_dereference(chan->call);
1281 1316
1282 if (sp->hdr.callNumber > chan->call_id) { 1317 if (sp->hdr.callNumber > chan->call_id) {
1283 if (!(sp->hdr.flags & RXRPC_CLIENT_INITIATED)) { 1318 if (rxrpc_to_client(sp)) {
1284 rcu_read_unlock(); 1319 rcu_read_unlock();
1285 goto reject_packet; 1320 goto reject_packet;
1286 } 1321 }
@@ -1297,19 +1332,15 @@ void rxrpc_data_ready(struct sock *udp_sk)
1297 if (!test_bit(RXRPC_CALL_RX_HEARD, &call->flags)) 1332 if (!test_bit(RXRPC_CALL_RX_HEARD, &call->flags))
1298 set_bit(RXRPC_CALL_RX_HEARD, &call->flags); 1333 set_bit(RXRPC_CALL_RX_HEARD, &call->flags);
1299 } 1334 }
1300 } else {
1301 skew = 0;
1302 call = NULL;
1303 } 1335 }
1304 1336
1305 if (!call || atomic_read(&call->usage) == 0) { 1337 if (!call || atomic_read(&call->usage) == 0) {
1306 if (!(sp->hdr.type & RXRPC_CLIENT_INITIATED) || 1338 if (rxrpc_to_client(sp) ||
1307 sp->hdr.callNumber == 0 ||
1308 sp->hdr.type != RXRPC_PACKET_TYPE_DATA) 1339 sp->hdr.type != RXRPC_PACKET_TYPE_DATA)
1309 goto bad_message_unlock; 1340 goto bad_message_unlock;
1310 if (sp->hdr.seq != 1) 1341 if (sp->hdr.seq != 1)
1311 goto discard_unlock; 1342 goto discard_unlock;
1312 call = rxrpc_new_incoming_call(local, conn, skb); 1343 call = rxrpc_new_incoming_call(local, rx, peer, conn, skb);
1313 if (!call) { 1344 if (!call) {
1314 rcu_read_unlock(); 1345 rcu_read_unlock();
1315 goto reject_packet; 1346 goto reject_packet;
@@ -1340,6 +1371,13 @@ wrong_security:
1340 skb->priority = RXKADINCONSISTENCY; 1371 skb->priority = RXKADINCONSISTENCY;
1341 goto post_abort; 1372 goto post_abort;
1342 1373
1374unsupported_service:
1375 rcu_read_unlock();
1376 trace_rxrpc_abort(0, "INV", sp->hdr.cid, sp->hdr.callNumber, sp->hdr.seq,
1377 RX_INVALID_OPERATION, EOPNOTSUPP);
1378 skb->priority = RX_INVALID_OPERATION;
1379 goto post_abort;
1380
1343reupgrade: 1381reupgrade:
1344 rcu_read_unlock(); 1382 rcu_read_unlock();
1345 trace_rxrpc_abort(0, "UPG", sp->hdr.cid, sp->hdr.callNumber, sp->hdr.seq, 1383 trace_rxrpc_abort(0, "UPG", sp->hdr.cid, sp->hdr.callNumber, sp->hdr.seq,
@@ -1354,7 +1392,7 @@ bad_message:
1354protocol_error: 1392protocol_error:
1355 skb->priority = RX_PROTOCOL_ERROR; 1393 skb->priority = RX_PROTOCOL_ERROR;
1356post_abort: 1394post_abort:
1357 skb->mark = RXRPC_SKB_MARK_LOCAL_ABORT; 1395 skb->mark = RXRPC_SKB_MARK_REJECT_ABORT;
1358reject_packet: 1396reject_packet:
1359 trace_rxrpc_rx_done(skb->mark, skb->priority); 1397 trace_rxrpc_rx_done(skb->mark, skb->priority);
1360 rxrpc_reject_packet(local, skb); 1398 rxrpc_reject_packet(local, skb);
diff --git a/net/rxrpc/local_object.c b/net/rxrpc/local_object.c
index 777c3ed4cfc0..94d234e9c685 100644
--- a/net/rxrpc/local_object.c
+++ b/net/rxrpc/local_object.c
@@ -135,10 +135,10 @@ static int rxrpc_open_socket(struct rxrpc_local *local, struct net *net)
135 } 135 }
136 136
137 switch (local->srx.transport.family) { 137 switch (local->srx.transport.family) {
138 case AF_INET: 138 case AF_INET6:
139 /* we want to receive ICMP errors */ 139 /* we want to receive ICMPv6 errors */
140 opt = 1; 140 opt = 1;
141 ret = kernel_setsockopt(local->socket, SOL_IP, IP_RECVERR, 141 ret = kernel_setsockopt(local->socket, SOL_IPV6, IPV6_RECVERR,
142 (char *) &opt, sizeof(opt)); 142 (char *) &opt, sizeof(opt));
143 if (ret < 0) { 143 if (ret < 0) {
144 _debug("setsockopt failed"); 144 _debug("setsockopt failed");
@@ -146,19 +146,22 @@ static int rxrpc_open_socket(struct rxrpc_local *local, struct net *net)
146 } 146 }
147 147
148 /* we want to set the don't fragment bit */ 148 /* we want to set the don't fragment bit */
149 opt = IP_PMTUDISC_DO; 149 opt = IPV6_PMTUDISC_DO;
150 ret = kernel_setsockopt(local->socket, SOL_IP, IP_MTU_DISCOVER, 150 ret = kernel_setsockopt(local->socket, SOL_IPV6, IPV6_MTU_DISCOVER,
151 (char *) &opt, sizeof(opt)); 151 (char *) &opt, sizeof(opt));
152 if (ret < 0) { 152 if (ret < 0) {
153 _debug("setsockopt failed"); 153 _debug("setsockopt failed");
154 goto error; 154 goto error;
155 } 155 }
156 break;
157 156
158 case AF_INET6: 157 /* Fall through and set IPv4 options too otherwise we don't get
158 * errors from IPv4 packets sent through the IPv6 socket.
159 */
160
161 case AF_INET:
159 /* we want to receive ICMP errors */ 162 /* we want to receive ICMP errors */
160 opt = 1; 163 opt = 1;
161 ret = kernel_setsockopt(local->socket, SOL_IPV6, IPV6_RECVERR, 164 ret = kernel_setsockopt(local->socket, SOL_IP, IP_RECVERR,
162 (char *) &opt, sizeof(opt)); 165 (char *) &opt, sizeof(opt));
163 if (ret < 0) { 166 if (ret < 0) {
164 _debug("setsockopt failed"); 167 _debug("setsockopt failed");
@@ -166,13 +169,22 @@ static int rxrpc_open_socket(struct rxrpc_local *local, struct net *net)
166 } 169 }
167 170
168 /* we want to set the don't fragment bit */ 171 /* we want to set the don't fragment bit */
169 opt = IPV6_PMTUDISC_DO; 172 opt = IP_PMTUDISC_DO;
170 ret = kernel_setsockopt(local->socket, SOL_IPV6, IPV6_MTU_DISCOVER, 173 ret = kernel_setsockopt(local->socket, SOL_IP, IP_MTU_DISCOVER,
171 (char *) &opt, sizeof(opt)); 174 (char *) &opt, sizeof(opt));
172 if (ret < 0) { 175 if (ret < 0) {
173 _debug("setsockopt failed"); 176 _debug("setsockopt failed");
174 goto error; 177 goto error;
175 } 178 }
179
180 /* We want receive timestamps. */
181 opt = 1;
182 ret = kernel_setsockopt(local->socket, SOL_SOCKET, SO_TIMESTAMPNS,
183 (char *)&opt, sizeof(opt));
184 if (ret < 0) {
185 _debug("setsockopt failed");
186 goto error;
187 }
176 break; 188 break;
177 189
178 default: 190 default:
diff --git a/net/rxrpc/output.c b/net/rxrpc/output.c
index ccf5de160444..e8fb8922bca8 100644
--- a/net/rxrpc/output.c
+++ b/net/rxrpc/output.c
@@ -124,7 +124,6 @@ int rxrpc_send_ack_packet(struct rxrpc_call *call, bool ping,
124 struct kvec iov[2]; 124 struct kvec iov[2];
125 rxrpc_serial_t serial; 125 rxrpc_serial_t serial;
126 rxrpc_seq_t hard_ack, top; 126 rxrpc_seq_t hard_ack, top;
127 ktime_t now;
128 size_t len, n; 127 size_t len, n;
129 int ret; 128 int ret;
130 u8 reason; 129 u8 reason;
@@ -196,9 +195,7 @@ int rxrpc_send_ack_packet(struct rxrpc_call *call, bool ping,
196 /* We need to stick a time in before we send the packet in case 195 /* We need to stick a time in before we send the packet in case
197 * the reply gets back before kernel_sendmsg() completes - but 196 * the reply gets back before kernel_sendmsg() completes - but
198 * asking UDP to send the packet can take a relatively long 197 * asking UDP to send the packet can take a relatively long
199 * time, so we update the time after, on the assumption that 198 * time.
200 * the packet transmission is more likely to happen towards the
201 * end of the kernel_sendmsg() call.
202 */ 199 */
203 call->ping_time = ktime_get_real(); 200 call->ping_time = ktime_get_real();
204 set_bit(RXRPC_CALL_PINGING, &call->flags); 201 set_bit(RXRPC_CALL_PINGING, &call->flags);
@@ -206,9 +203,6 @@ int rxrpc_send_ack_packet(struct rxrpc_call *call, bool ping,
206 } 203 }
207 204
208 ret = kernel_sendmsg(conn->params.local->socket, &msg, iov, 2, len); 205 ret = kernel_sendmsg(conn->params.local->socket, &msg, iov, 2, len);
209 now = ktime_get_real();
210 if (ping)
211 call->ping_time = now;
212 conn->params.peer->last_tx_at = ktime_get_seconds(); 206 conn->params.peer->last_tx_at = ktime_get_seconds();
213 if (ret < 0) 207 if (ret < 0)
214 trace_rxrpc_tx_fail(call->debug_id, serial, ret, 208 trace_rxrpc_tx_fail(call->debug_id, serial, ret,
@@ -363,8 +357,14 @@ int rxrpc_send_data_packet(struct rxrpc_call *call, struct sk_buff *skb,
363 357
364 /* If our RTT cache needs working on, request an ACK. Also request 358 /* If our RTT cache needs working on, request an ACK. Also request
365 * ACKs if a DATA packet appears to have been lost. 359 * ACKs if a DATA packet appears to have been lost.
360 *
361 * However, we mustn't request an ACK on the last reply packet of a
362 * service call, lest OpenAFS incorrectly send us an ACK with some
363 * soft-ACKs in it and then never follow up with a proper hard ACK.
366 */ 364 */
367 if (!(sp->hdr.flags & RXRPC_LAST_PACKET) && 365 if ((!(sp->hdr.flags & RXRPC_LAST_PACKET) ||
366 rxrpc_to_server(sp)
367 ) &&
368 (test_and_clear_bit(RXRPC_CALL_EV_ACK_LOST, &call->events) || 368 (test_and_clear_bit(RXRPC_CALL_EV_ACK_LOST, &call->events) ||
369 retrans || 369 retrans ||
370 call->cong_mode == RXRPC_CALL_SLOW_START || 370 call->cong_mode == RXRPC_CALL_SLOW_START ||
@@ -390,6 +390,11 @@ int rxrpc_send_data_packet(struct rxrpc_call *call, struct sk_buff *skb,
390 goto send_fragmentable; 390 goto send_fragmentable;
391 391
392 down_read(&conn->params.local->defrag_sem); 392 down_read(&conn->params.local->defrag_sem);
393
394 sp->hdr.serial = serial;
395 smp_wmb(); /* Set serial before timestamp */
396 skb->tstamp = ktime_get_real();
397
393 /* send the packet by UDP 398 /* send the packet by UDP
394 * - returns -EMSGSIZE if UDP would have to fragment the packet 399 * - returns -EMSGSIZE if UDP would have to fragment the packet
395 * to go out of the interface 400 * to go out of the interface
@@ -413,12 +418,8 @@ done:
413 trace_rxrpc_tx_data(call, sp->hdr.seq, serial, whdr.flags, 418 trace_rxrpc_tx_data(call, sp->hdr.seq, serial, whdr.flags,
414 retrans, lost); 419 retrans, lost);
415 if (ret >= 0) { 420 if (ret >= 0) {
416 ktime_t now = ktime_get_real();
417 skb->tstamp = now;
418 smp_wmb();
419 sp->hdr.serial = serial;
420 if (whdr.flags & RXRPC_REQUEST_ACK) { 421 if (whdr.flags & RXRPC_REQUEST_ACK) {
421 call->peer->rtt_last_req = now; 422 call->peer->rtt_last_req = skb->tstamp;
422 trace_rxrpc_rtt_tx(call, rxrpc_rtt_tx_data, serial); 423 trace_rxrpc_rtt_tx(call, rxrpc_rtt_tx_data, serial);
423 if (call->peer->rtt_usage > 1) { 424 if (call->peer->rtt_usage > 1) {
424 unsigned long nowj = jiffies, ack_lost_at; 425 unsigned long nowj = jiffies, ack_lost_at;
@@ -457,6 +458,10 @@ send_fragmentable:
457 458
458 down_write(&conn->params.local->defrag_sem); 459 down_write(&conn->params.local->defrag_sem);
459 460
461 sp->hdr.serial = serial;
462 smp_wmb(); /* Set serial before timestamp */
463 skb->tstamp = ktime_get_real();
464
460 switch (conn->params.local->srx.transport.family) { 465 switch (conn->params.local->srx.transport.family) {
461 case AF_INET: 466 case AF_INET:
462 opt = IP_PMTUDISC_DONT; 467 opt = IP_PMTUDISC_DONT;
@@ -519,7 +524,7 @@ void rxrpc_reject_packets(struct rxrpc_local *local)
519 struct kvec iov[2]; 524 struct kvec iov[2];
520 size_t size; 525 size_t size;
521 __be32 code; 526 __be32 code;
522 int ret; 527 int ret, ioc;
523 528
524 _enter("%d", local->debug_id); 529 _enter("%d", local->debug_id);
525 530
@@ -527,7 +532,6 @@ void rxrpc_reject_packets(struct rxrpc_local *local)
527 iov[0].iov_len = sizeof(whdr); 532 iov[0].iov_len = sizeof(whdr);
528 iov[1].iov_base = &code; 533 iov[1].iov_base = &code;
529 iov[1].iov_len = sizeof(code); 534 iov[1].iov_len = sizeof(code);
530 size = sizeof(whdr) + sizeof(code);
531 535
532 msg.msg_name = &srx.transport; 536 msg.msg_name = &srx.transport;
533 msg.msg_control = NULL; 537 msg.msg_control = NULL;
@@ -535,17 +539,31 @@ void rxrpc_reject_packets(struct rxrpc_local *local)
535 msg.msg_flags = 0; 539 msg.msg_flags = 0;
536 540
537 memset(&whdr, 0, sizeof(whdr)); 541 memset(&whdr, 0, sizeof(whdr));
538 whdr.type = RXRPC_PACKET_TYPE_ABORT;
539 542
540 while ((skb = skb_dequeue(&local->reject_queue))) { 543 while ((skb = skb_dequeue(&local->reject_queue))) {
541 rxrpc_see_skb(skb, rxrpc_skb_rx_seen); 544 rxrpc_see_skb(skb, rxrpc_skb_rx_seen);
542 sp = rxrpc_skb(skb); 545 sp = rxrpc_skb(skb);
543 546
547 switch (skb->mark) {
548 case RXRPC_SKB_MARK_REJECT_BUSY:
549 whdr.type = RXRPC_PACKET_TYPE_BUSY;
550 size = sizeof(whdr);
551 ioc = 1;
552 break;
553 case RXRPC_SKB_MARK_REJECT_ABORT:
554 whdr.type = RXRPC_PACKET_TYPE_ABORT;
555 code = htonl(skb->priority);
556 size = sizeof(whdr) + sizeof(code);
557 ioc = 2;
558 break;
559 default:
560 rxrpc_free_skb(skb, rxrpc_skb_rx_freed);
561 continue;
562 }
563
544 if (rxrpc_extract_addr_from_skb(local, &srx, skb) == 0) { 564 if (rxrpc_extract_addr_from_skb(local, &srx, skb) == 0) {
545 msg.msg_namelen = srx.transport_len; 565 msg.msg_namelen = srx.transport_len;
546 566
547 code = htonl(skb->priority);
548
549 whdr.epoch = htonl(sp->hdr.epoch); 567 whdr.epoch = htonl(sp->hdr.epoch);
550 whdr.cid = htonl(sp->hdr.cid); 568 whdr.cid = htonl(sp->hdr.cid);
551 whdr.callNumber = htonl(sp->hdr.callNumber); 569 whdr.callNumber = htonl(sp->hdr.callNumber);
diff --git a/net/rxrpc/peer_event.c b/net/rxrpc/peer_event.c
index 4f9da2f51c69..f3e6fc670da2 100644
--- a/net/rxrpc/peer_event.c
+++ b/net/rxrpc/peer_event.c
@@ -23,6 +23,8 @@
23#include "ar-internal.h" 23#include "ar-internal.h"
24 24
25static void rxrpc_store_error(struct rxrpc_peer *, struct sock_exterr_skb *); 25static void rxrpc_store_error(struct rxrpc_peer *, struct sock_exterr_skb *);
26static void rxrpc_distribute_error(struct rxrpc_peer *, int,
27 enum rxrpc_call_completion);
26 28
27/* 29/*
28 * Find the peer associated with an ICMP packet. 30 * Find the peer associated with an ICMP packet.
@@ -194,8 +196,6 @@ void rxrpc_error_report(struct sock *sk)
194 rcu_read_unlock(); 196 rcu_read_unlock();
195 rxrpc_free_skb(skb, rxrpc_skb_rx_freed); 197 rxrpc_free_skb(skb, rxrpc_skb_rx_freed);
196 198
197 /* The ref we obtained is passed off to the work item */
198 __rxrpc_queue_peer_error(peer);
199 _leave(""); 199 _leave("");
200} 200}
201 201
@@ -205,6 +205,7 @@ void rxrpc_error_report(struct sock *sk)
205static void rxrpc_store_error(struct rxrpc_peer *peer, 205static void rxrpc_store_error(struct rxrpc_peer *peer,
206 struct sock_exterr_skb *serr) 206 struct sock_exterr_skb *serr)
207{ 207{
208 enum rxrpc_call_completion compl = RXRPC_CALL_NETWORK_ERROR;
208 struct sock_extended_err *ee; 209 struct sock_extended_err *ee;
209 int err; 210 int err;
210 211
@@ -255,7 +256,7 @@ static void rxrpc_store_error(struct rxrpc_peer *peer,
255 case SO_EE_ORIGIN_NONE: 256 case SO_EE_ORIGIN_NONE:
256 case SO_EE_ORIGIN_LOCAL: 257 case SO_EE_ORIGIN_LOCAL:
257 _proto("Rx Received local error { error=%d }", err); 258 _proto("Rx Received local error { error=%d }", err);
258 err += RXRPC_LOCAL_ERROR_OFFSET; 259 compl = RXRPC_CALL_LOCAL_ERROR;
259 break; 260 break;
260 261
261 case SO_EE_ORIGIN_ICMP6: 262 case SO_EE_ORIGIN_ICMP6:
@@ -264,48 +265,23 @@ static void rxrpc_store_error(struct rxrpc_peer *peer,
264 break; 265 break;
265 } 266 }
266 267
267 peer->error_report = err; 268 rxrpc_distribute_error(peer, err, compl);
268} 269}
269 270
270/* 271/*
271 * Distribute an error that occurred on a peer 272 * Distribute an error that occurred on a peer.
272 */ 273 */
273void rxrpc_peer_error_distributor(struct work_struct *work) 274static void rxrpc_distribute_error(struct rxrpc_peer *peer, int error,
275 enum rxrpc_call_completion compl)
274{ 276{
275 struct rxrpc_peer *peer =
276 container_of(work, struct rxrpc_peer, error_distributor);
277 struct rxrpc_call *call; 277 struct rxrpc_call *call;
278 enum rxrpc_call_completion compl;
279 int error;
280
281 _enter("");
282
283 error = READ_ONCE(peer->error_report);
284 if (error < RXRPC_LOCAL_ERROR_OFFSET) {
285 compl = RXRPC_CALL_NETWORK_ERROR;
286 } else {
287 compl = RXRPC_CALL_LOCAL_ERROR;
288 error -= RXRPC_LOCAL_ERROR_OFFSET;
289 }
290 278
291 _debug("ISSUE ERROR %s %d", rxrpc_call_completions[compl], error); 279 hlist_for_each_entry_rcu(call, &peer->error_targets, error_link) {
292
293 spin_lock_bh(&peer->lock);
294
295 while (!hlist_empty(&peer->error_targets)) {
296 call = hlist_entry(peer->error_targets.first,
297 struct rxrpc_call, error_link);
298 hlist_del_init(&call->error_link);
299 rxrpc_see_call(call); 280 rxrpc_see_call(call);
300 281 if (call->state < RXRPC_CALL_COMPLETE &&
301 if (rxrpc_set_call_completion(call, compl, 0, -error)) 282 rxrpc_set_call_completion(call, compl, 0, -error))
302 rxrpc_notify_socket(call); 283 rxrpc_notify_socket(call);
303 } 284 }
304
305 spin_unlock_bh(&peer->lock);
306
307 rxrpc_put_peer(peer);
308 _leave("");
309} 285}
310 286
311/* 287/*
diff --git a/net/rxrpc/peer_object.c b/net/rxrpc/peer_object.c
index 1dc7648e3eff..01a9febfa367 100644
--- a/net/rxrpc/peer_object.c
+++ b/net/rxrpc/peer_object.c
@@ -124,11 +124,9 @@ static struct rxrpc_peer *__rxrpc_lookup_peer_rcu(
124 struct rxrpc_net *rxnet = local->rxnet; 124 struct rxrpc_net *rxnet = local->rxnet;
125 125
126 hash_for_each_possible_rcu(rxnet->peer_hash, peer, hash_link, hash_key) { 126 hash_for_each_possible_rcu(rxnet->peer_hash, peer, hash_link, hash_key) {
127 if (rxrpc_peer_cmp_key(peer, local, srx, hash_key) == 0) { 127 if (rxrpc_peer_cmp_key(peer, local, srx, hash_key) == 0 &&
128 if (atomic_read(&peer->usage) == 0) 128 atomic_read(&peer->usage) > 0)
129 return NULL;
130 return peer; 129 return peer;
131 }
132 } 130 }
133 131
134 return NULL; 132 return NULL;
@@ -222,8 +220,6 @@ struct rxrpc_peer *rxrpc_alloc_peer(struct rxrpc_local *local, gfp_t gfp)
222 atomic_set(&peer->usage, 1); 220 atomic_set(&peer->usage, 1);
223 peer->local = local; 221 peer->local = local;
224 INIT_HLIST_HEAD(&peer->error_targets); 222 INIT_HLIST_HEAD(&peer->error_targets);
225 INIT_WORK(&peer->error_distributor,
226 &rxrpc_peer_error_distributor);
227 peer->service_conns = RB_ROOT; 223 peer->service_conns = RB_ROOT;
228 seqlock_init(&peer->service_conn_lock); 224 seqlock_init(&peer->service_conn_lock);
229 spin_lock_init(&peer->lock); 225 spin_lock_init(&peer->lock);
@@ -299,34 +295,23 @@ static struct rxrpc_peer *rxrpc_create_peer(struct rxrpc_local *local,
299} 295}
300 296
301/* 297/*
302 * Set up a new incoming peer. The address is prestored in the preallocated 298 * Set up a new incoming peer. There shouldn't be any other matching peers
303 * peer. 299 * since we've already done a search in the list from the non-reentrant context
300 * (the data_ready handler) that is the only place we can add new peers.
304 */ 301 */
305struct rxrpc_peer *rxrpc_lookup_incoming_peer(struct rxrpc_local *local, 302void rxrpc_new_incoming_peer(struct rxrpc_local *local, struct rxrpc_peer *peer)
306 struct rxrpc_peer *prealloc)
307{ 303{
308 struct rxrpc_peer *peer;
309 struct rxrpc_net *rxnet = local->rxnet; 304 struct rxrpc_net *rxnet = local->rxnet;
310 unsigned long hash_key; 305 unsigned long hash_key;
311 306
312 hash_key = rxrpc_peer_hash_key(local, &prealloc->srx); 307 hash_key = rxrpc_peer_hash_key(local, &peer->srx);
313 prealloc->local = local; 308 peer->local = local;
314 rxrpc_init_peer(prealloc, hash_key); 309 rxrpc_init_peer(peer, hash_key);
315 310
316 spin_lock(&rxnet->peer_hash_lock); 311 spin_lock(&rxnet->peer_hash_lock);
317 312 hash_add_rcu(rxnet->peer_hash, &peer->hash_link, hash_key);
318 /* Need to check that we aren't racing with someone else */ 313 list_add_tail(&peer->keepalive_link, &rxnet->peer_keepalive_new);
319 peer = __rxrpc_lookup_peer_rcu(local, &prealloc->srx, hash_key);
320 if (peer && !rxrpc_get_peer_maybe(peer))
321 peer = NULL;
322 if (!peer) {
323 peer = prealloc;
324 hash_add_rcu(rxnet->peer_hash, &peer->hash_link, hash_key);
325 list_add_tail(&peer->keepalive_link, &rxnet->peer_keepalive_new);
326 }
327
328 spin_unlock(&rxnet->peer_hash_lock); 314 spin_unlock(&rxnet->peer_hash_lock);
329 return peer;
330} 315}
331 316
332/* 317/*
@@ -416,21 +401,6 @@ struct rxrpc_peer *rxrpc_get_peer_maybe(struct rxrpc_peer *peer)
416} 401}
417 402
418/* 403/*
419 * Queue a peer record. This passes the caller's ref to the workqueue.
420 */
421void __rxrpc_queue_peer_error(struct rxrpc_peer *peer)
422{
423 const void *here = __builtin_return_address(0);
424 int n;
425
426 n = atomic_read(&peer->usage);
427 if (rxrpc_queue_work(&peer->error_distributor))
428 trace_rxrpc_peer(peer, rxrpc_peer_queued_error, n, here);
429 else
430 rxrpc_put_peer(peer);
431}
432
433/*
434 * Discard a peer record. 404 * Discard a peer record.
435 */ 405 */
436static void __rxrpc_put_peer(struct rxrpc_peer *peer) 406static void __rxrpc_put_peer(struct rxrpc_peer *peer)
diff --git a/net/rxrpc/protocol.h b/net/rxrpc/protocol.h
index 93da73bf7098..f9cb83c938f3 100644
--- a/net/rxrpc/protocol.h
+++ b/net/rxrpc/protocol.h
@@ -50,7 +50,6 @@ struct rxrpc_wire_header {
50#define RXRPC_PACKET_TYPE_10 10 /* Ignored */ 50#define RXRPC_PACKET_TYPE_10 10 /* Ignored */
51#define RXRPC_PACKET_TYPE_11 11 /* Ignored */ 51#define RXRPC_PACKET_TYPE_11 11 /* Ignored */
52#define RXRPC_PACKET_TYPE_VERSION 13 /* version string request */ 52#define RXRPC_PACKET_TYPE_VERSION 13 /* version string request */
53#define RXRPC_N_PACKET_TYPES 14 /* number of packet types (incl type 0) */
54 53
55 uint8_t flags; /* packet flags */ 54 uint8_t flags; /* packet flags */
56#define RXRPC_CLIENT_INITIATED 0x01 /* signifies a packet generated by a client */ 55#define RXRPC_CLIENT_INITIATED 0x01 /* signifies a packet generated by a client */
@@ -72,20 +71,6 @@ struct rxrpc_wire_header {
72 71
73} __packed; 72} __packed;
74 73
75#define RXRPC_SUPPORTED_PACKET_TYPES ( \
76 (1 << RXRPC_PACKET_TYPE_DATA) | \
77 (1 << RXRPC_PACKET_TYPE_ACK) | \
78 (1 << RXRPC_PACKET_TYPE_BUSY) | \
79 (1 << RXRPC_PACKET_TYPE_ABORT) | \
80 (1 << RXRPC_PACKET_TYPE_ACKALL) | \
81 (1 << RXRPC_PACKET_TYPE_CHALLENGE) | \
82 (1 << RXRPC_PACKET_TYPE_RESPONSE) | \
83 /*(1 << RXRPC_PACKET_TYPE_DEBUG) | */ \
84 (1 << RXRPC_PACKET_TYPE_PARAMS) | \
85 (1 << RXRPC_PACKET_TYPE_10) | \
86 (1 << RXRPC_PACKET_TYPE_11) | \
87 (1 << RXRPC_PACKET_TYPE_VERSION))
88
89/*****************************************************************************/ 74/*****************************************************************************/
90/* 75/*
91 * jumbo packet secondary header 76 * jumbo packet secondary header
diff --git a/net/sched/act_ipt.c b/net/sched/act_ipt.c
index 23273b5303fd..8525de811616 100644
--- a/net/sched/act_ipt.c
+++ b/net/sched/act_ipt.c
@@ -135,7 +135,7 @@ static int __tcf_ipt_init(struct net *net, unsigned int id, struct nlattr *nla,
135 } 135 }
136 136
137 td = (struct xt_entry_target *)nla_data(tb[TCA_IPT_TARG]); 137 td = (struct xt_entry_target *)nla_data(tb[TCA_IPT_TARG]);
138 if (nla_len(tb[TCA_IPT_TARG]) < td->u.target_size) { 138 if (nla_len(tb[TCA_IPT_TARG]) != td->u.target_size) {
139 if (exists) 139 if (exists)
140 tcf_idr_release(*a, bind); 140 tcf_idr_release(*a, bind);
141 else 141 else
diff --git a/net/sctp/outqueue.c b/net/sctp/outqueue.c
index d74d00b29942..42191ed9902b 100644
--- a/net/sctp/outqueue.c
+++ b/net/sctp/outqueue.c
@@ -1048,7 +1048,7 @@ static void sctp_outq_flush_data(struct sctp_flush_ctx *ctx,
1048 if (!ctx->packet || !ctx->packet->has_cookie_echo) 1048 if (!ctx->packet || !ctx->packet->has_cookie_echo)
1049 return; 1049 return;
1050 1050
1051 /* fallthru */ 1051 /* fall through */
1052 case SCTP_STATE_ESTABLISHED: 1052 case SCTP_STATE_ESTABLISHED:
1053 case SCTP_STATE_SHUTDOWN_PENDING: 1053 case SCTP_STATE_SHUTDOWN_PENDING:
1054 case SCTP_STATE_SHUTDOWN_RECEIVED: 1054 case SCTP_STATE_SHUTDOWN_RECEIVED:
diff --git a/net/tipc/bearer.c b/net/tipc/bearer.c
index 418f03d0be90..645c16052052 100644
--- a/net/tipc/bearer.c
+++ b/net/tipc/bearer.c
@@ -609,16 +609,18 @@ static int tipc_l2_device_event(struct notifier_block *nb, unsigned long evt,
609 609
610 switch (evt) { 610 switch (evt) {
611 case NETDEV_CHANGE: 611 case NETDEV_CHANGE:
612 if (netif_carrier_ok(dev)) 612 if (netif_carrier_ok(dev) && netif_oper_up(dev)) {
613 test_and_set_bit_lock(0, &b->up);
613 break; 614 break;
614 /* else: fall through */ 615 }
615 case NETDEV_UP: 616 /* fall through */
616 test_and_set_bit_lock(0, &b->up);
617 break;
618 case NETDEV_GOING_DOWN: 617 case NETDEV_GOING_DOWN:
619 clear_bit_unlock(0, &b->up); 618 clear_bit_unlock(0, &b->up);
620 tipc_reset_bearer(net, b); 619 tipc_reset_bearer(net, b);
621 break; 620 break;
621 case NETDEV_UP:
622 test_and_set_bit_lock(0, &b->up);
623 break;
622 case NETDEV_CHANGEMTU: 624 case NETDEV_CHANGEMTU:
623 if (tipc_mtu_bad(dev, 0)) { 625 if (tipc_mtu_bad(dev, 0)) {
624 bearer_disable(net, b); 626 bearer_disable(net, b);
diff --git a/net/tipc/link.c b/net/tipc/link.c
index b1f0bee54eac..fb886b525d95 100644
--- a/net/tipc/link.c
+++ b/net/tipc/link.c
@@ -410,6 +410,11 @@ char *tipc_link_name(struct tipc_link *l)
410 return l->name; 410 return l->name;
411} 411}
412 412
413u32 tipc_link_state(struct tipc_link *l)
414{
415 return l->state;
416}
417
413/** 418/**
414 * tipc_link_create - create a new link 419 * tipc_link_create - create a new link
415 * @n: pointer to associated node 420 * @n: pointer to associated node
@@ -841,9 +846,14 @@ void tipc_link_reset(struct tipc_link *l)
841 l->in_session = false; 846 l->in_session = false;
842 l->session++; 847 l->session++;
843 l->mtu = l->advertised_mtu; 848 l->mtu = l->advertised_mtu;
849 spin_lock_bh(&l->wakeupq.lock);
850 spin_lock_bh(&l->inputq->lock);
851 skb_queue_splice_init(&l->wakeupq, l->inputq);
852 spin_unlock_bh(&l->inputq->lock);
853 spin_unlock_bh(&l->wakeupq.lock);
854
844 __skb_queue_purge(&l->transmq); 855 __skb_queue_purge(&l->transmq);
845 __skb_queue_purge(&l->deferdq); 856 __skb_queue_purge(&l->deferdq);
846 skb_queue_splice_init(&l->wakeupq, l->inputq);
847 __skb_queue_purge(&l->backlogq); 857 __skb_queue_purge(&l->backlogq);
848 l->backlog[TIPC_LOW_IMPORTANCE].len = 0; 858 l->backlog[TIPC_LOW_IMPORTANCE].len = 0;
849 l->backlog[TIPC_MEDIUM_IMPORTANCE].len = 0; 859 l->backlog[TIPC_MEDIUM_IMPORTANCE].len = 0;
@@ -1380,6 +1390,36 @@ static void tipc_link_build_proto_msg(struct tipc_link *l, int mtyp, bool probe,
1380 __skb_queue_tail(xmitq, skb); 1390 __skb_queue_tail(xmitq, skb);
1381} 1391}
1382 1392
1393void tipc_link_create_dummy_tnl_msg(struct tipc_link *l,
1394 struct sk_buff_head *xmitq)
1395{
1396 u32 onode = tipc_own_addr(l->net);
1397 struct tipc_msg *hdr, *ihdr;
1398 struct sk_buff_head tnlq;
1399 struct sk_buff *skb;
1400 u32 dnode = l->addr;
1401
1402 skb_queue_head_init(&tnlq);
1403 skb = tipc_msg_create(TUNNEL_PROTOCOL, FAILOVER_MSG,
1404 INT_H_SIZE, BASIC_H_SIZE,
1405 dnode, onode, 0, 0, 0);
1406 if (!skb) {
1407 pr_warn("%sunable to create tunnel packet\n", link_co_err);
1408 return;
1409 }
1410
1411 hdr = buf_msg(skb);
1412 msg_set_msgcnt(hdr, 1);
1413 msg_set_bearer_id(hdr, l->peer_bearer_id);
1414
1415 ihdr = (struct tipc_msg *)msg_data(hdr);
1416 tipc_msg_init(onode, ihdr, TIPC_LOW_IMPORTANCE, TIPC_DIRECT_MSG,
1417 BASIC_H_SIZE, dnode);
1418 msg_set_errcode(ihdr, TIPC_ERR_NO_PORT);
1419 __skb_queue_tail(&tnlq, skb);
1420 tipc_link_xmit(l, &tnlq, xmitq);
1421}
1422
1383/* tipc_link_tnl_prepare(): prepare and return a list of tunnel packets 1423/* tipc_link_tnl_prepare(): prepare and return a list of tunnel packets
1384 * with contents of the link's transmit and backlog queues. 1424 * with contents of the link's transmit and backlog queues.
1385 */ 1425 */
@@ -1476,6 +1516,9 @@ bool tipc_link_validate_msg(struct tipc_link *l, struct tipc_msg *hdr)
1476 return false; 1516 return false;
1477 if (session != curr_session) 1517 if (session != curr_session)
1478 return false; 1518 return false;
1519 /* Extra sanity check */
1520 if (!link_is_up(l) && msg_ack(hdr))
1521 return false;
1479 if (!(l->peer_caps & TIPC_LINK_PROTO_SEQNO)) 1522 if (!(l->peer_caps & TIPC_LINK_PROTO_SEQNO))
1480 return true; 1523 return true;
1481 /* Accept only STATE with new sequence number */ 1524 /* Accept only STATE with new sequence number */
diff --git a/net/tipc/link.h b/net/tipc/link.h
index 7bc494a33fdf..90488c538a4e 100644
--- a/net/tipc/link.h
+++ b/net/tipc/link.h
@@ -88,6 +88,8 @@ bool tipc_link_bc_create(struct net *net, u32 ownnode, u32 peer,
88 struct tipc_link **link); 88 struct tipc_link **link);
89void tipc_link_tnl_prepare(struct tipc_link *l, struct tipc_link *tnl, 89void tipc_link_tnl_prepare(struct tipc_link *l, struct tipc_link *tnl,
90 int mtyp, struct sk_buff_head *xmitq); 90 int mtyp, struct sk_buff_head *xmitq);
91void tipc_link_create_dummy_tnl_msg(struct tipc_link *tnl,
92 struct sk_buff_head *xmitq);
91void tipc_link_build_reset_msg(struct tipc_link *l, struct sk_buff_head *xmitq); 93void tipc_link_build_reset_msg(struct tipc_link *l, struct sk_buff_head *xmitq);
92int tipc_link_fsm_evt(struct tipc_link *l, int evt); 94int tipc_link_fsm_evt(struct tipc_link *l, int evt);
93bool tipc_link_is_up(struct tipc_link *l); 95bool tipc_link_is_up(struct tipc_link *l);
@@ -107,6 +109,7 @@ u16 tipc_link_rcv_nxt(struct tipc_link *l);
107u16 tipc_link_acked(struct tipc_link *l); 109u16 tipc_link_acked(struct tipc_link *l);
108u32 tipc_link_id(struct tipc_link *l); 110u32 tipc_link_id(struct tipc_link *l);
109char *tipc_link_name(struct tipc_link *l); 111char *tipc_link_name(struct tipc_link *l);
112u32 tipc_link_state(struct tipc_link *l);
110char tipc_link_plane(struct tipc_link *l); 113char tipc_link_plane(struct tipc_link *l);
111int tipc_link_prio(struct tipc_link *l); 114int tipc_link_prio(struct tipc_link *l);
112int tipc_link_window(struct tipc_link *l); 115int tipc_link_window(struct tipc_link *l);
diff --git a/net/tipc/node.c b/net/tipc/node.c
index 68014f1b6976..2afc4f8c37a7 100644
--- a/net/tipc/node.c
+++ b/net/tipc/node.c
@@ -111,6 +111,7 @@ struct tipc_node {
111 int action_flags; 111 int action_flags;
112 struct list_head list; 112 struct list_head list;
113 int state; 113 int state;
114 bool failover_sent;
114 u16 sync_point; 115 u16 sync_point;
115 int link_cnt; 116 int link_cnt;
116 u16 working_links; 117 u16 working_links;
@@ -680,6 +681,7 @@ static void __tipc_node_link_up(struct tipc_node *n, int bearer_id,
680 *slot0 = bearer_id; 681 *slot0 = bearer_id;
681 *slot1 = bearer_id; 682 *slot1 = bearer_id;
682 tipc_node_fsm_evt(n, SELF_ESTABL_CONTACT_EVT); 683 tipc_node_fsm_evt(n, SELF_ESTABL_CONTACT_EVT);
684 n->failover_sent = false;
683 n->action_flags |= TIPC_NOTIFY_NODE_UP; 685 n->action_flags |= TIPC_NOTIFY_NODE_UP;
684 tipc_link_set_active(nl, true); 686 tipc_link_set_active(nl, true);
685 tipc_bcast_add_peer(n->net, nl, xmitq); 687 tipc_bcast_add_peer(n->net, nl, xmitq);
@@ -911,6 +913,7 @@ void tipc_node_check_dest(struct net *net, u32 addr,
911 bool reset = true; 913 bool reset = true;
912 char *if_name; 914 char *if_name;
913 unsigned long intv; 915 unsigned long intv;
916 u16 session;
914 917
915 *dupl_addr = false; 918 *dupl_addr = false;
916 *respond = false; 919 *respond = false;
@@ -997,9 +1000,10 @@ void tipc_node_check_dest(struct net *net, u32 addr,
997 goto exit; 1000 goto exit;
998 1001
999 if_name = strchr(b->name, ':') + 1; 1002 if_name = strchr(b->name, ':') + 1;
1003 get_random_bytes(&session, sizeof(u16));
1000 if (!tipc_link_create(net, if_name, b->identity, b->tolerance, 1004 if (!tipc_link_create(net, if_name, b->identity, b->tolerance,
1001 b->net_plane, b->mtu, b->priority, 1005 b->net_plane, b->mtu, b->priority,
1002 b->window, mod(tipc_net(net)->random), 1006 b->window, session,
1003 tipc_own_addr(net), addr, peer_id, 1007 tipc_own_addr(net), addr, peer_id,
1004 n->capabilities, 1008 n->capabilities,
1005 tipc_bc_sndlink(n->net), n->bc_entry.link, 1009 tipc_bc_sndlink(n->net), n->bc_entry.link,
@@ -1615,6 +1619,14 @@ static bool tipc_node_check_state(struct tipc_node *n, struct sk_buff *skb,
1615 tipc_skb_queue_splice_tail_init(tipc_link_inputq(pl), 1619 tipc_skb_queue_splice_tail_init(tipc_link_inputq(pl),
1616 tipc_link_inputq(l)); 1620 tipc_link_inputq(l));
1617 } 1621 }
1622 /* If parallel link was already down, and this happened before
1623 * the tunnel link came up, FAILOVER was never sent. Ensure that
1624 * FAILOVER is sent to get peer out of NODE_FAILINGOVER state.
1625 */
1626 if (n->state != NODE_FAILINGOVER && !n->failover_sent) {
1627 tipc_link_create_dummy_tnl_msg(l, xmitq);
1628 n->failover_sent = true;
1629 }
1618 /* If pkts arrive out of order, use lowest calculated syncpt */ 1630 /* If pkts arrive out of order, use lowest calculated syncpt */
1619 if (less(syncpt, n->sync_point)) 1631 if (less(syncpt, n->sync_point))
1620 n->sync_point = syncpt; 1632 n->sync_point = syncpt;
diff --git a/net/tipc/socket.c b/net/tipc/socket.c
index 3f03ddd0e35b..b6f99b021d09 100644
--- a/net/tipc/socket.c
+++ b/net/tipc/socket.c
@@ -1419,8 +1419,10 @@ static int __tipc_sendstream(struct socket *sock, struct msghdr *m, size_t dlen)
1419 /* Handle implicit connection setup */ 1419 /* Handle implicit connection setup */
1420 if (unlikely(dest)) { 1420 if (unlikely(dest)) {
1421 rc = __tipc_sendmsg(sock, m, dlen); 1421 rc = __tipc_sendmsg(sock, m, dlen);
1422 if (dlen && (dlen == rc)) 1422 if (dlen && dlen == rc) {
1423 tsk->peer_caps = tipc_node_get_capabilities(net, dnode);
1423 tsk->snt_unacked = tsk_inc(tsk, dlen + msg_hdr_sz(hdr)); 1424 tsk->snt_unacked = tsk_inc(tsk, dlen + msg_hdr_sz(hdr));
1425 }
1424 return rc; 1426 return rc;
1425 } 1427 }
1426 1428
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 4b8ec659e797..176edfefcbaa 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -3756,6 +3756,7 @@ static bool ht_rateset_to_mask(struct ieee80211_supported_band *sband,
3756 return false; 3756 return false;
3757 3757
3758 /* check availability */ 3758 /* check availability */
3759 ridx = array_index_nospec(ridx, IEEE80211_HT_MCS_MASK_LEN);
3759 if (sband->ht_cap.mcs.rx_mask[ridx] & rbit) 3760 if (sband->ht_cap.mcs.rx_mask[ridx] & rbit)
3760 mcs[ridx] |= rbit; 3761 mcs[ridx] |= rbit;
3761 else 3762 else
@@ -10230,7 +10231,7 @@ static int cfg80211_cqm_rssi_update(struct cfg80211_registered_device *rdev,
10230 struct wireless_dev *wdev = dev->ieee80211_ptr; 10231 struct wireless_dev *wdev = dev->ieee80211_ptr;
10231 s32 last, low, high; 10232 s32 last, low, high;
10232 u32 hyst; 10233 u32 hyst;
10233 int i, n; 10234 int i, n, low_index;
10234 int err; 10235 int err;
10235 10236
10236 /* RSSI reporting disabled? */ 10237 /* RSSI reporting disabled? */
@@ -10267,10 +10268,19 @@ static int cfg80211_cqm_rssi_update(struct cfg80211_registered_device *rdev,
10267 if (last < wdev->cqm_config->rssi_thresholds[i]) 10268 if (last < wdev->cqm_config->rssi_thresholds[i])
10268 break; 10269 break;
10269 10270
10270 low = i > 0 ? 10271 low_index = i - 1;
10271 (wdev->cqm_config->rssi_thresholds[i - 1] - hyst) : S32_MIN; 10272 if (low_index >= 0) {
10272 high = i < n ? 10273 low_index = array_index_nospec(low_index, n);
10273 (wdev->cqm_config->rssi_thresholds[i] + hyst - 1) : S32_MAX; 10274 low = wdev->cqm_config->rssi_thresholds[low_index] - hyst;
10275 } else {
10276 low = S32_MIN;
10277 }
10278 if (i < n) {
10279 i = array_index_nospec(i, n);
10280 high = wdev->cqm_config->rssi_thresholds[i] + hyst - 1;
10281 } else {
10282 high = S32_MAX;
10283 }
10274 10284
10275 return rdev_set_cqm_rssi_range_config(rdev, dev, low, high); 10285 return rdev_set_cqm_rssi_range_config(rdev, dev, low, high);
10276} 10286}
diff --git a/net/wireless/reg.c b/net/wireless/reg.c
index 2f702adf2912..765dedb12361 100644
--- a/net/wireless/reg.c
+++ b/net/wireless/reg.c
@@ -2867,6 +2867,7 @@ static int regulatory_hint_core(const char *alpha2)
2867 request->alpha2[0] = alpha2[0]; 2867 request->alpha2[0] = alpha2[0];
2868 request->alpha2[1] = alpha2[1]; 2868 request->alpha2[1] = alpha2[1];
2869 request->initiator = NL80211_REGDOM_SET_BY_CORE; 2869 request->initiator = NL80211_REGDOM_SET_BY_CORE;
2870 request->wiphy_idx = WIPHY_IDX_INVALID;
2870 2871
2871 queue_regulatory_request(request); 2872 queue_regulatory_request(request);
2872 2873
diff --git a/net/wireless/scan.c b/net/wireless/scan.c
index d36c3eb7b931..d0e7472dd9fd 100644
--- a/net/wireless/scan.c
+++ b/net/wireless/scan.c
@@ -1058,13 +1058,23 @@ cfg80211_bss_update(struct cfg80211_registered_device *rdev,
1058 return NULL; 1058 return NULL;
1059} 1059}
1060 1060
1061/*
1062 * Update RX channel information based on the available frame payload
1063 * information. This is mainly for the 2.4 GHz band where frames can be received
1064 * from neighboring channels and the Beacon frames use the DSSS Parameter Set
1065 * element to indicate the current (transmitting) channel, but this might also
1066 * be needed on other bands if RX frequency does not match with the actual
1067 * operating channel of a BSS.
1068 */
1061static struct ieee80211_channel * 1069static struct ieee80211_channel *
1062cfg80211_get_bss_channel(struct wiphy *wiphy, const u8 *ie, size_t ielen, 1070cfg80211_get_bss_channel(struct wiphy *wiphy, const u8 *ie, size_t ielen,
1063 struct ieee80211_channel *channel) 1071 struct ieee80211_channel *channel,
1072 enum nl80211_bss_scan_width scan_width)
1064{ 1073{
1065 const u8 *tmp; 1074 const u8 *tmp;
1066 u32 freq; 1075 u32 freq;
1067 int channel_number = -1; 1076 int channel_number = -1;
1077 struct ieee80211_channel *alt_channel;
1068 1078
1069 tmp = cfg80211_find_ie(WLAN_EID_DS_PARAMS, ie, ielen); 1079 tmp = cfg80211_find_ie(WLAN_EID_DS_PARAMS, ie, ielen);
1070 if (tmp && tmp[1] == 1) { 1080 if (tmp && tmp[1] == 1) {
@@ -1078,16 +1088,45 @@ cfg80211_get_bss_channel(struct wiphy *wiphy, const u8 *ie, size_t ielen,
1078 } 1088 }
1079 } 1089 }
1080 1090
1081 if (channel_number < 0) 1091 if (channel_number < 0) {
1092 /* No channel information in frame payload */
1082 return channel; 1093 return channel;
1094 }
1083 1095
1084 freq = ieee80211_channel_to_frequency(channel_number, channel->band); 1096 freq = ieee80211_channel_to_frequency(channel_number, channel->band);
1085 channel = ieee80211_get_channel(wiphy, freq); 1097 alt_channel = ieee80211_get_channel(wiphy, freq);
1086 if (!channel) 1098 if (!alt_channel) {
1087 return NULL; 1099 if (channel->band == NL80211_BAND_2GHZ) {
1088 if (channel->flags & IEEE80211_CHAN_DISABLED) 1100 /*
1101 * Better not allow unexpected channels when that could
1102 * be going beyond the 1-11 range (e.g., discovering
1103 * BSS on channel 12 when radio is configured for
1104 * channel 11.
1105 */
1106 return NULL;
1107 }
1108
1109 /* No match for the payload channel number - ignore it */
1110 return channel;
1111 }
1112
1113 if (scan_width == NL80211_BSS_CHAN_WIDTH_10 ||
1114 scan_width == NL80211_BSS_CHAN_WIDTH_5) {
1115 /*
1116 * Ignore channel number in 5 and 10 MHz channels where there
1117 * may not be an n:1 or 1:n mapping between frequencies and
1118 * channel numbers.
1119 */
1120 return channel;
1121 }
1122
1123 /*
1124 * Use the channel determined through the payload channel number
1125 * instead of the RX channel reported by the driver.
1126 */
1127 if (alt_channel->flags & IEEE80211_CHAN_DISABLED)
1089 return NULL; 1128 return NULL;
1090 return channel; 1129 return alt_channel;
1091} 1130}
1092 1131
1093/* Returned bss is reference counted and must be cleaned up appropriately. */ 1132/* Returned bss is reference counted and must be cleaned up appropriately. */
@@ -1112,7 +1151,8 @@ cfg80211_inform_bss_data(struct wiphy *wiphy,
1112 (data->signal < 0 || data->signal > 100))) 1151 (data->signal < 0 || data->signal > 100)))
1113 return NULL; 1152 return NULL;
1114 1153
1115 channel = cfg80211_get_bss_channel(wiphy, ie, ielen, data->chan); 1154 channel = cfg80211_get_bss_channel(wiphy, ie, ielen, data->chan,
1155 data->scan_width);
1116 if (!channel) 1156 if (!channel)
1117 return NULL; 1157 return NULL;
1118 1158
@@ -1210,7 +1250,7 @@ cfg80211_inform_bss_frame_data(struct wiphy *wiphy,
1210 return NULL; 1250 return NULL;
1211 1251
1212 channel = cfg80211_get_bss_channel(wiphy, mgmt->u.beacon.variable, 1252 channel = cfg80211_get_bss_channel(wiphy, mgmt->u.beacon.variable,
1213 ielen, data->chan); 1253 ielen, data->chan, data->scan_width);
1214 if (!channel) 1254 if (!channel)
1215 return NULL; 1255 return NULL;
1216 1256
diff --git a/net/xfrm/xfrm_input.c b/net/xfrm/xfrm_input.c
index b89c9c7f8c5c..be3520e429c9 100644
--- a/net/xfrm/xfrm_input.c
+++ b/net/xfrm/xfrm_input.c
@@ -458,6 +458,7 @@ resume:
458 XFRM_INC_STATS(net, LINUX_MIB_XFRMINHDRERROR); 458 XFRM_INC_STATS(net, LINUX_MIB_XFRMINHDRERROR);
459 goto drop; 459 goto drop;
460 } 460 }
461 crypto_done = false;
461 } while (!err); 462 } while (!err);
462 463
463 err = xfrm_rcv_cb(skb, family, x->type->proto, 0); 464 err = xfrm_rcv_cb(skb, family, x->type->proto, 0);
diff --git a/net/xfrm/xfrm_output.c b/net/xfrm/xfrm_output.c
index 45ba07ab3e4f..261995d37ced 100644
--- a/net/xfrm/xfrm_output.c
+++ b/net/xfrm/xfrm_output.c
@@ -100,6 +100,10 @@ static int xfrm_output_one(struct sk_buff *skb, int err)
100 spin_unlock_bh(&x->lock); 100 spin_unlock_bh(&x->lock);
101 101
102 skb_dst_force(skb); 102 skb_dst_force(skb);
103 if (!skb_dst(skb)) {
104 XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTERROR);
105 goto error_nolock;
106 }
103 107
104 if (xfrm_offload(skb)) { 108 if (xfrm_offload(skb)) {
105 x->type_offload->encap(x, skb); 109 x->type_offload->encap(x, skb);
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c
index 3110c3fbee20..f094d4b3520d 100644
--- a/net/xfrm/xfrm_policy.c
+++ b/net/xfrm/xfrm_policy.c
@@ -2491,6 +2491,10 @@ int __xfrm_route_forward(struct sk_buff *skb, unsigned short family)
2491 } 2491 }
2492 2492
2493 skb_dst_force(skb); 2493 skb_dst_force(skb);
2494 if (!skb_dst(skb)) {
2495 XFRM_INC_STATS(net, LINUX_MIB_XFRMFWDHDRERROR);
2496 return 0;
2497 }
2494 2498
2495 dst = xfrm_lookup(net, skb_dst(skb), &fl, NULL, XFRM_LOOKUP_QUEUE); 2499 dst = xfrm_lookup(net, skb_dst(skb), &fl, NULL, XFRM_LOOKUP_QUEUE);
2496 if (IS_ERR(dst)) { 2500 if (IS_ERR(dst)) {
diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
index 4791aa8b8185..df7ca2dabc48 100644
--- a/net/xfrm/xfrm_user.c
+++ b/net/xfrm/xfrm_user.c
@@ -151,10 +151,16 @@ static int verify_newsa_info(struct xfrm_usersa_info *p,
151 err = -EINVAL; 151 err = -EINVAL;
152 switch (p->family) { 152 switch (p->family) {
153 case AF_INET: 153 case AF_INET:
154 if (p->sel.prefixlen_d > 32 || p->sel.prefixlen_s > 32)
155 goto out;
156
154 break; 157 break;
155 158
156 case AF_INET6: 159 case AF_INET6:
157#if IS_ENABLED(CONFIG_IPV6) 160#if IS_ENABLED(CONFIG_IPV6)
161 if (p->sel.prefixlen_d > 128 || p->sel.prefixlen_s > 128)
162 goto out;
163
158 break; 164 break;
159#else 165#else
160 err = -EAFNOSUPPORT; 166 err = -EAFNOSUPPORT;
@@ -1396,10 +1402,16 @@ static int verify_newpolicy_info(struct xfrm_userpolicy_info *p)
1396 1402
1397 switch (p->sel.family) { 1403 switch (p->sel.family) {
1398 case AF_INET: 1404 case AF_INET:
1405 if (p->sel.prefixlen_d > 32 || p->sel.prefixlen_s > 32)
1406 return -EINVAL;
1407
1399 break; 1408 break;
1400 1409
1401 case AF_INET6: 1410 case AF_INET6:
1402#if IS_ENABLED(CONFIG_IPV6) 1411#if IS_ENABLED(CONFIG_IPV6)
1412 if (p->sel.prefixlen_d > 128 || p->sel.prefixlen_s > 128)
1413 return -EINVAL;
1414
1403 break; 1415 break;
1404#else 1416#else
1405 return -EAFNOSUPPORT; 1417 return -EAFNOSUPPORT;
@@ -1480,6 +1492,9 @@ static int validate_tmpl(int nr, struct xfrm_user_tmpl *ut, u16 family)
1480 (ut[i].family != prev_family)) 1492 (ut[i].family != prev_family))
1481 return -EINVAL; 1493 return -EINVAL;
1482 1494
1495 if (ut[i].mode >= XFRM_MODE_MAX)
1496 return -EINVAL;
1497
1483 prev_family = ut[i].family; 1498 prev_family = ut[i].family;
1484 1499
1485 switch (ut[i].family) { 1500 switch (ut[i].family) {