From 027c05e18519ee06072b37124cb5a25afe56555e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Philip=20M=C3=BCller?= <philm@manjaro.org>
Date: Tue, 21 Apr 2020 22:41:01 +0200
Subject: [PATCH] [pkg-upd] 5.6.6-1

---
 PKGBUILD           |   13 +-
 config.x86_64      |    4 +-
 prepatch-5.6.patch | 4323 --------------------------------------------
 3 files changed, 8 insertions(+), 4332 deletions(-)
 delete mode 100644 prepatch-5.6.patch

diff --git a/PKGBUILD b/PKGBUILD
index 565e63f..2211262 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -12,8 +12,8 @@ _kernelname=-MANJARO
 _basekernel=5.6
 _basever=56
 _aufs=20200302
-pkgver=5.6.5
-pkgrel=3
+pkgver=5.6.6
+pkgrel=1
 arch=('i686' 'x86_64')
 url="http://www.kernel.org/"
 license=('GPL2')
@@ -35,7 +35,7 @@ source=("https://www.kernel.org/pub/linux/kernel/v5.x/linux-${_basekernel}.tar.x
         # ARCH Patches
         '0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-CLONE_NEWUSER.patch'
         # MANJARO Patches
-	"prepatch-${_basekernel}.patch"
+	#"prepatch-${_basekernel}.patch"
         '0001-apparmor-patch-to-provide-compatibility-with-v2-net-rules.patch'
         '0002-apparmor-af_unix-mediation.patch'
         '0003-apparmor-fix-use-after-free-in-sk_peer_label.patch'
@@ -55,8 +55,8 @@ source=("https://www.kernel.org/pub/linux/kernel/v5.x/linux-${_basekernel}.tar.x
         '0012-bootsplash.patch'
         '0013-bootsplash.patch')
 sha256sums=('e342b04a2aa63808ea0ef1baab28fc520bd031ef8cf93d9ee4a31d4058fcb622'
-            'c7938429c4db6fb086f769400e694aff74b5b7e6c66e3763cb6fb1b527dcf010'
-            'c4c1e6dc98efba3d0af1a70a28fdeaf84ce1bfc61713c2d7159403bbab59b233'
+            '669e3bebb988e7f1124e6687e384304ed70139ea4a869bd4159c3df27c3d9082'
+            '89e3a2175b82326e22211123d20a4da4d2b9f42b2f43027e7e15cfc33fd410c1'
             'bfe52746bfc04114627b6f1e0dd94bc05dd94abe8f6dbee770f78d6116e315e8'
             'b44d81446d8b53d5637287c30ae3eb64cae0078c3fbc45fcf1081dd6699818b5'
             'ef60c4afbae6270748bca1661d054815ea83f84ac3962fa316cd1b6abea506a4'
@@ -68,7 +68,6 @@ sha256sums=('e342b04a2aa63808ea0ef1baab28fc520bd031ef8cf93d9ee4a31d4058fcb622'
             '1c69ed79eeef0c0dcf68ce3086a0e372260d2fed94c93c7711e0682b2bcaae39'
             '29adcb9fac02b77f93ec36c2003ae930cc0a6ee1884d002c280480b5e8f22261'
             '7685d526bbdbfa795986591a70071c960ff572f56d3501774861728a9df8664c'
-            '5d7205c6a0fe9bd11ecee82507bab395dbac6a10714d1cdac02bdca6c34fbb70'
             '98202b8ad70d02d86603294bae967874fa7b18704b5c7b867568b0fd33a08921'
             '5cbbf3db9ea3205e9b89fe3049bea6dd626181db0cb0dc461e4cf5a400c68dd6'
             'c7dbec875d0c1d6782c037a1dcefff2e5bdb5fc9dffac1beea07dd8c1bdef1d7'
@@ -95,7 +94,7 @@ prepare() {
   # add latest fixes from stable queue, if needed
   # http://git.kernel.org/?p=linux/kernel/git/stable/stable-queue.git
   # enable only if you have "gen-stable-queue-patch.sh" executed before
-  patch -Np1 -i "${srcdir}/prepatch-${_basekernel}.patch"
+  #patch -Np1 -i "${srcdir}/prepatch-${_basekernel}.patch"
 
   # disable USER_NS for non-root users by default
   patch -Np1 -i "${srcdir}/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-CLONE_NEWUSER.patch"
diff --git a/config.x86_64 b/config.x86_64
index 2e70af5..5eead1c 100644
--- a/config.x86_64
+++ b/config.x86_64
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/x86 5.6.4-1 Kernel Configuration
+# Linux/x86 5.6.6-1 Kernel Configuration
 #
 
 #
@@ -4434,7 +4434,7 @@ CONFIG_I2C_CROS_EC_TUNNEL=m
 CONFIG_I2C_FSI=m
 # end of I2C Hardware Bus support
 
-# CONFIG_I2C_STUB is not set
+CONFIG_I2C_STUB=m
 CONFIG_I2C_SLAVE=y
 CONFIG_I2C_SLAVE_EEPROM=m
 # CONFIG_I2C_DEBUG_CORE is not set
diff --git a/prepatch-5.6.patch b/prepatch-5.6.patch
deleted file mode 100644
index b8e8438..0000000
--- a/prepatch-5.6.patch
+++ /dev/null
@@ -1,4323 +0,0 @@
-
-From foo@baz Sat 18 Apr 2020 11:06:47 AM CEST
-From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-Date: Thu, 16 Apr 2020 17:57:40 +0200
-Subject: amd-xgbe: Use __napi_schedule() in BH context
-
-From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-
-[ Upstream commit d518691cbd3be3dae218e05cca3f3fc9b2f1aa77 ]
-
-The driver uses __napi_schedule_irqoff() which is fine as long as it is
-invoked with disabled interrupts by everybody. Since the commit
-mentioned below the driver may invoke xgbe_isr_task() in tasklet/softirq
-context. This may lead to list corruption if another driver uses
-__napi_schedule_irqoff() in IRQ context.
-
-Use __napi_schedule() which safe to use from IRQ and softirq context.
-
-Fixes: 85b85c853401d ("amd-xgbe: Re-issue interrupt if interrupt status not cleared")
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-Acked-by: Tom Lendacky <thomas.lendacky@amd.com>
-Cc: Tom Lendacky <thomas.lendacky@amd.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/net/ethernet/amd/xgbe/xgbe-drv.c |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
-+++ b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
-@@ -514,7 +514,7 @@ static void xgbe_isr_task(unsigned long
- 				xgbe_disable_rx_tx_ints(pdata);
- 
- 				/* Turn on polling */
--				__napi_schedule_irqoff(&pdata->napi);
-+				__napi_schedule(&pdata->napi);
- 			}
- 		} else {
- 			/* Don't clear Rx/Tx status if doing per channel DMA
-From foo@baz Sat 18 Apr 2020 11:06:47 AM CEST
-From: Taehee Yoo <ap420073@gmail.com>
-Date: Tue, 7 Apr 2020 13:23:21 +0000
-Subject: hsr: check protocol version in hsr_newlink()
-
-From: Taehee Yoo <ap420073@gmail.com>
-
-[ Upstream commit 4faab8c446def7667adf1f722456c2f4c304069c ]
-
-In the current hsr code, only 0 and 1 protocol versions are valid.
-But current hsr code doesn't check the version, which is received by
-userspace.
-
-Test commands:
-    ip link add dummy0 type dummy
-    ip link add dummy1 type dummy
-    ip link add hsr0 type hsr slave1 dummy0 slave2 dummy1 version 4
-
-In the test commands, version 4 is invalid.
-So, the command should be failed.
-
-After this patch, following error will occur.
-"Error: hsr: Only versions 0..1 are supported."
-
-Fixes: ee1c27977284 ("net/hsr: Added support for HSR v1")
-Signed-off-by: Taehee Yoo <ap420073@gmail.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- net/hsr/hsr_netlink.c |   10 ++++++++--
- 1 file changed, 8 insertions(+), 2 deletions(-)
-
---- a/net/hsr/hsr_netlink.c
-+++ b/net/hsr/hsr_netlink.c
-@@ -61,10 +61,16 @@ static int hsr_newlink(struct net *src_n
- 	else
- 		multicast_spec = nla_get_u8(data[IFLA_HSR_MULTICAST_SPEC]);
- 
--	if (!data[IFLA_HSR_VERSION])
-+	if (!data[IFLA_HSR_VERSION]) {
- 		hsr_version = 0;
--	else
-+	} else {
- 		hsr_version = nla_get_u8(data[IFLA_HSR_VERSION]);
-+		if (hsr_version > 1) {
-+			NL_SET_ERR_MSG_MOD(extack,
-+					   "Only versions 0..1 are supported");
-+			return -EINVAL;
-+		}
-+	}
- 
- 	return hsr_dev_finalize(dev, link, multicast_spec, hsr_version);
- }
-From foo@baz Sat 18 Apr 2020 11:06:47 AM CEST
-From: "Michael Weiß" <michael.weiss@aisec.fraunhofer.de>
-Date: Tue, 7 Apr 2020 13:11:48 +0200
-Subject: l2tp: Allow management of tunnels and session in user namespace
-
-From: "Michael Weiß" <michael.weiss@aisec.fraunhofer.de>
-
-[ Upstream commit 2abe05234f2e892728c388169631e4b99f354c86 ]
-
-Creation and management of L2TPv3 tunnels and session through netlink
-requires CAP_NET_ADMIN. However, a process with CAP_NET_ADMIN in a
-non-initial user namespace gets an EPERM due to the use of the
-genetlink GENL_ADMIN_PERM flag. Thus, management of L2TP VPNs inside
-an unprivileged container won't work.
-
-We replaced the GENL_ADMIN_PERM by the GENL_UNS_ADMIN_PERM flag
-similar to other network modules which also had this problem, e.g.,
-openvswitch (commit 4a92602aa1cd "openvswitch: allow management from
-inside user namespaces") and nl80211 (commit 5617c6cd6f844 "nl80211:
-Allow privileged operations from user namespaces").
-
-I tested this in the container runtime trustm3 (trustm3.github.io)
-and was able to create l2tp tunnels and sessions in unpriviliged
-(user namespaced) containers using a private network namespace.
-For other runtimes such as docker or lxc this should work, too.
-
-Signed-off-by: Michael Weiß <michael.weiss@aisec.fraunhofer.de>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- net/l2tp/l2tp_netlink.c |   16 ++++++++--------
- 1 file changed, 8 insertions(+), 8 deletions(-)
-
---- a/net/l2tp/l2tp_netlink.c
-+++ b/net/l2tp/l2tp_netlink.c
-@@ -920,51 +920,51 @@ static const struct genl_ops l2tp_nl_ops
- 		.cmd = L2TP_CMD_TUNNEL_CREATE,
- 		.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
- 		.doit = l2tp_nl_cmd_tunnel_create,
--		.flags = GENL_ADMIN_PERM,
-+		.flags = GENL_UNS_ADMIN_PERM,
- 	},
- 	{
- 		.cmd = L2TP_CMD_TUNNEL_DELETE,
- 		.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
- 		.doit = l2tp_nl_cmd_tunnel_delete,
--		.flags = GENL_ADMIN_PERM,
-+		.flags = GENL_UNS_ADMIN_PERM,
- 	},
- 	{
- 		.cmd = L2TP_CMD_TUNNEL_MODIFY,
- 		.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
- 		.doit = l2tp_nl_cmd_tunnel_modify,
--		.flags = GENL_ADMIN_PERM,
-+		.flags = GENL_UNS_ADMIN_PERM,
- 	},
- 	{
- 		.cmd = L2TP_CMD_TUNNEL_GET,
- 		.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
- 		.doit = l2tp_nl_cmd_tunnel_get,
- 		.dumpit = l2tp_nl_cmd_tunnel_dump,
--		.flags = GENL_ADMIN_PERM,
-+		.flags = GENL_UNS_ADMIN_PERM,
- 	},
- 	{
- 		.cmd = L2TP_CMD_SESSION_CREATE,
- 		.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
- 		.doit = l2tp_nl_cmd_session_create,
--		.flags = GENL_ADMIN_PERM,
-+		.flags = GENL_UNS_ADMIN_PERM,
- 	},
- 	{
- 		.cmd = L2TP_CMD_SESSION_DELETE,
- 		.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
- 		.doit = l2tp_nl_cmd_session_delete,
--		.flags = GENL_ADMIN_PERM,
-+		.flags = GENL_UNS_ADMIN_PERM,
- 	},
- 	{
- 		.cmd = L2TP_CMD_SESSION_MODIFY,
- 		.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
- 		.doit = l2tp_nl_cmd_session_modify,
--		.flags = GENL_ADMIN_PERM,
-+		.flags = GENL_UNS_ADMIN_PERM,
- 	},
- 	{
- 		.cmd = L2TP_CMD_SESSION_GET,
- 		.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
- 		.doit = l2tp_nl_cmd_session_get,
- 		.dumpit = l2tp_nl_cmd_session_dump,
--		.flags = GENL_ADMIN_PERM,
-+		.flags = GENL_UNS_ADMIN_PERM,
- 	},
- };
- 
-From foo@baz Sat 18 Apr 2020 11:06:47 AM CEST
-From: DENG Qingfang <dqfext@gmail.com>
-Date: Tue, 14 Apr 2020 14:34:08 +0800
-Subject: net: dsa: mt7530: fix tagged frames pass-through in VLAN-unaware mode
-
-From: DENG Qingfang <dqfext@gmail.com>
-
-[ Upstream commit e045124e93995fe01e42ed530003ddba5d55db4f ]
-
-In VLAN-unaware mode, the Egress Tag (EG_TAG) field in Port VLAN
-Control register must be set to Consistent to let tagged frames pass
-through as is, otherwise their tags will be stripped.
-
-Fixes: 83163f7dca56 ("net: dsa: mediatek: add VLAN support for MT7530")
-Signed-off-by: DENG Qingfang <dqfext@gmail.com>
-Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
-Tested-by: René van Dorst <opensource@vdorst.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/net/dsa/mt7530.c |   18 ++++++++++++------
- drivers/net/dsa/mt7530.h |    7 +++++++
- 2 files changed, 19 insertions(+), 6 deletions(-)
-
---- a/drivers/net/dsa/mt7530.c
-+++ b/drivers/net/dsa/mt7530.c
-@@ -857,8 +857,9 @@ mt7530_port_set_vlan_unaware(struct dsa_
- 	 */
- 	mt7530_rmw(priv, MT7530_PCR_P(port), PCR_PORT_VLAN_MASK,
- 		   MT7530_PORT_MATRIX_MODE);
--	mt7530_rmw(priv, MT7530_PVC_P(port), VLAN_ATTR_MASK,
--		   VLAN_ATTR(MT7530_VLAN_TRANSPARENT));
-+	mt7530_rmw(priv, MT7530_PVC_P(port), VLAN_ATTR_MASK | PVC_EG_TAG_MASK,
-+		   VLAN_ATTR(MT7530_VLAN_TRANSPARENT) |
-+		   PVC_EG_TAG(MT7530_VLAN_EG_CONSISTENT));
- 
- 	for (i = 0; i < MT7530_NUM_PORTS; i++) {
- 		if (dsa_is_user_port(ds, i) &&
-@@ -874,8 +875,8 @@ mt7530_port_set_vlan_unaware(struct dsa_
- 	if (all_user_ports_removed) {
- 		mt7530_write(priv, MT7530_PCR_P(MT7530_CPU_PORT),
- 			     PCR_MATRIX(dsa_user_ports(priv->ds)));
--		mt7530_write(priv, MT7530_PVC_P(MT7530_CPU_PORT),
--			     PORT_SPEC_TAG);
-+		mt7530_write(priv, MT7530_PVC_P(MT7530_CPU_PORT), PORT_SPEC_TAG
-+			     | PVC_EG_TAG(MT7530_VLAN_EG_CONSISTENT));
- 	}
- }
- 
-@@ -901,8 +902,9 @@ mt7530_port_set_vlan_aware(struct dsa_sw
- 	/* Set the port as a user port which is to be able to recognize VID
- 	 * from incoming packets before fetching entry within the VLAN table.
- 	 */
--	mt7530_rmw(priv, MT7530_PVC_P(port), VLAN_ATTR_MASK,
--		   VLAN_ATTR(MT7530_VLAN_USER));
-+	mt7530_rmw(priv, MT7530_PVC_P(port), VLAN_ATTR_MASK | PVC_EG_TAG_MASK,
-+		   VLAN_ATTR(MT7530_VLAN_USER) |
-+		   PVC_EG_TAG(MT7530_VLAN_EG_DISABLED));
- }
- 
- static void
-@@ -1333,6 +1335,10 @@ mt7530_setup(struct dsa_switch *ds)
- 			mt7530_cpu_port_enable(priv, i);
- 		else
- 			mt7530_port_disable(ds, i);
-+
-+		/* Enable consistent egress tag */
-+		mt7530_rmw(priv, MT7530_PVC_P(i), PVC_EG_TAG_MASK,
-+			   PVC_EG_TAG(MT7530_VLAN_EG_CONSISTENT));
- 	}
- 
- 	/* Setup port 5 */
---- a/drivers/net/dsa/mt7530.h
-+++ b/drivers/net/dsa/mt7530.h
-@@ -167,9 +167,16 @@ enum mt7530_port_mode {
- /* Register for port vlan control */
- #define MT7530_PVC_P(x)			(0x2010 + ((x) * 0x100))
- #define  PORT_SPEC_TAG			BIT(5)
-+#define  PVC_EG_TAG(x)			(((x) & 0x7) << 8)
-+#define  PVC_EG_TAG_MASK		PVC_EG_TAG(7)
- #define  VLAN_ATTR(x)			(((x) & 0x3) << 6)
- #define  VLAN_ATTR_MASK			VLAN_ATTR(3)
- 
-+enum mt7530_vlan_port_eg_tag {
-+	MT7530_VLAN_EG_DISABLED = 0,
-+	MT7530_VLAN_EG_CONSISTENT = 1,
-+};
-+
- enum mt7530_vlan_port_attr {
- 	MT7530_VLAN_USER = 0,
- 	MT7530_VLAN_TRANSPARENT = 3,
-From foo@baz Sat 18 Apr 2020 11:06:47 AM CEST
-From: Taras Chornyi <taras.chornyi@plvision.eu>
-Date: Thu, 9 Apr 2020 20:25:24 +0300
-Subject: net: ipv4: devinet: Fix crash when add/del multicast IP with autojoin
-
-From: Taras Chornyi <taras.chornyi@plvision.eu>
-
-[ Upstream commit 690cc86321eb9bcee371710252742fb16fe96824 ]
-
-When CONFIG_IP_MULTICAST is not set and multicast ip is added to the device
-with autojoin flag or when multicast ip is deleted kernel will crash.
-
-steps to reproduce:
-
-ip addr add 224.0.0.0/32 dev eth0
-ip addr del 224.0.0.0/32 dev eth0
-
-or
-
-ip addr add 224.0.0.0/32 dev eth0 autojoin
-
-Unable to handle kernel NULL pointer dereference at virtual address 0000000000000088
- pc : _raw_write_lock_irqsave+0x1e0/0x2ac
- lr : lock_sock_nested+0x1c/0x60
- Call trace:
-  _raw_write_lock_irqsave+0x1e0/0x2ac
-  lock_sock_nested+0x1c/0x60
-  ip_mc_config.isra.28+0x50/0xe0
-  inet_rtm_deladdr+0x1a8/0x1f0
-  rtnetlink_rcv_msg+0x120/0x350
-  netlink_rcv_skb+0x58/0x120
-  rtnetlink_rcv+0x14/0x20
-  netlink_unicast+0x1b8/0x270
-  netlink_sendmsg+0x1a0/0x3b0
-  ____sys_sendmsg+0x248/0x290
-  ___sys_sendmsg+0x80/0xc0
-  __sys_sendmsg+0x68/0xc0
-  __arm64_sys_sendmsg+0x20/0x30
-  el0_svc_common.constprop.2+0x88/0x150
-  do_el0_svc+0x20/0x80
- el0_sync_handler+0x118/0x190
-  el0_sync+0x140/0x180
-
-Fixes: 93a714d6b53d ("multicast: Extend ip address command to enable multicast group join/leave on")
-Signed-off-by: Taras Chornyi <taras.chornyi@plvision.eu>
-Signed-off-by: Vadym Kochan <vadym.kochan@plvision.eu>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- net/ipv4/devinet.c |   13 +++++++++----
- 1 file changed, 9 insertions(+), 4 deletions(-)
-
---- a/net/ipv4/devinet.c
-+++ b/net/ipv4/devinet.c
-@@ -614,12 +614,15 @@ struct in_ifaddr *inet_ifa_byprefix(stru
- 	return NULL;
- }
- 
--static int ip_mc_config(struct sock *sk, bool join, const struct in_ifaddr *ifa)
-+static int ip_mc_autojoin_config(struct net *net, bool join,
-+				 const struct in_ifaddr *ifa)
- {
-+#if defined(CONFIG_IP_MULTICAST)
- 	struct ip_mreqn mreq = {
- 		.imr_multiaddr.s_addr = ifa->ifa_address,
- 		.imr_ifindex = ifa->ifa_dev->dev->ifindex,
- 	};
-+	struct sock *sk = net->ipv4.mc_autojoin_sk;
- 	int ret;
- 
- 	ASSERT_RTNL();
-@@ -632,6 +635,9 @@ static int ip_mc_config(struct sock *sk,
- 	release_sock(sk);
- 
- 	return ret;
-+#else
-+	return -EOPNOTSUPP;
-+#endif
- }
- 
- static int inet_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh,
-@@ -675,7 +681,7 @@ static int inet_rtm_deladdr(struct sk_bu
- 			continue;
- 
- 		if (ipv4_is_multicast(ifa->ifa_address))
--			ip_mc_config(net->ipv4.mc_autojoin_sk, false, ifa);
-+			ip_mc_autojoin_config(net, false, ifa);
- 		__inet_del_ifa(in_dev, ifap, 1, nlh, NETLINK_CB(skb).portid);
- 		return 0;
- 	}
-@@ -940,8 +946,7 @@ static int inet_rtm_newaddr(struct sk_bu
- 		 */
- 		set_ifa_lifetime(ifa, valid_lft, prefered_lft);
- 		if (ifa->ifa_flags & IFA_F_MCAUTOJOIN) {
--			int ret = ip_mc_config(net->ipv4.mc_autojoin_sk,
--					       true, ifa);
-+			int ret = ip_mc_autojoin_config(net, true, ifa);
- 
- 			if (ret < 0) {
- 				inet_free_ifa(ifa);
-From foo@baz Sat 18 Apr 2020 11:06:47 AM CEST
-From: Tim Stallard <code@timstallard.me.uk>
-Date: Fri, 3 Apr 2020 21:26:21 +0100
-Subject: net: ipv6: do not consider routes via gateways for anycast address check
-
-From: Tim Stallard <code@timstallard.me.uk>
-
-[ Upstream commit 03e2a984b6165621f287fadf5f4b5cd8b58dcaba ]
-
-The behaviour for what is considered an anycast address changed in
-commit 45e4fd26683c ("ipv6: Only create RTF_CACHE routes after
-encountering pmtu exception"). This now considers the first
-address in a subnet where there is a route via a gateway
-to be an anycast address.
-
-This breaks path MTU discovery and traceroutes when a host in a
-remote network uses the address at the start of a prefix
-(eg 2600:: advertised as 2600::/48 in the DFZ) as ICMP errors
-will not be sent to anycast addresses.
-
-This patch excludes any routes with a gateway, or via point to
-point links, like the behaviour previously from
-rt6_is_gw_or_nonexthop in net/ipv6/route.c.
-
-This can be tested with:
-ip link add v1 type veth peer name v2
-ip netns add test
-ip netns exec test ip link set lo up
-ip link set v2 netns test
-ip link set v1 up
-ip netns exec test ip link set v2 up
-ip addr add 2001:db8::1/64 dev v1 nodad
-ip addr add 2001:db8:100:: dev lo nodad
-ip netns exec test ip addr add 2001:db8::2/64 dev v2 nodad
-ip netns exec test ip route add unreachable 2001:db8:1::1
-ip netns exec test ip route add 2001:db8:100::/64 via 2001:db8::1
-ip netns exec test sysctl net.ipv6.conf.all.forwarding=1
-ip route add 2001:db8:1::1 via 2001:db8::2
-ping -I 2001:db8::1 2001:db8:1::1 -c1
-ping -I 2001:db8:100:: 2001:db8:1::1 -c1
-ip addr delete 2001:db8:100:: dev lo
-ip netns delete test
-
-Currently the first ping will get back a destination unreachable ICMP
-error, but the second will never get a response, with "icmp6_send:
-acast source" logged. After this patch, both get destination
-unreachable ICMP replies.
-
-Fixes: 45e4fd26683c ("ipv6: Only create RTF_CACHE routes after encountering pmtu exception")
-Signed-off-by: Tim Stallard <code@timstallard.me.uk>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- include/net/ip6_route.h |    1 +
- 1 file changed, 1 insertion(+)
-
---- a/include/net/ip6_route.h
-+++ b/include/net/ip6_route.h
-@@ -254,6 +254,7 @@ static inline bool ipv6_anycast_destinat
- 
- 	return rt->rt6i_flags & RTF_ANYCAST ||
- 		(rt->rt6i_dst.plen < 127 &&
-+		 !(rt->rt6i_flags & (RTF_GATEWAY | RTF_NONEXTHOP)) &&
- 		 ipv6_addr_equal(&rt->rt6i_dst.addr, daddr));
- }
- 
-From foo@baz Sat 18 Apr 2020 11:06:47 AM CEST
-From: Taehee Yoo <ap420073@gmail.com>
-Date: Thu, 9 Apr 2020 14:08:08 +0000
-Subject: net: macsec: fix using wrong structure in macsec_changelink()
-
-From: Taehee Yoo <ap420073@gmail.com>
-
-[ Upstream commit 022e9d6090599c0593c78e87dc9ba98a290e6bc4 ]
-
-In the macsec_changelink(), "struct macsec_tx_sa tx_sc" is used to
-store "macsec_secy.tx_sc".
-But, the struct type of tx_sc is macsec_tx_sc, not macsec_tx_sa.
-So, the macsec_tx_sc should be used instead.
-
-Test commands:
-    ip link add dummy0 type dummy
-    ip link add macsec0 link dummy0 type macsec
-    ip link set macsec0 type macsec encrypt off
-
-Splat looks like:
-[61119.963483][ T9335] ==================================================================
-[61119.964709][ T9335] BUG: KASAN: slab-out-of-bounds in macsec_changelink.part.34+0xb6/0x200 [macsec]
-[61119.965787][ T9335] Read of size 160 at addr ffff888020d69c68 by task ip/9335
-[61119.966699][ T9335]
-[61119.966979][ T9335] CPU: 0 PID: 9335 Comm: ip Not tainted 5.6.0+ #503
-[61119.967791][ T9335] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
-[61119.968914][ T9335] Call Trace:
-[61119.969324][ T9335]  dump_stack+0x96/0xdb
-[61119.969809][ T9335]  ? macsec_changelink.part.34+0xb6/0x200 [macsec]
-[61119.970554][ T9335]  print_address_description.constprop.5+0x1be/0x360
-[61119.971294][ T9335]  ? macsec_changelink.part.34+0xb6/0x200 [macsec]
-[61119.971973][ T9335]  ? macsec_changelink.part.34+0xb6/0x200 [macsec]
-[61119.972703][ T9335]  __kasan_report+0x12a/0x170
-[61119.973323][ T9335]  ? macsec_changelink.part.34+0xb6/0x200 [macsec]
-[61119.973942][ T9335]  kasan_report+0xe/0x20
-[61119.974397][ T9335]  check_memory_region+0x149/0x1a0
-[61119.974866][ T9335]  memcpy+0x1f/0x50
-[61119.975209][ T9335]  macsec_changelink.part.34+0xb6/0x200 [macsec]
-[61119.975825][ T9335]  ? macsec_get_stats64+0x3e0/0x3e0 [macsec]
-[61119.976451][ T9335]  ? kernel_text_address+0x111/0x120
-[61119.976990][ T9335]  ? pskb_expand_head+0x25f/0xe10
-[61119.977503][ T9335]  ? stack_trace_save+0x82/0xb0
-[61119.977986][ T9335]  ? memset+0x1f/0x40
-[61119.978397][ T9335]  ? __nla_validate_parse+0x98/0x1ab0
-[61119.978936][ T9335]  ? macsec_alloc_tfm+0x90/0x90 [macsec]
-[61119.979511][ T9335]  ? __kasan_slab_free+0x111/0x150
-[61119.980021][ T9335]  ? kfree+0xce/0x2f0
-[61119.980700][ T9335]  ? netlink_trim+0x196/0x1f0
-[61119.981420][ T9335]  ? nla_memcpy+0x90/0x90
-[61119.982036][ T9335]  ? register_lock_class+0x19e0/0x19e0
-[61119.982776][ T9335]  ? memcpy+0x34/0x50
-[61119.983327][ T9335]  __rtnl_newlink+0x922/0x1270
-[ ... ]
-
-Fixes: 3cf3227a21d1 ("net: macsec: hardware offloading infrastructure")
-Signed-off-by: Taehee Yoo <ap420073@gmail.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/net/macsec.c |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/net/macsec.c
-+++ b/drivers/net/macsec.c
-@@ -3463,7 +3463,7 @@ static int macsec_changelink(struct net_
- 			     struct netlink_ext_ack *extack)
- {
- 	struct macsec_dev *macsec = macsec_priv(dev);
--	struct macsec_tx_sa tx_sc;
-+	struct macsec_tx_sc tx_sc;
- 	struct macsec_secy secy;
- 	int ret;
- 
-From foo@baz Sat 18 Apr 2020 11:06:47 AM CEST
-From: Atsushi Nemoto <atsushi.nemoto@sord.co.jp>
-Date: Fri, 10 Apr 2020 12:16:16 +0900
-Subject: net: phy: micrel: use genphy_read_status for KSZ9131
-
-From: Atsushi Nemoto <atsushi.nemoto@sord.co.jp>
-
-[ Upstream commit 68dac3eb50be32957ae6e1e6da9281a3b7c6658b ]
-
-KSZ9131 will not work with some switches due to workaround for KSZ9031
-introduced in commit d2fd719bcb0e83cb39cfee22ee800f98a56eceb3
-("net/phy: micrel: Add workaround for bad autoneg").
-Use genphy_read_status instead of dedicated ksz9031_read_status.
-
-Fixes: bff5b4b37372 ("net: phy: micrel: add Microchip KSZ9131 initial driver")
-Signed-off-by: Atsushi Nemoto <atsushi.nemoto@sord.co.jp>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/net/phy/micrel.c |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/net/phy/micrel.c
-+++ b/drivers/net/phy/micrel.c
-@@ -1154,7 +1154,7 @@ static struct phy_driver ksphy_driver[]
- 	.driver_data	= &ksz9021_type,
- 	.probe		= kszphy_probe,
- 	.config_init	= ksz9131_config_init,
--	.read_status	= ksz9031_read_status,
-+	.read_status	= genphy_read_status,
- 	.ack_interrupt	= kszphy_ack_interrupt,
- 	.config_intr	= kszphy_config_intr,
- 	.get_sset_count = kszphy_get_sset_count,
-From foo@baz Sat 18 Apr 2020 11:06:47 AM CEST
-From: Wang Wenhu <wenhu.wang@vivo.com>
-Date: Wed, 8 Apr 2020 19:53:53 -0700
-Subject: net: qrtr: send msgs from local of same id as broadcast
-
-From: Wang Wenhu <wenhu.wang@vivo.com>
-
-[ Upstream commit 6dbf02acef69b0742c238574583b3068afbd227c ]
-
-If the local node id(qrtr_local_nid) is not modified after its
-initialization, it equals to the broadcast node id(QRTR_NODE_BCAST).
-So the messages from local node should not be taken as broadcast
-and keep the process going to send them out anyway.
-
-The definitions are as follow:
-static unsigned int qrtr_local_nid = NUMA_NO_NODE;
-
-Fixes: fdf5fd397566 ("net: qrtr: Broadcast messages only from control port")
-Signed-off-by: Wang Wenhu <wenhu.wang@vivo.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- net/qrtr/qrtr.c |    7 ++++---
- 1 file changed, 4 insertions(+), 3 deletions(-)
-
---- a/net/qrtr/qrtr.c
-+++ b/net/qrtr/qrtr.c
-@@ -907,20 +907,21 @@ static int qrtr_sendmsg(struct socket *s
- 
- 	node = NULL;
- 	if (addr->sq_node == QRTR_NODE_BCAST) {
--		enqueue_fn = qrtr_bcast_enqueue;
--		if (addr->sq_port != QRTR_PORT_CTRL) {
-+		if (addr->sq_port != QRTR_PORT_CTRL &&
-+		    qrtr_local_nid != QRTR_NODE_BCAST) {
- 			release_sock(sk);
- 			return -ENOTCONN;
- 		}
-+		enqueue_fn = qrtr_bcast_enqueue;
- 	} else if (addr->sq_node == ipc->us.sq_node) {
- 		enqueue_fn = qrtr_local_enqueue;
- 	} else {
--		enqueue_fn = qrtr_node_enqueue;
- 		node = qrtr_node_lookup(addr->sq_node);
- 		if (!node) {
- 			release_sock(sk);
- 			return -ECONNRESET;
- 		}
-+		enqueue_fn = qrtr_node_enqueue;
- 	}
- 
- 	plen = (len + 3) & ~3;
-From foo@baz Sat 18 Apr 2020 11:06:47 AM CEST
-From: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
-Date: Mon, 6 Apr 2020 14:39:32 +0300
-Subject: net: revert default NAPI poll timeout to 2 jiffies
-
-From: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
-
-[ Upstream commit a4837980fd9fa4c70a821d11831698901baef56b ]
-
-For HZ < 1000 timeout 2000us rounds up to 1 jiffy but expires randomly
-because next timer interrupt could come shortly after starting softirq.
-
-For commonly used CONFIG_HZ=1000 nothing changes.
-
-Fixes: 7acf8a1e8a28 ("Replace 2 jiffies with sysctl netdev_budget_usecs to enable softirq tuning")
-Reported-by: Dmitry Yakunin <zeil@yandex-team.ru>
-Signed-off-by: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- net/core/dev.c |    3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
---- a/net/core/dev.c
-+++ b/net/core/dev.c
-@@ -4140,7 +4140,8 @@ EXPORT_SYMBOL(netdev_max_backlog);
- 
- int netdev_tstamp_prequeue __read_mostly = 1;
- int netdev_budget __read_mostly = 300;
--unsigned int __read_mostly netdev_budget_usecs = 2000;
-+/* Must be at least 2 jiffes to guarantee 1 jiffy timeout */
-+unsigned int __read_mostly netdev_budget_usecs = 2 * USEC_PER_SEC / HZ;
- int weight_p __read_mostly = 64;           /* old backlog weight */
- int dev_weight_rx_bias __read_mostly = 1;  /* bias for backlog weight */
- int dev_weight_tx_bias __read_mostly = 1;  /* bias for output_queue quota */
-From foo@baz Sat 18 Apr 2020 11:06:47 AM CEST
-From: Gilberto Bertin <me@jibi.io>
-Date: Fri, 10 Apr 2020 18:20:59 +0200
-Subject: net: tun: record RX queue in skb before do_xdp_generic()
-
-From: Gilberto Bertin <me@jibi.io>
-
-[ Upstream commit 3fe260e00cd0bf0be853c48fcc1e19853df615bb ]
-
-This allows netif_receive_generic_xdp() to correctly determine the RX
-queue from which the skb is coming, so that the context passed to the
-XDP program will contain the correct RX queue index.
-
-Signed-off-by: Gilberto Bertin <me@jibi.io>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/net/tun.c |    3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
---- a/drivers/net/tun.c
-+++ b/drivers/net/tun.c
-@@ -1925,6 +1925,7 @@ drop:
- 
- 	skb_reset_network_header(skb);
- 	skb_probe_transport_header(skb);
-+	skb_record_rx_queue(skb, tfile->queue_index);
- 
- 	if (skb_xdp) {
- 		struct bpf_prog *xdp_prog;
-@@ -2498,6 +2499,7 @@ build:
- 	skb->protocol = eth_type_trans(skb, tun->dev);
- 	skb_reset_network_header(skb);
- 	skb_probe_transport_header(skb);
-+	skb_record_rx_queue(skb, tfile->queue_index);
- 
- 	if (skb_xdp) {
- 		err = do_xdp_generic(xdp_prog, skb);
-@@ -2509,7 +2511,6 @@ build:
- 	    !tfile->detached)
- 		rxhash = __skb_get_hash_symmetric(skb);
- 
--	skb_record_rx_queue(skb, tfile->queue_index);
- 	netif_receive_skb(skb);
- 
- 	/* No need for get_cpu_ptr() here since this function is
-From foo@baz Sat 18 Apr 2020 11:06:47 AM CEST
-From: "René van Dorst" <opensource@vdorst.com>
-Date: Mon, 6 Apr 2020 05:42:53 +0800
-Subject: net: dsa: mt7530: move mt7623 settings out off the mt7530
-
-From: "René van Dorst" <opensource@vdorst.com>
-
-[ Upstream commit 84d2f7b708c374a15a2abe092a74e0e47d018286 ]
-
-Moving mt7623 logic out off mt7530, is required to make hardware setting
-consistent after we introduce phylink to mtk driver.
-
-Fixes: ca366d6c889b ("net: dsa: mt7530: Convert to PHYLINK API")
-Reviewed-by: Sean Wang <sean.wang@mediatek.com>
-Tested-by: Sean Wang <sean.wang@mediatek.com>
-Signed-off-by: René van Dorst <opensource@vdorst.com>
-Tested-by: Frank Wunderlich <frank-w@public-files.de>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/net/dsa/mt7530.c |   85 -----------------------------------------------
- drivers/net/dsa/mt7530.h |   10 -----
- 2 files changed, 95 deletions(-)
-
---- a/drivers/net/dsa/mt7530.c
-+++ b/drivers/net/dsa/mt7530.c
-@@ -67,58 +67,6 @@ static const struct mt7530_mib_desc mt75
- };
- 
- static int
--mt7623_trgmii_write(struct mt7530_priv *priv,  u32 reg, u32 val)
--{
--	int ret;
--
--	ret =  regmap_write(priv->ethernet, TRGMII_BASE(reg), val);
--	if (ret < 0)
--		dev_err(priv->dev,
--			"failed to priv write register\n");
--	return ret;
--}
--
--static u32
--mt7623_trgmii_read(struct mt7530_priv *priv, u32 reg)
--{
--	int ret;
--	u32 val;
--
--	ret = regmap_read(priv->ethernet, TRGMII_BASE(reg), &val);
--	if (ret < 0) {
--		dev_err(priv->dev,
--			"failed to priv read register\n");
--		return ret;
--	}
--
--	return val;
--}
--
--static void
--mt7623_trgmii_rmw(struct mt7530_priv *priv, u32 reg,
--		  u32 mask, u32 set)
--{
--	u32 val;
--
--	val = mt7623_trgmii_read(priv, reg);
--	val &= ~mask;
--	val |= set;
--	mt7623_trgmii_write(priv, reg, val);
--}
--
--static void
--mt7623_trgmii_set(struct mt7530_priv *priv, u32 reg, u32 val)
--{
--	mt7623_trgmii_rmw(priv, reg, 0, val);
--}
--
--static void
--mt7623_trgmii_clear(struct mt7530_priv *priv, u32 reg, u32 val)
--{
--	mt7623_trgmii_rmw(priv, reg, val, 0);
--}
--
--static int
- core_read_mmd_indirect(struct mt7530_priv *priv, int prtad, int devad)
- {
- 	struct mii_bus *bus = priv->bus;
-@@ -530,27 +478,6 @@ mt7530_pad_clk_setup(struct dsa_switch *
- 		for (i = 0 ; i < NUM_TRGMII_CTRL; i++)
- 			mt7530_rmw(priv, MT7530_TRGMII_RD(i),
- 				   RD_TAP_MASK, RD_TAP(16));
--	else
--		if (priv->id != ID_MT7621)
--			mt7623_trgmii_set(priv, GSW_INTF_MODE,
--					  INTF_MODE_TRGMII);
--
--	return 0;
--}
--
--static int
--mt7623_pad_clk_setup(struct dsa_switch *ds)
--{
--	struct mt7530_priv *priv = ds->priv;
--	int i;
--
--	for (i = 0 ; i < NUM_TRGMII_CTRL; i++)
--		mt7623_trgmii_write(priv, GSW_TRGMII_TD_ODT(i),
--				    TD_DM_DRVP(8) | TD_DM_DRVN(8));
--
--	mt7623_trgmii_set(priv, GSW_TRGMII_RCK_CTRL, RX_RST | RXC_DQSISEL);
--	mt7623_trgmii_clear(priv, GSW_TRGMII_RCK_CTRL, RX_RST);
--
- 	return 0;
- }
- 
-@@ -1258,10 +1185,6 @@ mt7530_setup(struct dsa_switch *ds)
- 	dn = dsa_to_port(ds, MT7530_CPU_PORT)->master->dev.of_node->parent;
- 
- 	if (priv->id == ID_MT7530) {
--		priv->ethernet = syscon_node_to_regmap(dn);
--		if (IS_ERR(priv->ethernet))
--			return PTR_ERR(priv->ethernet);
--
- 		regulator_set_voltage(priv->core_pwr, 1000000, 1000000);
- 		ret = regulator_enable(priv->core_pwr);
- 		if (ret < 0) {
-@@ -1427,14 +1350,6 @@ static void mt7530_phylink_mac_config(st
- 		/* Setup TX circuit incluing relevant PAD and driving */
- 		mt7530_pad_clk_setup(ds, state->interface);
- 
--		if (priv->id == ID_MT7530) {
--			/* Setup RX circuit, relevant PAD and driving on the
--			 * host which must be placed after the setup on the
--			 * device side is all finished.
--			 */
--			mt7623_pad_clk_setup(ds);
--		}
--
- 		priv->p6_interface = state->interface;
- 		break;
- 	default:
---- a/drivers/net/dsa/mt7530.h
-+++ b/drivers/net/dsa/mt7530.h
-@@ -275,7 +275,6 @@ enum mt7530_vlan_port_attr {
- 
- /* Registers for TRGMII on the both side */
- #define MT7530_TRGMII_RCK_CTRL		0x7a00
--#define GSW_TRGMII_RCK_CTRL		0x300
- #define  RX_RST				BIT(31)
- #define  RXC_DQSISEL			BIT(30)
- #define  DQSI1_TAP_MASK			(0x7f << 8)
-@@ -284,31 +283,24 @@ enum mt7530_vlan_port_attr {
- #define  DQSI0_TAP(x)			((x) & 0x7f)
- 
- #define MT7530_TRGMII_RCK_RTT		0x7a04
--#define GSW_TRGMII_RCK_RTT		0x304
- #define  DQS1_GATE			BIT(31)
- #define  DQS0_GATE			BIT(30)
- 
- #define MT7530_TRGMII_RD(x)		(0x7a10 + (x) * 8)
--#define GSW_TRGMII_RD(x)		(0x310 + (x) * 8)
- #define  BSLIP_EN			BIT(31)
- #define  EDGE_CHK			BIT(30)
- #define  RD_TAP_MASK			0x7f
- #define  RD_TAP(x)			((x) & 0x7f)
- 
--#define GSW_TRGMII_TXCTRL		0x340
- #define MT7530_TRGMII_TXCTRL		0x7a40
- #define  TRAIN_TXEN			BIT(31)
- #define  TXC_INV			BIT(30)
- #define  TX_RST				BIT(28)
- 
- #define MT7530_TRGMII_TD_ODT(i)		(0x7a54 + 8 * (i))
--#define GSW_TRGMII_TD_ODT(i)		(0x354 + 8 * (i))
- #define  TD_DM_DRVP(x)			((x) & 0xf)
- #define  TD_DM_DRVN(x)			(((x) & 0xf) << 4)
- 
--#define GSW_INTF_MODE			0x390
--#define  INTF_MODE_TRGMII		BIT(1)
--
- #define MT7530_TRGMII_TCK_CTRL		0x7a78
- #define  TCK_TAP(x)			(((x) & 0xf) << 8)
- 
-@@ -441,7 +433,6 @@ static const char *p5_intf_modes(unsigne
-  * @ds:			The pointer to the dsa core structure
-  * @bus:		The bus used for the device and built-in PHY
-  * @rstc:		The pointer to reset control used by MCM
-- * @ethernet:		The regmap used for access TRGMII-based registers
-  * @core_pwr:		The power supplied into the core
-  * @io_pwr:		The power supplied into the I/O
-  * @reset:		The descriptor for GPIO line tied to its reset pin
-@@ -458,7 +449,6 @@ struct mt7530_priv {
- 	struct dsa_switch	*ds;
- 	struct mii_bus		*bus;
- 	struct reset_control	*rstc;
--	struct regmap		*ethernet;
- 	struct regulator	*core_pwr;
- 	struct regulator	*io_pwr;
- 	struct gpio_desc	*reset;
-From foo@baz Sat 18 Apr 2020 11:06:47 AM CEST
-From: "René van Dorst" <opensource@vdorst.com>
-Date: Mon, 6 Apr 2020 05:42:54 +0800
-Subject: net: ethernet: mediatek: move mt7623 settings out off the mt7530
-
-From: "René van Dorst" <opensource@vdorst.com>
-
-[ Upstream commit a5d75538295b06bc6ade1b9da07b9bee57d1c677 ]
-
-Moving mt7623 logic out off mt7530, is required to make hardware setting
-consistent after we introduce phylink to mtk driver.
-
-Fixes: b8fc9f30821e ("net: ethernet: mediatek: Add basic PHYLINK support")
-Reviewed-by: Sean Wang <sean.wang@mediatek.com>
-Tested-by: Sean Wang <sean.wang@mediatek.com>
-Signed-off-by: René van Dorst <opensource@vdorst.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/net/ethernet/mediatek/mtk_eth_soc.c |   24 +++++++++++++++++++++++-
- drivers/net/ethernet/mediatek/mtk_eth_soc.h |    8 ++++++++
- 2 files changed, 31 insertions(+), 1 deletion(-)
-
---- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -65,6 +65,17 @@ u32 mtk_r32(struct mtk_eth *eth, unsigne
- 	return __raw_readl(eth->base + reg);
- }
- 
-+u32 mtk_m32(struct mtk_eth *eth, u32 mask, u32 set, unsigned reg)
-+{
-+	u32 val;
-+
-+	val = mtk_r32(eth, reg);
-+	val &= ~mask;
-+	val |= set;
-+	mtk_w32(eth, val, reg);
-+	return reg;
-+}
-+
- static int mtk_mdio_busy_wait(struct mtk_eth *eth)
- {
- 	unsigned long t_start = jiffies;
-@@ -193,7 +204,7 @@ static void mtk_mac_config(struct phylin
- 	struct mtk_mac *mac = container_of(config, struct mtk_mac,
- 					   phylink_config);
- 	struct mtk_eth *eth = mac->hw;
--	u32 mcr_cur, mcr_new, sid;
-+	u32 mcr_cur, mcr_new, sid, i;
- 	int val, ge_mode, err;
- 
- 	/* MT76x8 has no hardware settings between for the MAC */
-@@ -255,6 +266,17 @@ static void mtk_mac_config(struct phylin
- 				    PHY_INTERFACE_MODE_TRGMII)
- 					mtk_gmac0_rgmii_adjust(mac->hw,
- 							       state->speed);
-+
-+				/* mt7623_pad_clk_setup */
-+				for (i = 0 ; i < NUM_TRGMII_CTRL; i++)
-+					mtk_w32(mac->hw,
-+						TD_DM_DRVP(8) | TD_DM_DRVN(8),
-+						TRGMII_TD_ODT(i));
-+
-+				/* Assert/release MT7623 RXC reset */
-+				mtk_m32(mac->hw, 0, RXC_RST | RXC_DQSISEL,
-+					TRGMII_RCK_CTRL);
-+				mtk_m32(mac->hw, RXC_RST, 0, TRGMII_RCK_CTRL);
- 			}
- 		}
- 
---- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
-+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
-@@ -352,10 +352,13 @@
- #define DQSI0(x)		((x << 0) & GENMASK(6, 0))
- #define DQSI1(x)		((x << 8) & GENMASK(14, 8))
- #define RXCTL_DMWTLAT(x)	((x << 16) & GENMASK(18, 16))
-+#define RXC_RST			BIT(31)
- #define RXC_DQSISEL		BIT(30)
- #define RCK_CTRL_RGMII_1000	(RXC_DQSISEL | RXCTL_DMWTLAT(2) | DQSI1(16))
- #define RCK_CTRL_RGMII_10_100	RXCTL_DMWTLAT(2)
- 
-+#define NUM_TRGMII_CTRL		5
-+
- /* TRGMII RXC control register */
- #define TRGMII_TCK_CTRL		0x10340
- #define TXCTL_DMWTLAT(x)	((x << 16) & GENMASK(18, 16))
-@@ -363,6 +366,11 @@
- #define TCK_CTRL_RGMII_1000	TXCTL_DMWTLAT(2)
- #define TCK_CTRL_RGMII_10_100	(TXC_INV | TXCTL_DMWTLAT(2))
- 
-+/* TRGMII TX Drive Strength */
-+#define TRGMII_TD_ODT(i)	(0x10354 + 8 * (i))
-+#define  TD_DM_DRVP(x)		((x) & 0xf)
-+#define  TD_DM_DRVN(x)		(((x) & 0xf) << 4)
-+
- /* TRGMII Interface mode register */
- #define INTF_MODE		0x10390
- #define TRGMII_INTF_DIS		BIT(0)
-From foo@baz Sat 18 Apr 2020 11:06:47 AM CEST
-From: Moshe Shemesh <moshe@mellanox.com>
-Date: Mon, 30 Mar 2020 10:21:49 +0300
-Subject: net/mlx5: Fix frequent ioread PCI access during recovery
-
-From: Moshe Shemesh <moshe@mellanox.com>
-
-[ Upstream commit 8c702a53bb0a79bfa203ba21ef1caba43673c5b7 ]
-
-High frequency of PCI ioread calls during recovery flow may cause the
-following trace on powerpc:
-
-[ 248.670288] EEH: 2100000 reads ignored for recovering device at
-location=Slot1 driver=mlx5_core pci addr=0000:01:00.1
-[ 248.670331] EEH: Might be infinite loop in mlx5_core driver
-[ 248.670361] CPU: 2 PID: 35247 Comm: kworker/u192:11 Kdump: loaded
-Tainted: G OE ------------ 4.14.0-115.14.1.el7a.ppc64le #1
-[ 248.670425] Workqueue: mlx5_health0000:01:00.1 health_recover_work
-[mlx5_core]
-[ 248.670471] Call Trace:
-[ 248.670492] [c00020391c11b960] [c000000000c217ac] dump_stack+0xb0/0xf4
-(unreliable)
-[ 248.670548] [c00020391c11b9a0] [c000000000045818]
-eeh_check_failure+0x5c8/0x630
-[ 248.670631] [c00020391c11ba50] [c00000000068fce4]
-ioread32be+0x114/0x1c0
-[ 248.670692] [c00020391c11bac0] [c00800000dd8b400]
-mlx5_error_sw_reset+0x160/0x510 [mlx5_core]
-[ 248.670752] [c00020391c11bb60] [c00800000dd75824]
-mlx5_disable_device+0x34/0x1d0 [mlx5_core]
-[ 248.670822] [c00020391c11bbe0] [c00800000dd8affc]
-health_recover_work+0x11c/0x3c0 [mlx5_core]
-[ 248.670891] [c00020391c11bc80] [c000000000164fcc]
-process_one_work+0x1bc/0x5f0
-[ 248.670955] [c00020391c11bd20] [c000000000167f8c]
-worker_thread+0xac/0x6b0
-[ 248.671015] [c00020391c11bdc0] [c000000000171618] kthread+0x168/0x1b0
-[ 248.671067] [c00020391c11be30] [c00000000000b65c]
-ret_from_kernel_thread+0x5c/0x80
-
-Reduce the PCI ioread frequency during recovery by using msleep()
-instead of cond_resched()
-
-Fixes: 3e5b72ac2f29 ("net/mlx5: Issue SW reset on FW assert")
-Signed-off-by: Moshe Shemesh <moshe@mellanox.com>
-Reviewed-by: Feras Daoud <ferasda@mellanox.com>
-Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/net/ethernet/mellanox/mlx5/core/health.c |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/net/ethernet/mellanox/mlx5/core/health.c
-+++ b/drivers/net/ethernet/mellanox/mlx5/core/health.c
-@@ -243,7 +243,7 @@ recover_from_sw_reset:
- 		if (mlx5_get_nic_state(dev) == MLX5_NIC_IFC_DISABLED)
- 			break;
- 
--		cond_resched();
-+		msleep(20);
- 	} while (!time_after(jiffies, end));
- 
- 	if (mlx5_get_nic_state(dev) != MLX5_NIC_IFC_DISABLED) {
-From foo@baz Sat 18 Apr 2020 11:06:47 AM CEST
-From: Eran Ben Elisha <eranbe@mellanox.com>
-Date: Tue, 24 Mar 2020 15:04:26 +0200
-Subject: net/mlx5e: Add missing release firmware call
-
-From: Eran Ben Elisha <eranbe@mellanox.com>
-
-[ Upstream commit d19987ccf57501894fdd8fadc2e55e4a3dd57239 ]
-
-Once driver finishes flashing the firmware image, it should release it.
-
-Fixes: 9c8bca2637b8 ("mlx5: Move firmware flash implementation to devlink")
-Signed-off-by: Eran Ben Elisha <eranbe@mellanox.com>
-Reviewed-by: Aya Levin <ayal@mellanox.com>
-Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/net/ethernet/mellanox/mlx5/core/devlink.c |    5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
---- a/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
-+++ b/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
-@@ -23,7 +23,10 @@ static int mlx5_devlink_flash_update(str
- 	if (err)
- 		return err;
- 
--	return mlx5_firmware_flash(dev, fw, extack);
-+	err = mlx5_firmware_flash(dev, fw, extack);
-+	release_firmware(fw);
-+
-+	return err;
- }
- 
- static u8 mlx5_fw_ver_major(u32 version)
-From foo@baz Sat 18 Apr 2020 11:06:47 AM CEST
-From: Dmytro Linkin <dmitrolin@mellanox.com>
-Date: Wed, 1 Apr 2020 14:41:27 +0300
-Subject: net/mlx5e: Fix nest_level for vlan pop action
-
-From: Dmytro Linkin <dmitrolin@mellanox.com>
-
-[ Upstream commit 70f478ca085deec4d6c1f187f773f5827ddce7e8 ]
-
-Current value of nest_level, assigned from net_device lower_level value,
-does not reflect the actual number of vlan headers, needed to pop.
-For ex., if we have untagged ingress traffic sended over vlan devices,
-instead of one pop action, driver will perform two pop actions.
-To fix that, calculate nest_level as difference between vlan device and
-parent device lower_levels.
-
-Fixes: f3b0a18bb6cb ("net: remove unnecessary variables and callback")
-Signed-off-by: Dmytro Linkin <dmitrolin@mellanox.com>
-Signed-off-by: Roi Dayan <roid@mellanox.com>
-Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/net/ethernet/mellanox/mlx5/core/en_tc.c |    5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
---- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
-+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
-@@ -3269,12 +3269,13 @@ static int add_vlan_pop_action(struct ml
- 			       struct mlx5_esw_flow_attr *attr,
- 			       u32 *action)
- {
--	int nest_level = attr->parse_attr->filter_dev->lower_level;
- 	struct flow_action_entry vlan_act = {
- 		.id = FLOW_ACTION_VLAN_POP,
- 	};
--	int err = 0;
-+	int nest_level, err = 0;
- 
-+	nest_level = attr->parse_attr->filter_dev->lower_level -
-+						priv->netdev->lower_level;
- 	while (nest_level--) {
- 		err = parse_tc_vlan_action(priv, &vlan_act, attr, action);
- 		if (err)
-From foo@baz Sat 18 Apr 2020 11:06:47 AM CEST
-From: Parav Pandit <parav@mellanox.com>
-Date: Fri, 3 Apr 2020 03:57:30 -0500
-Subject: net/mlx5e: Fix pfnum in devlink port attribute
-
-From: Parav Pandit <parav@mellanox.com>
-
-[ Upstream commit 7482d9cb5b974b7ad1a58fa8714f7a8c05b5d278 ]
-
-Cited patch missed to extract PCI pf number accurately for PF and VF
-port flavour. It considered PCI device + function number.
-Due to this, device having non zero device number shown large pfnum.
-
-Hence, use only PCI function number; to avoid similar errors, derive
-pfnum one time for all port flavours.
-
-Fixes: f60f315d339e ("net/mlx5e: Register devlink ports for physical link, PCI PF, VFs")
-Reviewed-by: Jiri Pirko <jiri@mellanox.com>
-Signed-off-by: Parav Pandit <parav@mellanox.com>
-Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/net/ethernet/mellanox/mlx5/core/en_rep.c |    9 +++++----
- 1 file changed, 5 insertions(+), 4 deletions(-)
-
---- a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
-+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
-@@ -1969,29 +1969,30 @@ static int register_devlink_port(struct
- 	struct mlx5_eswitch_rep *rep = rpriv->rep;
- 	struct netdev_phys_item_id ppid = {};
- 	unsigned int dl_port_index = 0;
-+	u16 pfnum;
- 
- 	if (!is_devlink_port_supported(dev, rpriv))
- 		return 0;
- 
- 	mlx5e_rep_get_port_parent_id(rpriv->netdev, &ppid);
-+	pfnum = PCI_FUNC(dev->pdev->devfn);
- 
- 	if (rep->vport == MLX5_VPORT_UPLINK) {
- 		devlink_port_attrs_set(&rpriv->dl_port,
- 				       DEVLINK_PORT_FLAVOUR_PHYSICAL,
--				       PCI_FUNC(dev->pdev->devfn), false, 0,
-+				       pfnum, false, 0,
- 				       &ppid.id[0], ppid.id_len);
- 		dl_port_index = vport_to_devlink_port_index(dev, rep->vport);
- 	} else if (rep->vport == MLX5_VPORT_PF) {
- 		devlink_port_attrs_pci_pf_set(&rpriv->dl_port,
- 					      &ppid.id[0], ppid.id_len,
--					      dev->pdev->devfn);
-+					      pfnum);
- 		dl_port_index = rep->vport;
- 	} else if (mlx5_eswitch_is_vf_vport(dev->priv.eswitch,
- 					    rpriv->rep->vport)) {
- 		devlink_port_attrs_pci_vf_set(&rpriv->dl_port,
- 					      &ppid.id[0], ppid.id_len,
--					      dev->pdev->devfn,
--					      rep->vport - 1);
-+					      pfnum, rep->vport - 1);
- 		dl_port_index = vport_to_devlink_port_index(dev, rep->vport);
- 	}
- 
-From foo@baz Sat 18 Apr 2020 11:06:47 AM CEST
-From: Tim Stallard <code@timstallard.me.uk>
-Date: Fri, 3 Apr 2020 21:22:57 +0100
-Subject: net: icmp6: do not select saddr from iif when route has prefsrc set
-
-From: Tim Stallard <code@timstallard.me.uk>
-
-[ Upstream commit b93cfb9cd3af3adc9ba4854f178d5300f7544d3e ]
-
-Since commit fac6fce9bdb5 ("net: icmp6: provide input address for
-traceroute6") ICMPv6 errors have source addresses from the ingress
-interface. However, this overrides when source address selection is
-influenced by setting preferred source addresses on routes.
-
-This can result in ICMP errors being lost to upstream BCP38 filters
-when the wrong source addresses are used, breaking path MTU discovery
-and traceroute.
-
-This patch sets the modified source address selection to only take place
-when the route used has no prefsrc set.
-
-It can be tested with:
-
-ip link add v1 type veth peer name v2
-ip netns add test
-ip netns exec test ip link set lo up
-ip link set v2 netns test
-ip link set v1 up
-ip netns exec test ip link set v2 up
-ip addr add 2001:db8::1/64 dev v1 nodad
-ip addr add 2001:db8::3 dev v1 nodad
-ip netns exec test ip addr add 2001:db8::2/64 dev v2 nodad
-ip netns exec test ip route add unreachable 2001:db8:1::1
-ip netns exec test ip addr add 2001:db8:100::1 dev lo
-ip netns exec test ip route add 2001:db8::1 dev v2 src 2001:db8:100::1
-ip route add 2001:db8:1000::1 via 2001:db8::2
-traceroute6 -s 2001:db8::1 2001:db8:1000::1
-traceroute6 -s 2001:db8::3 2001:db8:1000::1
-ip netns delete test
-
-Output before:
-$ traceroute6 -s 2001:db8::1 2001:db8:1000::1
-traceroute to 2001:db8:1000::1 (2001:db8:1000::1), 30 hops max, 80 byte packets
- 1  2001:db8::2 (2001:db8::2)  0.843 ms !N  0.396 ms !N  0.257 ms !N
-$ traceroute6 -s 2001:db8::3 2001:db8:1000::1
-traceroute to 2001:db8:1000::1 (2001:db8:1000::1), 30 hops max, 80 byte packets
- 1  2001:db8::2 (2001:db8::2)  0.772 ms !N  0.257 ms !N  0.357 ms !N
-
-After:
-$ traceroute6 -s 2001:db8::1 2001:db8:1000::1
-traceroute to 2001:db8:1000::1 (2001:db8:1000::1), 30 hops max, 80 byte packets
- 1  2001:db8:100::1 (2001:db8:100::1)  8.885 ms !N  0.310 ms !N  0.174 ms !N
-$ traceroute6 -s 2001:db8::3 2001:db8:1000::1
-traceroute to 2001:db8:1000::1 (2001:db8:1000::1), 30 hops max, 80 byte packets
- 1  2001:db8::2 (2001:db8::2)  1.403 ms !N  0.205 ms !N  0.313 ms !N
-
-Fixes: fac6fce9bdb5 ("net: icmp6: provide input address for traceroute6")
-Signed-off-by: Tim Stallard <code@timstallard.me.uk>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- net/ipv6/icmp.c |   21 ++++++++++++++++++++-
- 1 file changed, 20 insertions(+), 1 deletion(-)
-
---- a/net/ipv6/icmp.c
-+++ b/net/ipv6/icmp.c
-@@ -229,6 +229,25 @@ static bool icmpv6_xrlim_allow(struct so
- 	return res;
- }
- 
-+static bool icmpv6_rt_has_prefsrc(struct sock *sk, u8 type,
-+				  struct flowi6 *fl6)
-+{
-+	struct net *net = sock_net(sk);
-+	struct dst_entry *dst;
-+	bool res = false;
-+
-+	dst = ip6_route_output(net, sk, fl6);
-+	if (!dst->error) {
-+		struct rt6_info *rt = (struct rt6_info *)dst;
-+		struct in6_addr prefsrc;
-+
-+		rt6_get_prefsrc(rt, &prefsrc);
-+		res = !ipv6_addr_any(&prefsrc);
-+	}
-+	dst_release(dst);
-+	return res;
-+}
-+
- /*
-  *	an inline helper for the "simple" if statement below
-  *	checks if parameter problem report is caused by an
-@@ -527,7 +546,7 @@ static void icmp6_send(struct sk_buff *s
- 		saddr = force_saddr;
- 	if (saddr) {
- 		fl6.saddr = *saddr;
--	} else {
-+	} else if (!icmpv6_rt_has_prefsrc(sk, type, &fl6)) {
- 		/* select a more meaningful saddr from input if */
- 		struct net_device *in_netdev;
- 
-From foo@baz Sat 18 Apr 2020 11:06:47 AM CEST
-From: Vladimir Oltean <vladimir.oltean@nxp.com>
-Date: Tue, 14 Apr 2020 22:36:15 +0300
-Subject: net: mscc: ocelot: fix untagged packet drops when enslaving to vlan aware bridge
-
-From: Vladimir Oltean <vladimir.oltean@nxp.com>
-
-[ Upstream commit 87b0f983f66f23762921129fd35966eddc3f2dae ]
-
-To rehash a previous explanation given in commit 1c44ce560b4d ("net:
-mscc: ocelot: fix vlan_filtering when enslaving to bridge before link is
-up"), the switch driver operates the in a mode where a single VLAN can
-be transmitted as untagged on a particular egress port. That is the
-"native VLAN on trunk port" use case.
-
-The configuration for this native VLAN is driven in 2 ways:
- - Set the egress port rewriter to strip the VLAN tag for the native
-   VID (as it is egress-untagged, after all).
- - Configure the ingress port to drop untagged and priority-tagged
-   traffic, if there is no native VLAN. The intention of this setting is
-   that a trunk port with no native VLAN should not accept untagged
-   traffic.
-
-Since both of the above configurations for the native VLAN should only
-be done if VLAN awareness is requested, they are actually done from the
-ocelot_port_vlan_filtering function, after the basic procedure of
-toggling the VLAN awareness flag of the port.
-
-But there's a problem with that simplistic approach: we are trying to
-juggle with 2 independent variables from a single function:
- - Native VLAN of the port - its value is held in port->vid.
- - VLAN awareness state of the port - currently there are some issues
-   here, more on that later*.
-The actual problem can be seen when enslaving the switch ports to a VLAN
-filtering bridge:
- 0. The driver configures a pvid of zero for each port, when in
-    standalone mode. While the bridge configures a default_pvid of 1 for
-    each port that gets added as a slave to it.
- 1. The bridge calls ocelot_port_vlan_filtering with vlan_aware=true.
-    The VLAN-filtering-dependent portion of the native VLAN
-    configuration is done, considering that the native VLAN is 0.
- 2. The bridge calls ocelot_vlan_add with vid=1, pvid=true,
-    untagged=true. The native VLAN changes to 1 (change which gets
-    propagated to hardware).
- 3. ??? - nobody calls ocelot_port_vlan_filtering again, to reapply the
-    VLAN-filtering-dependent portion of the native VLAN configuration,
-    for the new native VLAN of 1. One can notice that after toggling "ip
-    link set dev br0 type bridge vlan_filtering 0 && ip link set dev br0
-    type bridge vlan_filtering 1", the new native VLAN finally makes it
-    through and untagged traffic finally starts flowing again. But
-    obviously that shouldn't be needed.
-
-So it is clear that 2 independent variables need to both re-trigger the
-native VLAN configuration. So we introduce the second variable as
-ocelot_port->vlan_aware.
-
-*Actually both the DSA Felix driver and the Ocelot driver already had
-each its own variable:
- - Ocelot: ocelot_port_private->vlan_aware
- - Felix: dsa_port->vlan_filtering
-but the common Ocelot library needs to work with a single, common,
-variable, so there is some refactoring done to move the vlan_aware
-property from the private structure into the common ocelot_port
-structure.
-
-Fixes: 97bb69e1e36e ("net: mscc: ocelot: break apart ocelot_vlan_port_apply")
-Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
-Reviewed-by: Horatiu Vultur <horatiu.vultur@microchip.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/net/dsa/ocelot/felix.c     |    5 --
- drivers/net/ethernet/mscc/ocelot.c |   84 ++++++++++++++++++-------------------
- drivers/net/ethernet/mscc/ocelot.h |    2 
- include/soc/mscc/ocelot.h          |    4 +
- 4 files changed, 47 insertions(+), 48 deletions(-)
-
---- a/drivers/net/dsa/ocelot/felix.c
-+++ b/drivers/net/dsa/ocelot/felix.c
-@@ -44,11 +44,8 @@ static int felix_fdb_add(struct dsa_swit
- 			 const unsigned char *addr, u16 vid)
- {
- 	struct ocelot *ocelot = ds->priv;
--	bool vlan_aware;
- 
--	vlan_aware = dsa_port_is_vlan_filtering(dsa_to_port(ds, port));
--
--	return ocelot_fdb_add(ocelot, port, addr, vid, vlan_aware);
-+	return ocelot_fdb_add(ocelot, port, addr, vid);
- }
- 
- static int felix_fdb_del(struct dsa_switch *ds, int port,
---- a/drivers/net/ethernet/mscc/ocelot.c
-+++ b/drivers/net/ethernet/mscc/ocelot.c
-@@ -183,44 +183,47 @@ static void ocelot_vlan_mode(struct ocel
- 	ocelot_write(ocelot, val, ANA_VLANMASK);
- }
- 
--void ocelot_port_vlan_filtering(struct ocelot *ocelot, int port,
--				bool vlan_aware)
-+static int ocelot_port_set_native_vlan(struct ocelot *ocelot, int port,
-+				       u16 vid)
- {
- 	struct ocelot_port *ocelot_port = ocelot->ports[port];
--	u32 val;
-+	u32 val = 0;
- 
--	if (vlan_aware)
--		val = ANA_PORT_VLAN_CFG_VLAN_AWARE_ENA |
--		      ANA_PORT_VLAN_CFG_VLAN_POP_CNT(1);
--	else
--		val = 0;
--	ocelot_rmw_gix(ocelot, val,
--		       ANA_PORT_VLAN_CFG_VLAN_AWARE_ENA |
--		       ANA_PORT_VLAN_CFG_VLAN_POP_CNT_M,
--		       ANA_PORT_VLAN_CFG, port);
-+	if (ocelot_port->vid != vid) {
-+		/* Always permit deleting the native VLAN (vid = 0) */
-+		if (ocelot_port->vid && vid) {
-+			dev_err(ocelot->dev,
-+				"Port already has a native VLAN: %d\n",
-+				ocelot_port->vid);
-+			return -EBUSY;
-+		}
-+		ocelot_port->vid = vid;
-+	}
-+
-+	ocelot_rmw_gix(ocelot, REW_PORT_VLAN_CFG_PORT_VID(vid),
-+		       REW_PORT_VLAN_CFG_PORT_VID_M,
-+		       REW_PORT_VLAN_CFG, port);
- 
--	if (vlan_aware && !ocelot_port->vid)
-+	if (ocelot_port->vlan_aware && !ocelot_port->vid)
- 		/* If port is vlan-aware and tagged, drop untagged and priority
- 		 * tagged frames.
- 		 */
- 		val = ANA_PORT_DROP_CFG_DROP_UNTAGGED_ENA |
- 		      ANA_PORT_DROP_CFG_DROP_PRIO_S_TAGGED_ENA |
- 		      ANA_PORT_DROP_CFG_DROP_PRIO_C_TAGGED_ENA;
--	else
--		val = 0;
- 	ocelot_rmw_gix(ocelot, val,
- 		       ANA_PORT_DROP_CFG_DROP_UNTAGGED_ENA |
- 		       ANA_PORT_DROP_CFG_DROP_PRIO_S_TAGGED_ENA |
- 		       ANA_PORT_DROP_CFG_DROP_PRIO_C_TAGGED_ENA,
- 		       ANA_PORT_DROP_CFG, port);
- 
--	if (vlan_aware) {
-+	if (ocelot_port->vlan_aware) {
- 		if (ocelot_port->vid)
- 			/* Tag all frames except when VID == DEFAULT_VLAN */
--			val |= REW_TAG_CFG_TAG_CFG(1);
-+			val = REW_TAG_CFG_TAG_CFG(1);
- 		else
- 			/* Tag all frames */
--			val |= REW_TAG_CFG_TAG_CFG(3);
-+			val = REW_TAG_CFG_TAG_CFG(3);
- 	} else {
- 		/* Port tagging disabled. */
- 		val = REW_TAG_CFG_TAG_CFG(0);
-@@ -228,31 +231,31 @@ void ocelot_port_vlan_filtering(struct o
- 	ocelot_rmw_gix(ocelot, val,
- 		       REW_TAG_CFG_TAG_CFG_M,
- 		       REW_TAG_CFG, port);
-+
-+	return 0;
- }
--EXPORT_SYMBOL(ocelot_port_vlan_filtering);
- 
--static int ocelot_port_set_native_vlan(struct ocelot *ocelot, int port,
--				       u16 vid)
-+void ocelot_port_vlan_filtering(struct ocelot *ocelot, int port,
-+				bool vlan_aware)
- {
- 	struct ocelot_port *ocelot_port = ocelot->ports[port];
-+	u32 val;
- 
--	if (ocelot_port->vid != vid) {
--		/* Always permit deleting the native VLAN (vid = 0) */
--		if (ocelot_port->vid && vid) {
--			dev_err(ocelot->dev,
--				"Port already has a native VLAN: %d\n",
--				ocelot_port->vid);
--			return -EBUSY;
--		}
--		ocelot_port->vid = vid;
--	}
-+	ocelot_port->vlan_aware = vlan_aware;
- 
--	ocelot_rmw_gix(ocelot, REW_PORT_VLAN_CFG_PORT_VID(vid),
--		       REW_PORT_VLAN_CFG_PORT_VID_M,
--		       REW_PORT_VLAN_CFG, port);
-+	if (vlan_aware)
-+		val = ANA_PORT_VLAN_CFG_VLAN_AWARE_ENA |
-+		      ANA_PORT_VLAN_CFG_VLAN_POP_CNT(1);
-+	else
-+		val = 0;
-+	ocelot_rmw_gix(ocelot, val,
-+		       ANA_PORT_VLAN_CFG_VLAN_AWARE_ENA |
-+		       ANA_PORT_VLAN_CFG_VLAN_POP_CNT_M,
-+		       ANA_PORT_VLAN_CFG, port);
- 
--	return 0;
-+	ocelot_port_set_native_vlan(ocelot, port, ocelot_port->vid);
- }
-+EXPORT_SYMBOL(ocelot_port_vlan_filtering);
- 
- /* Default vlan to clasify for untagged frames (may be zero) */
- static void ocelot_port_set_pvid(struct ocelot *ocelot, int port, u16 pvid)
-@@ -858,12 +861,12 @@ static void ocelot_get_stats64(struct ne
- }
- 
- int ocelot_fdb_add(struct ocelot *ocelot, int port,
--		   const unsigned char *addr, u16 vid, bool vlan_aware)
-+		   const unsigned char *addr, u16 vid)
- {
- 	struct ocelot_port *ocelot_port = ocelot->ports[port];
- 
- 	if (!vid) {
--		if (!vlan_aware)
-+		if (!ocelot_port->vlan_aware)
- 			/* If the bridge is not VLAN aware and no VID was
- 			 * provided, set it to pvid to ensure the MAC entry
- 			 * matches incoming untagged packets
-@@ -890,7 +893,7 @@ static int ocelot_port_fdb_add(struct nd
- 	struct ocelot *ocelot = priv->port.ocelot;
- 	int port = priv->chip_port;
- 
--	return ocelot_fdb_add(ocelot, port, addr, vid, priv->vlan_aware);
-+	return ocelot_fdb_add(ocelot, port, addr, vid);
- }
- 
- int ocelot_fdb_del(struct ocelot *ocelot, int port,
-@@ -1489,8 +1492,8 @@ static int ocelot_port_attr_set(struct n
- 		ocelot_port_attr_ageing_set(ocelot, port, attr->u.ageing_time);
- 		break;
- 	case SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING:
--		priv->vlan_aware = attr->u.vlan_filtering;
--		ocelot_port_vlan_filtering(ocelot, port, priv->vlan_aware);
-+		ocelot_port_vlan_filtering(ocelot, port,
-+					   attr->u.vlan_filtering);
- 		break;
- 	case SWITCHDEV_ATTR_ID_BRIDGE_MC_DISABLED:
- 		ocelot_port_attr_mc_set(ocelot, port, !attr->u.mc_disabled);
-@@ -1861,7 +1864,6 @@ static int ocelot_netdevice_port_event(s
- 			} else {
- 				err = ocelot_port_bridge_leave(ocelot, port,
- 							       info->upper_dev);
--				priv->vlan_aware = false;
- 			}
- 		}
- 		if (netif_is_lag_master(info->upper_dev)) {
---- a/drivers/net/ethernet/mscc/ocelot.h
-+++ b/drivers/net/ethernet/mscc/ocelot.h
-@@ -66,8 +66,6 @@ struct ocelot_port_private {
- 	struct phy_device *phy;
- 	u8 chip_port;
- 
--	u8 vlan_aware;
--
- 	struct phy *serdes;
- 
- 	struct ocelot_port_tc tc;
---- a/include/soc/mscc/ocelot.h
-+++ b/include/soc/mscc/ocelot.h
-@@ -411,6 +411,8 @@ struct ocelot_port {
- 
- 	void __iomem			*regs;
- 
-+	bool				vlan_aware;
-+
- 	/* Ingress default VLAN (pvid) */
- 	u16				pvid;
- 
-@@ -529,7 +531,7 @@ int ocelot_port_bridge_leave(struct ocel
- int ocelot_fdb_dump(struct ocelot *ocelot, int port,
- 		    dsa_fdb_dump_cb_t *cb, void *data);
- int ocelot_fdb_add(struct ocelot *ocelot, int port,
--		   const unsigned char *addr, u16 vid, bool vlan_aware);
-+		   const unsigned char *addr, u16 vid);
- int ocelot_fdb_del(struct ocelot *ocelot, int port,
- 		   const unsigned char *addr, u16 vid);
- int ocelot_vlan_add(struct ocelot *ocelot, int port, u16 vid, bool pvid,
-From foo@baz Sat 18 Apr 2020 11:06:47 AM CEST
-From: Florian Fainelli <f.fainelli@gmail.com>
-Date: Tue, 14 Apr 2020 15:39:52 -0700
-Subject: net: stmmac: dwmac-sunxi: Provide TX and RX fifo sizes
-
-From: Florian Fainelli <f.fainelli@gmail.com>
-
-[ Upstream commit 806fd188ce2a4f8b587e83e73c478e6484fbfa55 ]
-
-After commit bfcb813203e619a8960a819bf533ad2a108d8105 ("net: dsa:
-configure the MTU for switch ports") my Lamobo R1 platform which uses
-an allwinner,sun7i-a20-gmac compatible Ethernet MAC started to fail
-by rejecting a MTU of 1536. The reason for that is that the DMA
-capabilities are not readable on this version of the IP, and there
-is also no 'tx-fifo-depth' property being provided in Device Tree. The
-property is documented as optional, and is not provided.
-
-Chen-Yu indicated that the FIFO sizes are 4KB for TX and 16KB for RX, so
-provide these values through platform data as an immediate fix until
-various Device Tree sources get updated accordingly.
-
-Fixes: eaf4fac47807 ("net: stmmac: Do not accept invalid MTU values")
-Suggested-by: Chen-Yu Tsai <wens@csie.org>
-Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
-Acked-by: Chen-Yu Tsai <wens@csie.org>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c |    2 ++
- 1 file changed, 2 insertions(+)
-
---- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c
-+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c
-@@ -150,6 +150,8 @@ static int sun7i_gmac_probe(struct platf
- 	plat_dat->init = sun7i_gmac_init;
- 	plat_dat->exit = sun7i_gmac_exit;
- 	plat_dat->fix_mac_speed = sun7i_fix_speed;
-+	plat_dat->tx_fifo_size = 4096;
-+	plat_dat->rx_fifo_size = 16384;
- 
- 	ret = sun7i_gmac_init(pdev, plat_dat->bsp_priv);
- 	if (ret)
-From foo@baz Sat 18 Apr 2020 11:06:47 AM CEST
-From: Clemens Gruber <clemens.gruber@pqgruber.com>
-Date: Sat, 11 Apr 2020 18:51:25 +0200
-Subject: net: phy: marvell: Fix pause frame negotiation
-
-From: Clemens Gruber <clemens.gruber@pqgruber.com>
-
-[ Upstream commit 3b72f84f8fb65e83e85e9be58eabcf95a40b8f46 ]
-
-The negotiation of flow control / pause frame modes was broken since
-commit fcf1f59afc67 ("net: phy: marvell: rearrange to use
-genphy_read_lpa()") moved the setting of phydev->duplex below the
-phy_resolve_aneg_pause call. Due to a check of DUPLEX_FULL in that
-function, phydev->pause was no longer set.
-
-Fix it by moving the parsing of the status variable before the blocks
-dealing with the pause frames.
-
-As the Marvell 88E1510 datasheet does not specify the timing between the
-link status and the "Speed and Duplex Resolved" bit, we have to force
-the link down as long as the resolved bit is not set, to avoid reporting
-link up before we even have valid Speed/Duplex.
-
-Tested with a Marvell 88E1510 (RGMII to Copper/1000Base-T)
-
-Fixes: fcf1f59afc67 ("net: phy: marvell: rearrange to use genphy_read_lpa()")
-Signed-off-by: Clemens Gruber <clemens.gruber@pqgruber.com>
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/net/phy/marvell.c |   46 ++++++++++++++++++++++++----------------------
- 1 file changed, 24 insertions(+), 22 deletions(-)
-
---- a/drivers/net/phy/marvell.c
-+++ b/drivers/net/phy/marvell.c
-@@ -1278,6 +1278,30 @@ static int marvell_read_status_page_an(s
- 	int lpa;
- 	int err;
- 
-+	if (!(status & MII_M1011_PHY_STATUS_RESOLVED)) {
-+		phydev->link = 0;
-+		return 0;
-+	}
-+
-+	if (status & MII_M1011_PHY_STATUS_FULLDUPLEX)
-+		phydev->duplex = DUPLEX_FULL;
-+	else
-+		phydev->duplex = DUPLEX_HALF;
-+
-+	switch (status & MII_M1011_PHY_STATUS_SPD_MASK) {
-+	case MII_M1011_PHY_STATUS_1000:
-+		phydev->speed = SPEED_1000;
-+		break;
-+
-+	case MII_M1011_PHY_STATUS_100:
-+		phydev->speed = SPEED_100;
-+		break;
-+
-+	default:
-+		phydev->speed = SPEED_10;
-+		break;
-+	}
-+
- 	if (!fiber) {
- 		err = genphy_read_lpa(phydev);
- 		if (err < 0)
-@@ -1306,28 +1330,6 @@ static int marvell_read_status_page_an(s
- 		}
- 	}
- 
--	if (!(status & MII_M1011_PHY_STATUS_RESOLVED))
--		return 0;
--
--	if (status & MII_M1011_PHY_STATUS_FULLDUPLEX)
--		phydev->duplex = DUPLEX_FULL;
--	else
--		phydev->duplex = DUPLEX_HALF;
--
--	switch (status & MII_M1011_PHY_STATUS_SPD_MASK) {
--	case MII_M1011_PHY_STATUS_1000:
--		phydev->speed = SPEED_1000;
--		break;
--
--	case MII_M1011_PHY_STATUS_100:
--		phydev->speed = SPEED_100;
--		break;
--
--	default:
--		phydev->speed = SPEED_10;
--		break;
--	}
--
- 	return 0;
- }
- 
-From df541c011f5d731447d5c99fd77d77c2191d0c6d Mon Sep 17 00:00:00 2001
-From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Date: Sat, 18 Apr 2020 11:29:04 +0200
-Subject: Revert "ACPI: EC: Do not clear boot_ec_is_ecdt in acpi_ec_add()"
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-This reverts commit 281e612b4b9587c0c72e30c49ec279587b20da0f which is
-commit 65a691f5f8f0bb63d6a82eec7b0ffd193d8d8a5f upstream.
-
-Rafael writes:
-	It has not been marked for -stable or otherwise requested to be
-	included AFAICS.  Also it depends on other mainline commits that
-	have not been included into 5.6.5.
-
-Reported-by: Toralf Förster <toralf.foerster@gmx.de>
-Reported-by: Rafael J. Wysocki <rafael@kernel.org>
-Cc: Sasha Levin <sashal@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/acpi/ec.c |    6 ++----
- 1 file changed, 2 insertions(+), 4 deletions(-)
-
---- a/drivers/acpi/ec.c
-+++ b/drivers/acpi/ec.c
-@@ -1646,6 +1646,7 @@ static int acpi_ec_add(struct acpi_devic
- 
- 		if (boot_ec && ec->command_addr == boot_ec->command_addr &&
- 		    ec->data_addr == boot_ec->data_addr) {
-+			boot_ec_is_ecdt = false;
- 			/*
- 			 * Trust PNP0C09 namespace location rather than
- 			 * ECDT ID. But trust ECDT GPE rather than _GPE
-@@ -1665,12 +1666,9 @@ static int acpi_ec_add(struct acpi_devic
- 
- 	if (ec == boot_ec)
- 		acpi_handle_info(boot_ec->handle,
--				 "Boot %s EC initialization complete\n",
-+				 "Boot %s EC used to handle transactions and events\n",
- 				 boot_ec_is_ecdt ? "ECDT" : "DSDT");
- 
--	acpi_handle_info(ec->handle,
--			 "EC: Used to handle transactions and events\n");
--
- 	device->driver_data = ec;
- 
- 	ret = !!request_region(ec->data_addr, 1, "EC data");
-From 300b124fcf6ad2cd99a7b721e0f096785e0a3134 Mon Sep 17 00:00:00 2001
-From: Amir Goldstein <amir73il@gmail.com>
-Date: Tue, 19 Nov 2019 15:36:14 +0200
-Subject: ovl: fix value of i_ino for lower hardlink corner case
-
-From: Amir Goldstein <amir73il@gmail.com>
-
-commit 300b124fcf6ad2cd99a7b721e0f096785e0a3134 upstream.
-
-Commit 6dde1e42f497 ("ovl: make i_ino consistent with st_ino in more
-cases"), relaxed the condition nfs_export=on in order to set the value of
-i_ino to xino map of real ino.
-
-Specifically, it also relaxed the pre-condition that index=on for
-consistent i_ino. This opened the corner case of lower hardlink in
-ovl_get_inode(), which calls ovl_fill_inode() with ino=0 and then
-ovl_init_inode() is called to set i_ino to lower real ino without the xino
-mapping.
-
-Pass the correct values of ino;fsid in this case to ovl_fill_inode(), so it
-can initialize i_ino correctly.
-
-Fixes: 6dde1e42f497 ("ovl: make i_ino consistent with st_ino in more ...")
-Signed-off-by: Amir Goldstein <amir73il@gmail.com>
-Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- fs/overlayfs/inode.c |    4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
---- a/fs/overlayfs/inode.c
-+++ b/fs/overlayfs/inode.c
-@@ -891,7 +891,7 @@ struct inode *ovl_get_inode(struct super
- 	struct dentry *lowerdentry = lowerpath ? lowerpath->dentry : NULL;
- 	bool bylower = ovl_hash_bylower(sb, upperdentry, lowerdentry,
- 					oip->index);
--	int fsid = bylower ? oip->lowerpath->layer->fsid : 0;
-+	int fsid = bylower ? lowerpath->layer->fsid : 0;
- 	bool is_dir, metacopy = false;
- 	unsigned long ino = 0;
- 	int err = oip->newinode ? -EEXIST : -ENOMEM;
-@@ -941,6 +941,8 @@ struct inode *ovl_get_inode(struct super
- 			err = -ENOMEM;
- 			goto out_err;
- 		}
-+		ino = realinode->i_ino;
-+		fsid = lowerpath->layer->fsid;
- 	}
- 	ovl_fill_inode(inode, realinode->i_mode, realinode->i_rdev, ino, fsid);
- 	ovl_inode_init(inode, upperdentry, lowerdentry, oip->lowerdata);
-From c63d6099a7959ecc919b2549dc6b71f53521f819 Mon Sep 17 00:00:00 2001
-From: Can Guo <cang@codeaurora.org>
-Date: Mon, 10 Feb 2020 19:40:48 -0800
-Subject: scsi: ufs: Fix ufshcd_hold() caused scheduling while atomic
-
-From: Can Guo <cang@codeaurora.org>
-
-commit c63d6099a7959ecc919b2549dc6b71f53521f819 upstream.
-
-The async version of ufshcd_hold(async == true), which is only called in
-queuecommand path as for now, is expected to work in atomic context, thus
-it should not sleep or schedule out. When it runs into the condition that
-clocks are ON but link is still in hibern8 state, it should bail out
-without flushing the clock ungate work.
-
-Fixes: f2a785ac2312 ("scsi: ufshcd: Fix race between clk scaling and ungate work")
-Link: https://lore.kernel.org/r/1581392451-28743-6-git-send-email-cang@codeaurora.org
-Reviewed-by: Hongwu Su <hongwus@codeaurora.org>
-Reviewed-by: Asutosh Das <asutoshd@codeaurora.org>
-Reviewed-by: Bean Huo <beanhuo@micron.com>
-Reviewed-by: Stanley Chu <stanley.chu@mediatek.com>
-Signed-off-by: Can Guo <cang@codeaurora.org>
-Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/scsi/ufs/ufshcd.c |    5 +++++
- 1 file changed, 5 insertions(+)
-
---- a/drivers/scsi/ufs/ufshcd.c
-+++ b/drivers/scsi/ufs/ufshcd.c
-@@ -1518,6 +1518,11 @@ start:
- 		 */
- 		if (ufshcd_can_hibern8_during_gating(hba) &&
- 		    ufshcd_is_link_hibern8(hba)) {
-+			if (async) {
-+				rc = -EAGAIN;
-+				hba->clk_gating.active_reqs--;
-+				break;
-+			}
- 			spin_unlock_irqrestore(hba->host->host_lock, flags);
- 			flush_work(&hba->clk_gating.ungate_work);
- 			spin_lock_irqsave(hba->host->host_lock, flags);
-From f775ac78fcfc6bdc96bdda07029d11f2a5e84869 Mon Sep 17 00:00:00 2001
-From: Pi-Hsun Shih <pihsun@chromium.org>
-Date: Fri, 14 Feb 2020 16:26:38 +0800
-Subject: platform/chrome: cros_ec_rpmsg: Fix race with host event
-
-From: Pi-Hsun Shih <pihsun@chromium.org>
-
-commit f775ac78fcfc6bdc96bdda07029d11f2a5e84869 upstream.
-
-Host event can be sent by remoteproc by any time, and
-cros_ec_rpmsg_callback would be called after cros_ec_rpmsg_create_ept.
-But the cros_ec_device is initialized after that, which cause host event
-handler to use cros_ec_device that are not initialized properly yet.
-
-Fix this by don't schedule host event handler before cros_ec_register
-returns. Instead, remember that we have a pending host event, and
-schedule host event handler after cros_ec_register.
-
-Fixes: 71cddb7097e2 ("platform/chrome: cros_ec_rpmsg: Fix race with host command when probe failed.")
-Signed-off-by: Pi-Hsun Shih <pihsun@chromium.org>
-Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/platform/chrome/cros_ec_rpmsg.c |   16 +++++++++++++++-
- 1 file changed, 15 insertions(+), 1 deletion(-)
-
---- a/drivers/platform/chrome/cros_ec_rpmsg.c
-+++ b/drivers/platform/chrome/cros_ec_rpmsg.c
-@@ -44,6 +44,8 @@ struct cros_ec_rpmsg {
- 	struct completion xfer_ack;
- 	struct work_struct host_event_work;
- 	struct rpmsg_endpoint *ept;
-+	bool has_pending_host_event;
-+	bool probe_done;
- };
- 
- /**
-@@ -177,7 +179,14 @@ static int cros_ec_rpmsg_callback(struct
- 		memcpy(ec_dev->din, resp->data, len);
- 		complete(&ec_rpmsg->xfer_ack);
- 	} else if (resp->type == HOST_EVENT_MARK) {
--		schedule_work(&ec_rpmsg->host_event_work);
-+		/*
-+		 * If the host event is sent before cros_ec_register is
-+		 * finished, queue the host event.
-+		 */
-+		if (ec_rpmsg->probe_done)
-+			schedule_work(&ec_rpmsg->host_event_work);
-+		else
-+			ec_rpmsg->has_pending_host_event = true;
- 	} else {
- 		dev_warn(ec_dev->dev, "rpmsg received invalid type = %d",
- 			 resp->type);
-@@ -240,6 +249,11 @@ static int cros_ec_rpmsg_probe(struct rp
- 		return ret;
- 	}
- 
-+	ec_rpmsg->probe_done = true;
-+
-+	if (ec_rpmsg->has_pending_host_event)
-+		schedule_work(&ec_rpmsg->host_event_work);
-+
- 	return 0;
- }
- 
-From 780f66e59231fcf882f36c63f287252ee47cc75a Mon Sep 17 00:00:00 2001
-From: "zhangyi (F)" <yi.zhang@huawei.com>
-Date: Mon, 17 Feb 2020 19:27:06 +0800
-Subject: jbd2: improve comments about freeing data buffers whose page mapping is NULL
-
-From: zhangyi (F) <yi.zhang@huawei.com>
-
-commit 780f66e59231fcf882f36c63f287252ee47cc75a upstream.
-
-Improve comments in jbd2_journal_commit_transaction() to describe why
-we don't need to clear the buffer_mapped bit for freeing file mapping
-buffers whose page mapping is NULL.
-
-Link: https://lore.kernel.org/r/20200217112706.20085-1-yi.zhang@huawei.com
-Fixes: c96dceeabf76 ("jbd2: do not clear the BH_Mapped flag when forgetting a metadata buffer")
-Suggested-by: Jan Kara <jack@suse.cz>
-Reviewed-by: Jan Kara <jack@suse.cz>
-Signed-off-by: zhangyi (F) <yi.zhang@huawei.com>
-Signed-off-by: Theodore Ts'o <tytso@mit.edu>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- fs/jbd2/commit.c |    7 ++++---
- 1 file changed, 4 insertions(+), 3 deletions(-)
-
---- a/fs/jbd2/commit.c
-+++ b/fs/jbd2/commit.c
-@@ -997,9 +997,10 @@ restart_loop:
- 			 * journalled data) we need to unmap buffer and clear
- 			 * more bits. We also need to be careful about the check
- 			 * because the data page mapping can get cleared under
--			 * out hands, which alse need not to clear more bits
--			 * because the page and buffers will be freed and can
--			 * never be reused once we are done with them.
-+			 * our hands. Note that if mapping == NULL, we don't
-+			 * need to make buffer unmapped because the page is
-+			 * already detached from the mapping and buffers cannot
-+			 * get reused.
- 			 */
- 			mapping = READ_ONCE(bh->b_page->mapping);
- 			if (mapping && !sb_is_blkdev_sb(mapping->host->i_sb)) {
-From 01091c496f920e634ea84b689f480c39016752a8 Mon Sep 17 00:00:00 2001
-From: Dan Carpenter <dan.carpenter@oracle.com>
-Date: Tue, 25 Feb 2020 19:20:06 +0300
-Subject: acpi/nfit: improve bounds checking for 'func'
-
-From: Dan Carpenter <dan.carpenter@oracle.com>
-
-commit 01091c496f920e634ea84b689f480c39016752a8 upstream.
-
-The 'func' variable can come from the user in the __nd_ioctl().  If it's
-too high then the (1 << func) shift in acpi_nfit_clear_to_send() is
-undefined.  In acpi_nfit_ctl() we pass 'func' to test_bit(func, &dsm_mask)
-which could result in an out of bounds access.
-
-To fix these issues, I introduced the NVDIMM_CMD_MAX (31) define and
-updated nfit_dsm_revid() to use that define as well instead of magic
-numbers.
-
-Fixes: 11189c1089da ("acpi/nfit: Fix command-supported detection")
-Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
-Reviewed-by: Dan Williams <dan.j.williams@intel.com>
-Link: https://lore.kernel.org/r/20200225161927.hvftuq7kjn547fyj@kili.mountain
-Signed-off-by: Dan Williams <dan.j.williams@intel.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/acpi/nfit/core.c |   10 ++++++----
- drivers/acpi/nfit/nfit.h |    1 +
- 2 files changed, 7 insertions(+), 4 deletions(-)
-
---- a/drivers/acpi/nfit/core.c
-+++ b/drivers/acpi/nfit/core.c
-@@ -360,7 +360,7 @@ static union acpi_object *acpi_label_inf
- 
- static u8 nfit_dsm_revid(unsigned family, unsigned func)
- {
--	static const u8 revid_table[NVDIMM_FAMILY_MAX+1][32] = {
-+	static const u8 revid_table[NVDIMM_FAMILY_MAX+1][NVDIMM_CMD_MAX+1] = {
- 		[NVDIMM_FAMILY_INTEL] = {
- 			[NVDIMM_INTEL_GET_MODES] = 2,
- 			[NVDIMM_INTEL_GET_FWINFO] = 2,
-@@ -386,7 +386,7 @@ static u8 nfit_dsm_revid(unsigned family
- 
- 	if (family > NVDIMM_FAMILY_MAX)
- 		return 0;
--	if (func > 31)
-+	if (func > NVDIMM_CMD_MAX)
- 		return 0;
- 	id = revid_table[family][func];
- 	if (id == 0)
-@@ -492,7 +492,8 @@ int acpi_nfit_ctl(struct nvdimm_bus_desc
- 	 * Check for a valid command.  For ND_CMD_CALL, we also have to
- 	 * make sure that the DSM function is supported.
- 	 */
--	if (cmd == ND_CMD_CALL && !test_bit(func, &dsm_mask))
-+	if (cmd == ND_CMD_CALL &&
-+	    (func > NVDIMM_CMD_MAX || !test_bit(func, &dsm_mask)))
- 		return -ENOTTY;
- 	else if (!test_bit(cmd, &cmd_mask))
- 		return -ENOTTY;
-@@ -3492,7 +3493,8 @@ static int acpi_nfit_clear_to_send(struc
- 	if (nvdimm && cmd == ND_CMD_CALL &&
- 			call_pkg->nd_family == NVDIMM_FAMILY_INTEL) {
- 		func = call_pkg->nd_command;
--		if ((1 << func) & NVDIMM_INTEL_SECURITY_CMDMASK)
-+		if (func > NVDIMM_CMD_MAX ||
-+		    (1 << func) & NVDIMM_INTEL_SECURITY_CMDMASK)
- 			return -EOPNOTSUPP;
- 	}
- 
---- a/drivers/acpi/nfit/nfit.h
-+++ b/drivers/acpi/nfit/nfit.h
-@@ -34,6 +34,7 @@
- 		| ACPI_NFIT_MEM_NOT_ARMED | ACPI_NFIT_MEM_MAP_FAILED)
- 
- #define NVDIMM_FAMILY_MAX NVDIMM_FAMILY_HYPERV
-+#define NVDIMM_CMD_MAX 31
- 
- #define NVDIMM_STANDARD_CMDMASK \
- (1 << ND_CMD_SMART | 1 << ND_CMD_SMART_THRESHOLD | 1 << ND_CMD_DIMM_FLAGS \
-From c3b10649a80e9da2892c1fd3038c53abd57588f6 Mon Sep 17 00:00:00 2001
-From: Jin Yao <yao.jin@linux.intel.com>
-Date: Fri, 13 Mar 2020 21:46:07 +0800
-Subject: perf report: Fix no branch type statistics report issue
-
-From: Jin Yao <yao.jin@linux.intel.com>
-
-commit c3b10649a80e9da2892c1fd3038c53abd57588f6 upstream.
-
-Previously we could get the report of branch type statistics.
-
-For example:
-
-  # perf record -j any,save_type ...
-  # t perf report --stdio
-
-  #
-  # Branch Statistics:
-  #
-  COND_FWD:  40.6%
-  COND_BWD:   4.1%
-  CROSS_4K:  24.7%
-  CROSS_2M:  12.3%
-      COND:  44.7%
-    UNCOND:   0.0%
-       IND:   6.1%
-      CALL:  24.5%
-       RET:  24.7%
-
-But now for the recent perf, it can't report the branch type statistics.
-
-It's a regression issue caused by commit 40c39e304641 ("perf report: Fix
-a no annotate browser displayed issue"), which only counts the branch
-type statistics for browser mode.
-
-This patch moves the branch_type_count() outside of ui__has_annotation()
-checking, then branch type statistics can work for stdio mode.
-
-Fixes: 40c39e304641 ("perf report: Fix a no annotate browser displayed issue")
-Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
-Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
-Cc: Andi Kleen <ak@linux.intel.com>
-Cc: Jiri Olsa <jolsa@kernel.org>
-Cc: Kan Liang <kan.liang@linux.intel.com>
-Cc: Peter Zijlstra <peterz@infradead.org>
-Link: http://lore.kernel.org/lkml/20200313134607.12873-1-yao.jin@linux.intel.com
-Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- tools/perf/builtin-report.c |    9 ++++-----
- 1 file changed, 4 insertions(+), 5 deletions(-)
-
---- a/tools/perf/builtin-report.c
-+++ b/tools/perf/builtin-report.c
-@@ -185,24 +185,23 @@ static int hist_iter__branch_callback(st
- {
- 	struct hist_entry *he = iter->he;
- 	struct report *rep = arg;
--	struct branch_info *bi;
-+	struct branch_info *bi = he->branch_info;
- 	struct perf_sample *sample = iter->sample;
- 	struct evsel *evsel = iter->evsel;
- 	int err;
- 
-+	branch_type_count(&rep->brtype_stat, &bi->flags,
-+			  bi->from.addr, bi->to.addr);
-+
- 	if (!ui__has_annotation() && !rep->symbol_ipc)
- 		return 0;
- 
--	bi = he->branch_info;
- 	err = addr_map_symbol__inc_samples(&bi->from, sample, evsel);
- 	if (err)
- 		goto out;
- 
- 	err = addr_map_symbol__inc_samples(&bi->to, sample, evsel);
- 
--	branch_type_count(&rep->brtype_stat, &bi->flags,
--			  bi->from.addr, bi->to.addr);
--
- out:
- 	return err;
- }
-From 9cc5f232a4b6a0ef6e9b57876d61b88f61bdd7c2 Mon Sep 17 00:00:00 2001
-From: Sven Van Asbroeck <TheSven73@gmail.com>
-Date: Wed, 1 Apr 2020 19:01:06 +0200
-Subject: pwm: pca9685: Fix PWM/GPIO inter-operation
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-From: Sven Van Asbroeck <TheSven73@gmail.com>
-
-commit 9cc5f232a4b6a0ef6e9b57876d61b88f61bdd7c2 upstream.
-
-This driver allows pwms to be requested as gpios via gpiolib. Obviously,
-it should not be allowed to request a GPIO when its corresponding PWM is
-already requested (and vice versa). So it requires some exclusion code.
-
-Given that the PWMm and GPIO cores are not synchronized with respect to
-each other, this exclusion code will also require proper
-synchronization.
-
-Such a mechanism was in place, but was inadvertently removed by Uwe's
-clean-up in commit e926b12c611c ("pwm: Clear chip_data in pwm_put()").
-
-Upon revisiting the synchronization mechanism, we found that
-theoretically, it could allow two threads to successfully request
-conflicting PWMs/GPIOs.
-
-Replace with a bitmap which tracks PWMs in-use, plus a mutex. As long as
-PWM and GPIO's respective request/free functions modify the in-use
-bitmap while holding the mutex, proper synchronization will be
-guaranteed.
-
-Reported-by: YueHaibing <yuehaibing@huawei.com>
-Fixes: e926b12c611c ("pwm: Clear chip_data in pwm_put()")
-Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
-Cc: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
-Cc: YueHaibing <yuehaibing@huawei.com>
-Link: https://lkml.org/lkml/2019/5/31/963
-Signed-off-by: Sven Van Asbroeck <TheSven73@gmail.com>
-Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
-[cg: Tested on an i.MX6Q board with two NXP PCA9685 chips]
-Tested-by: Clemens Gruber <clemens.gruber@pqgruber.com>
-Reviewed-by: Sven Van Asbroeck <TheSven73@gmail.com> # cg's rebase
-Link: https://lore.kernel.org/lkml/20200330160238.GD2817345@ulmo/
-Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/pwm/pwm-pca9685.c |   85 +++++++++++++++++++++++++---------------------
- 1 file changed, 48 insertions(+), 37 deletions(-)
-
---- a/drivers/pwm/pwm-pca9685.c
-+++ b/drivers/pwm/pwm-pca9685.c
-@@ -20,6 +20,7 @@
- #include <linux/slab.h>
- #include <linux/delay.h>
- #include <linux/pm_runtime.h>
-+#include <linux/bitmap.h>
- 
- /*
-  * Because the PCA9685 has only one prescaler per chip, changing the period of
-@@ -74,6 +75,7 @@ struct pca9685 {
- #if IS_ENABLED(CONFIG_GPIOLIB)
- 	struct mutex lock;
- 	struct gpio_chip gpio;
-+	DECLARE_BITMAP(pwms_inuse, PCA9685_MAXCHAN + 1);
- #endif
- };
- 
-@@ -83,51 +85,51 @@ static inline struct pca9685 *to_pca(str
- }
- 
- #if IS_ENABLED(CONFIG_GPIOLIB)
--static int pca9685_pwm_gpio_request(struct gpio_chip *gpio, unsigned int offset)
-+static bool pca9685_pwm_test_and_set_inuse(struct pca9685 *pca, int pwm_idx)
- {
--	struct pca9685 *pca = gpiochip_get_data(gpio);
--	struct pwm_device *pwm;
-+	bool is_inuse;
- 
- 	mutex_lock(&pca->lock);
--
--	pwm = &pca->chip.pwms[offset];
--
--	if (pwm->flags & (PWMF_REQUESTED | PWMF_EXPORTED)) {
--		mutex_unlock(&pca->lock);
--		return -EBUSY;
-+	if (pwm_idx >= PCA9685_MAXCHAN) {
-+		/*
-+		 * "all LEDs" channel:
-+		 * pretend already in use if any of the PWMs are requested
-+		 */
-+		if (!bitmap_empty(pca->pwms_inuse, PCA9685_MAXCHAN)) {
-+			is_inuse = true;
-+			goto out;
-+		}
-+	} else {
-+		/*
-+		 * regular channel:
-+		 * pretend already in use if the "all LEDs" channel is requested
-+		 */
-+		if (test_bit(PCA9685_MAXCHAN, pca->pwms_inuse)) {
-+			is_inuse = true;
-+			goto out;
-+		}
- 	}
--
--	pwm_set_chip_data(pwm, (void *)1);
--
-+	is_inuse = test_and_set_bit(pwm_idx, pca->pwms_inuse);
-+out:
- 	mutex_unlock(&pca->lock);
--	pm_runtime_get_sync(pca->chip.dev);
--	return 0;
-+	return is_inuse;
- }
- 
--static bool pca9685_pwm_is_gpio(struct pca9685 *pca, struct pwm_device *pwm)
-+static void pca9685_pwm_clear_inuse(struct pca9685 *pca, int pwm_idx)
- {
--	bool is_gpio = false;
--
- 	mutex_lock(&pca->lock);
-+	clear_bit(pwm_idx, pca->pwms_inuse);
-+	mutex_unlock(&pca->lock);
-+}
- 
--	if (pwm->hwpwm >= PCA9685_MAXCHAN) {
--		unsigned int i;
--
--		/*
--		 * Check if any of the GPIOs are requested and in that case
--		 * prevent using the "all LEDs" channel.
--		 */
--		for (i = 0; i < pca->gpio.ngpio; i++)
--			if (gpiochip_is_requested(&pca->gpio, i)) {
--				is_gpio = true;
--				break;
--			}
--	} else if (pwm_get_chip_data(pwm)) {
--		is_gpio = true;
--	}
-+static int pca9685_pwm_gpio_request(struct gpio_chip *gpio, unsigned int offset)
-+{
-+	struct pca9685 *pca = gpiochip_get_data(gpio);
- 
--	mutex_unlock(&pca->lock);
--	return is_gpio;
-+	if (pca9685_pwm_test_and_set_inuse(pca, offset))
-+		return -EBUSY;
-+	pm_runtime_get_sync(pca->chip.dev);
-+	return 0;
- }
- 
- static int pca9685_pwm_gpio_get(struct gpio_chip *gpio, unsigned int offset)
-@@ -162,6 +164,7 @@ static void pca9685_pwm_gpio_free(struct
- 
- 	pca9685_pwm_gpio_set(gpio, offset, 0);
- 	pm_runtime_put(pca->chip.dev);
-+	pca9685_pwm_clear_inuse(pca, offset);
- }
- 
- static int pca9685_pwm_gpio_get_direction(struct gpio_chip *chip,
-@@ -213,12 +216,17 @@ static int pca9685_pwm_gpio_probe(struct
- 	return devm_gpiochip_add_data(dev, &pca->gpio, pca);
- }
- #else
--static inline bool pca9685_pwm_is_gpio(struct pca9685 *pca,
--				       struct pwm_device *pwm)
-+static inline bool pca9685_pwm_test_and_set_inuse(struct pca9685 *pca,
-+						  int pwm_idx)
- {
- 	return false;
- }
- 
-+static inline void
-+pca9685_pwm_clear_inuse(struct pca9685 *pca, int pwm_idx)
-+{
-+}
-+
- static inline int pca9685_pwm_gpio_probe(struct pca9685 *pca)
- {
- 	return 0;
-@@ -402,7 +410,7 @@ static int pca9685_pwm_request(struct pw
- {
- 	struct pca9685 *pca = to_pca(chip);
- 
--	if (pca9685_pwm_is_gpio(pca, pwm))
-+	if (pca9685_pwm_test_and_set_inuse(pca, pwm->hwpwm))
- 		return -EBUSY;
- 	pm_runtime_get_sync(chip->dev);
- 
-@@ -411,8 +419,11 @@ static int pca9685_pwm_request(struct pw
- 
- static void pca9685_pwm_free(struct pwm_chip *chip, struct pwm_device *pwm)
- {
-+	struct pca9685 *pca = to_pca(chip);
-+
- 	pca9685_pwm_disable(chip, pwm);
- 	pm_runtime_put(chip->dev);
-+	pca9685_pwm_clear_inuse(pca, pwm->hwpwm);
- }
- 
- static const struct pwm_ops pca9685_pwm_ops = {
-From 21f64e72e7073199a6f8d7d8efe52cd814d7d665 Mon Sep 17 00:00:00 2001
-From: Jose Abreu <Jose.Abreu@synopsys.com>
-Date: Thu, 2 Apr 2020 15:57:07 +0200
-Subject: net: stmmac: xgmac: Fix VLAN register handling
-
-From: Jose Abreu <Jose.Abreu@synopsys.com>
-
-commit 21f64e72e7073199a6f8d7d8efe52cd814d7d665 upstream.
-
-Commit 907a076881f1, forgot that we need to clear old values of
-XGMAC_VLAN_TAG register when we switch from VLAN perfect matching to
-HASH matching.
-
-Fix it.
-
-Fixes: 907a076881f1 ("net: stmmac: xgmac: fix incorrect XGMAC_VLAN_TAG register writting")
-Signed-off-by: Jose Abreu <Jose.Abreu@synopsys.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c |   11 +++++++++++
- 1 file changed, 11 insertions(+)
-
---- a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c
-+++ b/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c
-@@ -576,8 +576,13 @@ static void dwxgmac2_update_vlan_hash(st
- 			value |= XGMAC_VLAN_EDVLP;
- 			value |= XGMAC_VLAN_ESVL;
- 			value |= XGMAC_VLAN_DOVLTC;
-+		} else {
-+			value &= ~XGMAC_VLAN_EDVLP;
-+			value &= ~XGMAC_VLAN_ESVL;
-+			value &= ~XGMAC_VLAN_DOVLTC;
- 		}
- 
-+		value &= ~XGMAC_VLAN_VID;
- 		writel(value, ioaddr + XGMAC_VLAN_TAG);
- 	} else if (perfect_match) {
- 		u32 value = readl(ioaddr + XGMAC_PACKET_FILTER);
-@@ -588,13 +593,19 @@ static void dwxgmac2_update_vlan_hash(st
- 
- 		value = readl(ioaddr + XGMAC_VLAN_TAG);
- 
-+		value &= ~XGMAC_VLAN_VTHM;
- 		value |= XGMAC_VLAN_ETV;
- 		if (is_double) {
- 			value |= XGMAC_VLAN_EDVLP;
- 			value |= XGMAC_VLAN_ESVL;
- 			value |= XGMAC_VLAN_DOVLTC;
-+		} else {
-+			value &= ~XGMAC_VLAN_EDVLP;
-+			value &= ~XGMAC_VLAN_ESVL;
-+			value &= ~XGMAC_VLAN_DOVLTC;
- 		}
- 
-+		value &= ~XGMAC_VLAN_VID;
- 		writel(value | perfect_match, ioaddr + XGMAC_VLAN_TAG);
- 	} else {
- 		u32 value = readl(ioaddr + XGMAC_PACKET_FILTER);
-From 41c55ea6c2a7ca4c663eeec05bdf54f4e2419699 Mon Sep 17 00:00:00 2001
-From: Bruno Meneguele <bmeneg@redhat.com>
-Date: Tue, 31 Mar 2020 10:06:30 -0300
-Subject: net/bpfilter: remove superfluous testing message
-
-From: Bruno Meneguele <bmeneg@redhat.com>
-
-commit 41c55ea6c2a7ca4c663eeec05bdf54f4e2419699 upstream.
-
-A testing message was brought by 13d0f7b814d9 ("net/bpfilter: fix dprintf
-usage for /dev/kmsg") but should've been deleted before patch submission.
-Although it doesn't cause any harm to the code or functionality itself, it's
-totally unpleasant to have it displayed on every loop iteration with no real
-use case. Thus remove it unconditionally.
-
-Fixes: 13d0f7b814d9 ("net/bpfilter: fix dprintf usage for /dev/kmsg")
-Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- net/bpfilter/main.c |    1 -
- 1 file changed, 1 deletion(-)
-
---- a/net/bpfilter/main.c
-+++ b/net/bpfilter/main.c
-@@ -35,7 +35,6 @@ static void loop(void)
- 		struct mbox_reply reply;
- 		int n;
- 
--		fprintf(debug_f, "testing the buffer\n");
- 		n = read(0, &req, sizeof(req));
- 		if (n != sizeof(req)) {
- 			fprintf(debug_f, "invalid request %d\n", n);
-From df41460a21b06a76437af040d90ccee03888e8e5 Mon Sep 17 00:00:00 2001
-From: Josh Triplett <josh@joshtriplett.org>
-Date: Sat, 28 Mar 2020 14:54:01 -0700
-Subject: ext4: fix incorrect group count in ext4_fill_super error message
-
-From: Josh Triplett <josh@joshtriplett.org>
-
-commit df41460a21b06a76437af040d90ccee03888e8e5 upstream.
-
-ext4_fill_super doublechecks the number of groups before mounting; if
-that check fails, the resulting error message prints the group count
-from the ext4_sb_info sbi, which hasn't been set yet. Print the freshly
-computed group count instead (which at that point has just been computed
-in "blocks_count").
-
-Signed-off-by: Josh Triplett <josh@joshtriplett.org>
-Fixes: 4ec1102813798 ("ext4: Add sanity checks for the superblock before mounting the filesystem")
-Link: https://lore.kernel.org/r/8b957cd1513fcc4550fe675c10bcce2175c33a49.1585431964.git.josh@joshtriplett.org
-Signed-off-by: Theodore Ts'o <tytso@mit.edu>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- fs/ext4/super.c |    4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
---- a/fs/ext4/super.c
-+++ b/fs/ext4/super.c
-@@ -4286,9 +4286,9 @@ static int ext4_fill_super(struct super_
- 			EXT4_BLOCKS_PER_GROUP(sb) - 1);
- 	do_div(blocks_count, EXT4_BLOCKS_PER_GROUP(sb));
- 	if (blocks_count > ((uint64_t)1<<32) - EXT4_DESC_PER_BLOCK(sb)) {
--		ext4_msg(sb, KERN_WARNING, "groups count too large: %u "
-+		ext4_msg(sb, KERN_WARNING, "groups count too large: %llu "
- 		       "(block count %llu, first data block %u, "
--		       "blocks per group %lu)", sbi->s_groups_count,
-+		       "blocks per group %lu)", blocks_count,
- 		       ext4_blocks_count(es),
- 		       le32_to_cpu(es->s_first_data_block),
- 		       EXT4_BLOCKS_PER_GROUP(sb));
-From b9c538da4e52a7b79dfcf4cfa487c46125066dfb Mon Sep 17 00:00:00 2001
-From: Josh Triplett <josh@joshtriplett.org>
-Date: Sat, 28 Mar 2020 15:34:15 -0700
-Subject: ext4: fix incorrect inodes per group in error message
-
-From: Josh Triplett <josh@joshtriplett.org>
-
-commit b9c538da4e52a7b79dfcf4cfa487c46125066dfb upstream.
-
-If ext4_fill_super detects an invalid number of inodes per group, the
-resulting error message printed the number of blocks per group, rather
-than the number of inodes per group. Fix it to print the correct value.
-
-Fixes: cd6bb35bf7f6d ("ext4: use more strict checks for inodes_per_block on mount")
-Link: https://lore.kernel.org/r/8be03355983a08e5d4eed480944613454d7e2550.1585434649.git.josh@joshtriplett.org
-Reviewed-by: Andreas Dilger <adilger@dilger.ca>
-Signed-off-by: Josh Triplett <josh@joshtriplett.org>
-Signed-off-by: Theodore Ts'o <tytso@mit.edu>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- fs/ext4/super.c |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/fs/ext4/super.c
-+++ b/fs/ext4/super.c
-@@ -4157,7 +4157,7 @@ static int ext4_fill_super(struct super_
- 	if (sbi->s_inodes_per_group < sbi->s_inodes_per_block ||
- 	    sbi->s_inodes_per_group > blocksize * 8) {
- 		ext4_msg(sb, KERN_ERR, "invalid inodes per group: %lu\n",
--			 sbi->s_blocks_per_group);
-+			 sbi->s_inodes_per_group);
- 		goto failed_mount;
- 	}
- 	sbi->s_itb_per_group = sbi->s_inodes_per_group /
-From b8a75eaddae9410767c7d95a1c5f3a547aae7b81 Mon Sep 17 00:00:00 2001
-From: Hans de Goede <hdegoede@redhat.com>
-Date: Sun, 15 Mar 2020 18:34:49 +0100
-Subject: HID: lg-g15: Do not fail the probe when we fail to disable F# emulation
-
-From: Hans de Goede <hdegoede@redhat.com>
-
-commit b8a75eaddae9410767c7d95a1c5f3a547aae7b81 upstream.
-
-By default the G1-G12 keys on the Logitech gaming keyboards send
-F1 - F12 when in "generic HID" mode.
-
-The first thing the hid-lg-g15 driver does is disable this behavior.
-
-We have received a bugreport that this does not work when the keyboard
-is connected through an Aten KVM switch. Using a gaming keyboard with
-a KVM is a bit weird setup, but still we can try to fail a bit more
-gracefully here.
-
-On the G510 keyboards the same USB-interface which is used for the gaming
-keys is also used for the media-keys. Before this commit we would call
-hid_hw_stop() on failure to disable the F# emulation and then exit the
-probe method with an error code.
-
-This not only causes us to not handle the gaming-keys, but this also
-breaks the media keys which is a regression compared to the situation
-when these keyboards where handled by the generic hidinput driver.
-
-This commit changes the error handling to clear the hiddev drvdata
-(to disable our .raw_event handler) and then returning from the probe
-method with success.
-
-The net result of this is that, when connected through a KVM, things
-work as well as they did before the hid-lg-g15 driver was introduced.
-
-Fixes: ad4203f5a243 ("HID: lg-g15: Add support for the G510 keyboards' gaming keys")
-BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1806321
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
-Signed-off-by: Jiri Kosina <jkosina@suse.cz>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/hid/hid-lg-g15.c |    6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
---- a/drivers/hid/hid-lg-g15.c
-+++ b/drivers/hid/hid-lg-g15.c
-@@ -803,8 +803,10 @@ static int lg_g15_probe(struct hid_devic
- 	}
- 
- 	if (ret < 0) {
--		hid_err(hdev, "Error disabling keyboard emulation for the G-keys\n");
--		goto error_hw_stop;
-+		hid_err(hdev, "Error %d disabling keyboard emulation for the G-keys, falling back to generic hid-input driver\n",
-+			ret);
-+		hid_set_drvdata(hdev, NULL);
-+		return 0;
- 	}
- 
- 	/* Get initial brightness levels */
-From 43b203d32b77d1b1b2209e22837f49767020553e Mon Sep 17 00:00:00 2001
-From: Claudiu Beznea <claudiu.beznea@microchip.com>
-Date: Fri, 17 Jan 2020 13:36:47 +0200
-Subject: clk: at91: sam9x60: fix usb clock parents
-
-From: Claudiu Beznea <claudiu.beznea@microchip.com>
-
-commit 43b203d32b77d1b1b2209e22837f49767020553e upstream.
-
-SAM9X60's USB clock has 3 parents: plla, upll and main_osc.
-
-Fixes: 01e2113de9a5 ("clk: at91: add sam9x60 pmc driver")
-Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
-Link: https://lkml.kernel.org/r/1579261009-4573-3-git-send-email-claudiu.beznea@microchip.com
-Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
-Signed-off-by: Stephen Boyd <sboyd@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/clk/at91/sam9x60.c |    5 ++---
- 1 file changed, 2 insertions(+), 3 deletions(-)
-
---- a/drivers/clk/at91/sam9x60.c
-+++ b/drivers/clk/at91/sam9x60.c
-@@ -237,9 +237,8 @@ static void __init sam9x60_pmc_setup(str
- 
- 	parent_names[0] = "pllack";
- 	parent_names[1] = "upllck";
--	parent_names[2] = "mainck";
--	parent_names[3] = "mainck";
--	hw = sam9x60_clk_register_usb(regmap, "usbck", parent_names, 4);
-+	parent_names[2] = "main_osc";
-+	hw = sam9x60_clk_register_usb(regmap, "usbck", parent_names, 3);
- 	if (IS_ERR(hw))
- 		goto err_free;
- 
-From d7a83d67a1694c42cc95fc0755d823f7ca3bfcfb Mon Sep 17 00:00:00 2001
-From: Claudiu Beznea <claudiu.beznea@microchip.com>
-Date: Fri, 17 Jan 2020 13:36:48 +0200
-Subject: clk: at91: usb: use proper usbs_mask
-
-From: Claudiu Beznea <claudiu.beznea@microchip.com>
-
-commit d7a83d67a1694c42cc95fc0755d823f7ca3bfcfb upstream.
-
-Use usbs_mask passed as argument. The usbs_mask is different for
-SAM9X60.
-
-Fixes: 2423eeaead6f8 ("clk: at91: usb: Add sam9x60 support")
-Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
-Link: https://lkml.kernel.org/r/1579261009-4573-4-git-send-email-claudiu.beznea@microchip.com
-Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
-Signed-off-by: Stephen Boyd <sboyd@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/clk/at91/clk-usb.c |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/clk/at91/clk-usb.c
-+++ b/drivers/clk/at91/clk-usb.c
-@@ -211,7 +211,7 @@ _at91sam9x5_clk_register_usb(struct regm
- 
- 	usb->hw.init = &init;
- 	usb->regmap = regmap;
--	usb->usbs_mask = SAM9X5_USBS_MASK;
-+	usb->usbs_mask = usbs_mask;
- 
- 	hw = &usb->hw;
- 	ret = clk_hw_register(NULL, &usb->hw);
-From 7007f2eca0f258710899ca486da00546d03db0ed Mon Sep 17 00:00:00 2001
-From: Oleksandr Suvorov <oleksandr.suvorov@toradex.com>
-Date: Tue, 4 Feb 2020 13:11:47 +0200
-Subject: ARM: dts: imx7-colibri: fix muxing of usbc_det pin
-
-From: Oleksandr Suvorov <oleksandr.suvorov@toradex.com>
-
-commit 7007f2eca0f258710899ca486da00546d03db0ed upstream.
-
-USB_C_DET pin shouldn't be in ethernet group.
-
-Creating a separate group allows one to use this pin
-as an USB ID pin.
-
-Fixes: b326629f25b7 ("ARM: dts: imx7: add Toradex Colibri iMX7S/iMX7D suppor")
-Signed-off-by: Oleksandr Suvorov <oleksandr.suvorov@toradex.com>
-Signed-off-by: Shawn Guo <shawnguo@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- arch/arm/boot/dts/imx7-colibri.dtsi |    9 +++++++--
- 1 file changed, 7 insertions(+), 2 deletions(-)
-
---- a/arch/arm/boot/dts/imx7-colibri.dtsi
-+++ b/arch/arm/boot/dts/imx7-colibri.dtsi
-@@ -345,7 +345,7 @@
- &iomuxc {
- 	pinctrl-names = "default";
- 	pinctrl-0 = <&pinctrl_gpio1 &pinctrl_gpio2 &pinctrl_gpio3 &pinctrl_gpio4
--		     &pinctrl_gpio7>;
-+		     &pinctrl_gpio7 &pinctrl_usbc_det>;
- 
- 	pinctrl_gpio1: gpio1-grp {
- 		fsl,pins = <
-@@ -450,7 +450,6 @@
- 
- 	pinctrl_enet1: enet1grp {
- 		fsl,pins = <
--			MX7D_PAD_ENET1_CRS__GPIO7_IO14			0x14
- 			MX7D_PAD_ENET1_RGMII_RX_CTL__ENET1_RGMII_RX_CTL	0x73
- 			MX7D_PAD_ENET1_RGMII_RD0__ENET1_RGMII_RD0	0x73
- 			MX7D_PAD_ENET1_RGMII_RD1__ENET1_RGMII_RD1	0x73
-@@ -648,6 +647,12 @@
- 		>;
- 	};
- 
-+	pinctrl_usbc_det: gpio-usbc-det {
-+		fsl,pins = <
-+			MX7D_PAD_ENET1_CRS__GPIO7_IO14	0x14
-+		>;
-+	};
-+
- 	pinctrl_usbh_reg: gpio-usbh-vbus {
- 		fsl,pins = <
- 			MX7D_PAD_UART3_CTS_B__GPIO4_IO7	0x14 /* SODIMM 129 USBH PEN */
-From dde061b865598ad91f50140760e1d224e5045db9 Mon Sep 17 00:00:00 2001
-From: "Angus Ainslie (Purism)" <angus@akkea.ca>
-Date: Thu, 27 Feb 2020 14:17:26 +0100
-Subject: arm64: dts: librem5-devkit: add a vbus supply to usb0
-
-From: Angus Ainslie (Purism) <angus@akkea.ca>
-
-commit dde061b865598ad91f50140760e1d224e5045db9 upstream.
-
-Without a VBUS supply the dwc3 driver won't go into otg mode.
-
-Fixes: eb4ea0857c83 ("arm64: dts: fsl: librem5: Add a device tree for the Librem5 devkit")
-Signed-off-by: Angus Ainslie (Purism) <angus@akkea.ca>
-Signed-off-by: Martin Kepplinger <martin.kepplinger@puri.sm>
-Signed-off-by: Shawn Guo <shawnguo@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- arch/arm64/boot/dts/freescale/imx8mq-librem5-devkit.dts |    1 +
- 1 file changed, 1 insertion(+)
-
---- a/arch/arm64/boot/dts/freescale/imx8mq-librem5-devkit.dts
-+++ b/arch/arm64/boot/dts/freescale/imx8mq-librem5-devkit.dts
-@@ -750,6 +750,7 @@
- };
- 
- &usb3_phy0 {
-+	vbus-supply = <&reg_5v_p>;
- 	status = "okay";
- };
- 
-From a114c4ca64bd522aec1790c7e5c60c882f699d8f Mon Sep 17 00:00:00 2001
-From: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
-Date: Thu, 5 Mar 2020 13:23:49 -0800
-Subject: usb: dwc3: gadget: Don't clear flags before transfer ended
-
-From: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
-
-commit a114c4ca64bd522aec1790c7e5c60c882f699d8f upstream.
-
-We track END_TRANSFER command completion. Don't clear transfer
-started/ended flag prematurely. Otherwise, we'd run into the problem
-with restarting transfer before END_TRANSFER command finishes.
-
-Fixes: 6d8a019614f3 ("usb: dwc3: gadget: check for Missed Isoc from event status")
-Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>
-Signed-off-by: Felipe Balbi <balbi@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/usb/dwc3/gadget.c |    4 +---
- 1 file changed, 1 insertion(+), 3 deletions(-)
-
---- a/drivers/usb/dwc3/gadget.c
-+++ b/drivers/usb/dwc3/gadget.c
-@@ -2570,10 +2570,8 @@ static void dwc3_gadget_endpoint_transfe
- 
- 	dwc3_gadget_ep_cleanup_completed_requests(dep, event, status);
- 
--	if (stop) {
-+	if (stop)
- 		dwc3_stop_active_transfer(dep, true, true);
--		dep->flags = DWC3_EP_ENABLED;
--	}
- 
- 	/*
- 	 * WORKAROUND: This is the 2nd half of U1/U2 -> U0 workaround.
-From f5e056e1e46fcbb5f74ce560792aeb7d57ce79e6 Mon Sep 17 00:00:00 2001
-From: Colin Ian King <colin.king@canonical.com>
-Date: Tue, 19 Nov 2019 11:36:40 +0000
-Subject: ASoC: Intel: mrfld: fix incorrect check on p->sink
-
-From: Colin Ian King <colin.king@canonical.com>
-
-commit f5e056e1e46fcbb5f74ce560792aeb7d57ce79e6 upstream.
-
-The check on p->sink looks bogus, I believe it should be p->source
-since the following code blocks are related to p->source. Fix
-this by replacing p->sink with p->source.
-
-Fixes: 24c8d14192cc ("ASoC: Intel: mrfld: add DSP core controls")
-Signed-off-by: Colin Ian King <colin.king@canonical.com>
-Addresses-Coverity: ("Copy-paste error")
-Link: https://lore.kernel.org/r/20191119113640.166940-1-colin.king@canonical.com
-Signed-off-by: Mark Brown <broonie@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- sound/soc/intel/atom/sst-atom-controls.c |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/sound/soc/intel/atom/sst-atom-controls.c
-+++ b/sound/soc/intel/atom/sst-atom-controls.c
-@@ -1333,7 +1333,7 @@ int sst_send_pipe_gains(struct snd_soc_d
- 				dai->capture_widget->name);
- 		w = dai->capture_widget;
- 		snd_soc_dapm_widget_for_each_source_path(w, p) {
--			if (p->connected && !p->connected(w, p->sink))
-+			if (p->connected && !p->connected(w, p->source))
- 				continue;
- 
- 			if (p->connect &&  p->source->power &&
-From 3025571edd9df653e1ad649f0638368a39d1bbb5 Mon Sep 17 00:00:00 2001
-From: Colin Ian King <colin.king@canonical.com>
-Date: Sat, 8 Feb 2020 22:07:20 +0000
-Subject: ASoC: Intel: mrfld: return error codes when an error occurs
-
-From: Colin Ian King <colin.king@canonical.com>
-
-commit 3025571edd9df653e1ad649f0638368a39d1bbb5 upstream.
-
-Currently function sst_platform_get_resources always returns zero and
-error return codes set by the function are never returned. Fix this
-by returning the error return code in variable ret rather than the
-hard coded zero.
-
-Addresses-Coverity: ("Unused value")
-Fixes: f533a035e4da ("ASoC: Intel: mrfld - create separate module for pci part")
-Signed-off-by: Colin Ian King <colin.king@canonical.com>
-Acked-by: Cezary Rojewski <cezary.rojewski@intel.com>
-Acked-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
-Link: https://lore.kernel.org/r/20200208220720.36657-1-colin.king@canonical.com
-Signed-off-by: Mark Brown <broonie@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- sound/soc/intel/atom/sst/sst_pci.c |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/sound/soc/intel/atom/sst/sst_pci.c
-+++ b/sound/soc/intel/atom/sst/sst_pci.c
-@@ -99,7 +99,7 @@ static int sst_platform_get_resources(st
- 	dev_dbg(ctx->dev, "DRAM Ptr %p\n", ctx->dram);
- do_release_regions:
- 	pci_release_regions(pci);
--	return 0;
-+	return ret;
- }
- 
- /*
-From f8e4ae10de43fbb7ce85f79e04eca2988b6b2c40 Mon Sep 17 00:00:00 2001
-From: Takashi Iwai <tiwai@suse.de>
-Date: Mon, 13 Apr 2020 22:19:19 +0200
-Subject: ALSA: hda: Allow setting preallocation again for x86
-
-From: Takashi Iwai <tiwai@suse.de>
-
-commit f8e4ae10de43fbb7ce85f79e04eca2988b6b2c40 upstream.
-
-The commit c31427d0d21e ("ALSA: hda: No preallocation on x86
-platforms") changed CONFIG_SND_HDA_PREALLOC_SIZE setup and its default
-to zero for x86, as the preallocation should work almost all cases.
-However, this expectation was too naive; some applications try to
-allocate as the max buffer size as possible, and it leads to the
-memory exhaustion.  More badly, the commit changed the kconfig no
-longer adjustable for x86, so you can't fix it statically (although it
-can be still adjusted via procfs).
-
-So, practically seen, it's more recommended to set a reasonable limit
-for x86, too.  This patch follows to that experience, and changes the
-default to 2048 and allow the kconfig adjustable again.
-
-Fixes: c31427d0d21e ("ALSA: hda: No preallocation on x86 platforms")
-Cc: <stable@vger.kernel.org>
-BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=207223
-Link: https://lore.kernel.org/r/20200413201919.24241-1-tiwai@suse.de
-Signed-off-by: Takashi Iwai <tiwai@suse.de>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- sound/hda/Kconfig |    7 ++++---
- 1 file changed, 4 insertions(+), 3 deletions(-)
-
---- a/sound/hda/Kconfig
-+++ b/sound/hda/Kconfig
-@@ -21,16 +21,17 @@ config SND_HDA_EXT_CORE
-        select SND_HDA_CORE
- 
- config SND_HDA_PREALLOC_SIZE
--	int "Pre-allocated buffer size for HD-audio driver" if !SND_DMA_SGBUF
-+	int "Pre-allocated buffer size for HD-audio driver"
- 	range 0 32768
--	default 0 if SND_DMA_SGBUF
-+	default 2048 if SND_DMA_SGBUF
- 	default 64 if !SND_DMA_SGBUF
- 	help
- 	  Specifies the default pre-allocated buffer-size in kB for the
- 	  HD-audio driver.  A larger buffer (e.g. 2048) is preferred
- 	  for systems using PulseAudio.  The default 64 is chosen just
- 	  for compatibility reasons.
--	  On x86 systems, the default is zero as we need no preallocation.
-+	  On x86 systems, the default is 2048 as a reasonable value for
-+	  most of modern systems.
- 
- 	  Note that the pre-allocation size can be changed dynamically
- 	  via a proc file (/proc/asound/card*/pcm*/sub*/prealloc), too.
-From 4963d66b8a26c489958063abb6900ea6ed8e4836 Mon Sep 17 00:00:00 2001
-From: Adam Barber <barberadam995@gmail.com>
-Date: Fri, 10 Apr 2020 17:00:32 +0800
-Subject: ALSA: hda/realtek - Enable the headset mic on Asus FX505DT
-
-From: Adam Barber <barberadam995@gmail.com>
-
-commit 4963d66b8a26c489958063abb6900ea6ed8e4836 upstream.
-
-On Asus FX505DT with Realtek ALC233, the headset mic is connected
-to pin 0x19, with default 0x411111f0.
-
-Enable headset mic by reconfiguring the pin to an external mic
-associated with the headphone on 0x21. Mic jack detection was also
-found to be working.
-
-BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=207131
-Signed-off-by: Adam Barber <barberadam995@gmail.com>
-Cc: <stable@vger.kernel.org>
-Link: https://lore.kernel.org/r/20200410090032.2759-1-barberadam995@gmail.com
-Signed-off-by: Takashi Iwai <tiwai@suse.de>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- sound/pci/hda/patch_realtek.c |    1 +
- 1 file changed, 1 insertion(+)
-
---- a/sound/pci/hda/patch_realtek.c
-+++ b/sound/pci/hda/patch_realtek.c
-@@ -7253,6 +7253,7 @@ static const struct snd_pci_quirk alc269
- 	SND_PCI_QUIRK(0x1043, 0x16e3, "ASUS UX50", ALC269_FIXUP_STEREO_DMIC),
- 	SND_PCI_QUIRK(0x1043, 0x17d1, "ASUS UX431FL", ALC294_FIXUP_ASUS_DUAL_SPK),
- 	SND_PCI_QUIRK(0x1043, 0x18b1, "Asus MJ401TA", ALC256_FIXUP_ASUS_HEADSET_MIC),
-+	SND_PCI_QUIRK(0x1043, 0x18f1, "Asus FX505DT", ALC256_FIXUP_ASUS_HEADSET_MIC),
- 	SND_PCI_QUIRK(0x1043, 0x19ce, "ASUS B9450FA", ALC294_FIXUP_ASUS_HPE),
- 	SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW),
- 	SND_PCI_QUIRK(0x1043, 0x1a30, "ASUS X705UD", ALC256_FIXUP_ASUS_MIC),
-From 48cc42973509afac24e83d6edc23901d102872d1 Mon Sep 17 00:00:00 2001
-From: Takashi Iwai <tiwai@suse.de>
-Date: Sun, 12 Apr 2020 10:13:28 +0200
-Subject: ALSA: usb-audio: Filter error from connector kctl ops, too
-
-From: Takashi Iwai <tiwai@suse.de>
-
-commit 48cc42973509afac24e83d6edc23901d102872d1 upstream.
-
-The ignore_ctl_error option should filter the error at kctl accesses,
-but there was an overlook: mixer_ctl_connector_get() returns an error
-from the request.
-
-This patch covers the forgotten code path and apply filter_error()
-properly.  The locking error is still returned since this is a fatal
-error that has to be reported even with ignore_ctl_error option.
-
-BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=206873
-Cc: <stable@vger.kernel.org>
-Link: https://lore.kernel.org/r/20200412081331.4742-2-tiwai@suse.de
-Signed-off-by: Takashi Iwai <tiwai@suse.de>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- sound/usb/mixer.c |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/sound/usb/mixer.c
-+++ b/sound/usb/mixer.c
-@@ -1446,7 +1446,7 @@ error:
- 		usb_audio_err(chip,
- 			"cannot get connectors status: req = %#x, wValue = %#x, wIndex = %#x, type = %d\n",
- 			UAC_GET_CUR, validx, idx, cval->val_type);
--		return ret;
-+		return filter_error(cval, ret);
- 	}
- 
- 	ucontrol->value.integer.value[0] = val;
-From 3507245b82b4362dc9721cbc328644905a3efa22 Mon Sep 17 00:00:00 2001
-From: Takashi Iwai <tiwai@suse.de>
-Date: Sun, 12 Apr 2020 10:13:29 +0200
-Subject: ALSA: usb-audio: Don't override ignore_ctl_error value from the map
-
-From: Takashi Iwai <tiwai@suse.de>
-
-commit 3507245b82b4362dc9721cbc328644905a3efa22 upstream.
-
-The mapping table may contain also ignore_ctl_error flag for devices
-that are known to behave wild.  Since this flag always writes the
-card's own ignore_ctl_error flag, it overrides the value already set
-by the module option, so it doesn't follow user's expectation.
-Let's fix the code not to clear the flag that has been set by user.
-
-BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=206873
-Cc: <stable@vger.kernel.org>
-Link: https://lore.kernel.org/r/20200412081331.4742-3-tiwai@suse.de
-Signed-off-by: Takashi Iwai <tiwai@suse.de>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- sound/usb/mixer.c |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/sound/usb/mixer.c
-+++ b/sound/usb/mixer.c
-@@ -3085,7 +3085,7 @@ static int snd_usb_mixer_controls(struct
- 		if (map->id == state.chip->usb_id) {
- 			state.map = map->map;
- 			state.selector_map = map->selector_map;
--			mixer->ignore_ctl_error = map->ignore_ctl_error;
-+			mixer->ignore_ctl_error |= map->ignore_ctl_error;
- 			break;
- 		}
- 	}
-From 7dc3c5a0172e6c0449502103356c3628d05bc0e0 Mon Sep 17 00:00:00 2001
-From: Takashi Iwai <tiwai@suse.de>
-Date: Sun, 12 Apr 2020 10:13:30 +0200
-Subject: ALSA: usb-audio: Don't create jack controls for PCM terminals
-
-From: Takashi Iwai <tiwai@suse.de>
-
-commit 7dc3c5a0172e6c0449502103356c3628d05bc0e0 upstream.
-
-Some funky firmwares set the connector flag even on PCM terminals
-although it doesn't make sense (and even actually the firmware doesn't
-react properly!).  Let's skip creation of jack controls in such a
-case.
-
-BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=206873
-Cc: <stable@vger.kernel.org>
-Link: https://lore.kernel.org/r/20200412081331.4742-4-tiwai@suse.de
-Signed-off-by: Takashi Iwai <tiwai@suse.de>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- sound/usb/mixer.c |    9 ++++++---
- 1 file changed, 6 insertions(+), 3 deletions(-)
-
---- a/sound/usb/mixer.c
-+++ b/sound/usb/mixer.c
-@@ -2088,7 +2088,8 @@ static int parse_audio_input_terminal(st
- 	check_input_term(state, term_id, &iterm);
- 
- 	/* Check for jack detection. */
--	if (uac_v2v3_control_is_readable(bmctls, control))
-+	if ((iterm.type & 0xff00) != 0x0100 &&
-+	    uac_v2v3_control_is_readable(bmctls, control))
- 		build_connector_control(state->mixer, &iterm, true);
- 
- 	return 0;
-@@ -3128,7 +3129,8 @@ static int snd_usb_mixer_controls(struct
- 			if (err < 0 && err != -EINVAL)
- 				return err;
- 
--			if (uac_v2v3_control_is_readable(le16_to_cpu(desc->bmControls),
-+			if ((state.oterm.type & 0xff00) != 0x0100 &&
-+			    uac_v2v3_control_is_readable(le16_to_cpu(desc->bmControls),
- 							 UAC2_TE_CONNECTOR)) {
- 				build_connector_control(state.mixer, &state.oterm,
- 							false);
-@@ -3153,7 +3155,8 @@ static int snd_usb_mixer_controls(struct
- 			if (err < 0 && err != -EINVAL)
- 				return err;
- 
--			if (uac_v2v3_control_is_readable(le32_to_cpu(desc->bmControls),
-+			if ((state.oterm.type & 0xff00) != 0x0100 &&
-+			    uac_v2v3_control_is_readable(le32_to_cpu(desc->bmControls),
- 							 UAC3_TE_INSERTION)) {
- 				build_connector_control(state.mixer, &state.oterm,
- 							false);
-From 934b96594ed66b07dbc7e576d28814466df3a494 Mon Sep 17 00:00:00 2001
-From: Takashi Iwai <tiwai@suse.de>
-Date: Sun, 12 Apr 2020 10:13:31 +0200
-Subject: ALSA: usb-audio: Check mapping at creating connector controls, too
-
-From: Takashi Iwai <tiwai@suse.de>
-
-commit 934b96594ed66b07dbc7e576d28814466df3a494 upstream.
-
-Add the mapping check to build_connector_control() so that the device
-specific quirk can provide the node to skip for the badly behaving
-connector controls.  As an example, ALC1220-VB-based codec implements
-the skip entry for the broken SPDIF connector detection.
-
-BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=206873
-Cc: <stable@vger.kernel.org>
-Link: https://lore.kernel.org/r/20200412081331.4742-5-tiwai@suse.de
-Signed-off-by: Takashi Iwai <tiwai@suse.de>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- sound/usb/mixer.c      |   18 +++++++++++-------
- sound/usb/mixer_maps.c |    4 +++-
- 2 files changed, 14 insertions(+), 8 deletions(-)
-
---- a/sound/usb/mixer.c
-+++ b/sound/usb/mixer.c
-@@ -1750,11 +1750,15 @@ static void get_connector_control_name(s
- 
- /* Build a mixer control for a UAC connector control (jack-detect) */
- static void build_connector_control(struct usb_mixer_interface *mixer,
-+				    const struct usbmix_name_map *imap,
- 				    struct usb_audio_term *term, bool is_input)
- {
- 	struct snd_kcontrol *kctl;
- 	struct usb_mixer_elem_info *cval;
- 
-+	if (check_ignored_ctl(find_map(imap, term->id, 0)))
-+		return;
-+
- 	cval = kzalloc(sizeof(*cval), GFP_KERNEL);
- 	if (!cval)
- 		return;
-@@ -2090,7 +2094,7 @@ static int parse_audio_input_terminal(st
- 	/* Check for jack detection. */
- 	if ((iterm.type & 0xff00) != 0x0100 &&
- 	    uac_v2v3_control_is_readable(bmctls, control))
--		build_connector_control(state->mixer, &iterm, true);
-+		build_connector_control(state->mixer, state->map, &iterm, true);
- 
- 	return 0;
- }
-@@ -3051,13 +3055,13 @@ static int snd_usb_mixer_controls_badd(s
- 		memset(&iterm, 0, sizeof(iterm));
- 		iterm.id = UAC3_BADD_IT_ID4;
- 		iterm.type = UAC_BIDIR_TERMINAL_HEADSET;
--		build_connector_control(mixer, &iterm, true);
-+		build_connector_control(mixer, map->map, &iterm, true);
- 
- 		/* Output Term - Insertion control */
- 		memset(&oterm, 0, sizeof(oterm));
- 		oterm.id = UAC3_BADD_OT_ID3;
- 		oterm.type = UAC_BIDIR_TERMINAL_HEADSET;
--		build_connector_control(mixer, &oterm, false);
-+		build_connector_control(mixer, map->map, &oterm, false);
- 	}
- 
- 	return 0;
-@@ -3132,8 +3136,8 @@ static int snd_usb_mixer_controls(struct
- 			if ((state.oterm.type & 0xff00) != 0x0100 &&
- 			    uac_v2v3_control_is_readable(le16_to_cpu(desc->bmControls),
- 							 UAC2_TE_CONNECTOR)) {
--				build_connector_control(state.mixer, &state.oterm,
--							false);
-+				build_connector_control(state.mixer, state.map,
-+							&state.oterm, false);
- 			}
- 		} else {  /* UAC_VERSION_3 */
- 			struct uac3_output_terminal_descriptor *desc = p;
-@@ -3158,8 +3162,8 @@ static int snd_usb_mixer_controls(struct
- 			if ((state.oterm.type & 0xff00) != 0x0100 &&
- 			    uac_v2v3_control_is_readable(le32_to_cpu(desc->bmControls),
- 							 UAC3_TE_INSERTION)) {
--				build_connector_control(state.mixer, &state.oterm,
--							false);
-+				build_connector_control(state.mixer, state.map,
-+							&state.oterm, false);
- 			}
- 		}
- 	}
---- a/sound/usb/mixer_maps.c
-+++ b/sound/usb/mixer_maps.c
-@@ -360,9 +360,11 @@ static const struct usbmix_name_map cors
- };
- 
- /* Some mobos shipped with a dummy HD-audio show the invalid GET_MIN/GET_MAX
-- * response for Input Gain Pad (id=19, control=12).  Skip it.
-+ * response for Input Gain Pad (id=19, control=12) and the connector status
-+ * for SPDIF terminal (id=18).  Skip them.
-  */
- static const struct usbmix_name_map asus_rog_map[] = {
-+	{ 18, NULL }, /* OT, connector control */
- 	{ 19, NULL, 12 }, /* FU, Input Gain Pad */
- 	{}
- };
-From 9cc3d0c6915aee5140f8335d41bbc3ff1b79aa4e Mon Sep 17 00:00:00 2001
-From: Mark Rutland <mark.rutland@arm.com>
-Date: Tue, 14 Apr 2020 11:42:48 +0100
-Subject: arm64: vdso: don't free unallocated pages
-
-From: Mark Rutland <mark.rutland@arm.com>
-
-commit 9cc3d0c6915aee5140f8335d41bbc3ff1b79aa4e upstream.
-
-The aarch32_vdso_pages[] array never has entries allocated in the C_VVAR
-or C_VDSO slots, and as the array is zero initialized these contain
-NULL.
-
-However in __aarch32_alloc_vdso_pages() when
-aarch32_alloc_kuser_vdso_page() fails we attempt to free the page whose
-struct page is at NULL, which is obviously nonsensical.
-
-This patch removes the erroneous page freeing.
-
-Fixes: 7c1deeeb0130 ("arm64: compat: VDSO setup for compat layer")
-Cc: <stable@vger.kernel.org> # 5.3.x-
-Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
-Acked-by: Will Deacon <will@kernel.org>
-Signed-off-by: Mark Rutland <mark.rutland@arm.com>
-Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- arch/arm64/kernel/vdso.c |   13 +------------
- 1 file changed, 1 insertion(+), 12 deletions(-)
-
---- a/arch/arm64/kernel/vdso.c
-+++ b/arch/arm64/kernel/vdso.c
-@@ -260,18 +260,7 @@ static int __aarch32_alloc_vdso_pages(vo
- 	if (ret)
- 		return ret;
- 
--	ret = aarch32_alloc_kuser_vdso_page();
--	if (ret) {
--		unsigned long c_vvar =
--			(unsigned long)page_to_virt(aarch32_vdso_pages[C_VVAR]);
--		unsigned long c_vdso =
--			(unsigned long)page_to_virt(aarch32_vdso_pages[C_VDSO]);
--
--		free_page(c_vvar);
--		free_page(c_vdso);
--	}
--
--	return ret;
-+	return aarch32_alloc_kuser_vdso_page();
- }
- #else
- static int __aarch32_alloc_vdso_pages(void)
-From 86d32f9a7c54ad74f4514d7fef7c847883207291 Mon Sep 17 00:00:00 2001
-From: Vasily Averin <vvs@virtuozzo.com>
-Date: Tue, 14 Apr 2020 21:33:16 +0100
-Subject: keys: Fix proc_keys_next to increase position index
-
-From: Vasily Averin <vvs@virtuozzo.com>
-
-commit 86d32f9a7c54ad74f4514d7fef7c847883207291 upstream.
-
-If seq_file .next function does not change position index,
-read after some lseek can generate unexpected output:
-
-    $ dd if=/proc/keys bs=1  # full usual output
-    0f6bfdf5 I--Q---     2 perm 3f010000  1000  1000 user      4af2f79ab8848d0a: 740
-    1fb91b32 I--Q---     3 perm 1f3f0000  1000 65534 keyring   _uid.1000: 2
-    27589480 I--Q---     1 perm 0b0b0000     0     0 user      invocation_id: 16
-    2f33ab67 I--Q---   152 perm 3f030000     0     0 keyring   _ses: 2
-    33f1d8fa I--Q---     4 perm 3f030000  1000  1000 keyring   _ses: 1
-    3d427fda I--Q---     2 perm 3f010000  1000  1000 user      69ec44aec7678e5a: 740
-    3ead4096 I--Q---     1 perm 1f3f0000  1000 65534 keyring   _uid_ses.1000: 1
-    521+0 records in
-    521+0 records out
-    521 bytes copied, 0,00123769 s, 421 kB/s
-
-But a read after lseek in middle of last line results in the partial
-last line and then a repeat of the final line:
-
-    $ dd if=/proc/keys bs=500 skip=1
-    dd: /proc/keys: cannot skip to specified offset
-    g   _uid_ses.1000: 1
-    3ead4096 I--Q---     1 perm 1f3f0000  1000 65534 keyring   _uid_ses.1000: 1
-    0+1 records in
-    0+1 records out
-    97 bytes copied, 0,000135035 s, 718 kB/s
-
-and a read after lseek beyond end of file results in the last line being
-shown:
-
-    $ dd if=/proc/keys bs=1000 skip=1   # read after lseek beyond end of file
-    dd: /proc/keys: cannot skip to specified offset
-    3ead4096 I--Q---     1 perm 1f3f0000  1000 65534 keyring   _uid_ses.1000: 1
-    0+1 records in
-    0+1 records out
-    76 bytes copied, 0,000119981 s, 633 kB/s
-
-See https://bugzilla.kernel.org/show_bug.cgi?id=206283
-
-Fixes: 1f4aace60b0e ("fs/seq_file.c: simplify seq_file iteration code ...")
-Signed-off-by: Vasily Averin <vvs@virtuozzo.com>
-Signed-off-by: David Howells <dhowells@redhat.com>
-Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
-Cc: stable@vger.kernel.org
-Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- security/keys/proc.c |    2 ++
- 1 file changed, 2 insertions(+)
-
---- a/security/keys/proc.c
-+++ b/security/keys/proc.c
-@@ -139,6 +139,8 @@ static void *proc_keys_next(struct seq_f
- 	n = key_serial_next(p, v);
- 	if (n)
- 		*_pos = key_node_serial(n);
-+	else
-+		(*_pos)++;
- 	return n;
- }
- 
-From 0bbe7f719985efd9adb3454679ecef0984cb6800 Mon Sep 17 00:00:00 2001
-From: Xiao Yang <yangx.jy@cn.fujitsu.com>
-Date: Tue, 14 Apr 2020 09:51:45 +0800
-Subject: tracing: Fix the race between registering 'snapshot' event trigger and triggering 'snapshot' operation
-
-From: Xiao Yang <yangx.jy@cn.fujitsu.com>
-
-commit 0bbe7f719985efd9adb3454679ecef0984cb6800 upstream.
-
-Traced event can trigger 'snapshot' operation(i.e. calls snapshot_trigger()
-or snapshot_count_trigger()) when register_snapshot_trigger() has completed
-registration but doesn't allocate buffer for 'snapshot' event trigger.  In
-the rare case, 'snapshot' operation always detects the lack of allocated
-buffer so make register_snapshot_trigger() allocate buffer first.
-
-trigger-snapshot.tc in kselftest reproduces the issue on slow vm:
------------------------------------------------------------
-cat trace
-...
-ftracetest-3028  [002] ....   236.784290: sched_process_fork: comm=ftracetest pid=3028 child_comm=ftracetest child_pid=3036
-     <...>-2875  [003] ....   240.460335: tracing_snapshot_instance_cond: *** SNAPSHOT NOT ALLOCATED ***
-     <...>-2875  [003] ....   240.460338: tracing_snapshot_instance_cond: *** stopping trace here!   ***
------------------------------------------------------------
-
-Link: http://lkml.kernel.org/r/20200414015145.66236-1-yangx.jy@cn.fujitsu.com
-
-Cc: stable@vger.kernel.org
-Fixes: 93e31ffbf417a ("tracing: Add 'snapshot' event trigger command")
-Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
-Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- kernel/trace/trace_events_trigger.c |   10 +++-------
- 1 file changed, 3 insertions(+), 7 deletions(-)
-
---- a/kernel/trace/trace_events_trigger.c
-+++ b/kernel/trace/trace_events_trigger.c
-@@ -1088,14 +1088,10 @@ register_snapshot_trigger(char *glob, st
- 			  struct event_trigger_data *data,
- 			  struct trace_event_file *file)
- {
--	int ret = register_trigger(glob, ops, data, file);
-+	if (tracing_alloc_snapshot_instance(file->tr) != 0)
-+		return 0;
- 
--	if (ret > 0 && tracing_alloc_snapshot_instance(file->tr) != 0) {
--		unregister_trigger(glob, ops, data, file);
--		ret = 0;
--	}
--
--	return ret;
-+	return register_trigger(glob, ops, data, file);
- }
- 
- static int
-From 4d4225fc228e46948486d8b8207955f0c031b92e Mon Sep 17 00:00:00 2001
-From: Josef Bacik <josef@toxicpanda.com>
-Date: Thu, 2 Apr 2020 15:51:18 -0400
-Subject: btrfs: check commit root generation in should_ignore_root
-
-From: Josef Bacik <josef@toxicpanda.com>
-
-commit 4d4225fc228e46948486d8b8207955f0c031b92e upstream.
-
-Previously we would set the reloc root's last snapshot to transid - 1.
-However there was a problem with doing this, and we changed it to
-setting the last snapshot to the generation of the commit node of the fs
-root.
-
-This however broke should_ignore_root().  The assumption is that if we
-are in a generation newer than when the reloc root was created, then we
-would find the reloc root through normal backref lookups, and thus can
-ignore any fs roots we find with an old enough reloc root.
-
-Now that the last snapshot could be considerably further in the past
-than before, we'd end up incorrectly ignoring an fs root.  Thus we'd
-find no nodes for the bytenr we were searching for, and we'd fail to
-relocate anything.  We'd loop through the relocate code again and see
-that there were still used space in that block group, attempt to
-relocate those bytenr's again, fail in the same way, and just loop like
-this forever.  This is tricky in that we have to not modify the fs root
-at all during this time, so we need to have a block group that has data
-in this fs root that is not shared by any other root, which is why this
-has been difficult to reproduce.
-
-Fixes: 054570a1dc94 ("Btrfs: fix relocation incorrectly dropping data references")
-CC: stable@vger.kernel.org # 4.9+
-Reviewed-by: Filipe Manana <fdmanana@suse.com>
-Signed-off-by: Josef Bacik <josef@toxicpanda.com>
-Signed-off-by: David Sterba <dsterba@suse.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- fs/btrfs/relocation.c |    4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
---- a/fs/btrfs/relocation.c
-+++ b/fs/btrfs/relocation.c
-@@ -561,8 +561,8 @@ static int should_ignore_root(struct btr
- 	if (!reloc_root)
- 		return 0;
- 
--	if (btrfs_root_last_snapshot(&reloc_root->root_item) ==
--	    root->fs_info->running_transaction->transid - 1)
-+	if (btrfs_header_generation(reloc_root->commit_root) ==
-+	    root->fs_info->running_transaction->transid)
- 		return 0;
- 	/*
- 	 * if there is reloc tree and it was created in previous
-From 0e012b4e4b5ec8e064be3502382579dd0bb43269 Mon Sep 17 00:00:00 2001
-From: Johannes Berg <johannes.berg@intel.com>
-Date: Sun, 12 Apr 2020 00:40:30 +0200
-Subject: nl80211: fix NL80211_ATTR_FTM_RESPONDER policy
-
-From: Johannes Berg <johannes.berg@intel.com>
-
-commit 0e012b4e4b5ec8e064be3502382579dd0bb43269 upstream.
-
-The nested policy here should be established using the
-NLA_POLICY_NESTED() macro so the length is properly
-filled in.
-
-Cc: stable@vger.kernel.org
-Fixes: 81e54d08d9d8 ("cfg80211: support FTM responder configuration/statistics")
-Link: https://lore.kernel.org/r/20200412004029.9d0722bb56c8.Ie690bfcc4a1a61ff8d8ca7e475d59fcaa52fb2da@changeid
-Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- net/wireless/nl80211.c |    6 ++----
- 1 file changed, 2 insertions(+), 4 deletions(-)
-
---- a/net/wireless/nl80211.c
-+++ b/net/wireless/nl80211.c
-@@ -619,10 +619,8 @@ const struct nla_policy nl80211_policy[N
- 	[NL80211_ATTR_HE_CAPABILITY] = { .type = NLA_BINARY,
- 					 .len = NL80211_HE_MAX_CAPABILITY_LEN },
- 
--	[NL80211_ATTR_FTM_RESPONDER] = {
--		.type = NLA_NESTED,
--		.validation_data = nl80211_ftm_responder_policy,
--	},
-+	[NL80211_ATTR_FTM_RESPONDER] =
-+		NLA_POLICY_NESTED(nl80211_ftm_responder_policy),
- 	[NL80211_ATTR_TIMEOUT] = NLA_POLICY_MIN(NLA_U32, 1),
- 	[NL80211_ATTR_PEER_MEASUREMENTS] =
- 		NLA_POLICY_NESTED(nl80211_pmsr_attr_policy),
-From 52e04b4ce5d03775b6a78f3ed1097480faacc9fd Mon Sep 17 00:00:00 2001
-From: Sumit Garg <sumit.garg@linaro.org>
-Date: Tue, 7 Apr 2020 15:40:55 +0530
-Subject: mac80211: fix race in ieee80211_register_hw()
-
-From: Sumit Garg <sumit.garg@linaro.org>
-
-commit 52e04b4ce5d03775b6a78f3ed1097480faacc9fd upstream.
-
-A race condition leading to a kernel crash is observed during invocation
-of ieee80211_register_hw() on a dragonboard410c device having wcn36xx
-driver built as a loadable module along with a wifi manager in user-space
-waiting for a wifi device (wlanX) to be active.
-
-Sequence diagram for a particular kernel crash scenario:
-
-    user-space  ieee80211_register_hw()  ieee80211_tasklet_handler()
-    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-       |                    |                 |
-       |<---phy0----wiphy_register()          |
-       |-----iwd if_add---->|                 |
-       |                    |<---IRQ----(RX packet)
-       |              Kernel crash            |
-       |              due to unallocated      |
-       |              workqueue.              |
-       |                    |                 |
-       |       alloc_ordered_workqueue()      |
-       |                    |                 |
-       |              Misc wiphy init.        |
-       |                    |                 |
-       |            ieee80211_if_add()        |
-       |                    |                 |
-
-As evident from above sequence diagram, this race condition isn't specific
-to a particular wifi driver but rather the initialization sequence in
-ieee80211_register_hw() needs to be fixed. So re-order the initialization
-sequence and the updated sequence diagram would look like:
-
-    user-space  ieee80211_register_hw()  ieee80211_tasklet_handler()
-    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-       |                    |                 |
-       |       alloc_ordered_workqueue()      |
-       |                    |                 |
-       |              Misc wiphy init.        |
-       |                    |                 |
-       |<---phy0----wiphy_register()          |
-       |-----iwd if_add---->|                 |
-       |                    |<---IRQ----(RX packet)
-       |                    |                 |
-       |            ieee80211_if_add()        |
-       |                    |                 |
-
-Cc: stable@vger.kernel.org
-Signed-off-by: Sumit Garg <sumit.garg@linaro.org>
-Link: https://lore.kernel.org/r/1586254255-28713-1-git-send-email-sumit.garg@linaro.org
-[Johannes: fix rtnl imbalances]
-Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- net/mac80211/main.c |   24 +++++++++++++-----------
- 1 file changed, 13 insertions(+), 11 deletions(-)
-
---- a/net/mac80211/main.c
-+++ b/net/mac80211/main.c
-@@ -1051,7 +1051,7 @@ int ieee80211_register_hw(struct ieee802
- 		local->hw.wiphy->signal_type = CFG80211_SIGNAL_TYPE_UNSPEC;
- 		if (hw->max_signal <= 0) {
- 			result = -EINVAL;
--			goto fail_wiphy_register;
-+			goto fail_workqueue;
- 		}
- 	}
- 
-@@ -1113,7 +1113,7 @@ int ieee80211_register_hw(struct ieee802
- 
- 	result = ieee80211_init_cipher_suites(local);
- 	if (result < 0)
--		goto fail_wiphy_register;
-+		goto fail_workqueue;
- 
- 	if (!local->ops->remain_on_channel)
- 		local->hw.wiphy->max_remain_on_channel_duration = 5000;
-@@ -1139,10 +1139,6 @@ int ieee80211_register_hw(struct ieee802
- 
- 	local->hw.wiphy->max_num_csa_counters = IEEE80211_MAX_CSA_COUNTERS_NUM;
- 
--	result = wiphy_register(local->hw.wiphy);
--	if (result < 0)
--		goto fail_wiphy_register;
--
- 	/*
- 	 * We use the number of queues for feature tests (QoS, HT) internally
- 	 * so restrict them appropriately.
-@@ -1198,9 +1194,9 @@ int ieee80211_register_hw(struct ieee802
- 		goto fail_flows;
- 
- 	rtnl_lock();
--
- 	result = ieee80211_init_rate_ctrl_alg(local,
- 					      hw->rate_control_algorithm);
-+	rtnl_unlock();
- 	if (result < 0) {
- 		wiphy_debug(local->hw.wiphy,
- 			    "Failed to initialize rate control algorithm\n");
-@@ -1254,6 +1250,12 @@ int ieee80211_register_hw(struct ieee802
- 		local->sband_allocated |= BIT(band);
- 	}
- 
-+	result = wiphy_register(local->hw.wiphy);
-+	if (result < 0)
-+		goto fail_wiphy_register;
-+
-+	rtnl_lock();
-+
- 	/* add one default STA interface if supported */
- 	if (local->hw.wiphy->interface_modes & BIT(NL80211_IFTYPE_STATION) &&
- 	    !ieee80211_hw_check(hw, NO_AUTO_VIF)) {
-@@ -1293,17 +1295,17 @@ int ieee80211_register_hw(struct ieee802
- #if defined(CONFIG_INET) || defined(CONFIG_IPV6)
-  fail_ifa:
- #endif
-+	wiphy_unregister(local->hw.wiphy);
-+ fail_wiphy_register:
- 	rtnl_lock();
- 	rate_control_deinitialize(local);
- 	ieee80211_remove_interfaces(local);
-- fail_rate:
- 	rtnl_unlock();
-+ fail_rate:
-  fail_flows:
- 	ieee80211_led_exit(local);
- 	destroy_workqueue(local->workqueue);
-  fail_workqueue:
--	wiphy_unregister(local->hw.wiphy);
-- fail_wiphy_register:
- 	if (local->wiphy_ciphers_allocated)
- 		kfree(local->hw.wiphy->cipher_suites);
- 	kfree(local->int_scan_req);
-@@ -1353,8 +1355,8 @@ void ieee80211_unregister_hw(struct ieee
- 	skb_queue_purge(&local->skb_queue_unreliable);
- 	skb_queue_purge(&local->skb_queue_tdls_chsw);
- 
--	destroy_workqueue(local->workqueue);
- 	wiphy_unregister(local->hw.wiphy);
-+	destroy_workqueue(local->workqueue);
- 	ieee80211_led_exit(local);
- 	kfree(local->int_scan_req);
- }
-From 7ea862048317aa76d0f22334202779a25530980c Mon Sep 17 00:00:00 2001
-From: Tuomas Tynkkynen <tuomas.tynkkynen@iki.fi>
-Date: Fri, 10 Apr 2020 15:32:57 +0300
-Subject: mac80211_hwsim: Use kstrndup() in place of kasprintf()
-
-From: Tuomas Tynkkynen <tuomas.tynkkynen@iki.fi>
-
-commit 7ea862048317aa76d0f22334202779a25530980c upstream.
-
-syzbot reports a warning:
-
-precision 33020 too large
-WARNING: CPU: 0 PID: 9618 at lib/vsprintf.c:2471 set_precision+0x150/0x180 lib/vsprintf.c:2471
- vsnprintf+0xa7b/0x19a0 lib/vsprintf.c:2547
- kvasprintf+0xb2/0x170 lib/kasprintf.c:22
- kasprintf+0xbb/0xf0 lib/kasprintf.c:59
- hwsim_del_radio_nl+0x63a/0x7e0 drivers/net/wireless/mac80211_hwsim.c:3625
- genl_family_rcv_msg_doit net/netlink/genetlink.c:672 [inline]
- ...
- entry_SYSCALL_64_after_hwframe+0x49/0xbe
-
-Thus it seems that kasprintf() with "%.*s" format can not be used for
-duplicating a string with arbitrary length. Replace it with kstrndup().
-
-Note that later this string is limited to NL80211_WIPHY_NAME_MAXLEN == 64,
-but the code is simpler this way.
-
-Reported-by: syzbot+6693adf1698864d21734@syzkaller.appspotmail.com
-Reported-by: syzbot+a4aee3f42d7584d76761@syzkaller.appspotmail.com
-Cc: stable@kernel.org
-Signed-off-by: Tuomas Tynkkynen <tuomas.tynkkynen@iki.fi>
-Link: https://lore.kernel.org/r/20200410123257.14559-1-tuomas.tynkkynen@iki.fi
-[johannes: add note about length limit]
-Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/net/wireless/mac80211_hwsim.c |   12 ++++++------
- 1 file changed, 6 insertions(+), 6 deletions(-)
-
---- a/drivers/net/wireless/mac80211_hwsim.c
-+++ b/drivers/net/wireless/mac80211_hwsim.c
-@@ -3600,9 +3600,9 @@ static int hwsim_new_radio_nl(struct sk_
- 	}
- 
- 	if (info->attrs[HWSIM_ATTR_RADIO_NAME]) {
--		hwname = kasprintf(GFP_KERNEL, "%.*s",
--				   nla_len(info->attrs[HWSIM_ATTR_RADIO_NAME]),
--				   (char *)nla_data(info->attrs[HWSIM_ATTR_RADIO_NAME]));
-+		hwname = kstrndup((char *)nla_data(info->attrs[HWSIM_ATTR_RADIO_NAME]),
-+				  nla_len(info->attrs[HWSIM_ATTR_RADIO_NAME]),
-+				  GFP_KERNEL);
- 		if (!hwname)
- 			return -ENOMEM;
- 		param.hwname = hwname;
-@@ -3622,9 +3622,9 @@ static int hwsim_del_radio_nl(struct sk_
- 	if (info->attrs[HWSIM_ATTR_RADIO_ID]) {
- 		idx = nla_get_u32(info->attrs[HWSIM_ATTR_RADIO_ID]);
- 	} else if (info->attrs[HWSIM_ATTR_RADIO_NAME]) {
--		hwname = kasprintf(GFP_KERNEL, "%.*s",
--				   nla_len(info->attrs[HWSIM_ATTR_RADIO_NAME]),
--				   (char *)nla_data(info->attrs[HWSIM_ATTR_RADIO_NAME]));
-+		hwname = kstrndup((char *)nla_data(info->attrs[HWSIM_ATTR_RADIO_NAME]),
-+				  nla_len(info->attrs[HWSIM_ATTR_RADIO_NAME]),
-+				  GFP_KERNEL);
- 		if (!hwname)
- 			return -ENOMEM;
- 	} else
-From 4ede7100bfef4baff3500d6b1cf44fc1b897739c Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Tue, 3 Sep 2019 17:38:43 +0300
-Subject: net/mlx5e: Encapsulate updating netdev queues into a function
-
-From: Maxim Mikityanskiy <maximmi@mellanox.com>
-
-[ Upstream commit c2c95271f9f39ea9b34db2301b3b6c5105cdb447 ]
-
-As a preparation for one of the following commits, create a function to
-encapsulate the code that notifies the kernel about the new amount of
-RX and TX queues. The code will be called multiple times in the next
-commit.
-
-Signed-off-by: Maxim Mikityanskiy <maximmi@mellanox.com>
-Reviewed-by: Tariq Toukan <tariqt@mellanox.com>
-Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- .../net/ethernet/mellanox/mlx5/core/en_main.c | 19 ++++++++++++-------
- 1 file changed, 12 insertions(+), 7 deletions(-)
-
-diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
-index 4ef3dc79f73c7..8125c605780be 100644
---- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
-+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
-@@ -2886,6 +2886,17 @@ static void mlx5e_netdev_set_tcs(struct net_device *netdev)
- 		netdev_set_tc_queue(netdev, tc, nch, 0);
- }
- 
-+static void mlx5e_update_netdev_queues(struct mlx5e_priv *priv)
-+{
-+	int num_txqs = priv->channels.num * priv->channels.params.num_tc;
-+	int num_rxqs = priv->channels.num * priv->profile->rq_groups;
-+	struct net_device *netdev = priv->netdev;
-+
-+	mlx5e_netdev_set_tcs(netdev);
-+	netif_set_real_num_tx_queues(netdev, num_txqs);
-+	netif_set_real_num_rx_queues(netdev, num_rxqs);
-+}
-+
- static void mlx5e_build_txq_maps(struct mlx5e_priv *priv)
- {
- 	int i, ch;
-@@ -2907,13 +2918,7 @@ static void mlx5e_build_txq_maps(struct mlx5e_priv *priv)
- 
- void mlx5e_activate_priv_channels(struct mlx5e_priv *priv)
- {
--	int num_txqs = priv->channels.num * priv->channels.params.num_tc;
--	int num_rxqs = priv->channels.num * priv->profile->rq_groups;
--	struct net_device *netdev = priv->netdev;
--
--	mlx5e_netdev_set_tcs(netdev);
--	netif_set_real_num_tx_queues(netdev, num_txqs);
--	netif_set_real_num_rx_queues(netdev, num_rxqs);
-+	mlx5e_update_netdev_queues(priv);
- 
- 	mlx5e_build_txq_maps(priv);
- 	mlx5e_activate_channels(&priv->channels);
--- 
-2.20.1
-
-From c7c1a09f02b20ae1b6c48e37a7dda2e0cd08e244 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Thu, 31 Oct 2019 09:39:34 +0200
-Subject: net/mlx5e: Rename hw_modify to preactivate
-
-From: Maxim Mikityanskiy <maximmi@mellanox.com>
-
-[ Upstream commit dca147b3dce5abb5284ff747211960fd2db5ec2e ]
-
-mlx5e_safe_switch_channels accepts a callback to be called before
-activating new channels. It is intended to configure some hardware
-parameters in cases where channels are recreated because some
-configuration has changed.
-
-Recently, this callback has started being used to update the driver's
-internal MLX5E_STATE_XDP_OPEN flag, and the following patches also
-intend to use this callback for software preparations. This patch
-renames the hw_modify callback to preactivate, so that the name fits
-better.
-
-Signed-off-by: Maxim Mikityanskiy <maximmi@mellanox.com>
-Reviewed-by: Tariq Toukan <tariqt@mellanox.com>
-Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/ethernet/mellanox/mlx5/core/en.h      |  6 +++---
- drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 14 ++++++++------
- 2 files changed, 11 insertions(+), 9 deletions(-)
-
-diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en.h b/drivers/net/ethernet/mellanox/mlx5/core/en.h
-index c9606b8ab6efd..704bd6d5277d2 100644
---- a/drivers/net/ethernet/mellanox/mlx5/core/en.h
-+++ b/drivers/net/ethernet/mellanox/mlx5/core/en.h
-@@ -1036,14 +1036,14 @@ int mlx5e_open_channels(struct mlx5e_priv *priv,
- 			struct mlx5e_channels *chs);
- void mlx5e_close_channels(struct mlx5e_channels *chs);
- 
--/* Function pointer to be used to modify WH settings while
-+/* Function pointer to be used to modify HW or kernel settings while
-  * switching channels
-  */
--typedef int (*mlx5e_fp_hw_modify)(struct mlx5e_priv *priv);
-+typedef int (*mlx5e_fp_preactivate)(struct mlx5e_priv *priv);
- int mlx5e_safe_reopen_channels(struct mlx5e_priv *priv);
- int mlx5e_safe_switch_channels(struct mlx5e_priv *priv,
- 			       struct mlx5e_channels *new_chs,
--			       mlx5e_fp_hw_modify hw_modify);
-+			       mlx5e_fp_preactivate preactivate);
- void mlx5e_activate_priv_channels(struct mlx5e_priv *priv);
- void mlx5e_deactivate_priv_channels(struct mlx5e_priv *priv);
- 
-diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
-index 8125c605780be..1c8a4235a48c5 100644
---- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
-+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
-@@ -2954,7 +2954,7 @@ void mlx5e_deactivate_priv_channels(struct mlx5e_priv *priv)
- 
- static void mlx5e_switch_priv_channels(struct mlx5e_priv *priv,
- 				       struct mlx5e_channels *new_chs,
--				       mlx5e_fp_hw_modify hw_modify)
-+				       mlx5e_fp_preactivate preactivate)
- {
- 	struct net_device *netdev = priv->netdev;
- 	int new_num_txqs;
-@@ -2973,9 +2973,11 @@ static void mlx5e_switch_priv_channels(struct mlx5e_priv *priv,
- 
- 	priv->channels = *new_chs;
- 
--	/* New channels are ready to roll, modify HW settings if needed */
--	if (hw_modify)
--		hw_modify(priv);
-+	/* New channels are ready to roll, call the preactivate hook if needed
-+	 * to modify HW settings or update kernel parameters.
-+	 */
-+	if (preactivate)
-+		preactivate(priv);
- 
- 	priv->profile->update_rx(priv);
- 	mlx5e_activate_priv_channels(priv);
-@@ -2987,7 +2989,7 @@ static void mlx5e_switch_priv_channels(struct mlx5e_priv *priv,
- 
- int mlx5e_safe_switch_channels(struct mlx5e_priv *priv,
- 			       struct mlx5e_channels *new_chs,
--			       mlx5e_fp_hw_modify hw_modify)
-+			       mlx5e_fp_preactivate preactivate)
- {
- 	int err;
- 
-@@ -2995,7 +2997,7 @@ int mlx5e_safe_switch_channels(struct mlx5e_priv *priv,
- 	if (err)
- 		return err;
- 
--	mlx5e_switch_priv_channels(priv, new_chs, hw_modify);
-+	mlx5e_switch_priv_channels(priv, new_chs, preactivate);
- 	return 0;
- }
- 
--- 
-2.20.1
-
-From 058877f88539d0523f25d646134a5ad82762ae95 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Mon, 4 Nov 2019 12:02:14 +0200
-Subject: net/mlx5e: Use preactivate hook to set the indirection table
-
-From: Maxim Mikityanskiy <maximmi@mellanox.com>
-
-[ Upstream commit fe867cac9e1967c553e4ac2aece5fc8675258010 ]
-
-mlx5e_ethtool_set_channels updates the indirection table before
-switching to the new channels. If the switch fails, the indirection
-table is new, but the channels are old, which is wrong. Fix it by using
-the preactivate hook of mlx5e_safe_switch_channels to update the
-indirection table at the stage when nothing can fail anymore.
-
-As the code that updates the indirection table is now encapsulated into
-a new function, use that function in the attach flow when the driver has
-to reduce the number of channels, and prepare the code for the next
-commit.
-
-Fixes: 85082dba0a ("net/mlx5e: Correctly handle RSS indirection table when changing number of channels")
-Signed-off-by: Maxim Mikityanskiy <maximmi@mellanox.com>
-Reviewed-by: Tariq Toukan <tariqt@mellanox.com>
-Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/ethernet/mellanox/mlx5/core/en.h     |  1 +
- .../net/ethernet/mellanox/mlx5/core/en_ethtool.c | 10 ++--------
- .../net/ethernet/mellanox/mlx5/core/en_main.c    | 16 ++++++++++++++--
- 3 files changed, 17 insertions(+), 10 deletions(-)
-
-diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en.h b/drivers/net/ethernet/mellanox/mlx5/core/en.h
-index 704bd6d5277d2..ddd2409fc8bef 100644
---- a/drivers/net/ethernet/mellanox/mlx5/core/en.h
-+++ b/drivers/net/ethernet/mellanox/mlx5/core/en.h
-@@ -1044,6 +1044,7 @@ int mlx5e_safe_reopen_channels(struct mlx5e_priv *priv);
- int mlx5e_safe_switch_channels(struct mlx5e_priv *priv,
- 			       struct mlx5e_channels *new_chs,
- 			       mlx5e_fp_preactivate preactivate);
-+int mlx5e_num_channels_changed(struct mlx5e_priv *priv);
- void mlx5e_activate_priv_channels(struct mlx5e_priv *priv);
- void mlx5e_deactivate_priv_channels(struct mlx5e_priv *priv);
- 
-diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
-index d674cb6798950..d2cfa247abc86 100644
---- a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
-+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
-@@ -432,9 +432,7 @@ int mlx5e_ethtool_set_channels(struct mlx5e_priv *priv,
- 
- 	if (!test_bit(MLX5E_STATE_OPENED, &priv->state)) {
- 		*cur_params = new_channels.params;
--		if (!netif_is_rxfh_configured(priv->netdev))
--			mlx5e_build_default_indir_rqt(priv->rss_params.indirection_rqt,
--						      MLX5E_INDIR_RQT_SIZE, count);
-+		mlx5e_num_channels_changed(priv);
- 		goto out;
- 	}
- 
-@@ -442,12 +440,8 @@ int mlx5e_ethtool_set_channels(struct mlx5e_priv *priv,
- 	if (arfs_enabled)
- 		mlx5e_arfs_disable(priv);
- 
--	if (!netif_is_rxfh_configured(priv->netdev))
--		mlx5e_build_default_indir_rqt(priv->rss_params.indirection_rqt,
--					      MLX5E_INDIR_RQT_SIZE, count);
--
- 	/* Switch to new channels, set new parameters and close old ones */
--	err = mlx5e_safe_switch_channels(priv, &new_channels, NULL);
-+	err = mlx5e_safe_switch_channels(priv, &new_channels, mlx5e_num_channels_changed);
- 
- 	if (arfs_enabled) {
- 		int err2 = mlx5e_arfs_enable(priv);
-diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
-index 1c8a4235a48c5..2650739964326 100644
---- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
-+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
-@@ -2897,6 +2897,17 @@ static void mlx5e_update_netdev_queues(struct mlx5e_priv *priv)
- 	netif_set_real_num_rx_queues(netdev, num_rxqs);
- }
- 
-+int mlx5e_num_channels_changed(struct mlx5e_priv *priv)
-+{
-+	u16 count = priv->channels.params.num_channels;
-+
-+	if (!netif_is_rxfh_configured(priv->netdev))
-+		mlx5e_build_default_indir_rqt(priv->rss_params.indirection_rqt,
-+					      MLX5E_INDIR_RQT_SIZE, count);
-+
-+	return 0;
-+}
-+
- static void mlx5e_build_txq_maps(struct mlx5e_priv *priv)
- {
- 	int i, ch;
-@@ -5305,9 +5316,10 @@ int mlx5e_attach_netdev(struct mlx5e_priv *priv)
- 	max_nch = mlx5e_get_max_num_channels(priv->mdev);
- 	if (priv->channels.params.num_channels > max_nch) {
- 		mlx5_core_warn(priv->mdev, "MLX5E: Reducing number of channels to %d\n", max_nch);
-+		/* Reducing the number of channels - RXFH has to be reset. */
-+		priv->netdev->priv_flags &= ~IFF_RXFH_CONFIGURED;
- 		priv->channels.params.num_channels = max_nch;
--		mlx5e_build_default_indir_rqt(priv->rss_params.indirection_rqt,
--					      MLX5E_INDIR_RQT_SIZE, max_nch);
-+		mlx5e_num_channels_changed(priv);
- 	}
- 
- 	err = profile->init_tx(priv);
--- 
-2.20.1
-
-From 8c7f0a44b4b4ef16df8f44fbaee6d1f5d1593c83 Mon Sep 17 00:00:00 2001
-From: Sergei Lopatin <magist3r@gmail.com>
-Date: Wed, 26 Jun 2019 14:56:59 +0500
-Subject: drm/amd/powerplay: force the trim of the mclk dpm_levels if OD is enabled
-
-From: Sergei Lopatin <magist3r@gmail.com>
-
-commit 8c7f0a44b4b4ef16df8f44fbaee6d1f5d1593c83 upstream.
-
-Should prevent flicker if PP_OVERDRIVE_MASK is set.
-
-bug: https://bugs.freedesktop.org/show_bug.cgi?id=102646
-bug: https://bugs.freedesktop.org/show_bug.cgi?id=108941
-bug: https://gitlab.freedesktop.org/drm/amd/-/issues/1088
-bug: https://gitlab.freedesktop.org/drm/amd/-/issues/628
-
-Signed-off-by: Sergei Lopatin <magist3r@gmail.com>
-Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-Cc: stable@vger.kernel.org
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c |    5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
---- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
-+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
-@@ -3804,9 +3804,12 @@ static int smu7_trim_single_dpm_states(s
- {
- 	uint32_t i;
- 
-+	/* force the trim if mclk_switching is disabled to prevent flicker */
-+	bool force_trim = (low_limit == high_limit);
- 	for (i = 0; i < dpm_table->count; i++) {
- 	/*skip the trim if od is enabled*/
--		if (!hwmgr->od_enabled && (dpm_table->dpm_levels[i].value < low_limit
-+		if ((!hwmgr->od_enabled || force_trim)
-+			&& (dpm_table->dpm_levels[i].value < low_limit
- 			|| dpm_table->dpm_levels[i].value > high_limit))
- 			dpm_table->dpm_levels[i].enabled = false;
- 		else
-From 974229db7e6c1f2ff83ceaf3022d5128bf62caca Mon Sep 17 00:00:00 2001
-From: Alex Deucher <alexander.deucher@amd.com>
-Date: Thu, 9 Apr 2020 09:40:01 -0400
-Subject: drm/amdgpu/gfx9: add gfxoff quirk
-
-From: Alex Deucher <alexander.deucher@amd.com>
-
-commit 974229db7e6c1f2ff83ceaf3022d5128bf62caca upstream.
-
-Fix screen corruption with firefox.
-
-Bug: https://bugzilla.kernel.org/show_bug.cgi?id=207171
-Reviewed-by: Huang Rui <ray.huang@amd.com>
-Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-Cc: stable@vger.kernel.org
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c |    2 ++
- 1 file changed, 2 insertions(+)
-
---- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
-+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
-@@ -1175,6 +1175,8 @@ struct amdgpu_gfxoff_quirk {
- static const struct amdgpu_gfxoff_quirk amdgpu_gfxoff_quirk_list[] = {
- 	/* https://bugzilla.kernel.org/show_bug.cgi?id=204689 */
- 	{ 0x1002, 0x15dd, 0x1002, 0x15dd, 0xc8 },
-+	/* https://bugzilla.kernel.org/show_bug.cgi?id=207171 */
-+	{ 0x1002, 0x15dd, 0x103c, 0x83e7, 0xd3 },
- 	{ 0, 0, 0, 0, 0 },
- };
- 
-From b2a7e9735ab2864330be9d00d7f38c961c28de5d Mon Sep 17 00:00:00 2001
-From: Prike Liang <Prike.Liang@amd.com>
-Date: Mon, 13 Apr 2020 21:41:14 +0800
-Subject: drm/amdgpu: fix the hw hang during perform system reboot and reset
-
-From: Prike Liang <Prike.Liang@amd.com>
-
-commit b2a7e9735ab2864330be9d00d7f38c961c28de5d upstream.
-
-The system reboot failed as some IP blocks enter power gate before perform
-hw resource destory. Meanwhile use unify interface to set device CGPG to ungate
-state can simplify the amdgpu poweroff or reset ungate guard.
-
-Fixes: 487eca11a321ef ("drm/amdgpu: fix gfx hang during suspend with video playback (v2)")
-Signed-off-by: Prike Liang <Prike.Liang@amd.com>
-Tested-by: Mengbing Wang <Mengbing.Wang@amd.com>
-Tested-by: Paul Menzel <pmenzel@molgen.mpg.de>
-Acked-by: Alex Deucher <alexander.deucher@amd.com>
-Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-Cc: stable@vger.kernel.org
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/gpu/drm/amd/amdgpu/amdgpu_device.c |    2 ++
- 1 file changed, 2 insertions(+)
-
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
-@@ -2285,6 +2285,8 @@ static int amdgpu_device_ip_suspend_phas
- {
- 	int i, r;
- 
-+	amdgpu_device_set_pg_state(adev, AMD_PG_STATE_UNGATE);
-+	amdgpu_device_set_cg_state(adev, AMD_CG_STATE_UNGATE);
- 
- 	for (i = adev->num_ip_blocks - 1; i >= 0; i--) {
- 		if (!adev->ip_blocks[i].status.valid)
-From d79294d0de12ddd1420110813626d691f440b86f Mon Sep 17 00:00:00 2001
-From: Hans de Goede <hdegoede@redhat.com>
-Date: Tue, 7 Apr 2020 20:11:16 +0200
-Subject: i2c: designware: platdrv: Remove DPM_FLAG_SMART_SUSPEND flag on BYT and CHT
-
-From: Hans de Goede <hdegoede@redhat.com>
-
-commit d79294d0de12ddd1420110813626d691f440b86f upstream.
-
-We already set DPM_FLAG_SMART_PREPARE, so we completely skip all
-callbacks (other then prepare) where possible, quoting from
-dw_i2c_plat_prepare():
-
-        /*
-         * If the ACPI companion device object is present for this device, it
-         * may be accessed during suspend and resume of other devices via I2C
-         * operation regions, so tell the PM core and middle layers to avoid
-         * skipping system suspend/resume callbacks for it in that case.
-         */
-        return !has_acpi_companion(dev);
-
-Also setting the DPM_FLAG_SMART_SUSPEND will cause acpi_subsys_suspend()
-to leave the controller runtime-suspended even if dw_i2c_plat_prepare()
-returned 0.
-
-Leaving the controller runtime-suspended normally, when the I2C controller
-is suspended during the suspend_late phase, is not an issue because
-the pm_runtime_get_sync() done by i2c_dw_xfer() will (runtime-)resume it.
-
-But for dw I2C controllers on Bay- and Cherry-Trail devices acpi_lpss.c
-leaves the controller alive until the suspend_noirq phase, because it may
-be used by the _PS3 ACPI methods of PCI devices and PCI devices are left
-powered on until the suspend_noirq phase.
-
-Between the suspend_late and resume_early phases runtime-pm is disabled.
-So for any ACPI I2C OPRegion accesses done after the suspend_late phase,
-the pm_runtime_get_sync() done by i2c_dw_xfer() is a no-op and the
-controller is left runtime-suspended.
-
-i2c_dw_xfer() has a check to catch this condition (rather then waiting
-for the I2C transfer to timeout because the controller is suspended).
-acpi_subsys_suspend() leaving the controller runtime-suspended in
-combination with an ACPI I2C OPRegion access done after the suspend_late
-phase triggers this check, leading to the following error being logged
-on a Bay Trail based Lenovo Thinkpad 8 tablet:
-
-[   93.275882] i2c_designware 80860F41:00: Transfer while suspended
-[   93.275993] WARNING: CPU: 0 PID: 412 at drivers/i2c/busses/i2c-designware-master.c:429 i2c_dw_xfer+0x239/0x280
-...
-[   93.276252] Workqueue: kacpi_notify acpi_os_execute_deferred
-[   93.276267] RIP: 0010:i2c_dw_xfer+0x239/0x280
-...
-[   93.276340] Call Trace:
-[   93.276366]  __i2c_transfer+0x121/0x520
-[   93.276379]  i2c_transfer+0x4c/0x100
-[   93.276392]  i2c_acpi_space_handler+0x219/0x510
-[   93.276408]  ? up+0x40/0x60
-[   93.276419]  ? i2c_acpi_notify+0x130/0x130
-[   93.276433]  acpi_ev_address_space_dispatch+0x1e1/0x252
-...
-
-So since on BYT and CHT platforms we want ACPI I2c OPRegion accesses
-to work until the suspend_noirq phase, we need the controller to be
-runtime-resumed during the suspend phase if it is runtime-suspended
-suspended at that time. This means that we must not set the
-DPM_FLAG_SMART_SUSPEND on these platforms.
-
-On BYT and CHT we already have a special ACCESS_NO_IRQ_SUSPEND flag
-to make sure the controller stays functional until the suspend_noirq
-phase. This commit makes the driver not set the DPM_FLAG_SMART_SUSPEND
-flag when that flag is set.
-
-Cc: stable@vger.kernel.org
-Fixes: b30f2f65568f ("i2c: designware: Set IRQF_NO_SUSPEND flag for all BYT and CHT controllers")
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
-Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
-Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-Acked-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
-Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/i2c/busses/i2c-designware-platdrv.c |   14 ++++++++++----
- 1 file changed, 10 insertions(+), 4 deletions(-)
-
---- a/drivers/i2c/busses/i2c-designware-platdrv.c
-+++ b/drivers/i2c/busses/i2c-designware-platdrv.c
-@@ -371,10 +371,16 @@ static int dw_i2c_plat_probe(struct plat
- 	adap->dev.of_node = pdev->dev.of_node;
- 	adap->nr = -1;
- 
--	dev_pm_set_driver_flags(&pdev->dev,
--				DPM_FLAG_SMART_PREPARE |
--				DPM_FLAG_SMART_SUSPEND |
--				DPM_FLAG_LEAVE_SUSPENDED);
-+	if (dev->flags & ACCESS_NO_IRQ_SUSPEND) {
-+		dev_pm_set_driver_flags(&pdev->dev,
-+					DPM_FLAG_SMART_PREPARE |
-+					DPM_FLAG_LEAVE_SUSPENDED);
-+	} else {
-+		dev_pm_set_driver_flags(&pdev->dev,
-+					DPM_FLAG_SMART_PREPARE |
-+					DPM_FLAG_SMART_SUSPEND |
-+					DPM_FLAG_LEAVE_SUSPENDED);
-+	}
- 
- 	/* The code below assumes runtime PM to be disabled. */
- 	WARN_ON(pm_runtime_enabled(&pdev->dev));
-From 92f673a12d14b5393138d2b1cfeb41d72b47362d Mon Sep 17 00:00:00 2001
-From: Ben Skeggs <bskeggs@redhat.com>
-Date: Thu, 16 Apr 2020 15:26:01 +1000
-Subject: drm/nouveau/sec2/gv100-: add missing MODULE_FIRMWARE()
-
-From: Ben Skeggs <bskeggs@redhat.com>
-
-commit 92f673a12d14b5393138d2b1cfeb41d72b47362d upstream.
-
-ASB was failing to load on Turing GPUs when firmware is being loaded
-from initramfs, leaving the GPU in an odd state and causing suspend/
-resume to fail.
-
-Add missing MODULE_FIRMWARE() lines for initramfs generators.
-
-Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
-Cc: <stable@vger.kernel.org> # 5.6
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/gpu/drm/nouveau/nvkm/engine/sec2/gp108.c |    3 +++
- drivers/gpu/drm/nouveau/nvkm/engine/sec2/tu102.c |   16 ++++++++++++++++
- 2 files changed, 19 insertions(+)
-
---- a/drivers/gpu/drm/nouveau/nvkm/engine/sec2/gp108.c
-+++ b/drivers/gpu/drm/nouveau/nvkm/engine/sec2/gp108.c
-@@ -25,6 +25,9 @@
- MODULE_FIRMWARE("nvidia/gp108/sec2/desc.bin");
- MODULE_FIRMWARE("nvidia/gp108/sec2/image.bin");
- MODULE_FIRMWARE("nvidia/gp108/sec2/sig.bin");
-+MODULE_FIRMWARE("nvidia/gv100/sec2/desc.bin");
-+MODULE_FIRMWARE("nvidia/gv100/sec2/image.bin");
-+MODULE_FIRMWARE("nvidia/gv100/sec2/sig.bin");
- 
- static const struct nvkm_sec2_fwif
- gp108_sec2_fwif[] = {
---- a/drivers/gpu/drm/nouveau/nvkm/engine/sec2/tu102.c
-+++ b/drivers/gpu/drm/nouveau/nvkm/engine/sec2/tu102.c
-@@ -56,6 +56,22 @@ tu102_sec2_nofw(struct nvkm_sec2 *sec2,
- 	return 0;
- }
- 
-+MODULE_FIRMWARE("nvidia/tu102/sec2/desc.bin");
-+MODULE_FIRMWARE("nvidia/tu102/sec2/image.bin");
-+MODULE_FIRMWARE("nvidia/tu102/sec2/sig.bin");
-+MODULE_FIRMWARE("nvidia/tu104/sec2/desc.bin");
-+MODULE_FIRMWARE("nvidia/tu104/sec2/image.bin");
-+MODULE_FIRMWARE("nvidia/tu104/sec2/sig.bin");
-+MODULE_FIRMWARE("nvidia/tu106/sec2/desc.bin");
-+MODULE_FIRMWARE("nvidia/tu106/sec2/image.bin");
-+MODULE_FIRMWARE("nvidia/tu106/sec2/sig.bin");
-+MODULE_FIRMWARE("nvidia/tu116/sec2/desc.bin");
-+MODULE_FIRMWARE("nvidia/tu116/sec2/image.bin");
-+MODULE_FIRMWARE("nvidia/tu116/sec2/sig.bin");
-+MODULE_FIRMWARE("nvidia/tu117/sec2/desc.bin");
-+MODULE_FIRMWARE("nvidia/tu117/sec2/image.bin");
-+MODULE_FIRMWARE("nvidia/tu117/sec2/sig.bin");
-+
- static const struct nvkm_sec2_fwif
- tu102_sec2_fwif[] = {
- 	{  0, gp102_sec2_load, &tu102_sec2, &gp102_sec2_acr_1 },
-From bcad588dea538a4fc173d16a90a005536ec8dbf2 Mon Sep 17 00:00:00 2001
-From: Ashutosh Dixit <ashutosh.dixit@intel.com>
-Date: Wed, 8 Apr 2020 16:42:01 -0700
-Subject: drm/i915/perf: Do not clear pollin for small user read buffers
-
-From: Ashutosh Dixit <ashutosh.dixit@intel.com>
-
-commit bcad588dea538a4fc173d16a90a005536ec8dbf2 upstream.
-
-It is wrong to block the user thread in the next poll when OA data is
-already available which could not fit in the user buffer provided in
-the previous read. In several cases the exact user buffer size is not
-known. Blocking user space in poll can lead to data loss when the
-buffer size used is smaller than the available data.
-
-This change fixes this issue and allows user space to read all OA data
-even when using a buffer size smaller than the available data using
-multiple non-blocking reads rather than staying blocked in poll till
-the next timer interrupt.
-
-v2: Fix ret value for blocking reads (Umesh)
-v3: Mistake during patch send (Ashutosh)
-v4: Remove -EAGAIN from comment (Umesh)
-v5: Improve condition for clearing pollin and return (Lionel)
-v6: Improve blocking read loop and other cleanups (Lionel)
-v7: Added Cc stable
-
-Testcase: igt/perf/polling-small-buf
-Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
-Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
-Cc: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
-Cc: <stable@vger.kernel.org>
-Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-Link: https://patchwork.freedesktop.org/patch/msgid/20200403010120.3067-1-ashutosh.dixit@intel.com
-(cherry-picked from commit 6352219c39c04ed3f9a8d1cf93f87c21753a213e)
-Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/gpu/drm/i915/i915_perf.c |   65 ++++++---------------------------------
- 1 file changed, 11 insertions(+), 54 deletions(-)
-
---- a/drivers/gpu/drm/i915/i915_perf.c
-+++ b/drivers/gpu/drm/i915/i915_perf.c
-@@ -2910,49 +2910,6 @@ void i915_oa_init_reg_state(const struct
- }
- 
- /**
-- * i915_perf_read_locked - &i915_perf_stream_ops->read with error normalisation
-- * @stream: An i915 perf stream
-- * @file: An i915 perf stream file
-- * @buf: destination buffer given by userspace
-- * @count: the number of bytes userspace wants to read
-- * @ppos: (inout) file seek position (unused)
-- *
-- * Besides wrapping &i915_perf_stream_ops->read this provides a common place to
-- * ensure that if we've successfully copied any data then reporting that takes
-- * precedence over any internal error status, so the data isn't lost.
-- *
-- * For example ret will be -ENOSPC whenever there is more buffered data than
-- * can be copied to userspace, but that's only interesting if we weren't able
-- * to copy some data because it implies the userspace buffer is too small to
-- * receive a single record (and we never split records).
-- *
-- * Another case with ret == -EFAULT is more of a grey area since it would seem
-- * like bad form for userspace to ask us to overrun its buffer, but the user
-- * knows best:
-- *
-- *   http://yarchive.net/comp/linux/partial_reads_writes.html
-- *
-- * Returns: The number of bytes copied or a negative error code on failure.
-- */
--static ssize_t i915_perf_read_locked(struct i915_perf_stream *stream,
--				     struct file *file,
--				     char __user *buf,
--				     size_t count,
--				     loff_t *ppos)
--{
--	/* Note we keep the offset (aka bytes read) separate from any
--	 * error status so that the final check for whether we return
--	 * the bytes read with a higher precedence than any error (see
--	 * comment below) doesn't need to be handled/duplicated in
--	 * stream->ops->read() implementations.
--	 */
--	size_t offset = 0;
--	int ret = stream->ops->read(stream, buf, count, &offset);
--
--	return offset ?: (ret ?: -EAGAIN);
--}
--
--/**
-  * i915_perf_read - handles read() FOP for i915 perf stream FDs
-  * @file: An i915 perf stream file
-  * @buf: destination buffer given by userspace
-@@ -2977,7 +2934,8 @@ static ssize_t i915_perf_read(struct fil
- {
- 	struct i915_perf_stream *stream = file->private_data;
- 	struct i915_perf *perf = stream->perf;
--	ssize_t ret;
-+	size_t offset = 0;
-+	int ret;
- 
- 	/* To ensure it's handled consistently we simply treat all reads of a
- 	 * disabled stream as an error. In particular it might otherwise lead
-@@ -3000,13 +2958,12 @@ static ssize_t i915_perf_read(struct fil
- 				return ret;
- 
- 			mutex_lock(&perf->lock);
--			ret = i915_perf_read_locked(stream, file,
--						    buf, count, ppos);
-+			ret = stream->ops->read(stream, buf, count, &offset);
- 			mutex_unlock(&perf->lock);
--		} while (ret == -EAGAIN);
-+		} while (!offset && !ret);
- 	} else {
- 		mutex_lock(&perf->lock);
--		ret = i915_perf_read_locked(stream, file, buf, count, ppos);
-+		ret = stream->ops->read(stream, buf, count, &offset);
- 		mutex_unlock(&perf->lock);
- 	}
- 
-@@ -3017,15 +2974,15 @@ static ssize_t i915_perf_read(struct fil
- 	 * and read() returning -EAGAIN. Clearing the oa.pollin state here
- 	 * effectively ensures we back off until the next hrtimer callback
- 	 * before reporting another EPOLLIN event.
-+	 * The exception to this is if ops->read() returned -ENOSPC which means
-+	 * that more OA data is available than could fit in the user provided
-+	 * buffer. In this case we want the next poll() call to not block.
- 	 */
--	if (ret >= 0 || ret == -EAGAIN) {
--		/* Maybe make ->pollin per-stream state if we support multiple
--		 * concurrent streams in the future.
--		 */
-+	if (ret != -ENOSPC)
- 		stream->pollin = false;
--	}
- 
--	return ret;
-+	/* Possible values for ret are 0, -EFAULT, -ENOSPC, -EIO, ... */
-+	return offset ?: (ret ?: -EAGAIN);
- }
- 
- static enum hrtimer_restart oa_poll_check_timer_cb(struct hrtimer *hrtimer)
-- 
GitLab