[PATCH 3/3] OMAP clock/hwmod: fix off-by-one errors

Pandita, Vikram vikram.pandita at ti.com
Tue Nov 17 12:50:36 EST 2009


Paul

>-----Original Message-----
>From: linux-omap-owner at vger.kernel.org [mailto:linux-omap-owner at vger.kernel.org] On Behalf Of Paul
>Walmsley
>Sent: Tuesday, November 17, 2009 11:39 AM
>To: Russell King - ARM Linux
>Cc: linux-arm-kernel at lists.infradead.org; Juha Leppänen; linux-omap at vger.kernel.org
>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



More information about the linux-arm-kernel mailing list