summaryrefslogtreecommitdiff
path: root/drivers/thunderbolt
diff options
context:
space:
mode:
authorMika Westerberg <mika.westerberg@linux.intel.com>2019-03-06 19:21:08 +0300
committerMika Westerberg <mika.westerberg@linux.intel.com>2019-04-18 11:18:53 +0300
commitab9f31cfa89ad700f83bfaf30dc8703c4f609d0f (patch)
tree104db45ceedcdde73392316891db65bd8c17edb3 /drivers/thunderbolt
parent4f807e47ee9a75747d042a8eacf398f436da9452 (diff)
downloadlinux-ab9f31cfa89ad700f83bfaf30dc8703c4f609d0f.tar.xz
thunderbolt: Do not tear down tunnels when driver is unloaded
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>
Diffstat (limited to 'drivers/thunderbolt')
-rw-r--r--drivers/thunderbolt/path.c10
-rw-r--r--drivers/thunderbolt/tb.c4
-rw-r--r--drivers/thunderbolt/tunnel.c10
3 files changed, 6 insertions, 18 deletions
diff --git a/drivers/thunderbolt/path.c b/drivers/thunderbolt/path.c
index 670a12e60d66..3fc92881a197 100644
--- a/drivers/thunderbolt/path.c
+++ b/drivers/thunderbolt/path.c
@@ -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];
diff --git a/drivers/thunderbolt/tb.c b/drivers/thunderbolt/tb.c
index c5e96e7ac37a..8a97a4e19638 100644
--- a/drivers/thunderbolt/tb.c
+++ b/drivers/thunderbolt/tb.c
@@ -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 */
}
diff --git a/drivers/thunderbolt/tunnel.c b/drivers/thunderbolt/tunnel.c
index 21d3393c6e9c..0bc6639c6e74 100644
--- a/drivers/thunderbolt/tunnel.c
+++ b/drivers/thunderbolt/tunnel.c
@@ -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)
{
@@ -485,14 +485,6 @@ void tb_tunnel_free(struct tb_tunnel *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]);
}