On Wed, 2013-06-05 at 18:46 +0300, Eliezer Tamir wrote:On 05/06/2013 18:39, Eric Dumazet wrote:On Wed, 2013-06-05 at 18:30 +0300, Eliezer Tamir wrote:On 05/06/2013 18:21, Eric Dumazet wrote:
It would also make sense to give end_time as a parameter, so that the
polling() code could really give a end_time for the whole duration of
poll().
(You then should test can_poll_ll(end_time) _before_ call to
ndo_ll_poll())
how would you handle a nonblocking operation in that case?
I guess if we have a socket option, then we don't need to handle none
blocking any diffrent, since the user specified exactly how much time to
waste polling. right?
If the thread already spent 50us in the poll() system call, it for sure
should not call any ndo_ll_poll(). This makes no more sense at this
point.
what about a non-blocking read from a socket?
Right now we assume this means poll only once since the application will
repeat as needed.
maybe add a "once" parameter that will cause sk_poll_ll() to ignore end
time and only try once?
extern bool __sk_poll_ll(struct sock *sk, cycles_t end);
static inline bool sk_poll_ll(struct sock *sk, bool nonblock)
{
return __sk_poll_ll(sk, nonblock, ll_end_time());
}
In the poll() code, we should call ll_end_time() once, even if we poll
1000 fds.