On Thu, 13 Aug 2009 14:36:20 +0300
Sasha Khapyorsky <[email protected]> wrote:

> Hi Ira,
> 
> On 18:37 Thu 06 Aug     , Ira Weiny wrote:
> > 
> > From: Ira Weiny <[email protected]>
> > Date: Thu, 6 Aug 2009 18:31:46 -0700
> > Subject: [PATCH] opensm/complib: account for nsec overflow in timeout values
> > 
> > 
> > Signed-off-by: Ira Weiny <[email protected]>
> > ---
> >  opensm/complib/cl_event.c |    8 +++++---
> >  1 files changed, 5 insertions(+), 3 deletions(-)
> > 
> > diff --git a/opensm/complib/cl_event.c b/opensm/complib/cl_event.c
> > index d14b2f4..4bc8d37 100644
> > --- a/opensm/complib/cl_event.c
> > +++ b/opensm/complib/cl_event.c
> > @@ -148,9 +148,11 @@ cl_event_wait_on(IN cl_event_t * const p_event,
> >     } else {
> >             /* Get the current time */
> >             if (gettimeofday(&curtime, NULL) == 0) {
> > -                   timeout.tv_sec = curtime.tv_sec + (wait_us / 1000000);
> > -                   timeout.tv_nsec =
> > -                       (curtime.tv_usec + (wait_us % 1000000)) * 1000;
> > +                   uint32_t n_sec = (curtime.tv_usec + (wait_us % 1000000))
> 
> Do you really need fixed size (uint32_t) variable here?

Well I need at least int32_t.  I chose unsigned because we are not trying to go 
back in time.  I don't like leaving this as "int".  As rare as it might be, a 
compiler could chose 16bits for an int and that is not big enough, right?

> 
> > +                                           * 1000;
> > +                   timeout.tv_sec = curtime.tv_sec + (wait_us / 1000000)
> > +                                           + (n_sec % 1000000000);
> 
> Did you mean (n_sec / 1000000000)?

<sigh> yes... :-(

New patch below,
Ira


From: Ira Weiny <[email protected]>
Date: Thu, 6 Aug 2009 18:31:46 -0700
Subject: [PATCH] opensm/complib: account for nsec overflow in timeout values


Signed-off-by: Ira Weiny <[email protected]>
---
 opensm/complib/cl_event.c |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/opensm/complib/cl_event.c b/opensm/complib/cl_event.c
index d14b2f4..3f17262 100644
--- a/opensm/complib/cl_event.c
+++ b/opensm/complib/cl_event.c
@@ -148,9 +148,11 @@ cl_event_wait_on(IN cl_event_t * const p_event,
        } else {
                /* Get the current time */
                if (gettimeofday(&curtime, NULL) == 0) {
-                       timeout.tv_sec = curtime.tv_sec + (wait_us / 1000000);
-                       timeout.tv_nsec =
-                           (curtime.tv_usec + (wait_us % 1000000)) * 1000;
+                       uint32_t n_sec = (curtime.tv_usec + (wait_us % 1000000))
+                                               * 1000;
+                       timeout.tv_sec = curtime.tv_sec + (wait_us / 1000000)
+                                               + (n_sec / 1000000000);
+                       timeout.tv_nsec = n_sec % 1000000000;
 
                        wait_ret = pthread_cond_timedwait(&p_event->condvar,
                                                          &p_event->mutex,
-- 
1.5.4.5

_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to