* [PATCH 1/2] thunderbolt: Fix calculation of consumed USB3 bandwidth on a path
@ 2024-04-08 13:00 Mika Westerberg
2024-04-08 13:00 ` [PATCH 2/2] thunderbolt: Allow USB3 bandwidth to be lower than maximum supported Mika Westerberg
2024-04-12 6:51 ` [PATCH 1/2] thunderbolt: Fix calculation of consumed USB3 bandwidth on a path Mika Westerberg
0 siblings, 2 replies; 3+ messages in thread
From: Mika Westerberg @ 2024-04-08 13:00 UTC (permalink / raw)
To: Yehezkel Bernat, Michael Jamet, Lukas Wunner, Andreas Noever
Cc: Gil Fine, linux-usb, Mika Westerberg
From: Gil Fine <gil.fine@linux.intel.com>
Currently, when setup a new USB3 tunnel that is starting from downstream USB3
adapter of first depth router (or deeper), to upstream USB3 adapter of a second
depth router (or deeper), we calculate consumed bandwidth. For this calculation
we take into account first USB3 tunnel consumed bandwidth while we shouldn't,
because we just recalculating the first USB3 tunnel allocated bandwidth.
Fix that, so that more bandwidth is available for the new USB3 tunnel being
setup.
While there, fix the kernel-doc to decribe more accurately the purpose of the
function.
Signed-off-by: Gil Fine <gil.fine@linux.intel.com>
Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
---
drivers/thunderbolt/tb.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/drivers/thunderbolt/tb.c b/drivers/thunderbolt/tb.c
index 3e44c78ac409..10e719dd837c 100644
--- a/drivers/thunderbolt/tb.c
+++ b/drivers/thunderbolt/tb.c
@@ -498,8 +498,9 @@ static struct tb_tunnel *tb_find_first_usb3_tunnel(struct tb *tb,
* @consumed_down: Consumed downstream bandwidth (Mb/s)
*
* Calculates consumed USB3 and PCIe bandwidth at @port between path
- * from @src_port to @dst_port. Does not take tunnel starting from
- * @src_port and ending from @src_port into account.
+ * from @src_port to @dst_port. Does not take USB3 tunnel starting from
+ * @src_port and ending on @src_port into account because that bandwidth is
+ * already included in as part of the "first hop" USB3 tunnel.
*/
static int tb_consumed_usb3_pcie_bandwidth(struct tb *tb,
struct tb_port *src_port,
@@ -514,8 +515,8 @@ static int tb_consumed_usb3_pcie_bandwidth(struct tb *tb,
*consumed_up = *consumed_down = 0;
tunnel = tb_find_first_usb3_tunnel(tb, src_port, dst_port);
- if (tunnel && tunnel->src_port != src_port &&
- tunnel->dst_port != dst_port) {
+ if (tunnel && !tb_port_is_usb3_down(src_port) &&
+ !tb_port_is_usb3_up(dst_port)) {
int ret;
ret = tb_tunnel_consumed_bandwidth(tunnel, consumed_up,
--
2.43.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH 2/2] thunderbolt: Allow USB3 bandwidth to be lower than maximum supported
2024-04-08 13:00 [PATCH 1/2] thunderbolt: Fix calculation of consumed USB3 bandwidth on a path Mika Westerberg
@ 2024-04-08 13:00 ` Mika Westerberg
2024-04-12 6:51 ` [PATCH 1/2] thunderbolt: Fix calculation of consumed USB3 bandwidth on a path Mika Westerberg
1 sibling, 0 replies; 3+ messages in thread
From: Mika Westerberg @ 2024-04-08 13:00 UTC (permalink / raw)
To: Yehezkel Bernat, Michael Jamet, Lukas Wunner, Andreas Noever
Cc: Gil Fine, linux-usb, Mika Westerberg
From: Gil Fine <gil.fine@linux.intel.com>
Currently USB3 tunnel setup fails if USB4 link available bandwidth is too low
to allow USB3 Maximum Supported Link Rate. In reality, this limitation is not
needed, and may cause failure of USB3 tunnel establishment, if USB4 link
available bandwidth is lower than USB3 Maximum Supported Link Rate. E.g. if we
connect to USB4 v1 host router, a USB4 v1 device router, via 10 Gb/s cable.
Hence, here we discard this limitation, and now we only limit USB3 bandwidth
allocation to be not higher than 90% of USB3 Max Supported Link Rate (for first
USB3 tunnel only).
Signed-off-by: Gil Fine <gil.fine@linux.intel.com>
Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
---
drivers/thunderbolt/tunnel.c | 25 ++++++++++---------------
1 file changed, 10 insertions(+), 15 deletions(-)
diff --git a/drivers/thunderbolt/tunnel.c b/drivers/thunderbolt/tunnel.c
index cb6609a56a03..fdc5e8e12ca8 100644
--- a/drivers/thunderbolt/tunnel.c
+++ b/drivers/thunderbolt/tunnel.c
@@ -2064,26 +2064,21 @@ struct tb_tunnel *tb_tunnel_alloc_usb3(struct tb *tb, struct tb_port *up,
{
struct tb_tunnel *tunnel;
struct tb_path *path;
- int max_rate = 0;
+ int max_rate;
- /*
- * Check that we have enough bandwidth available for the new
- * USB3 tunnel.
- */
- if (max_up > 0 || max_down > 0) {
+ if (!tb_route(down->sw) && (max_up > 0 || max_down > 0)) {
+ /*
+ * For USB3 isochronous transfers, we allow bandwidth which is
+ * not higher than 90% of maximum supported bandwidth by USB3
+ * adapters.
+ */
max_rate = tb_usb3_max_link_rate(down, up);
if (max_rate < 0)
return NULL;
- /* Only 90% can be allocated for USB3 isochronous transfers */
max_rate = max_rate * 90 / 100;
- tb_port_dbg(up, "required bandwidth for USB3 tunnel %d Mb/s\n",
+ tb_port_dbg(up, "maximum required bandwidth for USB3 tunnel %d Mb/s\n",
max_rate);
-
- if (max_rate > max_up || max_rate > max_down) {
- tb_port_warn(up, "not enough bandwidth for USB3 tunnel\n");
- return NULL;
- }
}
tunnel = tb_tunnel_alloc(tb, 2, TB_TUNNEL_USB3);
@@ -2115,8 +2110,8 @@ struct tb_tunnel *tb_tunnel_alloc_usb3(struct tb *tb, struct tb_port *up,
tunnel->paths[TB_USB3_PATH_UP] = path;
if (!tb_route(down->sw)) {
- tunnel->allocated_up = max_rate;
- tunnel->allocated_down = max_rate;
+ tunnel->allocated_up = min(max_rate, max_up);
+ tunnel->allocated_down = min(max_rate, max_down);
tunnel->init = tb_usb3_init;
tunnel->consumed_bandwidth = tb_usb3_consumed_bandwidth;
--
2.43.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH 1/2] thunderbolt: Fix calculation of consumed USB3 bandwidth on a path
2024-04-08 13:00 [PATCH 1/2] thunderbolt: Fix calculation of consumed USB3 bandwidth on a path Mika Westerberg
2024-04-08 13:00 ` [PATCH 2/2] thunderbolt: Allow USB3 bandwidth to be lower than maximum supported Mika Westerberg
@ 2024-04-12 6:51 ` Mika Westerberg
1 sibling, 0 replies; 3+ messages in thread
From: Mika Westerberg @ 2024-04-12 6:51 UTC (permalink / raw)
To: Yehezkel Bernat, Michael Jamet, Lukas Wunner, Andreas Noever
Cc: Gil Fine, linux-usb
On Mon, Apr 08, 2024 at 04:00:30PM +0300, Mika Westerberg wrote:
> From: Gil Fine <gil.fine@linux.intel.com>
>
> Currently, when setup a new USB3 tunnel that is starting from downstream USB3
> adapter of first depth router (or deeper), to upstream USB3 adapter of a second
> depth router (or deeper), we calculate consumed bandwidth. For this calculation
> we take into account first USB3 tunnel consumed bandwidth while we shouldn't,
> because we just recalculating the first USB3 tunnel allocated bandwidth.
>
> Fix that, so that more bandwidth is available for the new USB3 tunnel being
> setup.
>
> While there, fix the kernel-doc to decribe more accurately the purpose of the
> function.
>
> Signed-off-by: Gil Fine <gil.fine@linux.intel.com>
> Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Both applied to thunderbolt.git/next.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-04-12 6:51 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-04-08 13:00 [PATCH 1/2] thunderbolt: Fix calculation of consumed USB3 bandwidth on a path Mika Westerberg
2024-04-08 13:00 ` [PATCH 2/2] thunderbolt: Allow USB3 bandwidth to be lower than maximum supported Mika Westerberg
2024-04-12 6:51 ` [PATCH 1/2] thunderbolt: Fix calculation of consumed USB3 bandwidth on a path Mika Westerberg
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).