mirror of
https://github.com/torvalds/linux.git
synced 2026-10-16 04:39:02 +02:00
Using interrupts and scheduling workers increase latency so latency critical applications may want to avoid that. Make this possible in USB4STREAM by adding a new ConfigFS attribute: busy_poll that, when activated switches the rings to polling mode. The cost for lower latency is that this burns more CPU cycles and things like poll(2) cannot be used. Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
99 lines
3.6 KiB
Plaintext
99 lines
3.6 KiB
Plaintext
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.
|