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