From: Greg Kroah-Hartman Date: Thu, 4 Mar 2021 15:17:44 +0000 (+0100) Subject: 5.11-stable patches X-Git-Tag: v4.4.260~41 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0ac0c2344b0afef2482b0086eca4a778b8a9662a;p=thirdparty%2Fkernel%2Fstable-queue.git 5.11-stable patches added patches: asoc-qcom-remove-useless-debug-print.patch dt-bindings-ethernet-controller-fix-fixed-link-specification.patch dt-bindings-net-btusb-dt-fix-s-interrupt-name-interrupt-names.patch i2c-i2c-qcom-geni-add-shutdown-callback-for-i2c.patch mptcp-do-not-wakeup-listener-for-mpj-subflows.patch mptcp-fix-data_fin-generation-on-early-shutdown.patch mptcp-provide-subflow-aware-release-function.patch net-ag71xx-remove-unnecessary-mtu-reservation.patch net-bridge-use-switchdev-for-port-flags-set-through-sysfs-too.patch net-dsa-tag_rtl4_a-support-also-egress-tags.patch net-fix-dev_ifsioc_locked-race-condition.patch net-hsr-add-support-for-entryforgettime.patch net-psample-fix-netlink-skb-length-with-tunnel-info.patch net-sched-cls_flower-reject-invalid-ct_state-flags-rules.patch rdma-rtrs-clt-use-bitmask-to-check-sess-flags.patch rdma-rtrs-do-not-signal-for-heatbeat.patch rdma-rtrs-srv-do-not-signal-reg_mr.patch soundwire-debugfs-use-controller-id-instead-of-link_id.patch tcp-fix-tcp_rmem-documentation.patch --- diff --git a/queue-5.11/asoc-qcom-remove-useless-debug-print.patch b/queue-5.11/asoc-qcom-remove-useless-debug-print.patch new file mode 100644 index 00000000000..261888c30ab --- /dev/null +++ b/queue-5.11/asoc-qcom-remove-useless-debug-print.patch @@ -0,0 +1,37 @@ +From 16117beb16f01a470d40339960ffae1e287c03be Mon Sep 17 00:00:00 2001 +From: Stephen Boyd +Date: Thu, 14 Jan 2021 19:43:24 -0800 +Subject: ASoC: qcom: Remove useless debug print + +From: Stephen Boyd + +commit 16117beb16f01a470d40339960ffae1e287c03be upstream. + +This looks like a left over debug print that tells us that HDMI is +enabled. Let's remove it as that's definitely not an error to have HDMI +enabled. + +Cc: V Sujith Kumar Reddy +Cc: Srinivasa Rao +Cc: Srinivas Kandagatla +Cc: Cheng-Yi Chiang +Fixes: 7cb37b7bd0d3 ("ASoC: qcom: Add support for lpass hdmi driver") +Signed-off-by: Stephen Boyd +Reviewed-by: Srinivas Kandagatla +Link: https://lore.kernel.org/r/20210115034327.617223-2-swboyd@chromium.org +Signed-off-by: Mark Brown +Signed-off-by: Greg Kroah-Hartman +--- + sound/soc/qcom/lpass-cpu.c | 1 - + 1 file changed, 1 deletion(-) + +--- a/sound/soc/qcom/lpass-cpu.c ++++ b/sound/soc/qcom/lpass-cpu.c +@@ -743,7 +743,6 @@ static void of_lpass_cpu_parse_dai_data( + } + if (id == LPASS_DP_RX) { + data->hdmi_port_enable = 1; +- dev_err(dev, "HDMI Port is enabled: %d\n", id); + } else { + data->mi2s_playback_sd_mode[id] = + of_lpass_cpu_parse_sd_lines(dev, node, diff --git a/queue-5.11/dt-bindings-ethernet-controller-fix-fixed-link-specification.patch b/queue-5.11/dt-bindings-ethernet-controller-fix-fixed-link-specification.patch new file mode 100644 index 00000000000..b73d7ea8d38 --- /dev/null +++ b/queue-5.11/dt-bindings-ethernet-controller-fix-fixed-link-specification.patch @@ -0,0 +1,36 @@ +From 322322d15b9b912bc8710c367a95a7de62220a72 Mon Sep 17 00:00:00 2001 +From: Russell King +Date: Mon, 1 Feb 2021 10:02:20 +0000 +Subject: dt-bindings: ethernet-controller: fix fixed-link specification + +From: Russell King + +commit 322322d15b9b912bc8710c367a95a7de62220a72 upstream. + +The original fixed-link.txt allowed a pause property for fixed link. +This has been missed in the conversion to yaml format. + +Fixes: 9d3de3c58347 ("dt-bindings: net: Add YAML schemas for the generic Ethernet options") +Signed-off-by: Russell King +Reviewed-by: Andrew Lunn +Link: https://lore.kernel.org/r/E1l6W2G-0002Ga-0O@rmk-PC.armlinux.org.uk +Signed-off-by: Rob Herring +Signed-off-by: Greg Kroah-Hartman +--- + Documentation/devicetree/bindings/net/ethernet-controller.yaml | 5 +++++ + 1 file changed, 5 insertions(+) + +--- a/Documentation/devicetree/bindings/net/ethernet-controller.yaml ++++ b/Documentation/devicetree/bindings/net/ethernet-controller.yaml +@@ -205,6 +205,11 @@ properties: + Indicates that full-duplex is used. When absent, half + duplex is assumed. + ++ pause: ++ $ref: /schemas/types.yaml#definitions/flag ++ description: ++ Indicates that pause should be enabled. ++ + asym-pause: + $ref: /schemas/types.yaml#/definitions/flag + description: diff --git a/queue-5.11/dt-bindings-net-btusb-dt-fix-s-interrupt-name-interrupt-names.patch b/queue-5.11/dt-bindings-net-btusb-dt-fix-s-interrupt-name-interrupt-names.patch new file mode 100644 index 00000000000..9428327e578 --- /dev/null +++ b/queue-5.11/dt-bindings-net-btusb-dt-fix-s-interrupt-name-interrupt-names.patch @@ -0,0 +1,33 @@ +From f288988930e93857e0375bdf88bb670c312b82eb Mon Sep 17 00:00:00 2001 +From: Geert Uytterhoeven +Date: Thu, 14 Jan 2021 14:13:33 +0100 +Subject: dt-bindings: net: btusb: DT fix s/interrupt-name/interrupt-names/ + +From: Geert Uytterhoeven + +commit f288988930e93857e0375bdf88bb670c312b82eb upstream. + +The standard DT property name is "interrupt-names". + +Fixes: fd913ef7ce619467 ("Bluetooth: btusb: Add out-of-band wakeup support") +Signed-off-by: Geert Uytterhoeven +Acked-by: Rob Herring +Reviewed-by: Brian Norris +Acked-by: Rajat Jain +Signed-off-by: Marcel Holtmann +Signed-off-by: Greg Kroah-Hartman +--- + Documentation/devicetree/bindings/net/btusb.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/Documentation/devicetree/bindings/net/btusb.txt ++++ b/Documentation/devicetree/bindings/net/btusb.txt +@@ -38,7 +38,7 @@ Following example uses irq pin number 3 + compatible = "usb1286,204e"; + reg = <1>; + interrupt-parent = <&gpio0>; +- interrupt-name = "wakeup"; ++ interrupt-names = "wakeup"; + interrupts = <3 IRQ_TYPE_LEVEL_LOW>; + }; + }; diff --git a/queue-5.11/i2c-i2c-qcom-geni-add-shutdown-callback-for-i2c.patch b/queue-5.11/i2c-i2c-qcom-geni-add-shutdown-callback-for-i2c.patch new file mode 100644 index 00000000000..9e2c145aec4 --- /dev/null +++ b/queue-5.11/i2c-i2c-qcom-geni-add-shutdown-callback-for-i2c.patch @@ -0,0 +1,84 @@ +From e0371298ddc51761be257698554ea507ac8bf831 Mon Sep 17 00:00:00 2001 +From: Roja Rani Yarubandi +Date: Fri, 8 Jan 2021 20:35:45 +0530 +Subject: i2c: i2c-qcom-geni: Add shutdown callback for i2c + +From: Roja Rani Yarubandi + +commit e0371298ddc51761be257698554ea507ac8bf831 upstream. + +If the hardware is still accessing memory after SMMU translation +is disabled (as part of smmu shutdown callback), then the +IOVAs (I/O virtual address) which it was using will go on the bus +as the physical addresses which will result in unknown crashes +like NoC/interconnect errors. + +So, implement shutdown callback to i2c driver to stop on-going transfer +and unmap DMA mappings during system "reboot" or "shutdown". + +Fixes: 37692de5d523 ("i2c: i2c-qcom-geni: Add bus driver for the Qualcomm GENI I2C controller") +Signed-off-by: Roja Rani Yarubandi +Reviewed-by: Akash Asthana +Signed-off-by: Wolfram Sang +Signed-off-by: Greg Kroah-Hartman +--- + drivers/i2c/busses/i2c-qcom-geni.c | 34 ++++++++++++++++++++++++++++++++++ + 1 file changed, 34 insertions(+) + +--- a/drivers/i2c/busses/i2c-qcom-geni.c ++++ b/drivers/i2c/busses/i2c-qcom-geni.c +@@ -375,6 +375,32 @@ static void geni_i2c_tx_msg_cleanup(stru + } + } + ++static void geni_i2c_stop_xfer(struct geni_i2c_dev *gi2c) ++{ ++ int ret; ++ u32 geni_status; ++ struct i2c_msg *cur; ++ ++ /* Resume device, as runtime suspend can happen anytime during transfer */ ++ ret = pm_runtime_get_sync(gi2c->se.dev); ++ if (ret < 0) { ++ dev_err(gi2c->se.dev, "Failed to resume device: %d\n", ret); ++ return; ++ } ++ ++ geni_status = readl_relaxed(gi2c->se.base + SE_GENI_STATUS); ++ if (geni_status & M_GENI_CMD_ACTIVE) { ++ cur = gi2c->cur; ++ geni_i2c_abort_xfer(gi2c); ++ if (cur->flags & I2C_M_RD) ++ geni_i2c_rx_msg_cleanup(gi2c, cur); ++ else ++ geni_i2c_tx_msg_cleanup(gi2c, cur); ++ } ++ ++ pm_runtime_put_sync_suspend(gi2c->se.dev); ++} ++ + static int geni_i2c_rx_one_msg(struct geni_i2c_dev *gi2c, struct i2c_msg *msg, + u32 m_param) + { +@@ -650,6 +676,13 @@ static int geni_i2c_remove(struct platfo + return 0; + } + ++static void geni_i2c_shutdown(struct platform_device *pdev) ++{ ++ struct geni_i2c_dev *gi2c = platform_get_drvdata(pdev); ++ ++ geni_i2c_stop_xfer(gi2c); ++} ++ + static int __maybe_unused geni_i2c_runtime_suspend(struct device *dev) + { + int ret; +@@ -714,6 +747,7 @@ MODULE_DEVICE_TABLE(of, geni_i2c_dt_matc + static struct platform_driver geni_i2c_driver = { + .probe = geni_i2c_probe, + .remove = geni_i2c_remove, ++ .shutdown = geni_i2c_shutdown, + .driver = { + .name = "geni_i2c", + .pm = &geni_i2c_pm_ops, diff --git a/queue-5.11/mptcp-do-not-wakeup-listener-for-mpj-subflows.patch b/queue-5.11/mptcp-do-not-wakeup-listener-for-mpj-subflows.patch new file mode 100644 index 00000000000..02207566ce1 --- /dev/null +++ b/queue-5.11/mptcp-do-not-wakeup-listener-for-mpj-subflows.patch @@ -0,0 +1,46 @@ +From 52557dbc7538ecceb27ef2206719a47a8039a335 Mon Sep 17 00:00:00 2001 +From: Paolo Abeni +Date: Fri, 19 Feb 2021 18:35:40 +0100 +Subject: mptcp: do not wakeup listener for MPJ subflows + +From: Paolo Abeni + +commit 52557dbc7538ecceb27ef2206719a47a8039a335 upstream. + +MPJ subflows are not exposed as fds to user spaces. As such, +incoming MPJ subflows are removed from the accept queue by +tcp_check_req()/tcp_get_cookie_sock(). + +Later tcp_child_process() invokes subflow_data_ready() on the +parent socket regardless of the subflow kind, leading to poll +wakeups even if the later accept will block. + +Address the issue by double-checking the queue state before +waking the user-space. + +Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/164 +Reported-by: Dr. David Alan Gilbert +Fixes: f296234c98a8 ("mptcp: Add handling of incoming MP_JOIN requests") +Reviewed-by: Mat Martineau +Signed-off-by: Paolo Abeni +Signed-off-by: Jakub Kicinski +Signed-off-by: Greg Kroah-Hartman +--- + net/mptcp/subflow.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +--- a/net/mptcp/subflow.c ++++ b/net/mptcp/subflow.c +@@ -1026,6 +1026,12 @@ static void subflow_data_ready(struct so + + msk = mptcp_sk(parent); + if (state & TCPF_LISTEN) { ++ /* MPJ subflow are removed from accept queue before reaching here, ++ * avoid stray wakeups ++ */ ++ if (reqsk_queue_empty(&inet_csk(sk)->icsk_accept_queue)) ++ return; ++ + set_bit(MPTCP_DATA_READY, &msk->flags); + parent->sk_data_ready(parent); + return; diff --git a/queue-5.11/mptcp-fix-data_fin-generation-on-early-shutdown.patch b/queue-5.11/mptcp-fix-data_fin-generation-on-early-shutdown.patch new file mode 100644 index 00000000000..6287b43a9bf --- /dev/null +++ b/queue-5.11/mptcp-fix-data_fin-generation-on-early-shutdown.patch @@ -0,0 +1,112 @@ +From d87903b63e3ce1eafaa701aec5cc1d0ecd0d84dc Mon Sep 17 00:00:00 2001 +From: Paolo Abeni +Date: Fri, 19 Feb 2021 18:35:38 +0100 +Subject: mptcp: fix DATA_FIN generation on early shutdown + +From: Paolo Abeni + +commit d87903b63e3ce1eafaa701aec5cc1d0ecd0d84dc upstream. + +If the msk is closed before sending or receiving any data, +no DATA_FIN is generated, instead an MPC ack packet is +crafted out. + +In the above scenario, the MPTCP protocol creates and sends a +pure ack and such packets matches also the criteria for an +MPC ack and the protocol tries first to insert MPC options, +leading to the described error. + +This change addresses the issue by avoiding the insertion of an +MPC option for DATA_FIN packets or if the sub-flow is not +established. + +To avoid doing multiple times the same test, fetch the data_fin +flag in a bool variable and pass it to both the interested +helpers. + +Fixes: 6d0060f600ad ("mptcp: Write MPTCP DSS headers to outgoing data packets") +Reviewed-by: Mat Martineau +Signed-off-by: Paolo Abeni +Signed-off-by: Jakub Kicinski +Signed-off-by: Greg Kroah-Hartman +--- + net/mptcp/options.c | 22 +++++++++++++--------- + 1 file changed, 13 insertions(+), 9 deletions(-) + +--- a/net/mptcp/options.c ++++ b/net/mptcp/options.c +@@ -401,6 +401,7 @@ static void clear_3rdack_retransmission( + } + + static bool mptcp_established_options_mp(struct sock *sk, struct sk_buff *skb, ++ bool snd_data_fin_enable, + unsigned int *size, + unsigned int remaining, + struct mptcp_out_options *opts) +@@ -418,9 +419,10 @@ static bool mptcp_established_options_mp + if (!skb) + return false; + +- /* MPC/MPJ needed only on 3rd ack packet */ +- if (subflow->fully_established || +- subflow->snd_isn != TCP_SKB_CB(skb)->seq) ++ /* MPC/MPJ needed only on 3rd ack packet, DATA_FIN and TCP shutdown take precedence */ ++ if (subflow->fully_established || snd_data_fin_enable || ++ subflow->snd_isn != TCP_SKB_CB(skb)->seq || ++ sk->sk_state != TCP_ESTABLISHED) + return false; + + if (subflow->mp_capable) { +@@ -492,6 +494,7 @@ static void mptcp_write_data_fin(struct + } + + static bool mptcp_established_options_dss(struct sock *sk, struct sk_buff *skb, ++ bool snd_data_fin_enable, + unsigned int *size, + unsigned int remaining, + struct mptcp_out_options *opts) +@@ -499,13 +502,11 @@ static bool mptcp_established_options_ds + struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk); + struct mptcp_sock *msk = mptcp_sk(subflow->conn); + unsigned int dss_size = 0; +- u64 snd_data_fin_enable; + struct mptcp_ext *mpext; + unsigned int ack_size; + bool ret = false; + + mpext = skb ? mptcp_get_ext(skb) : NULL; +- snd_data_fin_enable = mptcp_data_fin_enabled(msk); + + if (!skb || (mpext && mpext->use_map) || snd_data_fin_enable) { + unsigned int map_size; +@@ -683,12 +684,15 @@ bool mptcp_established_options(struct so + unsigned int *size, unsigned int remaining, + struct mptcp_out_options *opts) + { ++ struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk); ++ struct mptcp_sock *msk = mptcp_sk(subflow->conn); + unsigned int opt_size = 0; ++ bool snd_data_fin; + bool ret = false; + + opts->suboptions = 0; + +- if (unlikely(mptcp_check_fallback(sk))) ++ if (unlikely(__mptcp_check_fallback(msk))) + return false; + + /* prevent adding of any MPTCP related options on reset packet +@@ -697,10 +701,10 @@ bool mptcp_established_options(struct so + if (unlikely(skb && TCP_SKB_CB(skb)->tcp_flags & TCPHDR_RST)) + return false; + +- if (mptcp_established_options_mp(sk, skb, &opt_size, remaining, opts)) ++ snd_data_fin = mptcp_data_fin_enabled(msk); ++ if (mptcp_established_options_mp(sk, skb, snd_data_fin, &opt_size, remaining, opts)) + ret = true; +- else if (mptcp_established_options_dss(sk, skb, &opt_size, remaining, +- opts)) ++ else if (mptcp_established_options_dss(sk, skb, snd_data_fin, &opt_size, remaining, opts)) + ret = true; + + /* we reserved enough space for the above options, and exceeding the diff --git a/queue-5.11/mptcp-provide-subflow-aware-release-function.patch b/queue-5.11/mptcp-provide-subflow-aware-release-function.patch new file mode 100644 index 00000000000..6f3210789cc --- /dev/null +++ b/queue-5.11/mptcp-provide-subflow-aware-release-function.patch @@ -0,0 +1,114 @@ +From ad98dd37051e14fa8c785609430d907fcfd518ba Mon Sep 17 00:00:00 2001 +From: Florian Westphal +Date: Fri, 19 Feb 2021 18:35:39 +0100 +Subject: mptcp: provide subflow aware release function + +From: Florian Westphal + +commit ad98dd37051e14fa8c785609430d907fcfd518ba upstream. + +mptcp re-used inet(6)_release, so the subflow sockets are ignored. +Need to invoke ip(v6)_mc_drop_socket function to ensure mcast join +resources get free'd. + +Fixes: 717e79c867ca5 ("mptcp: Add setsockopt()/getsockopt() socket operations") +Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/110 +Acked-by: Paolo Abeni +Signed-off-by: Florian Westphal +Signed-off-by: Jakub Kicinski +Signed-off-by: Greg Kroah-Hartman +--- + net/mptcp/protocol.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++-- + 1 file changed, 53 insertions(+), 2 deletions(-) + +--- a/net/mptcp/protocol.c ++++ b/net/mptcp/protocol.c +@@ -11,6 +11,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -19,6 +20,7 @@ + #include + #if IS_ENABLED(CONFIG_MPTCP_IPV6) + #include ++#include + #endif + #include + #include +@@ -3357,10 +3359,34 @@ static __poll_t mptcp_poll(struct file * + return mask; + } + ++static int mptcp_release(struct socket *sock) ++{ ++ struct mptcp_subflow_context *subflow; ++ struct sock *sk = sock->sk; ++ struct mptcp_sock *msk; ++ ++ if (!sk) ++ return 0; ++ ++ lock_sock(sk); ++ ++ msk = mptcp_sk(sk); ++ ++ mptcp_for_each_subflow(msk, subflow) { ++ struct sock *ssk = mptcp_subflow_tcp_sock(subflow); ++ ++ ip_mc_drop_socket(ssk); ++ } ++ ++ release_sock(sk); ++ ++ return inet_release(sock); ++} ++ + static const struct proto_ops mptcp_stream_ops = { + .family = PF_INET, + .owner = THIS_MODULE, +- .release = inet_release, ++ .release = mptcp_release, + .bind = mptcp_bind, + .connect = mptcp_stream_connect, + .socketpair = sock_no_socketpair, +@@ -3407,10 +3433,35 @@ void __init mptcp_proto_init(void) + } + + #if IS_ENABLED(CONFIG_MPTCP_IPV6) ++static int mptcp6_release(struct socket *sock) ++{ ++ struct mptcp_subflow_context *subflow; ++ struct mptcp_sock *msk; ++ struct sock *sk = sock->sk; ++ ++ if (!sk) ++ return 0; ++ ++ lock_sock(sk); ++ ++ msk = mptcp_sk(sk); ++ ++ mptcp_for_each_subflow(msk, subflow) { ++ struct sock *ssk = mptcp_subflow_tcp_sock(subflow); ++ ++ ip_mc_drop_socket(ssk); ++ ipv6_sock_mc_close(ssk); ++ ipv6_sock_ac_close(ssk); ++ } ++ ++ release_sock(sk); ++ return inet6_release(sock); ++} ++ + static const struct proto_ops mptcp_v6_stream_ops = { + .family = PF_INET6, + .owner = THIS_MODULE, +- .release = inet6_release, ++ .release = mptcp6_release, + .bind = mptcp_bind, + .connect = mptcp_stream_connect, + .socketpair = sock_no_socketpair, diff --git a/queue-5.11/net-ag71xx-remove-unnecessary-mtu-reservation.patch b/queue-5.11/net-ag71xx-remove-unnecessary-mtu-reservation.patch new file mode 100644 index 00000000000..95ad7a84dd7 --- /dev/null +++ b/queue-5.11/net-ag71xx-remove-unnecessary-mtu-reservation.patch @@ -0,0 +1,43 @@ +From 04b385f325080157ab1b5f8ce1b1de07ce0d9e27 Mon Sep 17 00:00:00 2001 +From: DENG Qingfang +Date: Thu, 18 Feb 2021 11:45:14 +0800 +Subject: net: ag71xx: remove unnecessary MTU reservation + +From: DENG Qingfang + +commit 04b385f325080157ab1b5f8ce1b1de07ce0d9e27 upstream. + +2 bytes of the MTU are reserved for Atheros DSA tag, but DSA core +has already handled that since commit dc0fe7d47f9f. +Remove the unnecessary reservation. + +Fixes: d51b6ce441d3 ("net: ethernet: add ag71xx driver") +Signed-off-by: DENG Qingfang +Reviewed-by: Oleksij Rempel +Link: https://lore.kernel.org/r/20210218034514.3421-1-dqfext@gmail.com +Signed-off-by: Jakub Kicinski +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/atheros/ag71xx.c | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +--- a/drivers/net/ethernet/atheros/ag71xx.c ++++ b/drivers/net/ethernet/atheros/ag71xx.c +@@ -223,8 +223,6 @@ + #define AG71XX_REG_RX_SM 0x01b0 + #define AG71XX_REG_TX_SM 0x01b4 + +-#define ETH_SWITCH_HEADER_LEN 2 +- + #define AG71XX_DEFAULT_MSG_ENABLE \ + (NETIF_MSG_DRV \ + | NETIF_MSG_PROBE \ +@@ -933,7 +931,7 @@ static void ag71xx_hw_setup(struct ag71x + + static unsigned int ag71xx_max_frame_len(unsigned int mtu) + { +- return ETH_SWITCH_HEADER_LEN + ETH_HLEN + VLAN_HLEN + mtu + ETH_FCS_LEN; ++ return ETH_HLEN + VLAN_HLEN + mtu + ETH_FCS_LEN; + } + + static void ag71xx_hw_set_macaddr(struct ag71xx *ag, unsigned char *mac) diff --git a/queue-5.11/net-bridge-use-switchdev-for-port-flags-set-through-sysfs-too.patch b/queue-5.11/net-bridge-use-switchdev-for-port-flags-set-through-sysfs-too.patch new file mode 100644 index 00000000000..8b1e7d98091 --- /dev/null +++ b/queue-5.11/net-bridge-use-switchdev-for-port-flags-set-through-sysfs-too.patch @@ -0,0 +1,52 @@ +From 8043c845b63a2dd88daf2d2d268a33e1872800f0 Mon Sep 17 00:00:00 2001 +From: Vladimir Oltean +Date: Sun, 7 Feb 2021 21:47:33 +0200 +Subject: net: bridge: use switchdev for port flags set through sysfs too + +From: Vladimir Oltean + +commit 8043c845b63a2dd88daf2d2d268a33e1872800f0 upstream. + +Looking through patchwork I don't see that there was any consensus to +use switchdev notifiers only in case of netlink provided port flags but +not sysfs (as a sort of deprecation, punishment or anything like that), +so we should probably keep the user interface consistent in terms of +functionality. + +http://patchwork.ozlabs.org/project/netdev/patch/20170605092043.3523-3-jiri@resnulli.us/ +http://patchwork.ozlabs.org/project/netdev/patch/20170608064428.4785-3-jiri@resnulli.us/ + +Fixes: 3922285d96e7 ("net: bridge: Add support for offloading port attributes") +Signed-off-by: Vladimir Oltean +Acked-by: Nikolay Aleksandrov +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + net/bridge/br_sysfs_if.c | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +--- a/net/bridge/br_sysfs_if.c ++++ b/net/bridge/br_sysfs_if.c +@@ -55,9 +55,8 @@ static BRPORT_ATTR(_name, 0644, \ + static int store_flag(struct net_bridge_port *p, unsigned long v, + unsigned long mask) + { +- unsigned long flags; +- +- flags = p->flags; ++ unsigned long flags = p->flags; ++ int err; + + if (v) + flags |= mask; +@@ -65,6 +64,10 @@ static int store_flag(struct net_bridge_ + flags &= ~mask; + + if (flags != p->flags) { ++ err = br_switchdev_set_port_flag(p, flags, mask); ++ if (err) ++ return err; ++ + p->flags = flags; + br_port_flags_change(p, mask); + } diff --git a/queue-5.11/net-dsa-tag_rtl4_a-support-also-egress-tags.patch b/queue-5.11/net-dsa-tag_rtl4_a-support-also-egress-tags.patch new file mode 100644 index 00000000000..b889a35ebd7 --- /dev/null +++ b/queue-5.11/net-dsa-tag_rtl4_a-support-also-egress-tags.patch @@ -0,0 +1,85 @@ +From 86dd9868b8788a9063893a97649594af93cd5aa6 Mon Sep 17 00:00:00 2001 +From: Linus Walleij +Date: Wed, 17 Feb 2021 00:55:42 +0100 +Subject: net: dsa: tag_rtl4_a: Support also egress tags + +From: Linus Walleij + +commit 86dd9868b8788a9063893a97649594af93cd5aa6 upstream. + +Support also transmitting frames using the custom "8899 A" +4 byte tag. + +Qingfang came up with the solution: we need to pad the +ethernet frame to 60 bytes using eth_skb_pad(), then the +switch will happily accept frames with custom tags. + +Cc: Mauri Sandberg +Reported-by: DENG Qingfang +Fixes: efd7fe68f0c6 ("net: dsa: tag_rtl4_a: Implement Realtek 4 byte A tag") +Signed-off-by: Linus Walleij +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + net/dsa/tag_rtl4_a.c | 43 +++++++++++++++++++++++++++++-------------- + 1 file changed, 29 insertions(+), 14 deletions(-) + +--- a/net/dsa/tag_rtl4_a.c ++++ b/net/dsa/tag_rtl4_a.c +@@ -12,9 +12,7 @@ + * + * The 2 bytes tag form a 16 bit big endian word. The exact + * meaning has been guessed from packet dumps from ingress +- * frames, as no working egress traffic has been available +- * we do not know the format of the egress tags or if they +- * are even supported. ++ * frames. + */ + + #include +@@ -36,17 +34,34 @@ + static struct sk_buff *rtl4a_tag_xmit(struct sk_buff *skb, + struct net_device *dev) + { +- /* +- * Just let it pass thru, we don't know if it is possible +- * to tag a frame with the 0x8899 ethertype and direct it +- * to a specific port, all attempts at reverse-engineering have +- * ended up with the frames getting dropped. +- * +- * The VLAN set-up needs to restrict the frames to the right port. +- * +- * If you have documentation on the tagging format for RTL8366RB +- * (tag type A) then please contribute. +- */ ++ struct dsa_port *dp = dsa_slave_to_port(dev); ++ u8 *tag; ++ u16 *p; ++ u16 out; ++ ++ /* Pad out to at least 60 bytes */ ++ if (unlikely(eth_skb_pad(skb))) ++ return NULL; ++ if (skb_cow_head(skb, RTL4_A_HDR_LEN) < 0) ++ return NULL; ++ ++ netdev_dbg(dev, "add realtek tag to package to port %d\n", ++ dp->index); ++ skb_push(skb, RTL4_A_HDR_LEN); ++ ++ memmove(skb->data, skb->data + RTL4_A_HDR_LEN, 2 * ETH_ALEN); ++ tag = skb->data + 2 * ETH_ALEN; ++ ++ /* Set Ethertype */ ++ p = (u16 *)tag; ++ *p = htons(RTL4_A_ETHERTYPE); ++ ++ out = (RTL4_A_PROTOCOL_RTL8366RB << 12) | (2 << 8); ++ /* The lower bits is the port numer */ ++ out |= (u8)dp->index; ++ p = (u16 *)(tag + 2); ++ *p = htons(out); ++ + return skb; + } + diff --git a/queue-5.11/net-fix-dev_ifsioc_locked-race-condition.patch b/queue-5.11/net-fix-dev_ifsioc_locked-race-condition.patch new file mode 100644 index 00000000000..4aadad64161 --- /dev/null +++ b/queue-5.11/net-fix-dev_ifsioc_locked-race-condition.patch @@ -0,0 +1,214 @@ +From 3b23a32a63219f51a5298bc55a65ecee866e79d0 Mon Sep 17 00:00:00 2001 +From: Cong Wang +Date: Thu, 11 Feb 2021 11:34:10 -0800 +Subject: net: fix dev_ifsioc_locked() race condition + +From: Cong Wang + +commit 3b23a32a63219f51a5298bc55a65ecee866e79d0 upstream. + +dev_ifsioc_locked() is called with only RCU read lock, so when +there is a parallel writer changing the mac address, it could +get a partially updated mac address, as shown below: + +Thread 1 Thread 2 +// eth_commit_mac_addr_change() +memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN); + // dev_ifsioc_locked() + memcpy(ifr->ifr_hwaddr.sa_data, + dev->dev_addr,...); + +Close this race condition by guarding them with a RW semaphore, +like netdev_get_name(). We can not use seqlock here as it does not +allow blocking. The writers already take RTNL anyway, so this does +not affect the slow path. To avoid bothering existing +dev_set_mac_address() callers in drivers, introduce a new wrapper +just for user-facing callers on ioctl and rtnetlink paths. + +Note, bonding also changes slave mac addresses but that requires +a separate patch due to the complexity of bonding code. + +Fixes: 3710becf8a58 ("net: RCU locking for simple ioctl()") +Reported-by: "Gong, Sishuai" +Cc: Eric Dumazet +Cc: Jakub Kicinski +Signed-off-by: Cong Wang +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/tap.c | 7 +++---- + drivers/net/tun.c | 5 ++--- + include/linux/netdevice.h | 3 +++ + net/core/dev.c | 42 ++++++++++++++++++++++++++++++++++++++++++ + net/core/dev_ioctl.c | 20 +++++++------------- + net/core/rtnetlink.c | 2 +- + 6 files changed, 58 insertions(+), 21 deletions(-) + +--- a/drivers/net/tap.c ++++ b/drivers/net/tap.c +@@ -1093,10 +1093,9 @@ static long tap_ioctl(struct file *file, + return -ENOLINK; + } + ret = 0; +- u = tap->dev->type; ++ dev_get_mac_address(&sa, dev_net(tap->dev), tap->dev->name); + if (copy_to_user(&ifr->ifr_name, tap->dev->name, IFNAMSIZ) || +- copy_to_user(&ifr->ifr_hwaddr.sa_data, tap->dev->dev_addr, ETH_ALEN) || +- put_user(u, &ifr->ifr_hwaddr.sa_family)) ++ copy_to_user(&ifr->ifr_hwaddr, &sa, sizeof(sa))) + ret = -EFAULT; + tap_put_tap_dev(tap); + rtnl_unlock(); +@@ -1111,7 +1110,7 @@ static long tap_ioctl(struct file *file, + rtnl_unlock(); + return -ENOLINK; + } +- ret = dev_set_mac_address(tap->dev, &sa, NULL); ++ ret = dev_set_mac_address_user(tap->dev, &sa, NULL); + tap_put_tap_dev(tap); + rtnl_unlock(); + return ret; +--- a/drivers/net/tun.c ++++ b/drivers/net/tun.c +@@ -3113,15 +3113,14 @@ static long __tun_chr_ioctl(struct file + + case SIOCGIFHWADDR: + /* Get hw address */ +- memcpy(ifr.ifr_hwaddr.sa_data, tun->dev->dev_addr, ETH_ALEN); +- ifr.ifr_hwaddr.sa_family = tun->dev->type; ++ dev_get_mac_address(&ifr.ifr_hwaddr, net, tun->dev->name); + if (copy_to_user(argp, &ifr, ifreq_len)) + ret = -EFAULT; + break; + + case SIOCSIFHWADDR: + /* Set hw address */ +- ret = dev_set_mac_address(tun->dev, &ifr.ifr_hwaddr, NULL); ++ ret = dev_set_mac_address_user(tun->dev, &ifr.ifr_hwaddr, NULL); + break; + + case TUNGETSNDBUF: +--- a/include/linux/netdevice.h ++++ b/include/linux/netdevice.h +@@ -3918,6 +3918,9 @@ int dev_pre_changeaddr_notify(struct net + struct netlink_ext_ack *extack); + int dev_set_mac_address(struct net_device *dev, struct sockaddr *sa, + struct netlink_ext_ack *extack); ++int dev_set_mac_address_user(struct net_device *dev, struct sockaddr *sa, ++ struct netlink_ext_ack *extack); ++int dev_get_mac_address(struct sockaddr *sa, struct net *net, char *dev_name); + int dev_change_carrier(struct net_device *, bool new_carrier); + int dev_get_phys_port_id(struct net_device *dev, + struct netdev_phys_item_id *ppid); +--- a/net/core/dev.c ++++ b/net/core/dev.c +@@ -8743,6 +8743,48 @@ int dev_set_mac_address(struct net_devic + } + EXPORT_SYMBOL(dev_set_mac_address); + ++static DECLARE_RWSEM(dev_addr_sem); ++ ++int dev_set_mac_address_user(struct net_device *dev, struct sockaddr *sa, ++ struct netlink_ext_ack *extack) ++{ ++ int ret; ++ ++ down_write(&dev_addr_sem); ++ ret = dev_set_mac_address(dev, sa, extack); ++ up_write(&dev_addr_sem); ++ return ret; ++} ++EXPORT_SYMBOL(dev_set_mac_address_user); ++ ++int dev_get_mac_address(struct sockaddr *sa, struct net *net, char *dev_name) ++{ ++ size_t size = sizeof(sa->sa_data); ++ struct net_device *dev; ++ int ret = 0; ++ ++ down_read(&dev_addr_sem); ++ rcu_read_lock(); ++ ++ dev = dev_get_by_name_rcu(net, dev_name); ++ if (!dev) { ++ ret = -ENODEV; ++ goto unlock; ++ } ++ if (!dev->addr_len) ++ memset(sa->sa_data, 0, size); ++ else ++ memcpy(sa->sa_data, dev->dev_addr, ++ min_t(size_t, size, dev->addr_len)); ++ sa->sa_family = dev->type; ++ ++unlock: ++ rcu_read_unlock(); ++ up_read(&dev_addr_sem); ++ return ret; ++} ++EXPORT_SYMBOL(dev_get_mac_address); ++ + /** + * dev_change_carrier - Change device carrier + * @dev: device +--- a/net/core/dev_ioctl.c ++++ b/net/core/dev_ioctl.c +@@ -123,17 +123,6 @@ static int dev_ifsioc_locked(struct net + ifr->ifr_mtu = dev->mtu; + return 0; + +- case SIOCGIFHWADDR: +- if (!dev->addr_len) +- memset(ifr->ifr_hwaddr.sa_data, 0, +- sizeof(ifr->ifr_hwaddr.sa_data)); +- else +- memcpy(ifr->ifr_hwaddr.sa_data, dev->dev_addr, +- min(sizeof(ifr->ifr_hwaddr.sa_data), +- (size_t)dev->addr_len)); +- ifr->ifr_hwaddr.sa_family = dev->type; +- return 0; +- + case SIOCGIFSLAVE: + err = -EINVAL; + break; +@@ -274,7 +263,7 @@ static int dev_ifsioc(struct net *net, s + case SIOCSIFHWADDR: + if (dev->addr_len > sizeof(struct sockaddr)) + return -EINVAL; +- return dev_set_mac_address(dev, &ifr->ifr_hwaddr, NULL); ++ return dev_set_mac_address_user(dev, &ifr->ifr_hwaddr, NULL); + + case SIOCSIFHWBROADCAST: + if (ifr->ifr_hwaddr.sa_family != dev->type) +@@ -418,6 +407,12 @@ int dev_ioctl(struct net *net, unsigned + */ + + switch (cmd) { ++ case SIOCGIFHWADDR: ++ dev_load(net, ifr->ifr_name); ++ ret = dev_get_mac_address(&ifr->ifr_hwaddr, net, ifr->ifr_name); ++ if (colon) ++ *colon = ':'; ++ return ret; + /* + * These ioctl calls: + * - can be done by all. +@@ -427,7 +422,6 @@ int dev_ioctl(struct net *net, unsigned + case SIOCGIFFLAGS: + case SIOCGIFMETRIC: + case SIOCGIFMTU: +- case SIOCGIFHWADDR: + case SIOCGIFSLAVE: + case SIOCGIFMAP: + case SIOCGIFINDEX: +--- a/net/core/rtnetlink.c ++++ b/net/core/rtnetlink.c +@@ -2660,7 +2660,7 @@ static int do_setlink(const struct sk_bu + sa->sa_family = dev->type; + memcpy(sa->sa_data, nla_data(tb[IFLA_ADDRESS]), + dev->addr_len); +- err = dev_set_mac_address(dev, sa, extack); ++ err = dev_set_mac_address_user(dev, sa, extack); + kfree(sa); + if (err) + goto errout; diff --git a/queue-5.11/net-hsr-add-support-for-entryforgettime.patch b/queue-5.11/net-hsr-add-support-for-entryforgettime.patch new file mode 100644 index 00000000000..29cb6e3683e --- /dev/null +++ b/queue-5.11/net-hsr-add-support-for-entryforgettime.patch @@ -0,0 +1,76 @@ +From f176411401127a07a9360dec14eca448eb2e9d45 Mon Sep 17 00:00:00 2001 +From: Marco Wenzel +Date: Wed, 24 Feb 2021 10:46:49 +0100 +Subject: net: hsr: add support for EntryForgetTime + +From: Marco Wenzel + +commit f176411401127a07a9360dec14eca448eb2e9d45 upstream. + +In IEC 62439-3 EntryForgetTime is defined with a value of 400 ms. When a +node does not send any frame within this time, the sequence number check +for can be ignored. This solves communication issues with Cisco IE 2000 +in Redbox mode. + +Fixes: f421436a591d ("net/hsr: Add support for the High-availability Seamless Redundancy protocol (HSRv0)") +Signed-off-by: Marco Wenzel +Reviewed-by: George McCollister +Tested-by: George McCollister +Reviewed-by: Andrew Lunn +Link: https://lore.kernel.org/r/20210224094653.1440-1-marco.wenzel@a-eberle.de +Signed-off-by: Jakub Kicinski +Signed-off-by: Greg Kroah-Hartman +--- + net/hsr/hsr_framereg.c | 9 +++++++-- + net/hsr/hsr_framereg.h | 1 + + net/hsr/hsr_main.h | 1 + + 3 files changed, 9 insertions(+), 2 deletions(-) + +--- a/net/hsr/hsr_framereg.c ++++ b/net/hsr/hsr_framereg.c +@@ -164,8 +164,10 @@ static struct hsr_node *hsr_add_node(str + * as initialization. (0 could trigger an spurious ring error warning). + */ + now = jiffies; +- for (i = 0; i < HSR_PT_PORTS; i++) ++ for (i = 0; i < HSR_PT_PORTS; i++) { + new_node->time_in[i] = now; ++ new_node->time_out[i] = now; ++ } + for (i = 0; i < HSR_PT_PORTS; i++) + new_node->seq_out[i] = seq_out; + +@@ -411,9 +413,12 @@ void hsr_register_frame_in(struct hsr_no + int hsr_register_frame_out(struct hsr_port *port, struct hsr_node *node, + u16 sequence_nr) + { +- if (seq_nr_before_or_eq(sequence_nr, node->seq_out[port->type])) ++ if (seq_nr_before_or_eq(sequence_nr, node->seq_out[port->type]) && ++ time_is_after_jiffies(node->time_out[port->type] + ++ msecs_to_jiffies(HSR_ENTRY_FORGET_TIME))) + return 1; + ++ node->time_out[port->type] = jiffies; + node->seq_out[port->type] = sequence_nr; + return 0; + } +--- a/net/hsr/hsr_framereg.h ++++ b/net/hsr/hsr_framereg.h +@@ -75,6 +75,7 @@ struct hsr_node { + enum hsr_port_type addr_B_port; + unsigned long time_in[HSR_PT_PORTS]; + bool time_in_stale[HSR_PT_PORTS]; ++ unsigned long time_out[HSR_PT_PORTS]; + /* if the node is a SAN */ + bool san_a; + bool san_b; +--- a/net/hsr/hsr_main.h ++++ b/net/hsr/hsr_main.h +@@ -21,6 +21,7 @@ + #define HSR_LIFE_CHECK_INTERVAL 2000 /* ms */ + #define HSR_NODE_FORGET_TIME 60000 /* ms */ + #define HSR_ANNOUNCE_INTERVAL 100 /* ms */ ++#define HSR_ENTRY_FORGET_TIME 400 /* ms */ + + /* By how much may slave1 and slave2 timestamps of latest received frame from + * each node differ before we notify of communication problem? diff --git a/queue-5.11/net-psample-fix-netlink-skb-length-with-tunnel-info.patch b/queue-5.11/net-psample-fix-netlink-skb-length-with-tunnel-info.patch new file mode 100644 index 00000000000..4f2f2cdec8c --- /dev/null +++ b/queue-5.11/net-psample-fix-netlink-skb-length-with-tunnel-info.patch @@ -0,0 +1,46 @@ +From a93dcaada2ddb58dbc72652b42548adedd646d7a Mon Sep 17 00:00:00 2001 +From: Chris Mi +Date: Thu, 25 Feb 2021 15:51:45 +0800 +Subject: net: psample: Fix netlink skb length with tunnel info + +From: Chris Mi + +commit a93dcaada2ddb58dbc72652b42548adedd646d7a upstream. + +Currently, the psample netlink skb is allocated with a size that does +not account for the nested 'PSAMPLE_ATTR_TUNNEL' attribute and the +padding required for the 64-bit attribute 'PSAMPLE_TUNNEL_KEY_ATTR_ID'. +This can result in failure to add attributes to the netlink skb due +to insufficient tail room. The following error message is printed to +the kernel log: "Could not create psample log message". + +Fix this by adjusting the allocation size to take into account the +nested attribute and the padding. + +Fixes: d8bed686ab96 ("net: psample: Add tunnel support") +CC: Yotam Gigi +Reviewed-by: Ido Schimmel +Reviewed-by: Jiri Pirko +Signed-off-by: Chris Mi +Link: https://lore.kernel.org/r/20210225075145.184314-1-cmi@nvidia.com +Signed-off-by: Jakub Kicinski +Signed-off-by: Greg Kroah-Hartman +--- + net/psample/psample.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/net/psample/psample.c ++++ b/net/psample/psample.c +@@ -309,10 +309,10 @@ static int psample_tunnel_meta_len(struc + unsigned short tun_proto = ip_tunnel_info_af(tun_info); + const struct ip_tunnel_key *tun_key = &tun_info->key; + int tun_opts_len = tun_info->options_len; +- int sum = 0; ++ int sum = nla_total_size(0); /* PSAMPLE_ATTR_TUNNEL */ + + if (tun_key->tun_flags & TUNNEL_KEY) +- sum += nla_total_size(sizeof(u64)); ++ sum += nla_total_size_64bit(sizeof(u64)); + + if (tun_info->mode & IP_TUNNEL_INFO_BRIDGE) + sum += nla_total_size(0); diff --git a/queue-5.11/net-sched-cls_flower-reject-invalid-ct_state-flags-rules.patch b/queue-5.11/net-sched-cls_flower-reject-invalid-ct_state-flags-rules.patch new file mode 100644 index 00000000000..23404a17d98 --- /dev/null +++ b/queue-5.11/net-sched-cls_flower-reject-invalid-ct_state-flags-rules.patch @@ -0,0 +1,108 @@ +From 1bcc51ac0731aab1b109b2cd5c3d495f1884e5ca Mon Sep 17 00:00:00 2001 +From: wenxu +Date: Tue, 9 Feb 2021 14:37:49 +0800 +Subject: net/sched: cls_flower: Reject invalid ct_state flags rules + +From: wenxu + +commit 1bcc51ac0731aab1b109b2cd5c3d495f1884e5ca upstream. + +Reject the unsupported and invalid ct_state flags of cls flower rules. + +Fixes: e0ace68af2ac ("net/sched: cls_flower: Add matching on conntrack info") +Signed-off-by: wenxu +Reviewed-by: Marcelo Ricardo Leitner +Reviewed-by: Jakub Kicinski +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + include/uapi/linux/pkt_cls.h | 2 ++ + net/sched/cls_flower.c | 39 +++++++++++++++++++++++++++++++++++++-- + 2 files changed, 39 insertions(+), 2 deletions(-) + +--- a/include/uapi/linux/pkt_cls.h ++++ b/include/uapi/linux/pkt_cls.h +@@ -591,6 +591,8 @@ enum { + TCA_FLOWER_KEY_CT_FLAGS_ESTABLISHED = 1 << 1, /* Part of an existing connection. */ + TCA_FLOWER_KEY_CT_FLAGS_RELATED = 1 << 2, /* Related to an established connection. */ + TCA_FLOWER_KEY_CT_FLAGS_TRACKED = 1 << 3, /* Conntrack has occurred. */ ++ ++ __TCA_FLOWER_KEY_CT_FLAGS_MAX, + }; + + enum { +--- a/net/sched/cls_flower.c ++++ b/net/sched/cls_flower.c +@@ -30,6 +30,11 @@ + + #include + ++#define TCA_FLOWER_KEY_CT_FLAGS_MAX \ ++ ((__TCA_FLOWER_KEY_CT_FLAGS_MAX - 1) << 1) ++#define TCA_FLOWER_KEY_CT_FLAGS_MASK \ ++ (TCA_FLOWER_KEY_CT_FLAGS_MAX - 1) ++ + struct fl_flow_key { + struct flow_dissector_key_meta meta; + struct flow_dissector_key_control control; +@@ -686,8 +691,10 @@ static const struct nla_policy fl_policy + [TCA_FLOWER_KEY_ENC_IP_TTL_MASK] = { .type = NLA_U8 }, + [TCA_FLOWER_KEY_ENC_OPTS] = { .type = NLA_NESTED }, + [TCA_FLOWER_KEY_ENC_OPTS_MASK] = { .type = NLA_NESTED }, +- [TCA_FLOWER_KEY_CT_STATE] = { .type = NLA_U16 }, +- [TCA_FLOWER_KEY_CT_STATE_MASK] = { .type = NLA_U16 }, ++ [TCA_FLOWER_KEY_CT_STATE] = ++ NLA_POLICY_MASK(NLA_U16, TCA_FLOWER_KEY_CT_FLAGS_MASK), ++ [TCA_FLOWER_KEY_CT_STATE_MASK] = ++ NLA_POLICY_MASK(NLA_U16, TCA_FLOWER_KEY_CT_FLAGS_MASK), + [TCA_FLOWER_KEY_CT_ZONE] = { .type = NLA_U16 }, + [TCA_FLOWER_KEY_CT_ZONE_MASK] = { .type = NLA_U16 }, + [TCA_FLOWER_KEY_CT_MARK] = { .type = NLA_U32 }, +@@ -1390,12 +1397,33 @@ static int fl_set_enc_opt(struct nlattr + return 0; + } + ++static int fl_validate_ct_state(u16 state, struct nlattr *tb, ++ struct netlink_ext_ack *extack) ++{ ++ if (state && !(state & TCA_FLOWER_KEY_CT_FLAGS_TRACKED)) { ++ NL_SET_ERR_MSG_ATTR(extack, tb, ++ "no trk, so no other flag can be set"); ++ return -EINVAL; ++ } ++ ++ if (state & TCA_FLOWER_KEY_CT_FLAGS_NEW && ++ state & TCA_FLOWER_KEY_CT_FLAGS_ESTABLISHED) { ++ NL_SET_ERR_MSG_ATTR(extack, tb, ++ "new and est are mutually exclusive"); ++ return -EINVAL; ++ } ++ ++ return 0; ++} ++ + static int fl_set_key_ct(struct nlattr **tb, + struct flow_dissector_key_ct *key, + struct flow_dissector_key_ct *mask, + struct netlink_ext_ack *extack) + { + if (tb[TCA_FLOWER_KEY_CT_STATE]) { ++ int err; ++ + if (!IS_ENABLED(CONFIG_NF_CONNTRACK)) { + NL_SET_ERR_MSG(extack, "Conntrack isn't enabled"); + return -EOPNOTSUPP; +@@ -1403,6 +1431,13 @@ static int fl_set_key_ct(struct nlattr * + fl_set_key_val(tb, &key->ct_state, TCA_FLOWER_KEY_CT_STATE, + &mask->ct_state, TCA_FLOWER_KEY_CT_STATE_MASK, + sizeof(key->ct_state)); ++ ++ err = fl_validate_ct_state(mask->ct_state, ++ tb[TCA_FLOWER_KEY_CT_STATE_MASK], ++ extack); ++ if (err) ++ return err; ++ + } + if (tb[TCA_FLOWER_KEY_CT_ZONE]) { + if (!IS_ENABLED(CONFIG_NF_CONNTRACK_ZONES)) { diff --git a/queue-5.11/rdma-rtrs-clt-use-bitmask-to-check-sess-flags.patch b/queue-5.11/rdma-rtrs-clt-use-bitmask-to-check-sess-flags.patch new file mode 100644 index 00000000000..dcabd8d8f38 --- /dev/null +++ b/queue-5.11/rdma-rtrs-clt-use-bitmask-to-check-sess-flags.patch @@ -0,0 +1,83 @@ +From aaed465f761700dace9ab39521013cddaae4f5a3 Mon Sep 17 00:00:00 2001 +From: Jack Wang +Date: Thu, 17 Dec 2020 15:19:12 +0100 +Subject: RDMA/rtrs-clt: Use bitmask to check sess->flags + +From: Jack Wang + +commit aaed465f761700dace9ab39521013cddaae4f5a3 upstream. + +We may want to add new flags, so it's better to use bitmask to check flags. + +Fixes: 6a98d71daea1 ("RDMA/rtrs: client: main functionality") +Link: https://lore.kernel.org/r/20201217141915.56989-17-jinpu.wang@cloud.ionos.com +Signed-off-by: Jack Wang +Signed-off-by: Gioh Kim +Signed-off-by: Jason Gunthorpe +Signed-off-by: Greg Kroah-Hartman +--- + drivers/infiniband/ulp/rtrs/rtrs-clt.c | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +--- a/drivers/infiniband/ulp/rtrs/rtrs-clt.c ++++ b/drivers/infiniband/ulp/rtrs/rtrs-clt.c +@@ -496,7 +496,7 @@ static void rtrs_clt_recv_done(struct rt + int err; + struct rtrs_clt_sess *sess = to_clt_sess(con->c.sess); + +- WARN_ON(sess->flags != RTRS_MSG_NEW_RKEY_F); ++ WARN_ON((sess->flags & RTRS_MSG_NEW_RKEY_F) == 0); + iu = container_of(wc->wr_cqe, struct rtrs_iu, + cqe); + err = rtrs_iu_post_recv(&con->c, iu); +@@ -516,7 +516,7 @@ static void rtrs_clt_rkey_rsp_done(struc + u32 buf_id; + int err; + +- WARN_ON(sess->flags != RTRS_MSG_NEW_RKEY_F); ++ WARN_ON((sess->flags & RTRS_MSG_NEW_RKEY_F) == 0); + + iu = container_of(wc->wr_cqe, struct rtrs_iu, cqe); + +@@ -623,12 +623,12 @@ static void rtrs_clt_rdma_done(struct ib + } else if (imm_type == RTRS_HB_MSG_IMM) { + WARN_ON(con->c.cid); + rtrs_send_hb_ack(&sess->s); +- if (sess->flags == RTRS_MSG_NEW_RKEY_F) ++ if (sess->flags & RTRS_MSG_NEW_RKEY_F) + return rtrs_clt_recv_done(con, wc); + } else if (imm_type == RTRS_HB_ACK_IMM) { + WARN_ON(con->c.cid); + sess->s.hb_missed_cnt = 0; +- if (sess->flags == RTRS_MSG_NEW_RKEY_F) ++ if (sess->flags & RTRS_MSG_NEW_RKEY_F) + return rtrs_clt_recv_done(con, wc); + } else { + rtrs_wrn(con->c.sess, "Unknown IMM type %u\n", +@@ -656,7 +656,7 @@ static void rtrs_clt_rdma_done(struct ib + WARN_ON(!(wc->wc_flags & IB_WC_WITH_INVALIDATE || + wc->wc_flags & IB_WC_WITH_IMM)); + WARN_ON(wc->wr_cqe->done != rtrs_clt_rdma_done); +- if (sess->flags == RTRS_MSG_NEW_RKEY_F) { ++ if (sess->flags & RTRS_MSG_NEW_RKEY_F) { + if (wc->wc_flags & IB_WC_WITH_INVALIDATE) + return rtrs_clt_recv_done(con, wc); + +@@ -681,7 +681,7 @@ static int post_recv_io(struct rtrs_clt_ + struct rtrs_clt_sess *sess = to_clt_sess(con->c.sess); + + for (i = 0; i < q_size; i++) { +- if (sess->flags == RTRS_MSG_NEW_RKEY_F) { ++ if (sess->flags & RTRS_MSG_NEW_RKEY_F) { + struct rtrs_iu *iu = &con->rsp_ius[i]; + + err = rtrs_iu_post_recv(&con->c, iu); +@@ -1566,7 +1566,7 @@ static int create_con_cq_qp(struct rtrs_ + sess->queue_depth * 3 + 1); + } + /* alloc iu to recv new rkey reply when server reports flags set */ +- if (sess->flags == RTRS_MSG_NEW_RKEY_F || con->c.cid == 0) { ++ if (sess->flags & RTRS_MSG_NEW_RKEY_F || con->c.cid == 0) { + con->rsp_ius = rtrs_iu_alloc(max_recv_wr, sizeof(*rsp), + GFP_KERNEL, sess->s.dev->ib_dev, + DMA_FROM_DEVICE, diff --git a/queue-5.11/rdma-rtrs-do-not-signal-for-heatbeat.patch b/queue-5.11/rdma-rtrs-do-not-signal-for-heatbeat.patch new file mode 100644 index 00000000000..c5e6b0ff32c --- /dev/null +++ b/queue-5.11/rdma-rtrs-do-not-signal-for-heatbeat.patch @@ -0,0 +1,65 @@ +From b38041d50add1c881fbc60eb2be93b58fc58ea21 Mon Sep 17 00:00:00 2001 +From: Jack Wang +Date: Thu, 17 Dec 2020 15:19:11 +0100 +Subject: RDMA/rtrs: Do not signal for heatbeat + +From: Jack Wang + +commit b38041d50add1c881fbc60eb2be93b58fc58ea21 upstream. + +For HB, there is no need to generate signal for completion. + +Also remove a comment accordingly. + +Fixes: c0894b3ea69d ("RDMA/rtrs: core: lib functions shared between client and server modules") +Link: https://lore.kernel.org/r/20201217141915.56989-16-jinpu.wang@cloud.ionos.com +Signed-off-by: Jack Wang +Reported-by: Gioh Kim +Signed-off-by: Jason Gunthorpe +Signed-off-by: Greg Kroah-Hartman +--- + drivers/infiniband/ulp/rtrs/rtrs-clt.c | 1 - + drivers/infiniband/ulp/rtrs/rtrs-srv.c | 1 - + drivers/infiniband/ulp/rtrs/rtrs.c | 4 ++-- + 3 files changed, 2 insertions(+), 4 deletions(-) + +--- a/drivers/infiniband/ulp/rtrs/rtrs-clt.c ++++ b/drivers/infiniband/ulp/rtrs/rtrs-clt.c +@@ -666,7 +666,6 @@ static void rtrs_clt_rdma_done(struct ib + case IB_WC_RDMA_WRITE: + /* + * post_send() RDMA write completions of IO reqs (read/write) +- * and hb + */ + break; + +--- a/drivers/infiniband/ulp/rtrs/rtrs-srv.c ++++ b/drivers/infiniband/ulp/rtrs/rtrs-srv.c +@@ -1244,7 +1244,6 @@ static void rtrs_srv_rdma_done(struct ib + case IB_WC_SEND: + /* + * post_send() RDMA write completions of IO reqs (read/write) +- * and hb + */ + atomic_add(srv->queue_depth, &con->sq_wr_avail); + +--- a/drivers/infiniband/ulp/rtrs/rtrs.c ++++ b/drivers/infiniband/ulp/rtrs/rtrs.c +@@ -310,7 +310,7 @@ void rtrs_send_hb_ack(struct rtrs_sess * + + imm = rtrs_to_imm(RTRS_HB_ACK_IMM, 0); + err = rtrs_post_rdma_write_imm_empty(usr_con, sess->hb_cqe, imm, +- IB_SEND_SIGNALED, NULL); ++ 0, NULL); + if (err) { + sess->hb_err_handler(usr_con); + return; +@@ -339,7 +339,7 @@ static void hb_work(struct work_struct * + } + imm = rtrs_to_imm(RTRS_HB_MSG_IMM, 0); + err = rtrs_post_rdma_write_imm_empty(usr_con, sess->hb_cqe, imm, +- IB_SEND_SIGNALED, NULL); ++ 0, NULL); + if (err) { + sess->hb_err_handler(usr_con); + return; diff --git a/queue-5.11/rdma-rtrs-srv-do-not-signal-reg_mr.patch b/queue-5.11/rdma-rtrs-srv-do-not-signal-reg_mr.patch new file mode 100644 index 00000000000..e6b69c4e5af --- /dev/null +++ b/queue-5.11/rdma-rtrs-srv-do-not-signal-reg_mr.patch @@ -0,0 +1,33 @@ +From e8ae7ddb48a1b81fd1e67da34a0cb59daf0445d6 Mon Sep 17 00:00:00 2001 +From: Jack Wang +Date: Thu, 17 Dec 2020 15:19:13 +0100 +Subject: RDMA/rtrs-srv: Do not signal REG_MR + +From: Jack Wang + +commit e8ae7ddb48a1b81fd1e67da34a0cb59daf0445d6 upstream. + +We do not need to wait for REG_MR completion, so remove the +SIGNAL flag. + +Fixes: 9cb837480424 ("RDMA/rtrs: server: main functionality") +Link: https://lore.kernel.org/r/20201217141915.56989-18-jinpu.wang@cloud.ionos.com +Signed-off-by: Jack Wang +Signed-off-by: Gioh Kim +Signed-off-by: Jason Gunthorpe +Signed-off-by: Greg Kroah-Hartman +--- + drivers/infiniband/ulp/rtrs/rtrs-srv.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/infiniband/ulp/rtrs/rtrs-srv.c ++++ b/drivers/infiniband/ulp/rtrs/rtrs-srv.c +@@ -820,7 +820,7 @@ static int process_info_req(struct rtrs_ + rwr[mri].wr.opcode = IB_WR_REG_MR; + rwr[mri].wr.wr_cqe = &local_reg_cqe; + rwr[mri].wr.num_sge = 0; +- rwr[mri].wr.send_flags = mri ? 0 : IB_SEND_SIGNALED; ++ rwr[mri].wr.send_flags = 0; + rwr[mri].mr = mr; + rwr[mri].key = mr->rkey; + rwr[mri].access = (IB_ACCESS_LOCAL_WRITE | diff --git a/queue-5.11/series b/queue-5.11/series index 6f18c002092..18032cb8d9f 100644 --- a/queue-5.11/series +++ b/queue-5.11/series @@ -18,3 +18,22 @@ riscv-get-rid-of-max_early_mapping_size.patch nbd-handle-device-refs-for-destroy_on_disconnect-properly.patch mm-hugetlb.c-fix-unnecessary-address-expansion-of-pmd-sharing.patch vfio-type1-use-follow_pte.patch +rdma-rtrs-do-not-signal-for-heatbeat.patch +rdma-rtrs-clt-use-bitmask-to-check-sess-flags.patch +rdma-rtrs-srv-do-not-signal-reg_mr.patch +tcp-fix-tcp_rmem-documentation.patch +mptcp-provide-subflow-aware-release-function.patch +mptcp-do-not-wakeup-listener-for-mpj-subflows.patch +mptcp-fix-data_fin-generation-on-early-shutdown.patch +net-bridge-use-switchdev-for-port-flags-set-through-sysfs-too.patch +net-sched-cls_flower-reject-invalid-ct_state-flags-rules.patch +net-dsa-tag_rtl4_a-support-also-egress-tags.patch +net-ag71xx-remove-unnecessary-mtu-reservation.patch +net-hsr-add-support-for-entryforgettime.patch +net-psample-fix-netlink-skb-length-with-tunnel-info.patch +net-fix-dev_ifsioc_locked-race-condition.patch +dt-bindings-ethernet-controller-fix-fixed-link-specification.patch +dt-bindings-net-btusb-dt-fix-s-interrupt-name-interrupt-names.patch +i2c-i2c-qcom-geni-add-shutdown-callback-for-i2c.patch +asoc-qcom-remove-useless-debug-print.patch +soundwire-debugfs-use-controller-id-instead-of-link_id.patch diff --git a/queue-5.11/soundwire-debugfs-use-controller-id-instead-of-link_id.patch b/queue-5.11/soundwire-debugfs-use-controller-id-instead-of-link_id.patch new file mode 100644 index 00000000000..89c83ddaec9 --- /dev/null +++ b/queue-5.11/soundwire-debugfs-use-controller-id-instead-of-link_id.patch @@ -0,0 +1,37 @@ +From 6d5e7af1f6f5924de5dd1ebe97675c2363100878 Mon Sep 17 00:00:00 2001 +From: Srinivas Kandagatla +Date: Fri, 15 Jan 2021 16:25:59 +0000 +Subject: soundwire: debugfs: use controller id instead of link_id + +From: Srinivas Kandagatla + +commit 6d5e7af1f6f5924de5dd1ebe97675c2363100878 upstream. + +link_id can be zero and if we have multiple controller instances +in a system like Qualcomm debugfs will end-up with duplicate namespace +resulting in incorrect debugfs entries. + +Using id should give a unique debugfs directory entry and should fix below +warning too. +"debugfs: Directory 'master-0' with parent 'soundwire' already present!" + +Fixes: bf03473d5bcc ("soundwire: add debugfs support") +Signed-off-by: Srinivas Kandagatla +Link: https://lore.kernel.org/r/20210115162559.20869-1-srinivas.kandagatla@linaro.org +Signed-off-by: Vinod Koul +Signed-off-by: Greg Kroah-Hartman +--- + drivers/soundwire/debugfs.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/soundwire/debugfs.c ++++ b/drivers/soundwire/debugfs.c +@@ -19,7 +19,7 @@ void sdw_bus_debugfs_init(struct sdw_bus + return; + + /* create the debugfs master-N */ +- snprintf(name, sizeof(name), "master-%d", bus->link_id); ++ snprintf(name, sizeof(name), "master-%d", bus->id); + bus->debugfs = debugfs_create_dir(name, sdw_debugfs_root); + } + diff --git a/queue-5.11/tcp-fix-tcp_rmem-documentation.patch b/queue-5.11/tcp-fix-tcp_rmem-documentation.patch new file mode 100644 index 00000000000..381db75a3e3 --- /dev/null +++ b/queue-5.11/tcp-fix-tcp_rmem-documentation.patch @@ -0,0 +1,44 @@ +From 1d1be91254bbdd189796041561fd430f7553bb88 Mon Sep 17 00:00:00 2001 +From: Eric Dumazet +Date: Wed, 10 Feb 2021 09:13:33 -0800 +Subject: tcp: fix tcp_rmem documentation + +From: Eric Dumazet + +commit 1d1be91254bbdd189796041561fd430f7553bb88 upstream. + +tcp_rmem[1] has been changed to 131072, we should update the documentation +to reflect this. + +Fixes: a337531b942b ("tcp: up initial rmem to 128KB and SYN rwin to around 64KB") +Signed-off-by: Eric Dumazet +Reported-by: Zhibin Liu +Cc: Yuchung Cheng +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + Documentation/networking/ip-sysctl.rst | 7 +++---- + 1 file changed, 3 insertions(+), 4 deletions(-) + +--- a/Documentation/networking/ip-sysctl.rst ++++ b/Documentation/networking/ip-sysctl.rst +@@ -630,16 +630,15 @@ tcp_rmem - vector of 3 INTEGERs: min, de + + default: initial size of receive buffer used by TCP sockets. + This value overrides net.core.rmem_default used by other protocols. +- Default: 87380 bytes. This value results in window of 65535 with +- default setting of tcp_adv_win_scale and tcp_app_win:0 and a bit +- less for default tcp_app_win. See below about these variables. ++ Default: 131072 bytes. ++ This value results in initial window of 65535. + + max: maximal size of receive buffer allowed for automatically + selected receiver buffers for TCP socket. This value does not override + net.core.rmem_max. Calling setsockopt() with SO_RCVBUF disables + automatic tuning of that socket's receive buffer size, in which + case this value is ignored. +- Default: between 87380B and 6MB, depending on RAM size. ++ Default: between 131072 and 6MB, depending on RAM size. + + tcp_sack - BOOLEAN + Enable select acknowledgments (SACKS).