virt-what-cvm: rename 'azure-hcl' fact to 'hyperv-hcl'
[virt-what.git] / virt-what-ia64-xen-rdtsc-test.c
1 /* virt-what-ia64-xen-rdtsc-test
2  * Copyright (C) 2011 Red Hat Inc.
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17  */
18
19 #ifndef __ia64__
20 #error "error in Makefile - this program should only be compiled for ia64 host"
21 #endif
22
23 /* This program is ugly, but possibly the only way to detect
24  * virtualized Xen HVM guests on IA64.
25  */
26
27 #include <stdio.h>
28 #include <stdlib.h>
29 #include <string.h>
30
31 static inline unsigned long
32 rdtsc (void)
33 {
34   unsigned long res;
35   asm volatile ("mov %0=ar.itc" : "=r"(res));
36   return res;
37 }
38
39 int
40 main ()
41 {
42   unsigned long old, new;
43   int virt;
44   int i;
45
46   virt = 1;
47
48   for (i = 16; i--; ) {
49     old = rdtsc (); new = rdtsc ();
50     /*printf("%ld\n", new - old);*/
51     if (new - old < 30) {
52       virt = 0;
53       break;
54     }
55   }
56
57   exit (virt);
58 }