Commit 367e8560 authored by Ksenija Stanojevic's avatar Ksenija Stanojevic Committed by Greg Kroah-Hartman

Staging: fbtbt: Replace timespec with ktime_t

struct timespec will overflow in year 2038, so replace it with
ktime_t. And replace functions that use struct timespec,
timespec_sub with ktime_sub. Also use monotonic time instead of real
time, by replacing getnstimeofday with ktime_get, to be more robust
against leap seconds and settimeofday() calls.
Signed-off-by: default avatarKsenija Stanojevic <ksenija.stanojevic@gmail.com>
Reviewed-by: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent f60c2651
...@@ -346,8 +346,7 @@ static void fbtft_update_display(struct fbtft_par *par, unsigned start_line, ...@@ -346,8 +346,7 @@ static void fbtft_update_display(struct fbtft_par *par, unsigned start_line,
unsigned end_line) unsigned end_line)
{ {
size_t offset, len; size_t offset, len;
struct timespec ts_start, ts_end, ts_fps, ts_duration; ktime_t ts_start, ts_end;
long fps_ms, fps_us, duration_ms, duration_us;
long fps, throughput; long fps, throughput;
bool timeit = false; bool timeit = false;
int ret = 0; int ret = 0;
...@@ -355,7 +354,7 @@ static void fbtft_update_display(struct fbtft_par *par, unsigned start_line, ...@@ -355,7 +354,7 @@ static void fbtft_update_display(struct fbtft_par *par, unsigned start_line,
if (unlikely(par->debug & (DEBUG_TIME_FIRST_UPDATE | DEBUG_TIME_EACH_UPDATE))) { if (unlikely(par->debug & (DEBUG_TIME_FIRST_UPDATE | DEBUG_TIME_EACH_UPDATE))) {
if ((par->debug & DEBUG_TIME_EACH_UPDATE) || if ((par->debug & DEBUG_TIME_EACH_UPDATE) ||
((par->debug & DEBUG_TIME_FIRST_UPDATE) && !par->first_update_done)) { ((par->debug & DEBUG_TIME_FIRST_UPDATE) && !par->first_update_done)) {
getnstimeofday(&ts_start); ts_start = ktime_get();
timeit = true; timeit = true;
} }
} }
...@@ -392,30 +391,21 @@ static void fbtft_update_display(struct fbtft_par *par, unsigned start_line, ...@@ -392,30 +391,21 @@ static void fbtft_update_display(struct fbtft_par *par, unsigned start_line,
__func__); __func__);
if (unlikely(timeit)) { if (unlikely(timeit)) {
getnstimeofday(&ts_end); ts_end = ktime_get();
if (par->update_time.tv_nsec == 0 && par->update_time.tv_sec == 0) { if (ktime_to_ns(par->update_time))
par->update_time.tv_sec = ts_start.tv_sec; par->update_time = ts_start;
par->update_time.tv_nsec = ts_start.tv_nsec;
} par->update_time = ts_start;
ts_fps = timespec_sub(ts_start, par->update_time); fps = ktime_us_delta(ts_start, par->update_time);
par->update_time.tv_sec = ts_start.tv_sec;
par->update_time.tv_nsec = ts_start.tv_nsec;
fps_ms = (ts_fps.tv_sec * 1000) + ((ts_fps.tv_nsec / 1000000) % 1000);
fps_us = (ts_fps.tv_nsec / 1000) % 1000;
fps = fps_ms * 1000 + fps_us;
fps = fps ? 1000000 / fps : 0; fps = fps ? 1000000 / fps : 0;
ts_duration = timespec_sub(ts_end, ts_start); throughput = ktime_us_delta(ts_end, ts_start);
duration_ms = (ts_duration.tv_sec * 1000) + ((ts_duration.tv_nsec / 1000000) % 1000);
duration_us = (ts_duration.tv_nsec / 1000) % 1000;
throughput = duration_ms * 1000 + duration_us;
throughput = throughput ? (len * 1000) / throughput : 0; throughput = throughput ? (len * 1000) / throughput : 0;
throughput = throughput * 1000 / 1024; throughput = throughput * 1000 / 1024;
dev_info(par->info->device, dev_info(par->info->device,
"Display update: %ld kB/s (%ld.%.3ld ms), fps=%ld (%ld.%.3ld ms)\n", "Display update: %ld kB/s, fps=%ld\n",
throughput, duration_ms, duration_us, throughput, fps);
fps, fps_ms, fps_us);
par->first_update_done = true; par->first_update_done = true;
} }
} }
......
...@@ -246,7 +246,7 @@ struct fbtft_par { ...@@ -246,7 +246,7 @@ struct fbtft_par {
} gamma; } gamma;
unsigned long debug; unsigned long debug;
bool first_update_done; bool first_update_done;
struct timespec update_time; ktime_t update_time;
bool bgr; bool bgr;
void *extra; void *extra;
}; };
......
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