Messages in this thread | | | Date | Thu, 23 Jan 2003 15:43:04 +0000 | From | Jamie Lokier <> | Subject | Re: {sys_,/dev/}epoll waiting timeout |
| |
Davide Libenzi wrote: > >From a mathematical point of view this is a ceil(v)+1, so this is wrong. > It should be : > > t = (t * HZ + 999) / 1000; > > The +999 already gives you the round up. Different is if we want to be > sure to sleep at least that amount of jiffies ( the rounded up ), in that > case since the timer tick might arrive immediately after we go to sleep by > making us to lose immediately a jiffie, we need another +1. Anyway I'll do > the round up. Same for the overflow check.
I wonder if it's appropriate to copy sys_poll(), which has the +1, or sys_select(), which doesn't!
> > And that the prototypes for ep_poll() and sys_epoll_wait() be changed > > to take a "long timeout" instead of an "int", just like sys_poll(). > > I don't see why. The poll(2) timeout is an int.
poll(2) takes an int, but sys_poll() takes a long. I think everyone is confused :)
The reason I suggested "long timeout" for ep_poll is because the multiply in the expression:
jtimeout = (unsigned long)(timeout*HZ+999)/1000;
can overflow if you don't. If you stick with the int, you'll need to write:
jtimeout = (((unsigned long)timeout)*HZ+999)/1000;
-- Jamie - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |