All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net 1/2] net: thunderbolt: Tear down connection properly on suspend
@ 2018-02-12 14:10 Mika Westerberg
  2018-02-12 14:10 ` [PATCH net 2/2] net: thunderbolt: Run disconnect flow asynchronously when logout is received Mika Westerberg
  2018-02-12 17:03 ` [PATCH net 1/2] net: thunderbolt: Tear down connection properly on suspend David Miller
  0 siblings, 2 replies; 4+ messages in thread
From: Mika Westerberg @ 2018-02-12 14:10 UTC (permalink / raw)
  To: David S . Miller; +Cc: Michael Jamet, Yehezkel Bernat, Mika Westerberg, netdev

When suspending to mem or disk the Thunderbolt controller typically goes
down as well tearing down the connection automatically. However, when
suspend to idle is used this does not happen so we need to make sure the
connection is properly disconnected before it can be re-established
during resume.

Fixes: e69b6c02b4c3 ("net: Add support for networking over Thunderbolt cable")
Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Cc: stable@vger.kernel.org
---
 drivers/net/thunderbolt.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/drivers/net/thunderbolt.c b/drivers/net/thunderbolt.c
index ca5e375de27c..71cf9ab72fbc 100644
--- a/drivers/net/thunderbolt.c
+++ b/drivers/net/thunderbolt.c
@@ -1270,10 +1270,7 @@ static int __maybe_unused tbnet_suspend(struct device *dev)
 	stop_login(net);
 	if (netif_running(net->dev)) {
 		netif_device_detach(net->dev);
-		tb_ring_stop(net->rx_ring.ring);
-		tb_ring_stop(net->tx_ring.ring);
-		tbnet_free_buffers(&net->rx_ring);
-		tbnet_free_buffers(&net->tx_ring);
+		tbnet_tear_down(net, true);
 	}
 
 	return 0;
-- 
2.15.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH net 2/2] net: thunderbolt: Run disconnect flow asynchronously when logout is received
  2018-02-12 14:10 [PATCH net 1/2] net: thunderbolt: Tear down connection properly on suspend Mika Westerberg
@ 2018-02-12 14:10 ` Mika Westerberg
  2018-02-12 17:03   ` David Miller
  2018-02-12 17:03 ` [PATCH net 1/2] net: thunderbolt: Tear down connection properly on suspend David Miller
  1 sibling, 1 reply; 4+ messages in thread
From: Mika Westerberg @ 2018-02-12 14:10 UTC (permalink / raw)
  To: David S . Miller; +Cc: Michael Jamet, Yehezkel Bernat, Mika Westerberg, netdev

The control channel calls registered callbacks when control messages
such as XDomain protocol messages are received. The control channel
handling is done in a worker running on system workqueue which means the
networking driver can't run tear down flow which includes sending
disconnect request and waiting for a reply in the same worker. Otherwise
reply is never received (as the work is already running) and the
operation times out.

To fix this run disconnect ThunderboltIP flow asynchronously once
ThunderboltIP logout message is received.

Fixes: e69b6c02b4c3 ("net: Add support for networking over Thunderbolt cable")
Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Cc: stable@vger.kernel.org
---
 drivers/net/thunderbolt.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/drivers/net/thunderbolt.c b/drivers/net/thunderbolt.c
index 71cf9ab72fbc..e0d6760f3219 100644
--- a/drivers/net/thunderbolt.c
+++ b/drivers/net/thunderbolt.c
@@ -166,6 +166,8 @@ struct tbnet_ring {
  * @connected_work: Worker that finalizes the ThunderboltIP connection
  *		    setup and enables DMA paths for high speed data
  *		    transfers
+ * @disconnect_work: Worker that handles tearing down the ThunderboltIP
+ *		     connection
  * @rx_hdr: Copy of the currently processed Rx frame. Used when a
  *	    network packet consists of multiple Thunderbolt frames.
  *	    In host byte order.
@@ -190,6 +192,7 @@ struct tbnet {
 	int login_retries;
 	struct delayed_work login_work;
 	struct work_struct connected_work;
+	struct work_struct disconnect_work;
 	struct thunderbolt_ip_frame_header rx_hdr;
 	struct tbnet_ring rx_ring;
 	atomic_t frame_id;
@@ -445,7 +448,7 @@ static int tbnet_handle_packet(const void *buf, size_t size, void *data)
 	case TBIP_LOGOUT:
 		ret = tbnet_logout_response(net, route, sequence, command_id);
 		if (!ret)
-			tbnet_tear_down(net, false);
+			queue_work(system_long_wq, &net->disconnect_work);
 		break;
 
 	default:
@@ -659,6 +662,13 @@ static void tbnet_login_work(struct work_struct *work)
 	}
 }
 
+static void tbnet_disconnect_work(struct work_struct *work)
+{
+	struct tbnet *net = container_of(work, typeof(*net), disconnect_work);
+
+	tbnet_tear_down(net, false);
+}
+
 static bool tbnet_check_frame(struct tbnet *net, const struct tbnet_frame *tf,
 			      const struct thunderbolt_ip_frame_header *hdr)
 {
@@ -881,6 +891,7 @@ static int tbnet_stop(struct net_device *dev)
 
 	napi_disable(&net->napi);
 
+	cancel_work_sync(&net->disconnect_work);
 	tbnet_tear_down(net, true);
 
 	tb_ring_free(net->rx_ring.ring);
@@ -1195,6 +1206,7 @@ static int tbnet_probe(struct tb_service *svc, const struct tb_service_id *id)
 	net = netdev_priv(dev);
 	INIT_DELAYED_WORK(&net->login_work, tbnet_login_work);
 	INIT_WORK(&net->connected_work, tbnet_connected_work);
+	INIT_WORK(&net->disconnect_work, tbnet_disconnect_work);
 	mutex_init(&net->connection_lock);
 	atomic_set(&net->command_id, 0);
 	atomic_set(&net->frame_id, 0);
-- 
2.15.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH net 1/2] net: thunderbolt: Tear down connection properly on suspend
  2018-02-12 14:10 [PATCH net 1/2] net: thunderbolt: Tear down connection properly on suspend Mika Westerberg
  2018-02-12 14:10 ` [PATCH net 2/2] net: thunderbolt: Run disconnect flow asynchronously when logout is received Mika Westerberg
@ 2018-02-12 17:03 ` David Miller
  1 sibling, 0 replies; 4+ messages in thread
From: David Miller @ 2018-02-12 17:03 UTC (permalink / raw)
  To: mika.westerberg; +Cc: michael.jamet, yehezkel.bernat, netdev

From: Mika Westerberg <mika.westerberg@linux.intel.com>
Date: Mon, 12 Feb 2018 17:10:19 +0300

> When suspending to mem or disk the Thunderbolt controller typically goes
> down as well tearing down the connection automatically. However, when
> suspend to idle is used this does not happen so we need to make sure the
> connection is properly disconnected before it can be re-established
> during resume.
> 
> Fixes: e69b6c02b4c3 ("net: Add support for networking over Thunderbolt cable")
> Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>

Applied.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH net 2/2] net: thunderbolt: Run disconnect flow asynchronously when logout is received
  2018-02-12 14:10 ` [PATCH net 2/2] net: thunderbolt: Run disconnect flow asynchronously when logout is received Mika Westerberg
@ 2018-02-12 17:03   ` David Miller
  0 siblings, 0 replies; 4+ messages in thread
From: David Miller @ 2018-02-12 17:03 UTC (permalink / raw)
  To: mika.westerberg; +Cc: michael.jamet, yehezkel.bernat, netdev

From: Mika Westerberg <mika.westerberg@linux.intel.com>
Date: Mon, 12 Feb 2018 17:10:20 +0300

> The control channel calls registered callbacks when control messages
> such as XDomain protocol messages are received. The control channel
> handling is done in a worker running on system workqueue which means the
> networking driver can't run tear down flow which includes sending
> disconnect request and waiting for a reply in the same worker. Otherwise
> reply is never received (as the work is already running) and the
> operation times out.
> 
> To fix this run disconnect ThunderboltIP flow asynchronously once
> ThunderboltIP logout message is received.
> 
> Fixes: e69b6c02b4c3 ("net: Add support for networking over Thunderbolt cable")
> Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>

Also applied, thank you.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2018-02-12 17:03 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-02-12 14:10 [PATCH net 1/2] net: thunderbolt: Tear down connection properly on suspend Mika Westerberg
2018-02-12 14:10 ` [PATCH net 2/2] net: thunderbolt: Run disconnect flow asynchronously when logout is received Mika Westerberg
2018-02-12 17:03   ` David Miller
2018-02-12 17:03 ` [PATCH net 1/2] net: thunderbolt: Tear down connection properly on suspend David Miller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.