mirror of
https://github.com/Fishwaldo/build.git
synced 2025-06-23 06:38:46 +00:00
Add upstream patches for Odroid N2 legacy and Odroid XU4 current
This commit is contained in:
parent
91a21e9245
commit
08c2305248
6 changed files with 19031 additions and 0 deletions
5978
patch/kernel/meson64-legacy/patch-4.9.232-233.patch
Normal file
5978
patch/kernel/meson64-legacy/patch-4.9.232-233.patch
Normal file
File diff suppressed because it is too large
Load diff
1074
patch/kernel/meson64-legacy/patch-4.9.233-234-modified.patch
Normal file
1074
patch/kernel/meson64-legacy/patch-4.9.233-234-modified.patch
Normal file
File diff suppressed because it is too large
Load diff
2855
patch/kernel/meson64-legacy/patch-4.9.234-235.patch
Normal file
2855
patch/kernel/meson64-legacy/patch-4.9.234-235.patch
Normal file
File diff suppressed because it is too large
Load diff
3781
patch/kernel/meson64-legacy/patch-4.9.235-236.patch
Normal file
3781
patch/kernel/meson64-legacy/patch-4.9.235-236.patch
Normal file
File diff suppressed because it is too large
Load diff
4987
patch/kernel/odroidxu4-current/patch-5.4.63-64.patch
Normal file
4987
patch/kernel/odroidxu4-current/patch-5.4.63-64.patch
Normal file
File diff suppressed because it is too large
Load diff
356
patch/kernel/odroidxu4-current/patch-5.4.64-65.patch
Normal file
356
patch/kernel/odroidxu4-current/patch-5.4.64-65.patch
Normal file
|
@ -0,0 +1,356 @@
|
|||
diff --git a/Makefile b/Makefile
|
||||
index 7bdfb21bb9269..4cb68164b79ee 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 5
|
||||
PATCHLEVEL = 4
|
||||
-SUBLEVEL = 64
|
||||
+SUBLEVEL = 65
|
||||
EXTRAVERSION =
|
||||
NAME = Kleptomaniac Octopus
|
||||
|
||||
diff --git a/drivers/net/usb/dm9601.c b/drivers/net/usb/dm9601.c
|
||||
index b91f92e4e5f22..915ac75b55fc7 100644
|
||||
--- a/drivers/net/usb/dm9601.c
|
||||
+++ b/drivers/net/usb/dm9601.c
|
||||
@@ -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
|
||||
};
|
||||
|
||||
diff --git a/net/core/dev.c b/net/core/dev.c
|
||||
index 56cd7b83a3829..cdc1c3a144e1f 100644
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -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);
|
||||
diff --git a/net/core/netpoll.c b/net/core/netpoll.c
|
||||
index 849380a622ef9..cb67d36f3adb0 100644
|
||||
--- a/net/core/netpoll.c
|
||||
+++ b/net/core/netpoll.c
|
||||
@@ -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);
|
||||
diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
|
||||
index 47b6d73d30e55..51673d00bbeac 100644
|
||||
--- a/net/ipv4/fib_trie.c
|
||||
+++ b/net/ipv4/fib_trie.c
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
diff --git a/net/ipv6/sysctl_net_ipv6.c b/net/ipv6/sysctl_net_ipv6.c
|
||||
index ec8fcfc60a27b..73842054bfe68 100644
|
||||
--- a/net/ipv6/sysctl_net_ipv6.c
|
||||
+++ b/net/ipv6/sysctl_net_ipv6.c
|
||||
@@ -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",
|
||||
diff --git a/net/netlabel/netlabel_domainhash.c b/net/netlabel/netlabel_domainhash.c
|
||||
index f5d34da0646ed..12aa803b2f689 100644
|
||||
--- a/net/netlabel/netlabel_domainhash.c
|
||||
+++ b/net/netlabel/netlabel_domainhash.c
|
||||
@@ -85,6 +85,7 @@ static void netlbl_domhsh_free_entry(struct rcu_head *entry)
|
||||
kfree(netlbl_domhsh_addr6_entry(iter6));
|
||||
}
|
||||
#endif /* IPv6 */
|
||||
+ kfree(ptr->def.addrsel);
|
||||
}
|
||||
kfree(ptr->domain);
|
||||
kfree(ptr);
|
||||
@@ -536,6 +537,8 @@ int netlbl_domhsh_add(struct netlbl_dom_map *entry,
|
||||
goto add_return;
|
||||
}
|
||||
#endif /* IPv6 */
|
||||
+ /* cleanup the new entry since we've moved everything over */
|
||||
+ netlbl_domhsh_free_entry(&entry->rcu);
|
||||
} else
|
||||
ret_val = -EINVAL;
|
||||
|
||||
@@ -579,6 +582,12 @@ int netlbl_domhsh_remove_entry(struct netlbl_dom_map *entry,
|
||||
{
|
||||
int ret_val = 0;
|
||||
struct audit_buffer *audit_buf;
|
||||
+ struct netlbl_af4list *iter4;
|
||||
+ struct netlbl_domaddr4_map *map4;
|
||||
+#if IS_ENABLED(CONFIG_IPV6)
|
||||
+ struct netlbl_af6list *iter6;
|
||||
+ struct netlbl_domaddr6_map *map6;
|
||||
+#endif /* IPv6 */
|
||||
|
||||
if (entry == NULL)
|
||||
return -ENOENT;
|
||||
@@ -596,6 +605,9 @@ int netlbl_domhsh_remove_entry(struct netlbl_dom_map *entry,
|
||||
ret_val = -ENOENT;
|
||||
spin_unlock(&netlbl_domhsh_lock);
|
||||
|
||||
+ if (ret_val)
|
||||
+ return ret_val;
|
||||
+
|
||||
audit_buf = netlbl_audit_start_common(AUDIT_MAC_MAP_DEL, audit_info);
|
||||
if (audit_buf != NULL) {
|
||||
audit_log_format(audit_buf,
|
||||
@@ -605,40 +617,29 @@ int netlbl_domhsh_remove_entry(struct netlbl_dom_map *entry,
|
||||
audit_log_end(audit_buf);
|
||||
}
|
||||
|
||||
- if (ret_val == 0) {
|
||||
- struct netlbl_af4list *iter4;
|
||||
- struct netlbl_domaddr4_map *map4;
|
||||
-#if IS_ENABLED(CONFIG_IPV6)
|
||||
- struct netlbl_af6list *iter6;
|
||||
- struct netlbl_domaddr6_map *map6;
|
||||
-#endif /* IPv6 */
|
||||
-
|
||||
- switch (entry->def.type) {
|
||||
- case NETLBL_NLTYPE_ADDRSELECT:
|
||||
- netlbl_af4list_foreach_rcu(iter4,
|
||||
- &entry->def.addrsel->list4) {
|
||||
- map4 = netlbl_domhsh_addr4_entry(iter4);
|
||||
- cipso_v4_doi_putdef(map4->def.cipso);
|
||||
- }
|
||||
+ switch (entry->def.type) {
|
||||
+ case NETLBL_NLTYPE_ADDRSELECT:
|
||||
+ netlbl_af4list_foreach_rcu(iter4, &entry->def.addrsel->list4) {
|
||||
+ map4 = netlbl_domhsh_addr4_entry(iter4);
|
||||
+ cipso_v4_doi_putdef(map4->def.cipso);
|
||||
+ }
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
- netlbl_af6list_foreach_rcu(iter6,
|
||||
- &entry->def.addrsel->list6) {
|
||||
- map6 = netlbl_domhsh_addr6_entry(iter6);
|
||||
- calipso_doi_putdef(map6->def.calipso);
|
||||
- }
|
||||
+ netlbl_af6list_foreach_rcu(iter6, &entry->def.addrsel->list6) {
|
||||
+ map6 = netlbl_domhsh_addr6_entry(iter6);
|
||||
+ calipso_doi_putdef(map6->def.calipso);
|
||||
+ }
|
||||
#endif /* IPv6 */
|
||||
- break;
|
||||
- case NETLBL_NLTYPE_CIPSOV4:
|
||||
- cipso_v4_doi_putdef(entry->def.cipso);
|
||||
- break;
|
||||
+ break;
|
||||
+ case NETLBL_NLTYPE_CIPSOV4:
|
||||
+ cipso_v4_doi_putdef(entry->def.cipso);
|
||||
+ break;
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
- case NETLBL_NLTYPE_CALIPSO:
|
||||
- calipso_doi_putdef(entry->def.calipso);
|
||||
- break;
|
||||
+ case NETLBL_NLTYPE_CALIPSO:
|
||||
+ calipso_doi_putdef(entry->def.calipso);
|
||||
+ break;
|
||||
#endif /* IPv6 */
|
||||
- }
|
||||
- call_rcu(&entry->rcu, netlbl_domhsh_free_entry);
|
||||
}
|
||||
+ call_rcu(&entry->rcu, netlbl_domhsh_free_entry);
|
||||
|
||||
return ret_val;
|
||||
}
|
||||
diff --git a/net/sched/sch_taprio.c b/net/sched/sch_taprio.c
|
||||
index b1eb12d33b9a6..6a5086e586efb 100644
|
||||
--- a/net/sched/sch_taprio.c
|
||||
+++ b/net/sched/sch_taprio.c
|
||||
@@ -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)
|
||||
diff --git a/net/sctp/socket.c b/net/sctp/socket.c
|
||||
index 58fe6556cdf5b..3a11212bb4c0e 100644
|
||||
--- a/net/sctp/socket.c
|
||||
+++ b/net/sctp/socket.c
|
||||
@@ -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 @@ success:
|
||||
ret = 0;
|
||||
|
||||
fail_unlock:
|
||||
- spin_unlock(&head->lock);
|
||||
-
|
||||
-fail:
|
||||
- local_bh_enable();
|
||||
+ spin_unlock_bh(&head->lock);
|
||||
return ret;
|
||||
}
|
||||
|
||||
diff --git a/net/tipc/socket.c b/net/tipc/socket.c
|
||||
index aea951a1f805b..5318bb6611abc 100644
|
||||
--- a/net/tipc/socket.c
|
||||
+++ b/net/tipc/socket.c
|
||||
@@ -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;
|
Loading…
Add table
Add a link
Reference in a new issue