Linux 5.4.65
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.65 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.4.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 - drivers/net/usb/dm9601.c | 4 ++ net/core/dev.c | 3 + net/core/netpoll.c | 2 - net/ipv4/fib_trie.c | 3 + net/ipv6/sysctl_net_ipv6.c | 3 + net/netlabel/netlabel_domainhash.c | 59 ++++++++++++++++++------------------- net/sched/sch_taprio.c | 30 +++++++++++++++--- net/sctp/socket.c | 16 +++------- net/tipc/socket.c | 9 +++-- 10 files changed, 78 insertions(+), 53 deletions(-)
Greg Kroah-Hartman (1):
Linux 5.4.65
Ido Schimmel (2):
ipv4: Silence suspicious RCU usage warning
ipv6: Fix sysctl max for fib_multipath_hash_policy
Jakub Kicinski (1):
net: disable netpoll on fresh napis
Kamil Lorenc (1):
net: usb: dm9601: Add USB ID of Keenetic Plus DSL
Paul Moore (1):
netlabel: fix problems with mapping removal
Tetsuo Handa (1):
tipc: fix shutdown() of connectionless socket
Vinicius Costa Gomes (1):
taprio: Fix using wrong queues in gate mask
Xin Long (1):
sctp: not disable bh in the whole sctp_get_port_local()
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 64 +SUBLEVEL = 65 EXTRAVERSION = NAME = Kleptomaniac Octopus
drivers/net/usb/dm9601.c +4 -0
@@ -625,6 +625,10 @@ static const struct usb_device_id products[] = { USB_DEVICE(0x0a46, 0x1269), /* DM9621A USB to Fast Ethernet Adapter */ .driver_info = (unsigned long)&dm9601_info, }, + { + USB_DEVICE(0x0586, 0x3427), /* ZyXEL Keenetic Plus DSL xDSL modem */ + .driver_info = (unsigned long)&dm9601_info, + }, {}, // END };
net/core/dev.c +2 -1
@@ -6231,12 +6231,13 @@ void netif_napi_add(struct net_device *dev, struct napi_struct *napi,netdev_err_once (dev,"%s() called with weight %d\n" , __func__, weight); napi->weight = weight; -list_add (&napi->dev_list, &dev->napi_list); napi->dev = dev;#ifdef CONFIG_NETPOLL napi->poll_owner =-1 ;#endif set_bit (NAPI_STATE_SCHED , &napi->state); +set_bit (NAPI_STATE_NPSVC , &napi->state); +list_add_rcu (&napi->dev_list, &dev->napi_list);napi_hash_add (napi); }EXPORT_SYMBOL (netif_napi_add);
net/core/netpoll.c +1 -1
@@ -161,7 +161,7 @@ static void poll_napi(struct net_device *dev)struct napi_struct *napi;int cpu =smp_processor_id (); -list_for_each_entry (napi, &dev->napi_list, dev_list) { +list_for_each_entry_rcu (napi, &dev->napi_list, dev_list) {if (cmpxchg (&napi->poll_owner,-1 , cpu) ==-1 ) {poll_one_napi (napi);smp_store_release (&napi->poll_owner,-1 );
net/ipv4/fib_trie.c +2 -1
@@ -2010,7 +2010,8 @@ void fib_info_notify_update(struct net *net, struct nl_info *info)struct hlist_head *head = &net->ipv4.fib_table_hash[h];struct fib_table *tb; -hlist_for_each_entry_rcu (tb, head, tb_hlist) +hlist_for_each_entry_rcu (tb, head, tb_hlist, +lockdep_rtnl_is_held ())__fib_info_notify_update (net, tb, info); } }
net/ipv6/sysctl_net_ipv6.c +2 -1
@@ -21,6 +21,7 @@#include <net/calipso.h> #endif +static int two =2 ;static int flowlabel_reflect_max =0x7 ;static int auto_flowlabels_min;static int auto_flowlabels_max =IP6_AUTO_FLOW_LABEL_MAX ;
@@ -151,7 +152,7 @@ static struct ctl_table ipv6_table_template[] = { .mode = 0644, .proc_handler = proc_rt6_multipath_hash_policy, .extra1 = SYSCTL_ZERO, - .extra2 = SYSCTL_ONE, + .extra2 = &two, }, { .procname = "seg6_flowlabel",
net/netlabel/netlabel_domainhash.c +30 -29
94 lines not on this page · raw message
net/sched/sch_taprio.c +24 -6
@@ -1177,9 +1177,27 @@ static void taprio_offload_config_changed(struct taprio_sched *q)spin_unlock (&q->current_entry_lock); } -static void taprio_sched_to_offload (struct taprio_sched *q, +static u32 tc_map_to_queue_mask (struct net_device *dev,u32 tc_mask) +{ +u32 i, queue_mask =0 ; + +for (i =0 ; i < dev->num_tc; i++) { +u32 offset, count; + +if (!(tc_mask &BIT (i))) +continue ; + + offset = dev->tc_to_txq[i].offset; + count = dev->tc_to_txq[i].count; + + queue_mask |=GENMASK (offset + count -1 , offset); + } + +return queue_mask; +} + +static void taprio_sched_to_offload (struct net_device *dev,struct sched_gate_list *sched, -const struct tc_mqprio_qopt *mqprio,struct tc_taprio_qopt_offload *offload) {struct sched_entry *entry;
@@ -1194,7 +1212,8 @@ static void taprio_sched_to_offload(struct taprio_sched *q, e->command = entry->command; e->interval = entry->interval; - e->gate_mask = entry->gate_mask; + e->gate_mask =tc_map_to_queue_mask (dev, entry->gate_mask); + i++; }
@@ -1202,7 +1221,6 @@ static void taprio_sched_to_offload(struct taprio_sched *q, }static int taprio_enable_offload (struct net_device *dev, -struct tc_mqprio_qopt *mqprio,struct taprio_sched *q,struct sched_gate_list *sched,struct netlink_ext_ack *extack)
@@ -1224,7 +1242,7 @@ static int taprio_enable_offload(struct net_device *dev,return -ENOMEM ; } offload->enable =1 ; -taprio_sched_to_offload (q, sched, mqprio, offload); +taprio_sched_to_offload (dev, sched, offload); err = ops->ndo_setup_tc (dev,TC_SETUP_QDISC_TAPRIO , offload);if (err <0 ) {
@@ -1486,7 +1504,7 @@ static int taprio_change(struct Qdisc *sch, struct nlattr *opt, }if (FULL_OFFLOAD_IS_ENABLED (q->flags)) - err =taprio_enable_offload (dev, mqprio, q, new_admin, extack); + err =taprio_enable_offload (dev, q, new_admin, extack);else err =taprio_disable_offload (dev, q, extack);if (err)
net/sctp/socket.c +6 -10
@@ -8176,8 +8176,6 @@ static int sctp_get_port_local(struct sock *sk, union sctp_addr *addr)pr_debug ("%s: begins, snum:%d\n" , __func__, snum); -local_bh_disable (); -if (snum ==0 ) {/* Search for an available port. */ int low, high, remaining, index;
@@ -8196,20 +8194,21 @@ static int sctp_get_port_local(struct sock *sk, union sctp_addr *addr)continue ; index =sctp_phashfn (sock_net (sk), rover); head = &sctp_port_hashtable[index]; -spin_lock (&head->lock); +spin_lock_bh (&head->lock);sctp_for_each_hentry (pp, &head->chain)if ((pp->port == rover) &&net_eq (sock_net (sk), pp->net)) goto next;break ; next: -spin_unlock (&head->lock); +spin_unlock_bh (&head->lock); +cond_resched (); }while (--remaining >0 );/* Exhausted local port range during search? */ ret =1 ;if (remaining <=0 ) - goto fail; +return ret;/* OK, here is the one we will use. HEAD (the port * hash table list entry) is non-NULL and we hold it's
@@ -8224,7 +8223,7 @@ static int sctp_get_port_local(struct sock *sk, union sctp_addr *addr)* port iterator, pp being NULL. */ head = &sctp_port_hashtable[sctp_phashfn (sock_net (sk), snum)]; -spin_lock (&head->lock); +spin_lock_bh (&head->lock);sctp_for_each_hentry (pp, &head->chain) {if ((pp->port == snum) &&net_eq (pp->net,sock_net (sk))) goto pp_found;
@@ -8324,10 +8323,7 @@ static int sctp_get_port_local(struct sock *sk, union sctp_addr *addr) ret =0 ; fail_unlock: -spin_unlock (&head->lock); - -fail: -local_bh_enable (); +spin_unlock_bh (&head->lock);return ret; }
net/tipc/socket.c +6 -3
@@ -2616,18 +2616,21 @@ static int tipc_shutdown(struct socket *sock, int how)trace_tipc_sk_shutdown (sk,NULL ,TIPC_DUMP_ALL ," " );__tipc_shutdown (sock,TIPC_CONN_SHUTDOWN ); - sk->sk_shutdown =SEND_SHUTDOWN ; +if (tipc_sk_type_connectionless (sk)) + sk->sk_shutdown =SHUTDOWN_MASK ; +else + sk->sk_shutdown =SEND_SHUTDOWN ;if (sk->sk_state ==TIPC_DISCONNECTING ) {/* Discard any unreceived messages */ __skb_queue_purge (&sk->sk_receive_queue); -/* Wake up anyone sleeping in poll */ - sk->sk_state_change (sk); res =0 ; }else { res = -ENOTCONN ; } +/* Wake up anyone sleeping in poll. */ + sk->sk_state_change (sk);release_sock (sk);return res;