Thread (2 messages) 2 messages, 2 authors, 2009-01-30

Re: [PATCH 1/5] forcedeth: mgmt unit interface

From: Andrew Morton <akpm@linux-foundation.org>
Date: 2009-01-30 22:36:24

On Fri, 30 Jan 2009 13:56:26 -0500
Ayaz Abdulla [off-list ref] wrote:
+static int nv_mgmt_get_version(struct net_device *dev)
+{
+	struct fe_priv *np = netdev_priv(dev);
+	u8 __iomem *base = get_hwbase(dev);
+	u32 data_ready = readl(base + NvRegTransmitterControl);
+	u32 data_ready2;
+	int i;
+
+	writel(NVREG_MGMTUNITGETVERSION, base + NvRegMgmtUnitGetVersion);
+	writel(data_ready ^ NVREG_XMITCTL_DATA_START, base + NvRegTransmitterControl);
+	for (i = 0; i < 100000; i++) {
+		data_ready2 = readl(base + NvRegTransmitterControl);
+		if ((data_ready & NVREG_XMITCTL_DATA_READY) != (data_ready2 & NVREG_XMITCTL_DATA_READY))
+			break;
+		udelay(50);
+	}
+
+	if (i == 100000 || (data_ready2 & NVREG_XMITCTL_DATA_ERROR))
+		return 0;
+
+	np->mgmt_version = readl(base + NvRegMgmtUnitVersion) & NVREG_MGMTUNITVERSION;
+
+	return 1;
+}
A five second busy-wait still sucks :(

Why not do

	start = jiffies;
	while (time_before(jiffies, start + 5*HZ)) {
		...
		schedule_timeout_uninterruptible(1);
	}

?
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help