Message ID | 20241111014911.11571-1-ende.tan@starfivetech.com |
---|---|
State | New |
Headers | show |
Series | [1/1] rt-tests: queuelat: Fix wraparound in __clock_gettime() | expand |
On Mon, Nov 11, 2024 at 09:49:11AM +0800, ende.tan@starfivetech.com wrote: > From: Tan En De <ende.tan@starfivetech.com> > > Include tv_sec in addition to tv_nsec in __clock_gettime(). If the value > of variable 'a' wraps around, it may cause 'delta' to be negative, while > 'delta' is defined with u64 type. > > Signed-off-by: Tan En De <ende.tan@starfivetech.com> > --- > src/queuelat/queuelat.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/src/queuelat/queuelat.c b/src/queuelat/queuelat.c > index c549cd8..c057389 100644 > --- a/src/queuelat/queuelat.c > +++ b/src/queuelat/queuelat.c > @@ -292,7 +292,8 @@ static inline unsigned long long __clock_gettime(void) > if (ret < 0) > return 0; > > - return now.tv_nsec; > + // Combine seconds and nanoseconds into a single value in nanoseconds > + return (unsigned long long)now.tv_sec * 1000000000ULL + now.tv_nsec; > } > > #define gettick(val) do { (val) = __clock_gettime(); } while (0) > -- > 2.34.1 > > Reviewed-by: Marcelo Tosatti <mtosatti@redhat.com>
On Mon, 11 Nov 2024, ende.tan@starfivetech.com wrote: > From: Tan En De <ende.tan@starfivetech.com> > > Include tv_sec in addition to tv_nsec in __clock_gettime(). If the value > of variable 'a' wraps around, it may cause 'delta' to be negative, while > 'delta' is defined with u64 type. > > Signed-off-by: Tan En De <ende.tan@starfivetech.com> > --- > src/queuelat/queuelat.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/src/queuelat/queuelat.c b/src/queuelat/queuelat.c > index c549cd8..c057389 100644 > --- a/src/queuelat/queuelat.c > +++ b/src/queuelat/queuelat.c > @@ -292,7 +292,8 @@ static inline unsigned long long __clock_gettime(void) > if (ret < 0) > return 0; > > - return now.tv_nsec; > + // Combine seconds and nanoseconds into a single value in nanoseconds > + return (unsigned long long)now.tv_sec * 1000000000ULL + now.tv_nsec; > } > > #define gettick(val) do { (val) = __clock_gettime(); } while (0) > -- > 2.34.1 > > > Signed-off-by: John Kacur <jkacur@redhat.com>
diff --git a/src/queuelat/queuelat.c b/src/queuelat/queuelat.c index c549cd8..c057389 100644 --- a/src/queuelat/queuelat.c +++ b/src/queuelat/queuelat.c @@ -292,7 +292,8 @@ static inline unsigned long long __clock_gettime(void) if (ret < 0) return 0; - return now.tv_nsec; + // Combine seconds and nanoseconds into a single value in nanoseconds + return (unsigned long long)now.tv_sec * 1000000000ULL + now.tv_nsec; } #define gettick(val) do { (val) = __clock_gettime(); } while (0)