|
@@ -716,6 +716,13 @@ static int tb_switch_set_authorized(struct tb_switch *sw, unsigned int val)
|
|
|
if (sw->authorized)
|
|
|
goto unlock;
|
|
|
|
|
|
+ /*
|
|
|
+ * Make sure there is no PCIe rescan ongoing when a new PCIe
|
|
|
+ * tunnel is created. Otherwise the PCIe rescan code might find
|
|
|
+ * the new tunnel too early.
|
|
|
+ */
|
|
|
+ pci_lock_rescan_remove();
|
|
|
+
|
|
|
switch (val) {
|
|
|
/* Approve switch */
|
|
|
case 1:
|
|
@@ -735,6 +742,8 @@ static int tb_switch_set_authorized(struct tb_switch *sw, unsigned int val)
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
+ pci_unlock_rescan_remove();
|
|
|
+
|
|
|
if (!ret) {
|
|
|
sw->authorized = val;
|
|
|
/* Notify status change to the userspace */
|