timer: check TSC reliability
Read flags from /proc/cpuinfo and warn if constant_tsc or nonstop_tsc is not found. Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com> Acked-by: Ivan Boule <ivan.boule@6wind.com>
This commit is contained in:
parent
73a2bc5dba
commit
fb022b85ba
@ -2,6 +2,7 @@
|
||||
* BSD LICENSE
|
||||
*
|
||||
* Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
|
||||
* Copyright(c) 2012-2013 6WIND S.A.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -242,6 +243,41 @@ rte_eal_hpet_init(int make_default)
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
check_tsc_flags(void)
|
||||
{
|
||||
char line[512];
|
||||
FILE *stream;
|
||||
|
||||
stream = fopen("/proc/cpuinfo", "r");
|
||||
if (!stream) {
|
||||
RTE_LOG(WARNING, EAL, "WARNING: Unable to open /proc/cpuinfo\n");
|
||||
return;
|
||||
}
|
||||
|
||||
while (fgets(line, sizeof line, stream)) {
|
||||
char *constant_tsc;
|
||||
char *nonstop_tsc;
|
||||
|
||||
if (strncmp(line, "flags", 5) != 0)
|
||||
continue;
|
||||
|
||||
constant_tsc = strstr(line, "constant_tsc");
|
||||
nonstop_tsc = strstr(line, "nonstop_tsc");
|
||||
if (!constant_tsc || !nonstop_tsc)
|
||||
RTE_LOG(WARNING, EAL,
|
||||
"WARNING: cpu flags "
|
||||
"constant_tsc=%s "
|
||||
"nonstop_tsc=%s "
|
||||
"-> using unreliable clock cycles !\n",
|
||||
constant_tsc ? "yes":"no",
|
||||
nonstop_tsc ? "yes":"no");
|
||||
break;
|
||||
}
|
||||
|
||||
fclose(stream);
|
||||
}
|
||||
|
||||
static int
|
||||
set_tsc_freq_from_clock(void)
|
||||
{
|
||||
@ -304,5 +340,6 @@ rte_eal_timer_init(void)
|
||||
eal_timer_source = EAL_TIMER_TSC;
|
||||
|
||||
set_tsc_freq();
|
||||
check_tsc_flags();
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user