ar8216: reduce latency by inserting scheduling points into code hogging the CPU
Should reduce network related latency caused by accessing MIB counters Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
		| @@ -355,6 +355,7 @@ ar8xxx_reg_wait(struct ar8xxx_priv *priv, u32 reg, u32 mask, u32 val, | |||||||
| 			return 0; | 			return 0; | ||||||
|  |  | ||||||
| 		usleep_range(1000, 2000); | 		usleep_range(1000, 2000); | ||||||
|  | 		cond_resched(); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return -ETIMEDOUT; | 	return -ETIMEDOUT; | ||||||
| @@ -426,6 +427,7 @@ ar8xxx_mib_fetch_port_stat(struct ar8xxx_priv *priv, int port, bool flush) | |||||||
| 			mib_stats[i] = 0; | 			mib_stats[i] = 0; | ||||||
| 		else | 		else | ||||||
| 			mib_stats[i] += t; | 			mib_stats[i] += t; | ||||||
|  | 		cond_resched(); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -565,6 +567,7 @@ ar8216_wait_bit(struct ar8xxx_priv *priv, int reg, u32 mask, u32 val) | |||||||
| 			break; | 			break; | ||||||
|  |  | ||||||
| 		udelay(10); | 		udelay(10); | ||||||
|  | 		cond_resched(); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	pr_err("ar8216: timeout on reg %08x: %08x & %08x != %08x\n", | 	pr_err("ar8216: timeout on reg %08x: %08x & %08x != %08x\n", | ||||||
| @@ -730,8 +733,10 @@ ar8216_wait_atu_ready(struct ar8xxx_priv *priv, u16 r2, u16 r1) | |||||||
| { | { | ||||||
| 	int timeout = 20; | 	int timeout = 20; | ||||||
|  |  | ||||||
| 	while (ar8xxx_mii_read32(priv, r2, r1) & AR8216_ATU_ACTIVE && --timeout) | 	while (ar8xxx_mii_read32(priv, r2, r1) & AR8216_ATU_ACTIVE && --timeout) { | ||||||
| 		udelay(10); | 		udelay(10); | ||||||
|  | 		cond_resched(); | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	if (!timeout) | 	if (!timeout) | ||||||
| 		pr_err("ar8216: timeout waiting for atu to become ready\n"); | 		pr_err("ar8216: timeout waiting for atu to become ready\n"); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Felix Fietkau
					Felix Fietkau