Paul >-----Original Message----- >From: linux-omap-owner@xxxxxxxxxxxxxxx [mailto:linux-omap-owner@xxxxxxxxxxxxxxx] On Behalf Of Paul >Walmsley >Sent: Tuesday, November 17, 2009 11:39 AM >To: Russell King - ARM Linux >Cc: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx; Juha Leppänen; linux-omap@xxxxxxxxxxxxxxx >Subject: Re: [PATCH 3/3] OMAP clock/hwmod: fix off-by-one errors <snip> > >+/** >+ * omap_test_timeout - busy-loop, testing a condition >+ * @cond: condition to test until it evaluates to true >+ * @timeout: maximum number of microseconds in the timeout >+ * @index: loop index (integer) >+ * >+ * Loop waiting for @cond to become true or until at least @timeout >+ * microseconds have passed. To use, define some integer @index in the >+ * calling code. After running, if @index == @timeout, then the loop has >+ * timed out. >+ */ >+#define omap_test_timeout(cond, timeout, index) \ >+({ \ >+ for (index = 0; index < timeout; index++) { \ >+ if (cond) \ >+ break; \ >+ udelay(1); \ >+ } \ >+}) >+ There is a similar kind of function implemented in USB host, that returns -ETIMEDOUT Which makes more sense for failure case. Maybe such a generic function for all omaps is needed. Refer: drivers/usb/host/ehci-hcd.c static int handshake (struct ehci_hcd *ehci, void __iomem *ptr, u32 mask, u32 done, int usec) { u32 result; do { result = ehci_readl(ehci, ptr); if (result == ~(u32)0) /* card removed */ return -ENODEV; result &= mask; if (result == done) return 0; udelay (1); usec--; } while (usec > 0); return -ETIMEDOUT; } > #endif /* __ARCH_ARM_MACH_OMAP_COMMON_H */ >-- >1.6.5.GIT -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html