thunderbolt: Drop duplicated get_switch_at_route()
authorMika Westerberg <mika.westerberg@linux.intel.com>
Fri, 15 Mar 2019 12:56:21 +0000 (14:56 +0200)
committerMika Westerberg <mika.westerberg@linux.intel.com>
Thu, 18 Apr 2019 08:18:51 +0000 (11:18 +0300)
tb_switch_find_by_route() does the same already so use it instead and
remove duplicated get_switch_at_route().

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Reviewed-by: Lukas Wunner <lukas@wunner.de>
drivers/thunderbolt/icm.c
drivers/thunderbolt/switch.c
drivers/thunderbolt/tb.c
drivers/thunderbolt/tb.h

index 8b7f9131e9d1200e4652c0878ae2b44896db6e75..7c923e16a7d82b41532a0ddf0201289f2add1410 100644 (file)
@@ -798,9 +798,11 @@ icm_fr_xdomain_connected(struct tb *tb, const struct icm_pkg_header *hdr)
         * connected another host to the same port, remove the switch
         * first.
         */
-       sw = get_switch_at_route(tb->root_switch, route);
-       if (sw)
+       sw = tb_switch_find_by_route(tb, route);
+       if (sw) {
                remove_switch(sw);
+               tb_switch_put(sw);
+       }
 
        sw = tb_switch_find_by_link_depth(tb, link, depth);
        if (!sw) {
@@ -1143,9 +1145,11 @@ icm_tr_xdomain_connected(struct tb *tb, const struct icm_pkg_header *hdr)
         * connected another host to the same port, remove the switch
         * first.
         */
-       sw = get_switch_at_route(tb->root_switch, route);
-       if (sw)
+       sw = tb_switch_find_by_route(tb, route);
+       if (sw) {
                remove_switch(sw);
+               tb_switch_put(sw);
+       }
 
        sw = tb_switch_find_by_route(tb, get_parent_route(route));
        if (!sw) {
index 504365d468271351e56985c91c906dd3d500af98..5c2c0201ae7fcd38fd8b5c9f6d8def6879cb5896 100644 (file)
@@ -644,24 +644,6 @@ int tb_switch_reset(struct tb *tb, u64 route)
        return res.err;
 }
 
-struct tb_switch *get_switch_at_route(struct tb_switch *sw, u64 route)
-{
-       u8 next_port = route; /*
-                              * Routes use a stride of 8 bits,
-                              * eventhough a port index has 6 bits at most.
-                              * */
-       if (route == 0)
-               return sw;
-       if (next_port > sw->config.max_port_number)
-               return NULL;
-       if (tb_is_upstream_port(&sw->ports[next_port]))
-               return NULL;
-       if (!sw->ports[next_port].remote)
-               return NULL;
-       return get_switch_at_route(sw->ports[next_port].remote->sw,
-                                  route >> TB_ROUTE_SHIFT);
-}
-
 /**
  * tb_plug_events_active() - enable/disable plug events on a switch
  *
index 30e02c716f6c908f2dd3f11e0fd5bb5753776f6e..d8f4ed0f2ef8b1c884911dd827f22f542a931064 100644 (file)
@@ -258,7 +258,7 @@ static void tb_handle_hotplug(struct work_struct *work)
        if (!tcm->hotplug_active)
                goto out; /* during init, suspend or shutdown */
 
-       sw = get_switch_at_route(tb->root_switch, ev->route);
+       sw = tb_switch_find_by_route(tb, ev->route);
        if (!sw) {
                tb_warn(tb,
                        "hotplug event from non existent switch %llx:%x (unplug: %d)\n",
@@ -269,14 +269,14 @@ static void tb_handle_hotplug(struct work_struct *work)
                tb_warn(tb,
                        "hotplug event from non existent port %llx:%x (unplug: %d)\n",
                        ev->route, ev->port, ev->unplug);
-               goto out;
+               goto put_sw;
        }
        port = &sw->ports[ev->port];
        if (tb_is_upstream_port(port)) {
                tb_warn(tb,
                        "hotplug event for upstream port %llx:%x (unplug: %d)\n",
                        ev->route, ev->port, ev->unplug);
-               goto out;
+               goto put_sw;
        }
        if (ev->unplug) {
                if (port->remote) {
@@ -306,6 +306,9 @@ static void tb_handle_hotplug(struct work_struct *work)
                        tb_activate_pcie_devices(tb);
                }
        }
+
+put_sw:
+       tb_switch_put(sw);
 out:
        mutex_unlock(&tb->lock);
        kfree(ev);
index 8058ea02d5725a09cec49738272e9b4a3629b763..aea668c40d27d4f56a99324a648f54fdb691bb75 100644 (file)
@@ -399,7 +399,6 @@ void tb_switch_suspend(struct tb_switch *sw);
 int tb_switch_resume(struct tb_switch *sw);
 int tb_switch_reset(struct tb *tb, u64 route);
 void tb_sw_set_unplugged(struct tb_switch *sw);
-struct tb_switch *get_switch_at_route(struct tb_switch *sw, u64 route);
 struct tb_switch *tb_switch_find_by_link_depth(struct tb *tb, u8 link,
                                               u8 depth);
 struct tb_switch *tb_switch_find_by_uuid(struct tb *tb, const uuid_t *uuid);