|
|
1.1 ! root 1: /* ! 2: * QEMU Hyper-V support ! 3: * ! 4: * Copyright Red Hat, Inc. 2011 ! 5: * ! 6: * Author: Vadim Rozenfeld <[email protected]> ! 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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.