浏览代码

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 <[email protected]>
Felix Fietkau 7 年之前
父节点
当前提交
17a955d4d7
共有 1 个文件被更改,包括 7 次插入2 次删除
  1. 7 2
      target/linux/generic/files/drivers/net/phy/ar8216.c

+ 7 - 2
target/linux/generic/files/drivers/net/phy/ar8216.c

@@ -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)
-                udelay(10);
+	while (ar8xxx_mii_read32(priv, r2, r1) & AR8216_ATU_ACTIVE && --timeout) {
+		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");