Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ab9f31cf authored by Mika Westerberg's avatar Mika Westerberg
Browse files

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: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
parent 4f807e47
Loading
Loading
Loading
Loading
+4 −6
Original line number Diff line number Diff line
@@ -304,17 +304,15 @@ struct tb_path *tb_path_alloc(struct tb *tb, struct tb_port *src, int src_hopid,
}

/**
 * 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];

+1 −3
Original line number Diff line number Diff line
@@ -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 */
}
+1 −9
Original line number Diff line number Diff line
@@ -475,7 +475,7 @@ struct tb_tunnel *tb_tunnel_alloc_dp(struct tb *tb, struct tb_port *in,
 * 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]);