]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.19-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 20 Jul 2023 17:02:17 +0000 (19:02 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 20 Jul 2023 17:02:17 +0000 (19:02 +0200)
added patches:
net-lan743x-don-t-sleep-in-atomic-context.patch

queue-4.19/net-lan743x-don-t-sleep-in-atomic-context.patch [new file with mode: 0644]
queue-4.19/series

diff --git a/queue-4.19/net-lan743x-don-t-sleep-in-atomic-context.patch b/queue-4.19/net-lan743x-don-t-sleep-in-atomic-context.patch
new file mode 100644 (file)
index 0000000..90db667
--- /dev/null
@@ -0,0 +1,72 @@
+From 7a8227b2e76be506b2ac64d2beac950ca04892a5 Mon Sep 17 00:00:00 2001
+From: Moritz Fischer <moritzf@google.com>
+Date: Tue, 27 Jun 2023 03:50:00 +0000
+Subject: net: lan743x: Don't sleep in atomic context
+
+From: Moritz Fischer <moritzf@google.com>
+
+commit 7a8227b2e76be506b2ac64d2beac950ca04892a5 upstream.
+
+dev_set_rx_mode() grabs a spin_lock, and the lan743x implementation
+proceeds subsequently to go to sleep using readx_poll_timeout().
+
+Introduce a helper wrapping the readx_poll_timeout_atomic() function
+and use it to replace the calls to readx_polL_timeout().
+
+Fixes: 23f0703c125b ("lan743x: Add main source files for new lan743x driver")
+Cc: stable@vger.kernel.org
+Cc: Bryan Whitehead <bryan.whitehead@microchip.com>
+Cc: UNGLinuxDriver@microchip.com
+Signed-off-by: Moritz Fischer <moritzf@google.com>
+Reviewed-by: Andrew Lunn <andrew@lunn.ch>
+Link: https://lore.kernel.org/r/20230627035000.1295254-1-moritzf@google.com
+Signed-off-by: Paolo Abeni <pabeni@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/ethernet/microchip/lan743x_main.c |   21 +++++++++++++++++----
+ 1 file changed, 17 insertions(+), 4 deletions(-)
+
+--- a/drivers/net/ethernet/microchip/lan743x_main.c
++++ b/drivers/net/ethernet/microchip/lan743x_main.c
+@@ -80,6 +80,18 @@ static int lan743x_csr_light_reset(struc
+                                 !(data & HW_CFG_LRST_), 100000, 10000000);
+ }
++static int lan743x_csr_wait_for_bit_atomic(struct lan743x_adapter *adapter,
++                                         int offset, u32 bit_mask,
++                                         int target_value, int udelay_min,
++                                         int udelay_max, int count)
++{
++      u32 data;
++
++      return readx_poll_timeout_atomic(LAN743X_CSR_READ_OP, offset, data,
++                                       target_value == !!(data & bit_mask),
++                                       udelay_max, udelay_min * count);
++}
++
+ static int lan743x_csr_wait_for_bit(struct lan743x_adapter *adapter,
+                                   int offset, u32 bit_mask,
+                                   int target_value, int usleep_min,
+@@ -675,8 +687,8 @@ static int lan743x_dp_write(struct lan74
+       u32 dp_sel;
+       int i;
+-      if (lan743x_csr_wait_for_bit(adapter, DP_SEL, DP_SEL_DPRDY_,
+-                                   1, 40, 100, 100))
++      if (lan743x_csr_wait_for_bit_atomic(adapter, DP_SEL, DP_SEL_DPRDY_,
++                                          1, 40, 100, 100))
+               return -EIO;
+       dp_sel = lan743x_csr_read(adapter, DP_SEL);
+       dp_sel &= ~DP_SEL_MASK_;
+@@ -687,8 +699,9 @@ static int lan743x_dp_write(struct lan74
+               lan743x_csr_write(adapter, DP_ADDR, addr + i);
+               lan743x_csr_write(adapter, DP_DATA_0, buf[i]);
+               lan743x_csr_write(adapter, DP_CMD, DP_CMD_WRITE_);
+-              if (lan743x_csr_wait_for_bit(adapter, DP_SEL, DP_SEL_DPRDY_,
+-                                           1, 40, 100, 100))
++              if (lan743x_csr_wait_for_bit_atomic(adapter, DP_SEL,
++                                                  DP_SEL_DPRDY_,
++                                                  1, 40, 100, 100))
+                       return -EIO;
+       }
index ae4e36dbf208d60f4247311e752cf97779452e2e..fa70ff8c43c76d65ebe491febb702f82c716fffc 100644 (file)
@@ -134,3 +134,4 @@ netfilter-nf_tables-unbind-non-anonymous-set-if-rule-construction-fails.patch
 netfilter-nf_tables-fix-scheduling-while-atomic-splat.patch
 netfilter-conntrack-avoid-nf_ct_helper_hash-uses-after-free.patch
 netfilter-nf_tables-prevent-oob-access-in-nft_byteorder_eval.patch
+net-lan743x-don-t-sleep-in-atomic-context.patch