kernel: 5.10: fix busy wait loop in mediatek PPE code
authorAdrian Schmutzler <freifunk@adrianschmutzler.de>
Tue, 16 Feb 2021 22:16:00 +0000 (23:16 +0100)
committerAdrian Schmutzler <freifunk@adrianschmutzler.de>
Tue, 16 Feb 2021 22:46:30 +0000 (23:46 +0100)
Reapply changes added to 5.4 but not copied to 5.10:
3da4acaa7bba ("kernel: fix busy wait loop in mediatek PPE code")

The intention is for the loop to timeout if the body does not succeed.
The current logic calls time_is_before_jiffies(timeout) which is false
until after the timeout, so the loop body never executes.

time_is_after_jiffies(timeout) will return true until timeout is less
than jiffies, which is the intended behavior here.

Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
target/linux/generic/pending-5.10/770-15-net-ethernet-mtk_eth_soc-add-support-for-initializin.patch

index fa4803211ab2477dac6e7d8f57f312b23060633c..09282175b0cccae1202720e245b9d1465b46329f 100644 (file)
@@ -185,7 +185,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 +{
 +      unsigned long timeout = jiffies + HZ;
 +
-+      while (time_is_before_jiffies(timeout)) {
++      while (time_is_after_jiffies(timeout)) {
 +              if (!(ppe_r32(ppe, MTK_PPE_GLO_CFG) & MTK_PPE_GLO_CFG_BUSY))
 +                      return 0;
 +