diff options
author | Andrew Morton <akpm@osdl.org> | 2006-10-02 05:17:38 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-02 10:57:16 -0400 |
commit | ca8af486765852302931bb69075871d5564e1e5b (patch) | |
tree | b298caf449ec0ab49bb7a477258c39e87227a985 | |
parent | fd0fbcc27fd72a11dacc3f1a1681ee4dfd256a0b (diff) |
[PATCH] isdn: work around excessive udelay()
As reported in http://bugzilla.kernel.org/show_bug.cgi?id=6970, ISDN can issue
excessively-long udelays, which triggers a build-time error on ARM.
This is very sucky of ISDN, but I doubt if anyone is going to suddenly fix it.
So change the macro to do the microsecond counting itself.
Cc: <tch@wpkg.org>
Cc: Karsten Keil <kkeil@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | drivers/isdn/hisax/hisax.h | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/isdn/hisax/hisax.h b/drivers/isdn/hisax/hisax.h index 75920aa0a3c5..2f9d5118ceaf 100644 --- a/drivers/isdn/hisax/hisax.h +++ b/drivers/isdn/hisax/hisax.h | |||
@@ -1316,7 +1316,18 @@ void dlogframe(struct IsdnCardState *cs, struct sk_buff *skb, int dir); | |||
1316 | void iecpy(u_char * dest, u_char * iestart, int ieoffset); | 1316 | void iecpy(u_char * dest, u_char * iestart, int ieoffset); |
1317 | #endif /* __KERNEL__ */ | 1317 | #endif /* __KERNEL__ */ |
1318 | 1318 | ||
1319 | #define HZDELAY(jiffs) {int tout = jiffs; while (tout--) udelay(1000000/HZ);} | 1319 | /* |
1320 | * Busywait delay for `jiffs' jiffies | ||
1321 | */ | ||
1322 | #define HZDELAY(jiffs) do { \ | ||
1323 | int tout = jiffs; \ | ||
1324 | \ | ||
1325 | while (tout--) { \ | ||
1326 | int loops = USEC_PER_SEC / HZ; \ | ||
1327 | while (loops--) \ | ||
1328 | udelay(1); \ | ||
1329 | } \ | ||
1330 | } while (0) | ||
1320 | 1331 | ||
1321 | int ll_run(struct IsdnCardState *cs, int addfeatures); | 1332 | int ll_run(struct IsdnCardState *cs, int addfeatures); |
1322 | int CallcNew(void); | 1333 | int CallcNew(void); |