mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-27 22:13:55 -04:00
thunderbolt: Set tb->root_switch to NULL when domain is stopped
Similarly what we do with the firmware connection manager. This makes tb_xdp_handle_request() return error to the remote host. However, we need to make sure we keep the uuid alive so that we can reply until the whole domain is released. Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
This commit is contained in:
@@ -2952,6 +2952,7 @@ static void tb_stop(struct tb *tb)
|
||||
tb_tunnel_put(tunnel);
|
||||
}
|
||||
tb_switch_remove(tb->root_switch);
|
||||
tb->root_switch = NULL;
|
||||
tcm->hotplug_active = false; /* signal tb_handle_hotplug to quit */
|
||||
}
|
||||
|
||||
|
||||
@@ -740,7 +740,7 @@ static void tb_xdp_handle_request(struct work_struct *work)
|
||||
|
||||
mutex_lock(&tb->lock);
|
||||
if (tb->root_switch)
|
||||
uuid = tb->root_switch->uuid;
|
||||
uuid = kmemdup(tb->root_switch->uuid, sizeof(*uuid), GFP_KERNEL);
|
||||
else
|
||||
uuid = NULL;
|
||||
mutex_unlock(&tb->lock);
|
||||
@@ -880,6 +880,7 @@ static void tb_xdp_handle_request(struct work_struct *work)
|
||||
}
|
||||
|
||||
out:
|
||||
kfree(uuid);
|
||||
kfree(xw->pkg);
|
||||
kfree(xw);
|
||||
|
||||
@@ -2348,6 +2349,9 @@ static struct tb_xdomain *switch_find_xdomain(struct tb_switch *sw,
|
||||
{
|
||||
struct tb_port *port;
|
||||
|
||||
if (!sw)
|
||||
return NULL;
|
||||
|
||||
tb_switch_for_each_port(sw, port) {
|
||||
struct tb_xdomain *xd;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user