From: John Crispin <blo...@openwrt.org> Date: Mon, 7 Mar 2016 09:56:35 +0100
> +static int mtk_mdio_busy_wait(struct mtk_eth *eth) > +{ > + unsigned long t_start = jiffies; > + > + while (1) { > + if (!(mtk_r32(eth, MTK_PHY_IAC) & PHY_IAC_ACCESS)) > + return 0; > + if (time_after(jiffies, t_start + PHY_IAC_TIMEOUT)) > + break; > + } > + > + dev_err(eth->dev, "mdio: MDIO timeout\n"); > + return -1; > +} Busy polling in a loop for up to 5 seconds with no preemption points is not something you can do, sorry.