lkml.org 
[lkml]   [2011]   [Jan]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: sys_epoll_wait high CPU load in 2.6.37
    From
    Date
    Le mercredi 26 janvier 2011 à 07:31 -0800, Davide Libenzi a écrit :
    > On Wed, 26 Jan 2011, Eric Dumazet wrote:
    >

    > > diff --git a/fs/eventpoll.c b/fs/eventpoll.c
    > > index cc8a9b7..7ec0890 100644
    > > --- a/fs/eventpoll.c
    > > +++ b/fs/eventpoll.c
    > > @@ -1126,7 +1126,9 @@ static int ep_poll(struct eventpoll *ep, struct epoll_event __user *events,
    > >
    > > if (timeout > 0) {
    > > ktime_get_ts(&end_time);
    > > - timespec_add_ns(&end_time, (u64)timeout * NSEC_PER_MSEC);
    > > + end_time.tv_sec += timeout / MSEC_PER_SEC;
    > > + timeout %= MSEC_PER_SEC;
    > > + timespec_add_ns(&end_time, timeout * NSEC_PER_MSEC);
    > > slack = select_estimate_accuracy(&end_time);
    > > to = &expires;
    > > *to = timespec_to_ktime(end_time);
    >
    > Yep, we can overflow the timeout, with the calculation above.
    > A timespec_add_ms()?

    Well, given timeout after modulo contains a number between 0 and 999,
    multiply by 1.000.000 (NSEC_PER_MSEC) cant overflow.



    --
    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: 2011-01-26 16:45    [W:0.040 / U:0.848 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site