net: thunderbolt: Unregister ThunderboltIP protocol handler when suspending
authorMika Westerberg <mika.westerberg@linux.intel.com>
Fri, 28 Sep 2018 09:21:17 +0000 (12:21 +0300)
committerMika Westerberg <mika.westerberg@linux.intel.com>
Thu, 18 Apr 2019 08:18:51 +0000 (11:18 +0300)
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>
drivers/net/thunderbolt.c

index c48c3a1eb1f8eba0629345f91b8f91a86f3597c3..fcf31335a8b62f6c3dcf31b1270b0b8d1c6cdeb7 100644 (file)
@@ -1282,6 +1282,7 @@ static int __maybe_unused tbnet_suspend(struct device *dev)
                tbnet_tear_down(net, true);
        }
 
+       tb_unregister_protocol_handler(&net->handler);
        return 0;
 }
 
@@ -1290,6 +1291,8 @@ static int __maybe_unused tbnet_resume(struct device *dev)
        struct tb_service *svc = tb_to_service(dev);
        struct tbnet *net = tb_service_get_drvdata(svc);
 
+       tb_register_protocol_handler(&net->handler);
+
        netif_carrier_off(net->dev);
        if (netif_running(net->dev)) {
                netif_device_attach(net->dev);