From: Adrian Schmutzler Date: Tue, 16 Feb 2021 22:16:00 +0000 (+0100) Subject: kernel: 5.10: fix busy wait loop in mediatek PPE code X-Git-Tag: v22.03.0-rc1~3480 X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fopenwrt.git;a=commitdiff_plain;h=99f2b464b4e550865c2a3288fa0b88db2869f798 kernel: 5.10: fix busy wait loop in mediatek PPE code 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 --- diff --git a/target/linux/generic/pending-5.10/770-15-net-ethernet-mtk_eth_soc-add-support-for-initializin.patch b/target/linux/generic/pending-5.10/770-15-net-ethernet-mtk_eth_soc-add-support-for-initializin.patch index fa4803211a..09282175b0 100644 --- a/target/linux/generic/pending-5.10/770-15-net-ethernet-mtk_eth_soc-add-support-for-initializin.patch +++ b/target/linux/generic/pending-5.10/770-15-net-ethernet-mtk_eth_soc-add-support-for-initializin.patch @@ -185,7 +185,7 @@ Signed-off-by: Felix Fietkau +{ + 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; +