root / target-i386 / hyperv.c @ dc1c13d9
History | View | Annotate | Download (1.2 kB)
1 |
/*
|
---|---|
2 |
* QEMU Hyper-V support
|
3 |
*
|
4 |
* Copyright Red Hat, Inc. 2011
|
5 |
*
|
6 |
* Author: Vadim Rozenfeld <vrozenfe@redhat.com>
|
7 |
*
|
8 |
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
9 |
* See the COPYING file in the top-level directory.
|
10 |
*
|
11 |
*/
|
12 |
|
13 |
#include "hyperv.h" |
14 |
|
15 |
static bool hyperv_vapic; |
16 |
static bool hyperv_relaxed_timing; |
17 |
static int hyperv_spinlock_attempts = HYPERV_SPINLOCK_NEVER_RETRY; |
18 |
|
19 |
void hyperv_enable_vapic_recommended(bool val) |
20 |
{ |
21 |
hyperv_vapic = val; |
22 |
} |
23 |
|
24 |
void hyperv_enable_relaxed_timing(bool val) |
25 |
{ |
26 |
hyperv_relaxed_timing = val; |
27 |
} |
28 |
|
29 |
void hyperv_set_spinlock_retries(int val) |
30 |
{ |
31 |
hyperv_spinlock_attempts = val; |
32 |
if (hyperv_spinlock_attempts < 0xFFF) { |
33 |
hyperv_spinlock_attempts = 0xFFF;
|
34 |
} |
35 |
} |
36 |
|
37 |
bool hyperv_enabled(void) |
38 |
{ |
39 |
return hyperv_hypercall_available() || hyperv_relaxed_timing_enabled();
|
40 |
} |
41 |
|
42 |
bool hyperv_hypercall_available(void) |
43 |
{ |
44 |
if (hyperv_vapic ||
|
45 |
(hyperv_spinlock_attempts != HYPERV_SPINLOCK_NEVER_RETRY)) { |
46 |
return true; |
47 |
} |
48 |
return false; |
49 |
} |
50 |
|
51 |
bool hyperv_vapic_recommended(void) |
52 |
{ |
53 |
return hyperv_vapic;
|
54 |
} |
55 |
|
56 |
bool hyperv_relaxed_timing_enabled(void) |
57 |
{ |
58 |
return hyperv_relaxed_timing;
|
59 |
} |
60 |
|
61 |
int hyperv_get_spinlock_retries(void) |
62 |
{ |
63 |
return hyperv_spinlock_attempts;
|
64 |
} |