Merge branch 'timers/vdso' into timers/core
so the hyper-v clocksource update can be applied.
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Kernel-based Virtual Machine driver for Linux
|
||||
* cpuid support routines
|
||||
@@ -6,10 +7,6 @@
|
||||
*
|
||||
* Copyright 2011 Red Hat, Inc. and/or its affiliates.
|
||||
* Copyright IBM Corporation, 2008
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2. See
|
||||
* the COPYING file in the top-level directory.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/kvm_host.h>
|
||||
|
@@ -1,11 +1,8 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Kernel-based Virtual Machine driver for Linux
|
||||
*
|
||||
* Copyright 2016 Red Hat, Inc. and/or its affiliates.
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2. See
|
||||
* the COPYING file in the top-level directory.
|
||||
*
|
||||
*/
|
||||
#include <linux/kvm_host.h>
|
||||
#include <linux/debugfs.h>
|
||||
|
@@ -1,3 +1,4 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/******************************************************************************
|
||||
* emulate.c
|
||||
*
|
||||
@@ -14,9 +15,6 @@
|
||||
* Avi Kivity <avi@qumranet.com>
|
||||
* Yaniv Kamay <yaniv@qumranet.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2. See
|
||||
* the COPYING file in the top-level directory.
|
||||
*
|
||||
* From: xen-unstable 10676:af9809f51f81a3c43f276f00c81a52ef558afda4
|
||||
*/
|
||||
|
||||
|
@@ -1,3 +1,4 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* KVM Microsoft Hyper-V emulation
|
||||
*
|
||||
@@ -15,10 +16,6 @@
|
||||
* Amit Shah <amit.shah@qumranet.com>
|
||||
* Ben-Ami Yassour <benami@il.ibm.com>
|
||||
* Andrey Smetanin <asmetanin@virtuozzo.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2. See
|
||||
* the COPYING file in the top-level directory.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "x86.h"
|
||||
|
@@ -1,3 +1,4 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* KVM Microsoft Hyper-V emulation
|
||||
*
|
||||
@@ -15,10 +16,6 @@
|
||||
* Amit Shah <amit.shah@qumranet.com>
|
||||
* Ben-Ami Yassour <benami@il.ibm.com>
|
||||
* Andrey Smetanin <asmetanin@virtuozzo.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2. See
|
||||
* the COPYING file in the top-level directory.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __ARCH_X86_KVM_HYPERV_H__
|
||||
|
@@ -1,3 +1,4 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
/*
|
||||
* Local APIC virtualization
|
||||
@@ -13,9 +14,6 @@
|
||||
* Yaozu (Eddie) Dong <eddie.dong@intel.com>
|
||||
*
|
||||
* Based on Xen 3.1 code, Copyright (c) 2004, Intel Corporation.
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2. See
|
||||
* the COPYING file in the top-level directory.
|
||||
*/
|
||||
|
||||
#include <linux/kvm_host.h>
|
||||
|
@@ -1,3 +1,4 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Kernel-based Virtual Machine driver for Linux
|
||||
*
|
||||
@@ -12,10 +13,6 @@
|
||||
* Authors:
|
||||
* Yaniv Kamay <yaniv@qumranet.com>
|
||||
* Avi Kivity <avi@qumranet.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2. See
|
||||
* the COPYING file in the top-level directory.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "irq.h"
|
||||
@@ -5602,14 +5599,18 @@ static int alloc_mmu_pages(struct kvm_vcpu *vcpu)
|
||||
struct page *page;
|
||||
int i;
|
||||
|
||||
if (tdp_enabled)
|
||||
/*
|
||||
* When using PAE paging, the four PDPTEs are treated as 'root' pages,
|
||||
* while the PDP table is a per-vCPU construct that's allocated at MMU
|
||||
* creation. When emulating 32-bit mode, cr3 is only 32 bits even on
|
||||
* x86_64. Therefore we need to allocate the PDP table in the first
|
||||
* 4GB of memory, which happens to fit the DMA32 zone. Except for
|
||||
* SVM's 32-bit NPT support, TDP paging doesn't use PAE paging and can
|
||||
* skip allocating the PDP table.
|
||||
*/
|
||||
if (tdp_enabled && kvm_x86_ops->get_tdp_level(vcpu) > PT32E_ROOT_LEVEL)
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* When emulating 32-bit mode, cr3 is only 32 bits even on x86_64.
|
||||
* Therefore we need to allocate shadow page tables in the first
|
||||
* 4GB of memory, which happens to fit the DMA32 zone.
|
||||
*/
|
||||
page = alloc_page(GFP_KERNEL_ACCOUNT | __GFP_DMA32);
|
||||
if (!page)
|
||||
return -ENOMEM;
|
||||
|
@@ -1,3 +1,4 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* mmu_audit.c:
|
||||
*
|
||||
@@ -11,10 +12,6 @@
|
||||
* Avi Kivity <avi@qumranet.com>
|
||||
* Marcelo Tosatti <mtosatti@redhat.com>
|
||||
* Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2. See
|
||||
* the COPYING file in the top-level directory.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/ratelimit.h>
|
||||
|
@@ -1,3 +1,4 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* vMTRR implementation
|
||||
*
|
||||
@@ -11,9 +12,6 @@
|
||||
* Marcelo Tosatti <mtosatti@redhat.com>
|
||||
* Paolo Bonzini <pbonzini@redhat.com>
|
||||
* Xiao Guangrong <guangrong.xiao@linux.intel.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2. See
|
||||
* the COPYING file in the top-level directory.
|
||||
*/
|
||||
|
||||
#include <linux/kvm_host.h>
|
||||
|
@@ -1,3 +1,4 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Support KVM gust page tracking
|
||||
*
|
||||
@@ -8,9 +9,6 @@
|
||||
*
|
||||
* Author:
|
||||
* Xiao Guangrong <guangrong.xiao@linux.intel.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2. See
|
||||
* the COPYING file in the top-level directory.
|
||||
*/
|
||||
|
||||
#include <linux/kvm_host.h>
|
||||
|
@@ -1,3 +1,4 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Kernel-based Virtual Machine driver for Linux
|
||||
*
|
||||
@@ -12,10 +13,6 @@
|
||||
* Authors:
|
||||
* Yaniv Kamay <yaniv@qumranet.com>
|
||||
* Avi Kivity <avi@qumranet.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2. See
|
||||
* the COPYING file in the top-level directory.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
|
@@ -1,3 +1,4 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Kernel-based Virtual Machine -- Performance Monitoring Unit support
|
||||
*
|
||||
@@ -7,10 +8,6 @@
|
||||
* Avi Kivity <avi@redhat.com>
|
||||
* Gleb Natapov <gleb@redhat.com>
|
||||
* Wei Huang <wei@redhat.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2. See
|
||||
* the COPYING file in the top-level directory.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
|
@@ -1,3 +1,4 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* KVM PMU support for AMD
|
||||
*
|
||||
@@ -6,9 +7,6 @@
|
||||
* Author:
|
||||
* Wei Huang <wei@redhat.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2. See
|
||||
* the COPYING file in the top-level directory.
|
||||
*
|
||||
* Implementation is based on pmu_intel.c file
|
||||
*/
|
||||
#include <linux/types.h>
|
||||
|
@@ -1,3 +1,4 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Kernel-based Virtual Machine driver for Linux
|
||||
*
|
||||
@@ -9,10 +10,6 @@
|
||||
* Authors:
|
||||
* Yaniv Kamay <yaniv@qumranet.com>
|
||||
* Avi Kivity <avi@qumranet.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2. See
|
||||
* the COPYING file in the top-level directory.
|
||||
*
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "SVM: " fmt
|
||||
|
@@ -1397,7 +1397,7 @@ static int copy_enlightened_to_vmcs12(struct vcpu_vmx *vmx)
|
||||
}
|
||||
|
||||
if (unlikely(!(evmcs->hv_clean_fields &
|
||||
HV_VMX_ENLIGHTENED_CLEAN_FIELD_CONTROL_PROC))) {
|
||||
HV_VMX_ENLIGHTENED_CLEAN_FIELD_CONTROL_EXCPN))) {
|
||||
vmcs12->exception_bitmap = evmcs->exception_bitmap;
|
||||
}
|
||||
|
||||
@@ -1437,7 +1437,7 @@ static int copy_enlightened_to_vmcs12(struct vcpu_vmx *vmx)
|
||||
}
|
||||
|
||||
if (unlikely(!(evmcs->hv_clean_fields &
|
||||
HV_VMX_ENLIGHTENED_CLEAN_FIELD_HOST_GRP1))) {
|
||||
HV_VMX_ENLIGHTENED_CLEAN_FIELD_CONTROL_GRP1))) {
|
||||
vmcs12->pin_based_vm_exec_control =
|
||||
evmcs->pin_based_vm_exec_control;
|
||||
vmcs12->vm_exit_controls = evmcs->vm_exit_controls;
|
||||
@@ -5226,14 +5226,16 @@ static int vmx_get_nested_state(struct kvm_vcpu *vcpu,
|
||||
struct vmcs12 *vmcs12;
|
||||
struct kvm_nested_state kvm_state = {
|
||||
.flags = 0,
|
||||
.format = 0,
|
||||
.format = KVM_STATE_NESTED_FORMAT_VMX,
|
||||
.size = sizeof(kvm_state),
|
||||
.vmx.vmxon_pa = -1ull,
|
||||
.vmx.vmcs_pa = -1ull,
|
||||
.hdr.vmx.vmxon_pa = -1ull,
|
||||
.hdr.vmx.vmcs12_pa = -1ull,
|
||||
};
|
||||
struct kvm_vmx_nested_state_data __user *user_vmx_nested_state =
|
||||
&user_kvm_nested_state->data.vmx[0];
|
||||
|
||||
if (!vcpu)
|
||||
return kvm_state.size + 2 * VMCS12_SIZE;
|
||||
return kvm_state.size + sizeof(*user_vmx_nested_state);
|
||||
|
||||
vmx = to_vmx(vcpu);
|
||||
vmcs12 = get_vmcs12(vcpu);
|
||||
@@ -5243,23 +5245,23 @@ static int vmx_get_nested_state(struct kvm_vcpu *vcpu,
|
||||
|
||||
if (nested_vmx_allowed(vcpu) &&
|
||||
(vmx->nested.vmxon || vmx->nested.smm.vmxon)) {
|
||||
kvm_state.vmx.vmxon_pa = vmx->nested.vmxon_ptr;
|
||||
kvm_state.vmx.vmcs_pa = vmx->nested.current_vmptr;
|
||||
kvm_state.hdr.vmx.vmxon_pa = vmx->nested.vmxon_ptr;
|
||||
kvm_state.hdr.vmx.vmcs12_pa = vmx->nested.current_vmptr;
|
||||
|
||||
if (vmx_has_valid_vmcs12(vcpu)) {
|
||||
kvm_state.size += VMCS12_SIZE;
|
||||
kvm_state.size += sizeof(user_vmx_nested_state->vmcs12);
|
||||
|
||||
if (is_guest_mode(vcpu) &&
|
||||
nested_cpu_has_shadow_vmcs(vmcs12) &&
|
||||
vmcs12->vmcs_link_pointer != -1ull)
|
||||
kvm_state.size += VMCS12_SIZE;
|
||||
kvm_state.size += sizeof(user_vmx_nested_state->shadow_vmcs12);
|
||||
}
|
||||
|
||||
if (vmx->nested.smm.vmxon)
|
||||
kvm_state.vmx.smm.flags |= KVM_STATE_NESTED_SMM_VMXON;
|
||||
kvm_state.hdr.vmx.smm.flags |= KVM_STATE_NESTED_SMM_VMXON;
|
||||
|
||||
if (vmx->nested.smm.guest_mode)
|
||||
kvm_state.vmx.smm.flags |= KVM_STATE_NESTED_SMM_GUEST_MODE;
|
||||
kvm_state.hdr.vmx.smm.flags |= KVM_STATE_NESTED_SMM_GUEST_MODE;
|
||||
|
||||
if (is_guest_mode(vcpu)) {
|
||||
kvm_state.flags |= KVM_STATE_NESTED_GUEST_MODE;
|
||||
@@ -5294,16 +5296,19 @@ static int vmx_get_nested_state(struct kvm_vcpu *vcpu,
|
||||
copy_shadow_to_vmcs12(vmx);
|
||||
}
|
||||
|
||||
BUILD_BUG_ON(sizeof(user_vmx_nested_state->vmcs12) < VMCS12_SIZE);
|
||||
BUILD_BUG_ON(sizeof(user_vmx_nested_state->shadow_vmcs12) < VMCS12_SIZE);
|
||||
|
||||
/*
|
||||
* Copy over the full allocated size of vmcs12 rather than just the size
|
||||
* of the struct.
|
||||
*/
|
||||
if (copy_to_user(user_kvm_nested_state->data, vmcs12, VMCS12_SIZE))
|
||||
if (copy_to_user(user_vmx_nested_state->vmcs12, vmcs12, VMCS12_SIZE))
|
||||
return -EFAULT;
|
||||
|
||||
if (nested_cpu_has_shadow_vmcs(vmcs12) &&
|
||||
vmcs12->vmcs_link_pointer != -1ull) {
|
||||
if (copy_to_user(user_kvm_nested_state->data + VMCS12_SIZE,
|
||||
if (copy_to_user(user_vmx_nested_state->shadow_vmcs12,
|
||||
get_shadow_vmcs12(vcpu), VMCS12_SIZE))
|
||||
return -EFAULT;
|
||||
}
|
||||
@@ -5331,33 +5336,35 @@ static int vmx_set_nested_state(struct kvm_vcpu *vcpu,
|
||||
struct vcpu_vmx *vmx = to_vmx(vcpu);
|
||||
struct vmcs12 *vmcs12;
|
||||
u32 exit_qual;
|
||||
struct kvm_vmx_nested_state_data __user *user_vmx_nested_state =
|
||||
&user_kvm_nested_state->data.vmx[0];
|
||||
int ret;
|
||||
|
||||
if (kvm_state->format != 0)
|
||||
if (kvm_state->format != KVM_STATE_NESTED_FORMAT_VMX)
|
||||
return -EINVAL;
|
||||
|
||||
if (!nested_vmx_allowed(vcpu))
|
||||
return kvm_state->vmx.vmxon_pa == -1ull ? 0 : -EINVAL;
|
||||
|
||||
if (kvm_state->vmx.vmxon_pa == -1ull) {
|
||||
if (kvm_state->vmx.smm.flags)
|
||||
if (kvm_state->hdr.vmx.vmxon_pa == -1ull) {
|
||||
if (kvm_state->hdr.vmx.smm.flags)
|
||||
return -EINVAL;
|
||||
|
||||
if (kvm_state->vmx.vmcs_pa != -1ull)
|
||||
if (kvm_state->hdr.vmx.vmcs12_pa != -1ull)
|
||||
return -EINVAL;
|
||||
|
||||
vmx_leave_nested(vcpu);
|
||||
return 0;
|
||||
}
|
||||
if (kvm_state->flags & ~KVM_STATE_NESTED_EVMCS)
|
||||
return -EINVAL;
|
||||
} else {
|
||||
if (!nested_vmx_allowed(vcpu))
|
||||
return -EINVAL;
|
||||
|
||||
if (!page_address_valid(vcpu, kvm_state->vmx.vmxon_pa))
|
||||
return -EINVAL;
|
||||
if (!page_address_valid(vcpu, kvm_state->hdr.vmx.vmxon_pa))
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if ((kvm_state->vmx.smm.flags & KVM_STATE_NESTED_SMM_GUEST_MODE) &&
|
||||
if ((kvm_state->hdr.vmx.smm.flags & KVM_STATE_NESTED_SMM_GUEST_MODE) &&
|
||||
(kvm_state->flags & KVM_STATE_NESTED_GUEST_MODE))
|
||||
return -EINVAL;
|
||||
|
||||
if (kvm_state->vmx.smm.flags &
|
||||
if (kvm_state->hdr.vmx.smm.flags &
|
||||
~(KVM_STATE_NESTED_SMM_GUEST_MODE | KVM_STATE_NESTED_SMM_VMXON))
|
||||
return -EINVAL;
|
||||
|
||||
@@ -5366,21 +5373,25 @@ static int vmx_set_nested_state(struct kvm_vcpu *vcpu,
|
||||
* nor can VMLAUNCH/VMRESUME be pending. Outside SMM, SMM flags
|
||||
* must be zero.
|
||||
*/
|
||||
if (is_smm(vcpu) ? kvm_state->flags : kvm_state->vmx.smm.flags)
|
||||
if (is_smm(vcpu) ? kvm_state->flags : kvm_state->hdr.vmx.smm.flags)
|
||||
return -EINVAL;
|
||||
|
||||
if ((kvm_state->vmx.smm.flags & KVM_STATE_NESTED_SMM_GUEST_MODE) &&
|
||||
!(kvm_state->vmx.smm.flags & KVM_STATE_NESTED_SMM_VMXON))
|
||||
if ((kvm_state->hdr.vmx.smm.flags & KVM_STATE_NESTED_SMM_GUEST_MODE) &&
|
||||
!(kvm_state->hdr.vmx.smm.flags & KVM_STATE_NESTED_SMM_VMXON))
|
||||
return -EINVAL;
|
||||
|
||||
vmx_leave_nested(vcpu);
|
||||
if (kvm_state->vmx.vmxon_pa == -1ull)
|
||||
if (kvm_state->flags & KVM_STATE_NESTED_EVMCS) {
|
||||
if (!nested_vmx_allowed(vcpu))
|
||||
return -EINVAL;
|
||||
|
||||
nested_enable_evmcs(vcpu, NULL);
|
||||
}
|
||||
|
||||
if (kvm_state->hdr.vmx.vmxon_pa == -1ull)
|
||||
return 0;
|
||||
|
||||
if (kvm_state->flags & KVM_STATE_NESTED_EVMCS)
|
||||
nested_enable_evmcs(vcpu, NULL);
|
||||
|
||||
vmx->nested.vmxon_ptr = kvm_state->vmx.vmxon_pa;
|
||||
vmx->nested.vmxon_ptr = kvm_state->hdr.vmx.vmxon_pa;
|
||||
ret = enter_vmx_operation(vcpu);
|
||||
if (ret)
|
||||
return ret;
|
||||
@@ -5389,12 +5400,12 @@ static int vmx_set_nested_state(struct kvm_vcpu *vcpu,
|
||||
if (kvm_state->size < sizeof(*kvm_state) + sizeof(*vmcs12))
|
||||
return 0;
|
||||
|
||||
if (kvm_state->vmx.vmcs_pa != -1ull) {
|
||||
if (kvm_state->vmx.vmcs_pa == kvm_state->vmx.vmxon_pa ||
|
||||
!page_address_valid(vcpu, kvm_state->vmx.vmcs_pa))
|
||||
if (kvm_state->hdr.vmx.vmcs12_pa != -1ull) {
|
||||
if (kvm_state->hdr.vmx.vmcs12_pa == kvm_state->hdr.vmx.vmxon_pa ||
|
||||
!page_address_valid(vcpu, kvm_state->hdr.vmx.vmcs12_pa))
|
||||
return -EINVAL;
|
||||
|
||||
set_current_vmptr(vmx, kvm_state->vmx.vmcs_pa);
|
||||
set_current_vmptr(vmx, kvm_state->hdr.vmx.vmcs12_pa);
|
||||
} else if (kvm_state->flags & KVM_STATE_NESTED_EVMCS) {
|
||||
/*
|
||||
* Sync eVMCS upon entry as we may not have
|
||||
@@ -5405,16 +5416,16 @@ static int vmx_set_nested_state(struct kvm_vcpu *vcpu,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (kvm_state->vmx.smm.flags & KVM_STATE_NESTED_SMM_VMXON) {
|
||||
if (kvm_state->hdr.vmx.smm.flags & KVM_STATE_NESTED_SMM_VMXON) {
|
||||
vmx->nested.smm.vmxon = true;
|
||||
vmx->nested.vmxon = false;
|
||||
|
||||
if (kvm_state->vmx.smm.flags & KVM_STATE_NESTED_SMM_GUEST_MODE)
|
||||
if (kvm_state->hdr.vmx.smm.flags & KVM_STATE_NESTED_SMM_GUEST_MODE)
|
||||
vmx->nested.smm.guest_mode = true;
|
||||
}
|
||||
|
||||
vmcs12 = get_vmcs12(vcpu);
|
||||
if (copy_from_user(vmcs12, user_kvm_nested_state->data, sizeof(*vmcs12)))
|
||||
if (copy_from_user(vmcs12, user_vmx_nested_state->vmcs12, sizeof(*vmcs12)))
|
||||
return -EFAULT;
|
||||
|
||||
if (vmcs12->hdr.revision_id != VMCS12_REVISION)
|
||||
@@ -5431,12 +5442,14 @@ static int vmx_set_nested_state(struct kvm_vcpu *vcpu,
|
||||
vmcs12->vmcs_link_pointer != -1ull) {
|
||||
struct vmcs12 *shadow_vmcs12 = get_shadow_vmcs12(vcpu);
|
||||
|
||||
if (kvm_state->size < sizeof(*kvm_state) + VMCS12_SIZE + sizeof(*vmcs12))
|
||||
if (kvm_state->size <
|
||||
sizeof(*kvm_state) +
|
||||
sizeof(user_vmx_nested_state->vmcs12) + sizeof(*shadow_vmcs12))
|
||||
goto error_guest_mode;
|
||||
|
||||
if (copy_from_user(shadow_vmcs12,
|
||||
user_kvm_nested_state->data + VMCS12_SIZE,
|
||||
sizeof(*vmcs12))) {
|
||||
user_vmx_nested_state->shadow_vmcs12,
|
||||
sizeof(*shadow_vmcs12))) {
|
||||
ret = -EFAULT;
|
||||
goto error_guest_mode;
|
||||
}
|
||||
|
@@ -1,3 +1,4 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* KVM PMU support for Intel CPUs
|
||||
*
|
||||
@@ -6,10 +7,6 @@
|
||||
* Authors:
|
||||
* Avi Kivity <avi@redhat.com>
|
||||
* Gleb Natapov <gleb@redhat.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2. See
|
||||
* the COPYING file in the top-level directory.
|
||||
*
|
||||
*/
|
||||
#include <linux/types.h>
|
||||
#include <linux/kvm_host.h>
|
||||
|
@@ -201,9 +201,10 @@ struct __packed vmcs12 {
|
||||
/*
|
||||
* VMCS12_SIZE is the number of bytes L1 should allocate for the VMXON region
|
||||
* and any VMCS region. Although only sizeof(struct vmcs12) are used by the
|
||||
* current implementation, 4K are reserved to avoid future complications.
|
||||
* current implementation, 4K are reserved to avoid future complications and
|
||||
* to preserve userspace ABI.
|
||||
*/
|
||||
#define VMCS12_SIZE 0x1000
|
||||
#define VMCS12_SIZE KVM_STATE_NESTED_VMX_VMCS_SIZE
|
||||
|
||||
/*
|
||||
* VMCS12_MAX_FIELD_INDEX is the highest index value used in any
|
||||
|
@@ -1,3 +1,4 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Kernel-based Virtual Machine driver for Linux
|
||||
*
|
||||
@@ -10,10 +11,6 @@
|
||||
* Authors:
|
||||
* Avi Kivity <avi@qumranet.com>
|
||||
* Yaniv Kamay <yaniv@qumranet.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2. See
|
||||
* the COPYING file in the top-level directory.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/frame.h>
|
||||
|
@@ -1,3 +1,4 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Kernel-based Virtual Machine driver for Linux
|
||||
*
|
||||
@@ -13,10 +14,6 @@
|
||||
* Yaniv Kamay <yaniv@qumranet.com>
|
||||
* Amit Shah <amit.shah@qumranet.com>
|
||||
* Ben-Ami Yassour <benami@il.ibm.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2. See
|
||||
* the COPYING file in the top-level directory.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/kvm_host.h>
|
||||
|
Reference in New Issue
Block a user