Skip to content

Commit 8824d19

Browse files
Nikunj A. Dadhaniawesteri
authored andcommitted
thunderbolt: Disable ports that are not implemented
Commit 4caf251 ("thunderbolt: Add trivial .shutdown") exposes a bug in the Thunderbolt driver, that frees an unallocated id, resulting in the following spinlock bad magic bug. [ 20.633803] BUG: spinlock bad magic on CPU#4, halt/3313 [ 20.640030] lock: 0xffff92e6ad5c97e0, .magic: 00000000, .owner: <none>/-1, .owner_cpu: 0 [ 20.672139] Call Trace: [ 20.675032] dump_stack+0x97/0xdb [ 20.678950] ? spin_bug+0xa5/0xb0 [ 20.682865] do_raw_spin_lock+0x68/0x98 [ 20.687397] _raw_spin_lock_irqsave+0x3f/0x5d [ 20.692535] ida_destroy+0x4f/0x124 [ 20.696657] tb_switch_release+0x6d/0xfd [ 20.701295] device_release+0x2c/0x7d [ 20.705622] kobject_put+0x8e/0xac [ 20.709637] tb_stop+0x55/0x66 [ 20.713243] tb_domain_remove+0x36/0x62 [ 20.717774] nhi_remove+0x4d/0x58 Fix the issue by disabling ports that are enabled as per the EEPROM, but not implemented. While at it, update the kernel doc for the disabled field, to reflect this. Cc: stable@vger.kernel.org Fixes: 4caf251 ("thunderbolt: Add trivial .shutdown") Reported-by: Srikanth Nandamuri <srikanth.nandamuri@intel.com> Signed-off-by: Nikunj A. Dadhania <nikunj.dadhania@linux.intel.com> Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
1 parent d012a71 commit 8824d19

2 files changed

Lines changed: 2 additions & 1 deletion

File tree

drivers/thunderbolt/switch.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -684,6 +684,7 @@ static int tb_init_port(struct tb_port *port)
684684
if (res == -ENODEV) {
685685
tb_dbg(port->sw->tb, " Port %d: not implemented\n",
686686
port->port);
687+
port->disabled = true;
687688
return 0;
688689
}
689690
return res;

drivers/thunderbolt/tb.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ struct tb_switch {
186186
* @cap_adap: Offset of the adapter specific capability (%0 if not present)
187187
* @cap_usb4: Offset to the USB4 port capability (%0 if not present)
188188
* @port: Port number on switch
189-
* @disabled: Disabled by eeprom
189+
* @disabled: Disabled by eeprom or enabled but not implemented
190190
* @bonded: true if the port is bonded (two lanes combined as one)
191191
* @dual_link_port: If the switch is connected using two ports, points
192192
* to the other port.

0 commit comments

Comments
 (0)