/* * QEMU Hyper-V support * * Copyright Red Hat, Inc. 2011 * * Author: Vadim Rozenfeld * * This work is licensed under the terms of the GNU GPL, version 2 or later. * See the COPYING file in the top-level directory. * */ #include "hyperv.h" static bool hyperv_vapic; static bool hyperv_relaxed_timing; static int hyperv_spinlock_attempts = HYPERV_SPINLOCK_NEVER_RETRY; void hyperv_enable_vapic_recommended(bool val) { hyperv_vapic = val; } void hyperv_enable_relaxed_timing(bool val) { hyperv_relaxed_timing = val; } void hyperv_set_spinlock_retries(int val) { hyperv_spinlock_attempts = val; if (hyperv_spinlock_attempts < 0xFFF) { hyperv_spinlock_attempts = 0xFFF; } } bool hyperv_enabled(void) { return hyperv_hypercall_available() || hyperv_relaxed_timing_enabled(); } bool hyperv_hypercall_available(void) { if (hyperv_vapic || (hyperv_spinlock_attempts != HYPERV_SPINLOCK_NEVER_RETRY)) { return true; } return false; } bool hyperv_vapic_recommended(void) { return hyperv_vapic; } bool hyperv_relaxed_timing_enabled(void) { return hyperv_relaxed_timing; } int hyperv_get_spinlock_retries(void) { return hyperv_spinlock_attempts; }