]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
thunderbolt: Do not tear down tunnels when driver is unloaded
authorMika Westerberg <mika.westerberg@linux.intel.com>
Wed, 6 Mar 2019 16:21:08 +0000 (18:21 +0200)
committerMika Westerberg <mika.westerberg@linux.intel.com>
Thu, 18 Apr 2019 08:18:53 +0000 (11:18 +0300)
Now that we have capability to discover existing tunnels during driver
load there is no point tearing down tunnels when the driver gets
unloaded. Instead we can just leave them running. If user disconnects
devices while there is no Thunderbolt driver loaded, tunneled protocol
hotplug happens and is handled by the corresponding driver (pciehp in
case of PCIe tunnel, GFX driver in case of DP tunnel).

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
drivers/thunderbolt/path.c
drivers/thunderbolt/tb.c
drivers/thunderbolt/tunnel.c

index 670a12e60d6626a8030a67665416b8d7e91e23cf..3fc92881a19754aa31ff097da0bddcd6b80f06df 100644 (file)
@@ -304,17 +304,15 @@ err:
 }
 
 /**
- * tb_path_free() - free a deactivated path
+ * tb_path_free() - free a path
+ * @path: Path to free
+ *
+ * Frees a path. The path does not need to be deactivated.
  */
 void tb_path_free(struct tb_path *path)
 {
        int i;
 
-       if (path->activated) {
-               tb_WARN(path->tb, "trying to free an activated path\n")
-               return;
-       }
-
        for (i = 0; i < path->path_length; i++) {
                const struct tb_path_hop *hop = &path->hops[i];
 
index c5e96e7ac37abaf80f0ad5dd4d4267f42ea15d5d..8a97a4e19638d18205c79e845f932c90f5f26b21 100644 (file)
@@ -500,10 +500,8 @@ static void tb_stop(struct tb *tb)
        struct tb_tunnel *n;
 
        /* tunnels are only present after everything has been initialized */
-       list_for_each_entry_safe(tunnel, n, &tcm->tunnel_list, list) {
-               tb_tunnel_deactivate(tunnel);
+       list_for_each_entry_safe(tunnel, n, &tcm->tunnel_list, list)
                tb_tunnel_free(tunnel);
-       }
        tb_switch_remove(tb->root_switch);
        tcm->hotplug_active = false; /* signal tb_handle_hotplug to quit */
 }
index 21d3393c6e9c2eb8fb86bad049517bb55ddf527b..0bc6639c6e74d51fc73d8623acadac1a7ed9ad96 100644 (file)
@@ -475,7 +475,7 @@ err_free:
  * tb_tunnel_free() - free a tunnel
  * @tunnel: Tunnel to be freed
  *
- * The tunnel must have been deactivated.
+ * Frees a tunnel. The tunnel does not need to be deactivated.
  */
 void tb_tunnel_free(struct tb_tunnel *tunnel)
 {
@@ -484,14 +484,6 @@ void tb_tunnel_free(struct tb_tunnel *tunnel)
        if (!tunnel)
                return;
 
-       for (i = 0; i < tunnel->npaths; i++) {
-               if (tunnel->paths[i] && tunnel->paths[i]->activated) {
-                       tb_tunnel_WARN(tunnel,
-                                      "trying to free an activated tunnel\n");
-                       return;
-               }
-       }
-
        for (i = 0; i < tunnel->npaths; i++) {
                if (tunnel->paths[i])
                        tb_path_free(tunnel->paths[i]);