From b5d0d94a4cefdf9148c3ef202a0cb5a514e19991 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 12 Mar 2021 13:41:06 +0100 Subject: [PATCH] 4.14-stable patches added patches: net-mlx4_en-update-moderation-when-config-reset.patch net-stmmac-fix-incorrect-dma-channel-intr-enable-setting-of-eqos-v4.10.patch --- ...-update-moderation-when-config-reset.patch | 80 +++++++++++++++++++ ...el-intr-enable-setting-of-eqos-v4.10.patch | 57 +++++++++++++ queue-4.14/series | 2 + 3 files changed, 139 insertions(+) create mode 100644 queue-4.14/net-mlx4_en-update-moderation-when-config-reset.patch create mode 100644 queue-4.14/net-stmmac-fix-incorrect-dma-channel-intr-enable-setting-of-eqos-v4.10.patch diff --git a/queue-4.14/net-mlx4_en-update-moderation-when-config-reset.patch b/queue-4.14/net-mlx4_en-update-moderation-when-config-reset.patch new file mode 100644 index 00000000000..e62f937581f --- /dev/null +++ b/queue-4.14/net-mlx4_en-update-moderation-when-config-reset.patch @@ -0,0 +1,80 @@ +From 00ff801bb8ce6711e919af4530b6ffa14a22390a Mon Sep 17 00:00:00 2001 +From: "Kevin(Yudong) Yang" +Date: Wed, 3 Mar 2021 09:43:54 -0500 +Subject: net/mlx4_en: update moderation when config reset + +From: Kevin(Yudong) Yang + +commit 00ff801bb8ce6711e919af4530b6ffa14a22390a upstream. + +This patch fixes a bug that the moderation config will not be +applied when calling mlx4_en_reset_config. For example, when +turning on rx timestamping, mlx4_en_reset_config() will be called, +causing the NIC to forget previous moderation config. + +This fix is in phase with a previous fix: +commit 79c54b6bbf06 ("net/mlx4_en: Fix TX moderation info loss +after set_ringparam is called") + +Tested: Before this patch, on a host with NIC using mlx4, run +netserver and stream TCP to the host at full utilization. +$ sar -I SUM 1 + INTR intr/s +14:03:56 sum 48758.00 + +After rx hwtstamp is enabled: +$ sar -I SUM 1 +14:10:38 sum 317771.00 +We see the moderation is not working properly and issued 7x more +interrupts. + +After the patch, and turned on rx hwtstamp, the rate of interrupts +is as expected: +$ sar -I SUM 1 +14:52:11 sum 49332.00 + +Fixes: 79c54b6bbf06 ("net/mlx4_en: Fix TX moderation info loss after set_ringparam is called") +Signed-off-by: Kevin(Yudong) Yang +Reviewed-by: Eric Dumazet +Reviewed-by: Neal Cardwell +CC: Tariq Toukan +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/mellanox/mlx4/en_ethtool.c | 2 +- + drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 2 ++ + drivers/net/ethernet/mellanox/mlx4/mlx4_en.h | 1 + + 3 files changed, 4 insertions(+), 1 deletion(-) + +--- a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c ++++ b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c +@@ -47,7 +47,7 @@ + #define EN_ETHTOOL_SHORT_MASK cpu_to_be16(0xffff) + #define EN_ETHTOOL_WORD_MASK cpu_to_be32(0xffffffff) + +-static int mlx4_en_moderation_update(struct mlx4_en_priv *priv) ++int mlx4_en_moderation_update(struct mlx4_en_priv *priv) + { + int i, t; + int err = 0; +--- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c ++++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c +@@ -3673,6 +3673,8 @@ int mlx4_en_reset_config(struct net_devi + en_err(priv, "Failed starting port\n"); + } + ++ if (!err) ++ err = mlx4_en_moderation_update(priv); + out: + mutex_unlock(&mdev->state_lock); + kfree(tmp); +--- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h ++++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h +@@ -789,6 +789,7 @@ void mlx4_en_ptp_overflow_check(struct m + #define DEV_FEATURE_CHANGED(dev, new_features, feature) \ + ((dev->features & feature) ^ (new_features & feature)) + ++int mlx4_en_moderation_update(struct mlx4_en_priv *priv); + int mlx4_en_reset_config(struct net_device *dev, + struct hwtstamp_config ts_config, + netdev_features_t new_features); diff --git a/queue-4.14/net-stmmac-fix-incorrect-dma-channel-intr-enable-setting-of-eqos-v4.10.patch b/queue-4.14/net-stmmac-fix-incorrect-dma-channel-intr-enable-setting-of-eqos-v4.10.patch new file mode 100644 index 00000000000..070f2164a7b --- /dev/null +++ b/queue-4.14/net-stmmac-fix-incorrect-dma-channel-intr-enable-setting-of-eqos-v4.10.patch @@ -0,0 +1,57 @@ +From 879c348c35bb5fb758dd881d8a97409c1862dae8 Mon Sep 17 00:00:00 2001 +From: Ong Boon Leong +Date: Wed, 3 Mar 2021 20:38:40 +0530 +Subject: net: stmmac: fix incorrect DMA channel intr enable setting of EQoS v4.10 + +From: Ong Boon Leong + +commit 879c348c35bb5fb758dd881d8a97409c1862dae8 upstream. + +We introduce dwmac410_dma_init_channel() here for both EQoS v4.10 and +above which use different DMA_CH(n)_Interrupt_Enable bit definitions for +NIE and AIE. + +Fixes: 48863ce5940f ("stmmac: add DMA support for GMAC 4.xx") +Signed-off-by: Ong Boon Leong +Signed-off-by: Ramesh Babu B +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c | 19 ++++++++++++++++++- + 1 file changed, 18 insertions(+), 1 deletion(-) + +--- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c ++++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c +@@ -115,6 +115,23 @@ static void dwmac4_dma_init_channel(void + ioaddr + DMA_CHAN_INTR_ENA(chan)); + } + ++static void dwmac410_dma_init_channel(void __iomem *ioaddr, ++ struct stmmac_dma_cfg *dma_cfg, u32 chan) ++{ ++ u32 value; ++ ++ /* common channel control register config */ ++ value = readl(ioaddr + DMA_CHAN_CONTROL(chan)); ++ if (dma_cfg->pblx8) ++ value = value | DMA_BUS_MODE_PBL; ++ ++ writel(value, ioaddr + DMA_CHAN_CONTROL(chan)); ++ ++ /* Mask interrupts by writing to CSR7 */ ++ writel(DMA_CHAN_INTR_DEFAULT_MASK_4_10, ++ ioaddr + DMA_CHAN_INTR_ENA(chan)); ++} ++ + static void dwmac4_dma_init(void __iomem *ioaddr, + struct stmmac_dma_cfg *dma_cfg, + u32 dma_tx, u32 dma_rx, int atds) +@@ -416,7 +433,7 @@ const struct stmmac_dma_ops dwmac4_dma_o + const struct stmmac_dma_ops dwmac410_dma_ops = { + .reset = dwmac4_dma_reset, + .init = dwmac4_dma_init, +- .init_chan = dwmac4_dma_init_channel, ++ .init_chan = dwmac410_dma_init_channel, + .init_rx_chan = dwmac4_dma_init_rx_chan, + .init_tx_chan = dwmac4_dma_init_tx_chan, + .axi = dwmac4_dma_axi, diff --git a/queue-4.14/series b/queue-4.14/series index a6c3afed10d..da9f9629324 100644 --- a/queue-4.14/series +++ b/queue-4.14/series @@ -13,3 +13,5 @@ cifs-return-proper-error-code-in-statfs-2.patch scripts-recordmcount.-c-pl-support-ffunction-sections-.text.-section-names.patch revert-mm-slub-consider-rest-of-partial-list-if-acquire_slab-fails.patch sh_eth-fix-trscer-mask-for-sh771x.patch +net-mlx4_en-update-moderation-when-config-reset.patch +net-stmmac-fix-incorrect-dma-channel-intr-enable-setting-of-eqos-v4.10.patch -- 2.47.3