mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 02:53:36 +02:00
Merge branch 'net-stmmac-drop-frames-causing-hlbs-error'
Rohan G Thomas says: ==================== net: stmmac: Drop frames causing HLBS error This patchset consists of following patchset to avoid netdev watchdog reset due to Head-of-Line Blocking due to EST scheduling error. 1. Drop those frames causing HLBS error 2. Add HLBS frame drops to taprio stats v2: https://lore.kernel.org/r/20250915-hlbs_2-v2-1-27266b2afdd9@altera.com ==================== Link: https://patch.msgid.link/20250925-hlbs_2-v3-0-3b39472776c2@altera.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
3806446f60
|
|
@ -228,6 +228,7 @@ struct stmmac_extra_stats {
|
|||
unsigned long mtl_est_btrlm;
|
||||
unsigned long max_sdu_txq_drop[MTL_MAX_TX_QUEUES];
|
||||
unsigned long mtl_est_txq_hlbf[MTL_MAX_TX_QUEUES];
|
||||
unsigned long mtl_est_txq_hlbs[MTL_MAX_TX_QUEUES];
|
||||
/* per queue statistics */
|
||||
struct stmmac_txq_stats txq_stats[MTL_MAX_TX_QUEUES];
|
||||
struct stmmac_rxq_stats rxq_stats[MTL_MAX_RX_QUEUES];
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ static int est_configure(struct stmmac_priv *priv, struct stmmac_est *cfg,
|
|||
EST_GMAC5_PTOV_SHIFT;
|
||||
}
|
||||
if (cfg->enable)
|
||||
ctrl |= EST_EEST | EST_SSWL;
|
||||
ctrl |= EST_EEST | EST_SSWL | EST_DFBS;
|
||||
else
|
||||
ctrl &= ~EST_EEST;
|
||||
|
||||
|
|
@ -109,6 +109,10 @@ static void est_irq_status(struct stmmac_priv *priv, struct net_device *dev,
|
|||
|
||||
x->mtl_est_hlbs++;
|
||||
|
||||
for (i = 0; i < txqcnt; i++)
|
||||
if (value & BIT(i))
|
||||
x->mtl_est_txq_hlbs[i]++;
|
||||
|
||||
/* Clear Interrupt */
|
||||
writel(value, est_addr + EST_SCH_ERR);
|
||||
|
||||
|
|
@ -131,10 +135,9 @@ static void est_irq_status(struct stmmac_priv *priv, struct net_device *dev,
|
|||
|
||||
x->mtl_est_hlbf++;
|
||||
|
||||
for (i = 0; i < txqcnt; i++) {
|
||||
for (i = 0; i < txqcnt; i++)
|
||||
if (feqn & BIT(i))
|
||||
x->mtl_est_txq_hlbf[i]++;
|
||||
}
|
||||
|
||||
/* Clear Interrupt */
|
||||
writel(feqn, est_addr + EST_FRM_SZ_ERR);
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
#define EST_XGMAC_PTOV_MUL 9
|
||||
#define EST_SSWL BIT(1)
|
||||
#define EST_EEST BIT(0)
|
||||
#define EST_DFBS BIT(5)
|
||||
|
||||
#define EST_STATUS 0x00000008
|
||||
#define EST_GMAC5_BTRL GENMASK(11, 8)
|
||||
|
|
|
|||
|
|
@ -1080,6 +1080,7 @@ static int tc_taprio_configure(struct stmmac_priv *priv,
|
|||
for (i = 0; i < priv->plat->tx_queues_to_use; i++) {
|
||||
priv->xstats.max_sdu_txq_drop[i] = 0;
|
||||
priv->xstats.mtl_est_txq_hlbf[i] = 0;
|
||||
priv->xstats.mtl_est_txq_hlbs[i] = 0;
|
||||
}
|
||||
mutex_unlock(&priv->est_lock);
|
||||
}
|
||||
|
|
@ -1097,7 +1098,8 @@ static void tc_taprio_stats(struct stmmac_priv *priv,
|
|||
|
||||
for (i = 0; i < priv->plat->tx_queues_to_use; i++)
|
||||
window_drops += priv->xstats.max_sdu_txq_drop[i] +
|
||||
priv->xstats.mtl_est_txq_hlbf[i];
|
||||
priv->xstats.mtl_est_txq_hlbf[i] +
|
||||
priv->xstats.mtl_est_txq_hlbs[i];
|
||||
qopt->stats.window_drops = window_drops;
|
||||
|
||||
/* Transmission overrun doesn't happen for stmmac, hence always 0 */
|
||||
|
|
@ -1111,7 +1113,8 @@ static void tc_taprio_queue_stats(struct stmmac_priv *priv,
|
|||
int queue = qopt->queue_stats.queue;
|
||||
|
||||
q_stats->stats.window_drops = priv->xstats.max_sdu_txq_drop[queue] +
|
||||
priv->xstats.mtl_est_txq_hlbf[queue];
|
||||
priv->xstats.mtl_est_txq_hlbf[queue] +
|
||||
priv->xstats.mtl_est_txq_hlbs[queue];
|
||||
|
||||
/* Transmission overrun doesn't happen for stmmac, hence always 0 */
|
||||
q_stats->stats.tx_overruns = 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user