Commit fd489e1a authored by Bryan O'Donoghue's avatar Bryan O'Donoghue Committed by Greg Kroah-Hartman

greybus: loopback: handle timestamp roll-over

This patch ensures we account for roll-over in the loopback driver.
do_gettimeofday() is used to grab a timestamp. Two timestamps are derived
one before and one after a gb_operation_sync(), however since
do_gettimeofday() returns the number of seconds and mircoseconds that have
elapsed today - we need to account for a situation where the timestamp
starts at say 23:59:999us rolls over and the end time is now earlier than
the start time.
Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parent 4c192665
...@@ -22,6 +22,8 @@ ...@@ -22,6 +22,8 @@
#include "greybus.h" #include "greybus.h"
#define NSEC_PER_DAY 86400000000000ULL
struct gb_loopback_stats { struct gb_loopback_stats {
u32 min; u32 min;
u32 max; u32 max;
...@@ -226,7 +228,10 @@ static void gb_loopback_calc_latency(struct gb_loopback *gb, ...@@ -226,7 +228,10 @@ static void gb_loopback_calc_latency(struct gb_loopback *gb,
t1 = timeval_to_ns(ts); t1 = timeval_to_ns(ts);
t2 = timeval_to_ns(te); t2 = timeval_to_ns(te);
gb->elapsed_nsecs = t2 - t1; if (t2 > t1)
gb->elapsed_nsecs = t2 - t1;
else
gb->elapsed_nsecs = NSEC_PER_DAY - t2 + t1;
} }
static int gb_loopback_sink(struct gb_loopback *gb, u32 len) static int gb_loopback_sink(struct gb_loopback *gb, u32 len)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment