+++ /dev/null
-From e0371298ddc51761be257698554ea507ac8bf831 Mon Sep 17 00:00:00 2001
-From: Roja Rani Yarubandi <rojay@codeaurora.org>
-Date: Fri, 8 Jan 2021 20:35:45 +0530
-Subject: i2c: i2c-qcom-geni: Add shutdown callback for i2c
-
-From: Roja Rani Yarubandi <rojay@codeaurora.org>
-
-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 <rojay@codeaurora.org>
-Reviewed-by: Akash Asthana <akashast@codeaurora.org>
-Signed-off-by: Wolfram Sang <wsa@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- 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)
- {
-@@ -654,6 +680,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;
-@@ -718,6 +751,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,
+++ /dev/null
-From ad98dd37051e14fa8c785609430d907fcfd518ba Mon Sep 17 00:00:00 2001
-From: Florian Westphal <fw@strlen.de>
-Date: Fri, 19 Feb 2021 18:35:39 +0100
-Subject: mptcp: provide subflow aware release function
-
-From: Florian Westphal <fw@strlen.de>
-
-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 <pabeni@redhat.com>
-Signed-off-by: Florian Westphal <fw@strlen.de>
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- 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 <linux/netdevice.h>
- #include <linux/sched/signal.h>
- #include <linux/atomic.h>
-+#include <linux/igmp.h>
- #include <net/sock.h>
- #include <net/inet_common.h>
- #include <net/inet_hashtables.h>
-@@ -19,6 +20,7 @@
- #include <net/tcp_states.h>
- #if IS_ENABLED(CONFIG_MPTCP_IPV6)
- #include <net/transp_v6.h>
-+#include <net/addrconf.h>
- #endif
- #include <net/mptcp.h>
- #include "protocol.h"
-@@ -2731,10 +2733,34 @@ out_unlock:
- return ret;
- }
-
-+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,
-@@ -2781,10 +2807,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,
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
net-bridge-use-switchdev-for-port-flags-set-through-sysfs-too.patch
net-sched-cls_flower-reject-invalid-ct_state-flags-rules.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
+++ /dev/null
-From e0371298ddc51761be257698554ea507ac8bf831 Mon Sep 17 00:00:00 2001
-From: Roja Rani Yarubandi <rojay@codeaurora.org>
-Date: Fri, 8 Jan 2021 20:35:45 +0530
-Subject: i2c: i2c-qcom-geni: Add shutdown callback for i2c
-
-From: Roja Rani Yarubandi <rojay@codeaurora.org>
-
-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 <rojay@codeaurora.org>
-Reviewed-by: Akash Asthana <akashast@codeaurora.org>
-Signed-off-by: Wolfram Sang <wsa@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- 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,
+++ /dev/null
-From ad98dd37051e14fa8c785609430d907fcfd518ba Mon Sep 17 00:00:00 2001
-From: Florian Westphal <fw@strlen.de>
-Date: Fri, 19 Feb 2021 18:35:39 +0100
-Subject: mptcp: provide subflow aware release function
-
-From: Florian Westphal <fw@strlen.de>
-
-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 <pabeni@redhat.com>
-Signed-off-by: Florian Westphal <fw@strlen.de>
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- 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 <linux/netdevice.h>
- #include <linux/sched/signal.h>
- #include <linux/atomic.h>
-+#include <linux/igmp.h>
- #include <net/sock.h>
- #include <net/inet_common.h>
- #include <net/inet_hashtables.h>
-@@ -19,6 +20,7 @@
- #include <net/tcp_states.h>
- #if IS_ENABLED(CONFIG_MPTCP_IPV6)
- #include <net/transp_v6.h>
-+#include <net/addrconf.h>
- #endif
- #include <net/mptcp.h>
- #include <net/xfrm.h>
-@@ -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,
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-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
+++ /dev/null
-From e0371298ddc51761be257698554ea507ac8bf831 Mon Sep 17 00:00:00 2001
-From: Roja Rani Yarubandi <rojay@codeaurora.org>
-Date: Fri, 8 Jan 2021 20:35:45 +0530
-Subject: i2c: i2c-qcom-geni: Add shutdown callback for i2c
-
-From: Roja Rani Yarubandi <rojay@codeaurora.org>
-
-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 <rojay@codeaurora.org>
-Reviewed-by: Akash Asthana <akashast@codeaurora.org>
-Signed-off-by: Wolfram Sang <wsa@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- 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
-@@ -377,6 +377,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)
- {
-@@ -641,6 +667,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;
-@@ -701,6 +734,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,
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
mips-drop-32-bit-asm-string-functions.patch
drm-virtio-use-kvmalloc-for-large-allocations.patch