Fio 2.0.12
[fio.git] / arch / arch-x86-common.h
CommitLineData
fa80feae
JA
1#ifndef FIO_ARCH_X86_COMMON
2#define FIO_ARCH_X86_COMMON
3
4static inline void do_cpuid(unsigned int *eax, unsigned int *ebx,
5 unsigned int *ecx, unsigned int *edx)
6{
7 unsigned int id = *eax;
8
9 asm("movl %4, %%eax;"
10 "cpuid;"
11 "movl %%eax, %0;"
12 "movl %%ebx, %1;"
13 "movl %%ecx, %2;"
14 "movl %%edx, %3;"
15 : "=r" (*eax), "=r" (*ebx), "=r" (*ecx), "=r" (*edx)
16 : "r" (id)
17 : "eax", "ebx", "ecx", "edx");
18}
19
20#define ARCH_HAVE_INIT
21extern int tsc_reliable;
22static inline int arch_init(char *envp[])
23{
24 unsigned int eax, ebx, ecx, edx;
25
26 /*
27 * Check for TSC
28 */
29 eax = 1;
30 do_cpuid(&eax, &ebx, &ecx, &edx);
31 if (!(edx & (1U << 4)))
32 return 0;
33
34 /*
35 * Check for constant rate and synced (across cores) TSC
36 */
37 eax = 0x80000007;
38 do_cpuid(&eax, &ebx, &ecx, &edx);
39 tsc_reliable = edx & (1U << 8);
40 return 0;
41}
42
43#endif