mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-01-14 05:12:17 +00:00
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: Ksenija Stanojevic <ksenija.stanojevic@gmail.com> Reviewed-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
f60c265159
commit
367e8560e8
@ -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,
|
|||||||
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,
|
|||||||
__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 {
|
|||||||
} 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;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user