123456789101112131415161718192021222324252627282930313233343536373839404142 |
- From: Felix Fietkau <[email protected]>
- Date: Wed, 29 Mar 2023 16:02:54 +0200
- Subject: [PATCH] net: ethernet: mtk_eth_soc: fix remaining throughput
- regression
- Based on further tests, it seems that the QDMA shaper is not able to
- perform shaping close to the MAC link rate without throughput loss.
- This cannot be compensated by increasing the shaping rate, so it seems
- to be an internal limit.
- Fix the remaining throughput regression by detecting that condition and
- limiting shaping to ports with lower link speed.
- This patch intentionally ignores link speed gain from TRGMII, because
- even on such links, shaping to 1000 Mbit/s incurs some throughput
- degradation.
- Fixes: f63959c7eec3 ("net: ethernet: mtk_eth_soc: implement multi-queue support for per-port queues")
- Reported-by: Frank Wunderlich <[email protected]>
- Signed-off-by: Felix Fietkau <[email protected]>
- ---
- --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
- +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
- @@ -766,6 +766,7 @@ static void mtk_mac_link_up(struct phyli
- MAC_MCR_FORCE_RX_FC);
-
- /* Configure speed */
- + mac->speed = speed;
- switch (speed) {
- case SPEED_2500:
- case SPEED_1000:
- @@ -3344,6 +3345,9 @@ found:
- if (dp->index >= MTK_QDMA_NUM_QUEUES)
- return NOTIFY_DONE;
-
- + if (mac->speed > 0 && mac->speed <= s.base.speed)
- + s.base.speed = 0;
- +
- mtk_set_queue_speed(eth, dp->index + 3, s.base.speed);
-
- return NOTIFY_DONE;
|