]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 4.14
authorSasha Levin <sashal@kernel.org>
Fri, 8 Dec 2023 10:04:31 +0000 (05:04 -0500)
committerSasha Levin <sashal@kernel.org>
Fri, 8 Dec 2023 10:04:31 +0000 (05:04 -0500)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-4.14/drm-amdgpu-correct-chunk_ptr-to-a-pointer-to-chunk.patch [new file with mode: 0644]
queue-4.14/series [new file with mode: 0644]
queue-4.14/tg3-increment-tx_dropped-in-tg3_tso_bug.patch [new file with mode: 0644]
queue-4.14/tg3-move-the-rt-x_dropped-counters-to-tg3_napi.patch [new file with mode: 0644]

diff --git a/queue-4.14/drm-amdgpu-correct-chunk_ptr-to-a-pointer-to-chunk.patch b/queue-4.14/drm-amdgpu-correct-chunk_ptr-to-a-pointer-to-chunk.patch
new file mode 100644 (file)
index 0000000..c43ba0f
--- /dev/null
@@ -0,0 +1,40 @@
+From 811fe74b0c92ef5853a8d0bdd03b9fba7f86f262 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 31 Oct 2023 10:32:37 +0800
+Subject: drm/amdgpu: correct chunk_ptr to a pointer to chunk.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: YuanShang <YuanShang.Mao@amd.com>
+
+[ Upstream commit 50d51374b498457c4dea26779d32ccfed12ddaff ]
+
+The variable "chunk_ptr" should be a pointer pointing
+to a struct drm_amdgpu_cs_chunk instead of to a pointer
+of that.
+
+Signed-off-by: YuanShang <YuanShang.Mao@amd.com>
+Reviewed-by: Christian König <christian.koenig@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+index 7bad519aaae08..d24ef103471b9 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+@@ -113,7 +113,7 @@ static int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, void *data)
+       }
+       for (i = 0; i < p->nchunks; i++) {
+-              struct drm_amdgpu_cs_chunk __user **chunk_ptr = NULL;
++              struct drm_amdgpu_cs_chunk __user *chunk_ptr = NULL;
+               struct drm_amdgpu_cs_chunk user_chunk;
+               uint32_t __user *cdata;
+-- 
+2.42.0
+
diff --git a/queue-4.14/series b/queue-4.14/series
new file mode 100644 (file)
index 0000000..9bb4791
--- /dev/null
@@ -0,0 +1,3 @@
+tg3-move-the-rt-x_dropped-counters-to-tg3_napi.patch
+tg3-increment-tx_dropped-in-tg3_tso_bug.patch
+drm-amdgpu-correct-chunk_ptr-to-a-pointer-to-chunk.patch
diff --git a/queue-4.14/tg3-increment-tx_dropped-in-tg3_tso_bug.patch b/queue-4.14/tg3-increment-tx_dropped-in-tg3_tso_bug.patch
new file mode 100644 (file)
index 0000000..a17c1f8
--- /dev/null
@@ -0,0 +1,41 @@
+From f0c5a3a90e6275bd30701848aeee1b67b025e05a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 13 Nov 2023 10:23:50 -0800
+Subject: tg3: Increment tx_dropped in tg3_tso_bug()
+
+From: Alex Pakhunov <alexey.pakhunov@spacex.com>
+
+[ Upstream commit 17dd5efe5f36a96bd78012594fabe21efb01186b ]
+
+tg3_tso_bug() drops a packet if it cannot be segmented for any reason.
+The number of discarded frames should be incremented accordingly.
+
+Signed-off-by: Alex Pakhunov <alexey.pakhunov@spacex.com>
+Signed-off-by: Vincent Wong <vincent.wong2@spacex.com>
+Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
+Link: https://lore.kernel.org/r/20231113182350.37472-2-alexey.pakhunov@spacex.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/broadcom/tg3.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
+index 96c7a452a4a97..dc27c81ad5129 100644
+--- a/drivers/net/ethernet/broadcom/tg3.c
++++ b/drivers/net/ethernet/broadcom/tg3.c
+@@ -7872,8 +7872,10 @@ static int tg3_tso_bug(struct tg3 *tp, struct tg3_napi *tnapi,
+       segs = skb_gso_segment(skb, tp->dev->features &
+                                   ~(NETIF_F_TSO | NETIF_F_TSO6));
+-      if (IS_ERR(segs) || !segs)
++      if (IS_ERR(segs) || !segs) {
++              tnapi->tx_dropped++;
+               goto tg3_tso_bug_end;
++      }
+       do {
+               nskb = segs;
+-- 
+2.42.0
+
diff --git a/queue-4.14/tg3-move-the-rt-x_dropped-counters-to-tg3_napi.patch b/queue-4.14/tg3-move-the-rt-x_dropped-counters-to-tg3_napi.patch
new file mode 100644 (file)
index 0000000..122e542
--- /dev/null
@@ -0,0 +1,139 @@
+From 06630e3411bba02bc134c744659eaceebd502f76 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 13 Nov 2023 10:23:49 -0800
+Subject: tg3: Move the [rt]x_dropped counters to tg3_napi
+
+From: Alex Pakhunov <alexey.pakhunov@spacex.com>
+
+[ Upstream commit 907d1bdb8b2cc0357d03a1c34d2a08d9943760b1 ]
+
+This change moves [rt]x_dropped counters to tg3_napi so that they can be
+updated by a single writer, race-free.
+
+Signed-off-by: Alex Pakhunov <alexey.pakhunov@spacex.com>
+Signed-off-by: Vincent Wong <vincent.wong2@spacex.com>
+Reviewed-by: Michael Chan <michael.chan@broadcom.com>
+Link: https://lore.kernel.org/r/20231113182350.37472-1-alexey.pakhunov@spacex.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/broadcom/tg3.c | 38 +++++++++++++++++++++++++----
+ drivers/net/ethernet/broadcom/tg3.h |  4 +--
+ 2 files changed, 35 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
+index fa89d71336c6a..96c7a452a4a97 100644
+--- a/drivers/net/ethernet/broadcom/tg3.c
++++ b/drivers/net/ethernet/broadcom/tg3.c
+@@ -6844,7 +6844,7 @@ static int tg3_rx(struct tg3_napi *tnapi, int budget)
+                                      desc_idx, *post_ptr);
+               drop_it_no_recycle:
+                       /* Other statistics kept track of by card. */
+-                      tp->rx_dropped++;
++                      tnapi->rx_dropped++;
+                       goto next_pkt;
+               }
+@@ -8146,7 +8146,7 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
+ drop:
+       dev_kfree_skb_any(skb);
+ drop_nofree:
+-      tp->tx_dropped++;
++      tnapi->tx_dropped++;
+       return NETDEV_TX_OK;
+ }
+@@ -9324,7 +9324,7 @@ static void __tg3_set_rx_mode(struct net_device *);
+ /* tp->lock is held. */
+ static int tg3_halt(struct tg3 *tp, int kind, bool silent)
+ {
+-      int err;
++      int err, i;
+       tg3_stop_fw(tp);
+@@ -9345,6 +9345,13 @@ static int tg3_halt(struct tg3 *tp, int kind, bool silent)
+               /* And make sure the next sample is new data */
+               memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
++
++              for (i = 0; i < TG3_IRQ_MAX_VECS; ++i) {
++                      struct tg3_napi *tnapi = &tp->napi[i];
++
++                      tnapi->rx_dropped = 0;
++                      tnapi->tx_dropped = 0;
++              }
+       }
+       return err;
+@@ -11888,6 +11895,9 @@ static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats)
+ {
+       struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev;
+       struct tg3_hw_stats *hw_stats = tp->hw_stats;
++      unsigned long rx_dropped;
++      unsigned long tx_dropped;
++      int i;
+       stats->rx_packets = old_stats->rx_packets +
+               get_stat64(&hw_stats->rx_ucast_packets) +
+@@ -11934,8 +11944,26 @@ static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats)
+       stats->rx_missed_errors = old_stats->rx_missed_errors +
+               get_stat64(&hw_stats->rx_discards);
+-      stats->rx_dropped = tp->rx_dropped;
+-      stats->tx_dropped = tp->tx_dropped;
++      /* Aggregate per-queue counters. The per-queue counters are updated
++       * by a single writer, race-free. The result computed by this loop
++       * might not be 100% accurate (counters can be updated in the middle of
++       * the loop) but the next tg3_get_nstats() will recompute the current
++       * value so it is acceptable.
++       *
++       * Note that these counters wrap around at 4G on 32bit machines.
++       */
++      rx_dropped = (unsigned long)(old_stats->rx_dropped);
++      tx_dropped = (unsigned long)(old_stats->tx_dropped);
++
++      for (i = 0; i < tp->irq_cnt; i++) {
++              struct tg3_napi *tnapi = &tp->napi[i];
++
++              rx_dropped += tnapi->rx_dropped;
++              tx_dropped += tnapi->tx_dropped;
++      }
++
++      stats->rx_dropped = rx_dropped;
++      stats->tx_dropped = tx_dropped;
+ }
+ static int tg3_get_regs_len(struct net_device *dev)
+diff --git a/drivers/net/ethernet/broadcom/tg3.h b/drivers/net/ethernet/broadcom/tg3.h
+index b057f71aed48a..b1eafa9929bac 100644
+--- a/drivers/net/ethernet/broadcom/tg3.h
++++ b/drivers/net/ethernet/broadcom/tg3.h
+@@ -3005,6 +3005,7 @@ struct tg3_napi {
+       u16                             *rx_rcb_prod_idx;
+       struct tg3_rx_prodring_set      prodring;
+       struct tg3_rx_buffer_desc       *rx_rcb;
++      unsigned long                   rx_dropped;
+       u32                             tx_prod ____cacheline_aligned;
+       u32                             tx_cons;
+@@ -3013,6 +3014,7 @@ struct tg3_napi {
+       u32                             prodmbox;
+       struct tg3_tx_buffer_desc       *tx_ring;
+       struct tg3_tx_ring_info         *tx_buffers;
++      unsigned long                   tx_dropped;
+       dma_addr_t                      status_mapping;
+       dma_addr_t                      rx_rcb_mapping;
+@@ -3206,8 +3208,6 @@ struct tg3 {
+       /* begin "everything else" cacheline(s) section */
+-      unsigned long                   rx_dropped;
+-      unsigned long                   tx_dropped;
+       struct rtnl_link_stats64        net_stats_prev;
+       struct tg3_ethtool_stats        estats_prev;
+-- 
+2.42.0
+