summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMika Westerberg <mika.westerberg@linux.intel.com>2018-09-28 05:21:17 -0400
committerMika Westerberg <mika.westerberg@linux.intel.com>2019-04-18 04:18:51 -0400
commit9872760eb7b1d4f6066ad8b560714a5d0a728fdb (patch)
tree8149d44e48dd3d333584c0d969ed66a23370017d
parentfd21b79e541e4666c938a344f3ad2df74b4f5120 (diff)
net: thunderbolt: Unregister ThunderboltIP protocol handler when suspending
The XDomain protocol messages may start as soon as Thunderbolt control channel is started. This means that if the other host starts sending ThunderboltIP packets early enough they will be passed to the network driver which then gets confused because its resume hook is not called yet. Fix this by unregistering the ThunderboltIP protocol handler when suspending and registering it back on resume. Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com> Acked-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/thunderbolt.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/net/thunderbolt.c b/drivers/net/thunderbolt.c
index c48c3a1eb1f8..fcf31335a8b6 100644
--- a/drivers/net/thunderbolt.c
+++ b/drivers/net/thunderbolt.c
@@ -1282,6 +1282,7 @@ static int __maybe_unused tbnet_suspend(struct device *dev)
1282 tbnet_tear_down(net, true); 1282 tbnet_tear_down(net, true);
1283 } 1283 }
1284 1284
1285 tb_unregister_protocol_handler(&net->handler);
1285 return 0; 1286 return 0;
1286} 1287}
1287 1288
@@ -1290,6 +1291,8 @@ static int __maybe_unused tbnet_resume(struct device *dev)
1290 struct tb_service *svc = tb_to_service(dev); 1291 struct tb_service *svc = tb_to_service(dev);
1291 struct tbnet *net = tb_service_get_drvdata(svc); 1292 struct tbnet *net = tb_service_get_drvdata(svc);
1292 1293
1294 tb_register_protocol_handler(&net->handler);
1295
1293 netif_carrier_off(net->dev); 1296 netif_carrier_off(net->dev);
1294 if (netif_running(net->dev)) { 1297 if (netif_running(net->dev)) {
1295 netif_device_attach(net->dev); 1298 netif_device_attach(net->dev);