diff --git a/PKGBUILD b/PKGBUILD index 565e63f89caeb2223e3de258b5411d09aa09a68f..2211262051f8a9888eeba93a502198f99b5bc37a 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 2e70af502f5ea12ac7bb5847eae78face42f6c8e..5eead1c8194d55c5cc5be415e93bfbc6c5e925e8 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 b8e843895618d927e84e3b96675edfd8fdc7f055..0000000000000000000000000000000000000000 --- 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 = <®_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)