| What: /sys/kernel/config/thunderbolt/stream/<xdomain>.<service> |
| Date: Sep 2026 |
| KernelVersion: v7.2 |
| Contact: Mika Westerberg <mika.westerberg@linux.intel.com> |
| Description: |
| Configuration group for a stream Thunderbolt/USB4 |
| service. It is possible to create groups even if there |
| is no connection yet to the other host. Once a |
| connection established and there is stream service on |
| the remote side that matches, this configuration is |
| applied to it. |
| |
| To find the service name you can run tblist from tbtools [1]: |
| |
| # tblist -A |
| ... |
| Domain 0 Route 3 Index 0: stream |
| |
| [1] https://github.com/intel/tbtools |
| |
| What: /sys/kernel/config/thunderbolt/stream/<xdomain>.<service>/$name |
| Date: Sep 2026 |
| KernelVersion: v7.2 |
| Contact: Mika Westerberg <mika.westerberg@linux.intel.com> |
| Description: |
| Creates new stream with $name and fills it with the |
| default values. If there is an advertised remote stream |
| with the same name, uses its values as the default. |
| |
| What: /sys/kernel/config/thunderbolt/stream/<xdomain>.<service>/$name/busy_poll |
| Date: Nov 2026 |
| KernelVersion: v7.3 |
| Contact: Mika Westerberg <mika.westerberg@linux.intel.com> |
| Description: |
| Instead of using interrupts for completing the frames in |
| the TX/RX rings, busy poll them directly from the |
| read(2) and write(2) calls. This burns more CPU cycles |
| but provides lower latency for applications that need it. |
| |
| This also makes poll(2) return EPOLLERR because |
| interrupts do not provide wakeup anymore. Likewise a |
| blocking read(2) without available data busy-spins until |
| data arrives or a signal is received. |
| |
| What: /sys/kernel/config/thunderbolt/stream/<xdomain>.<service>/$name/index |
| Date: Sep 2026 |
| KernelVersion: v7.2 |
| Contact: Mika Westerberg <mika.westerberg@linux.intel.com> |
| Description: |
| This matches the X in /dev/tbstreamX and allows userspace |
| to map the configfs directory to the corresponding character |
| device. |
| |
| What: /sys/kernel/config/thunderbolt/stream/<xdomain>.<service>/$name/in_hopid |
| Date: Sep 2026 |
| KernelVersion: v7.2 |
| Contact: Mika Westerberg <mika.westerberg@linux.intel.com> |
| Description: |
| In HopID used with the read path of the tunnel. Available HopIDs |
| for tunneling start from 8. You can pass also -1 for automatic |
| allocation. The allocated value can be read here. Writing 0 will |
| de-allocate if the stream is not in use. |
| |
| To figure out the maximum HopID you can run tbget from |
| tbtools for the lane adapter. For example below we check |
| for lane adapter number 1 (first USB4 port): |
| |
| # tbget -r 0 -a 1 -D ADP_CS_5.Max\ Input\ HopID |
| 19 |
| |
| This allows to use anything between 8 and 19 inclusive. |
| |
| What: /sys/kernel/config/thunderbolt/stream/<xdomain>.<service>/$name/out_hopid |
| Date: Sep 2026 |
| KernelVersion: v7.2 |
| Contact: Mika Westerberg <mika.westerberg@linux.intel.com> |
| Description: |
| Out HopID used with the write path of the tunnel. Available HopIDs |
| for tunneling start from 8. You can pass also -1 for automatic |
| allocation. The allocated value can be read here. Writing 0 will |
| de-allocate if the stream is not in use. See @in_hopid |
| for how to figure out the maximum HopID. |
| |
| What: /sys/kernel/config/thunderbolt/stream/<xdomain>.<service>/$name/ring_size |
| Date: Sep 2026 |
| KernelVersion: v7.2 |
| Contact: Mika Westerberg <mika.westerberg@linux.intel.com> |
| Description: |
| Size of the TX/RX rings. Can be adjusted between 32 and |
| 4096. The default is 256. |
| |
| What: /sys/kernel/config/thunderbolt/stream/<xdomain>.<service>/$name/throttling |
| Date: Sep 2026 |
| KernelVersion: v7.2 |
| Contact: Mika Westerberg <mika.westerberg@linux.intel.com> |
| Description: |
| Interrupt throttling rate in ns. Lower values can give |
| better latency. The default is 8192 ns. |