lkml.org 
[lkml]   [2003]   [Jan]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: {sys_,/dev/}epoll waiting timeout
On Wed, 22 Jan 2003, Jamie Lokier wrote:

> So you would like it to round up the timeout like poll(), select(),
> and io_getevents() do? Fair enough, for the sake of consistency!
>
> sys_poll() says:
>
> if (timeout) {
> /* Careful about overflow in the intermediate values */
> if ((unsigned long) timeout < MAX_SCHEDULE_TIMEOUT / HZ)
> timeout = (unsigned long)(timeout*HZ+999)/1000+1;
> else /* Negative or overflow */
> timeout = MAX_SCHEDULE_TIMEOUT;
> }
>
> sys_io_getevents() does something more complicated in a function
> called set_timeout(), but it essentially comes to the same thing. It
> takes a value in nanseconds (which I prefer, btw, for future usefulness).

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.


> 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.


> ps. sys_* system-call functions should never return "int". They
> should always return "long" or a pointer - even if the user-space
> equivalent returns "int". Take a look at sys_open() for an example.
> Technical requirement of the system call return path on 64-bit targets.

True, I'll change it.



- Davide

-
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/

\
 
 \ /
  Last update: 2005-03-22 13:32    [W:0.079 / U:0.816 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site