update submodule and patches to Ubuntu-4.15.0-63.72
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
parent
6e9b6a3eae
commit
5aa9d0068e
@ -55,10 +55,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|||||||
2 files changed, 110 insertions(+)
|
2 files changed, 110 insertions(+)
|
||||||
|
|
||||||
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
|
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
|
||||||
index e399c26b180e..3a46193323f6 100644
|
index 4286db7d9d51..663430a3e415 100644
|
||||||
--- a/Documentation/admin-guide/kernel-parameters.txt
|
--- a/Documentation/admin-guide/kernel-parameters.txt
|
||||||
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
||||||
@@ -3135,6 +3135,15 @@
|
@@ -3138,6 +3138,15 @@
|
||||||
Also, it enforces the PCI Local Bus spec
|
Also, it enforces the PCI Local Bus spec
|
||||||
rule that those bits should be 0 in system reset
|
rule that those bits should be 0 in system reset
|
||||||
events (useful for kexec/kdump cases).
|
events (useful for kexec/kdump cases).
|
||||||
@ -75,10 +75,10 @@ index e399c26b180e..3a46193323f6 100644
|
|||||||
Safety option to keep boot IRQs enabled. This
|
Safety option to keep boot IRQs enabled. This
|
||||||
should never be necessary.
|
should never be necessary.
|
||||||
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
|
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
|
||||||
index 60d62a5f9e05..b112d494e51b 100644
|
index 23d7fa167a36..59d361f70ab9 100644
|
||||||
--- a/drivers/pci/quirks.c
|
--- a/drivers/pci/quirks.c
|
||||||
+++ b/drivers/pci/quirks.c
|
+++ b/drivers/pci/quirks.c
|
||||||
@@ -3706,6 +3706,106 @@ static int __init pci_apply_final_quirks(void)
|
@@ -3724,6 +3724,106 @@ static int __init pci_apply_final_quirks(void)
|
||||||
|
|
||||||
fs_initcall_sync(pci_apply_final_quirks);
|
fs_initcall_sync(pci_apply_final_quirks);
|
||||||
|
|
||||||
@ -185,7 +185,7 @@ index 60d62a5f9e05..b112d494e51b 100644
|
|||||||
/*
|
/*
|
||||||
* Following are device-specific reset methods which can be used to
|
* Following are device-specific reset methods which can be used to
|
||||||
* reset a single function if other methods (e.g. FLR, PM D0->D3) are
|
* reset a single function if other methods (e.g. FLR, PM D0->D3) are
|
||||||
@@ -4559,6 +4659,7 @@ static const struct pci_dev_acs_enabled {
|
@@ -4579,6 +4679,7 @@ static const struct pci_dev_acs_enabled {
|
||||||
{ PCI_VENDOR_ID_CAVIUM, PCI_ANY_ID, pci_quirk_cavium_acs },
|
{ PCI_VENDOR_ID_CAVIUM, PCI_ANY_ID, pci_quirk_cavium_acs },
|
||||||
/* APM X-Gene */
|
/* APM X-Gene */
|
||||||
{ PCI_VENDOR_ID_AMCC, 0xE004, pci_quirk_xgene_acs },
|
{ PCI_VENDOR_ID_AMCC, 0xE004, pci_quirk_xgene_acs },
|
||||||
|
@ -13,7 +13,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
|
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
|
||||||
index 238ddbc127e1..d7a24fd29144 100644
|
index 3d73a3d28d63..7c5a36e5700e 100644
|
||||||
--- a/virt/kvm/kvm_main.c
|
--- a/virt/kvm/kvm_main.c
|
||||||
+++ b/virt/kvm/kvm_main.c
|
+++ b/virt/kvm/kvm_main.c
|
||||||
@@ -77,7 +77,7 @@ module_param(halt_poll_ns, uint, 0644);
|
@@ -77,7 +77,7 @@ module_param(halt_poll_ns, uint, 0644);
|
||||||
|
@ -20,7 +20,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|||||||
1 file changed, 1 insertion(+), 9 deletions(-)
|
1 file changed, 1 insertion(+), 9 deletions(-)
|
||||||
|
|
||||||
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
|
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
|
||||||
index 1b07341eda2c..419fe6fdad17 100644
|
index 5d72aa39d3c1..451546219dfc 100644
|
||||||
--- a/scripts/Makefile.build
|
--- a/scripts/Makefile.build
|
||||||
+++ b/scripts/Makefile.build
|
+++ b/scripts/Makefile.build
|
||||||
@@ -295,27 +295,19 @@ objtool_dep = $(objtool_obj) \
|
@@ -295,27 +295,19 @@ objtool_dep = $(objtool_obj) \
|
||||||
|
@ -33,10 +33,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|||||||
4 files changed, 15 insertions(+), 28 deletions(-)
|
4 files changed, 15 insertions(+), 28 deletions(-)
|
||||||
|
|
||||||
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
|
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
|
||||||
index 7c8341e2d3c1..921968c00dde 100644
|
index 1d84e07c0370..c6b1c38b5c56 100644
|
||||||
--- a/arch/x86/kvm/vmx.c
|
--- a/arch/x86/kvm/vmx.c
|
||||||
+++ b/arch/x86/kvm/vmx.c
|
+++ b/arch/x86/kvm/vmx.c
|
||||||
@@ -9966,10 +9966,8 @@ static void vmx_switch_vmcs(struct kvm_vcpu *vcpu, struct loaded_vmcs *vmcs)
|
@@ -9999,10 +9999,8 @@ static void vmx_switch_vmcs(struct kvm_vcpu *vcpu, struct loaded_vmcs *vmcs)
|
||||||
static void vmx_free_vcpu_nested(struct kvm_vcpu *vcpu)
|
static void vmx_free_vcpu_nested(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
struct vcpu_vmx *vmx = to_vmx(vcpu);
|
struct vcpu_vmx *vmx = to_vmx(vcpu);
|
||||||
@ -49,15 +49,16 @@ index 7c8341e2d3c1..921968c00dde 100644
|
|||||||
free_nested(vmx);
|
free_nested(vmx);
|
||||||
vcpu_put(vcpu);
|
vcpu_put(vcpu);
|
||||||
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
|
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
|
||||||
index e68f7bd79df5..0c971dce8915 100644
|
index e2396d841b26..83cd2c951c49 100644
|
||||||
--- a/arch/x86/kvm/x86.c
|
--- a/arch/x86/kvm/x86.c
|
||||||
+++ b/arch/x86/kvm/x86.c
|
+++ b/arch/x86/kvm/x86.c
|
||||||
@@ -7957,16 +7957,12 @@ struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm,
|
@@ -7981,17 +7981,13 @@ struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm,
|
||||||
|
|
||||||
int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu)
|
int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
- int r;
|
- int r;
|
||||||
-
|
-
|
||||||
|
vcpu->arch.arch_capabilities = kvm_get_arch_capabilities();
|
||||||
kvm_vcpu_mtrr_init(vcpu);
|
kvm_vcpu_mtrr_init(vcpu);
|
||||||
- r = vcpu_load(vcpu);
|
- r = vcpu_load(vcpu);
|
||||||
- if (r)
|
- if (r)
|
||||||
@ -71,7 +72,7 @@ index e68f7bd79df5..0c971dce8915 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
void kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu)
|
void kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu)
|
||||||
@@ -7976,13 +7972,15 @@ void kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu)
|
@@ -8001,13 +7997,15 @@ void kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu)
|
||||||
|
|
||||||
kvm_hv_vcpu_postcreate(vcpu);
|
kvm_hv_vcpu_postcreate(vcpu);
|
||||||
|
|
||||||
@ -88,7 +89,7 @@ index e68f7bd79df5..0c971dce8915 100644
|
|||||||
|
|
||||||
if (!kvmclock_periodic_sync)
|
if (!kvmclock_periodic_sync)
|
||||||
return;
|
return;
|
||||||
@@ -7993,11 +7991,9 @@ void kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu)
|
@@ -8018,11 +8016,9 @@ void kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu)
|
||||||
|
|
||||||
void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu)
|
void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
@ -101,7 +102,7 @@ index e68f7bd79df5..0c971dce8915 100644
|
|||||||
kvm_mmu_unload(vcpu);
|
kvm_mmu_unload(vcpu);
|
||||||
vcpu_put(vcpu);
|
vcpu_put(vcpu);
|
||||||
|
|
||||||
@@ -8371,9 +8367,7 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
|
@@ -8396,9 +8392,7 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
|
||||||
|
|
||||||
static void kvm_unload_vcpu_mmu(struct kvm_vcpu *vcpu)
|
static void kvm_unload_vcpu_mmu(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
@ -113,10 +114,10 @@ index e68f7bd79df5..0c971dce8915 100644
|
|||||||
vcpu_put(vcpu);
|
vcpu_put(vcpu);
|
||||||
}
|
}
|
||||||
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
|
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
|
||||||
index c807eab9c1d3..6684da3f197f 100644
|
index 9c51dd3ade6a..e5e79847d959 100644
|
||||||
--- a/include/linux/kvm_host.h
|
--- a/include/linux/kvm_host.h
|
||||||
+++ b/include/linux/kvm_host.h
|
+++ b/include/linux/kvm_host.h
|
||||||
@@ -533,7 +533,7 @@ static inline int kvm_vcpu_get_idx(struct kvm_vcpu *vcpu)
|
@@ -534,7 +534,7 @@ static inline int kvm_vcpu_get_idx(struct kvm_vcpu *vcpu)
|
||||||
int kvm_vcpu_init(struct kvm_vcpu *vcpu, struct kvm *kvm, unsigned id);
|
int kvm_vcpu_init(struct kvm_vcpu *vcpu, struct kvm *kvm, unsigned id);
|
||||||
void kvm_vcpu_uninit(struct kvm_vcpu *vcpu);
|
void kvm_vcpu_uninit(struct kvm_vcpu *vcpu);
|
||||||
|
|
||||||
@ -126,7 +127,7 @@ index c807eab9c1d3..6684da3f197f 100644
|
|||||||
|
|
||||||
#ifdef __KVM_HAVE_IOAPIC
|
#ifdef __KVM_HAVE_IOAPIC
|
||||||
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
|
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
|
||||||
index d7a24fd29144..9cb73320866c 100644
|
index 7c5a36e5700e..80eaa6ee603e 100644
|
||||||
--- a/virt/kvm/kvm_main.c
|
--- a/virt/kvm/kvm_main.c
|
||||||
+++ b/virt/kvm/kvm_main.c
|
+++ b/virt/kvm/kvm_main.c
|
||||||
@@ -151,17 +151,12 @@ bool kvm_is_reserved_pfn(kvm_pfn_t pfn)
|
@@ -151,17 +151,12 @@ bool kvm_is_reserved_pfn(kvm_pfn_t pfn)
|
||||||
@ -157,7 +158,7 @@ index d7a24fd29144..9cb73320866c 100644
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(vcpu_put);
|
EXPORT_SYMBOL_GPL(vcpu_put);
|
||||||
|
|
||||||
@@ -2562,9 +2556,9 @@ static long kvm_vcpu_ioctl(struct file *filp,
|
@@ -2589,9 +2583,9 @@ static long kvm_vcpu_ioctl(struct file *filp,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -170,7 +171,7 @@ index d7a24fd29144..9cb73320866c 100644
|
|||||||
switch (ioctl) {
|
switch (ioctl) {
|
||||||
case KVM_RUN: {
|
case KVM_RUN: {
|
||||||
struct pid *oldpid;
|
struct pid *oldpid;
|
||||||
@@ -2737,6 +2731,7 @@ static long kvm_vcpu_ioctl(struct file *filp,
|
@@ -2764,6 +2758,7 @@ static long kvm_vcpu_ioctl(struct file *filp,
|
||||||
}
|
}
|
||||||
out:
|
out:
|
||||||
vcpu_put(vcpu);
|
vcpu_put(vcpu);
|
@ -1,55 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Eduardo Habkost <ehabkost@redhat.com>
|
|
||||||
Date: Mon, 17 Dec 2018 22:34:18 -0200
|
|
||||||
Subject: [PATCH] kvm: x86: Add AMD's EX_CFG to the list of ignored MSRs
|
|
||||||
|
|
||||||
Some guests OSes (including Windows 10) write to MSR 0xc001102c
|
|
||||||
on some cases (possibly while trying to apply a CPU errata).
|
|
||||||
Make KVM ignore reads and writes to that MSR, so the guest won't
|
|
||||||
crash.
|
|
||||||
|
|
||||||
The MSR is documented as "Execution Unit Configuration (EX_CFG)",
|
|
||||||
at AMD's "BIOS and Kernel Developer's Guide (BKDG) for AMD Family
|
|
||||||
15h Models 00h-0Fh Processors".
|
|
||||||
|
|
||||||
Cc: stable@vger.kernel.org
|
|
||||||
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
|
|
||||||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
||||||
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|
||||||
---
|
|
||||||
arch/x86/include/asm/msr-index.h | 1 +
|
|
||||||
arch/x86/kvm/x86.c | 2 ++
|
|
||||||
2 files changed, 3 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h
|
|
||||||
index 7ca92f9b5eae..4eb78a908544 100644
|
|
||||||
--- a/arch/x86/include/asm/msr-index.h
|
|
||||||
+++ b/arch/x86/include/asm/msr-index.h
|
|
||||||
@@ -382,6 +382,7 @@
|
|
||||||
#define MSR_F15H_NB_PERF_CTR 0xc0010241
|
|
||||||
#define MSR_F15H_PTSC 0xc0010280
|
|
||||||
#define MSR_F15H_IC_CFG 0xc0011021
|
|
||||||
+#define MSR_F15H_EX_CFG 0xc001102c
|
|
||||||
|
|
||||||
/* Fam 10h MSRs */
|
|
||||||
#define MSR_FAM10H_MMIO_CONF_BASE 0xc0010058
|
|
||||||
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
|
|
||||||
index 0bc041658a1b..e68f7bd79df5 100644
|
|
||||||
--- a/arch/x86/kvm/x86.c
|
|
||||||
+++ b/arch/x86/kvm/x86.c
|
|
||||||
@@ -2241,6 +2241,7 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
|
|
||||||
case MSR_AMD64_PATCH_LOADER:
|
|
||||||
case MSR_AMD64_BU_CFG2:
|
|
||||||
case MSR_AMD64_DC_CFG:
|
|
||||||
+ case MSR_F15H_EX_CFG:
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MSR_IA32_UCODE_REV:
|
|
||||||
@@ -2529,6 +2530,7 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
|
|
||||||
case MSR_AMD64_BU_CFG2:
|
|
||||||
case MSR_IA32_PERF_CTL:
|
|
||||||
case MSR_AMD64_DC_CFG:
|
|
||||||
+ case MSR_F15H_EX_CFG:
|
|
||||||
msr_info->data = 0;
|
|
||||||
break;
|
|
||||||
case MSR_K7_EVNTSEL0 ... MSR_K7_EVNTSEL3:
|
|
@ -19,18 +19,18 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
|
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
|
||||||
index 0c971dce8915..be629513de13 100644
|
index 83cd2c951c49..3118c1ed4642 100644
|
||||||
--- a/arch/x86/kvm/x86.c
|
--- a/arch/x86/kvm/x86.c
|
||||||
+++ b/arch/x86/kvm/x86.c
|
+++ b/arch/x86/kvm/x86.c
|
||||||
@@ -7957,6 +7957,7 @@ struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm,
|
@@ -7982,6 +7982,7 @@ struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm,
|
||||||
|
|
||||||
int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu)
|
int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
|
vcpu->arch.arch_capabilities = kvm_get_arch_capabilities();
|
||||||
+ vcpu->arch.msr_platform_info = MSR_PLATFORM_INFO_CPUID_FAULT;
|
+ vcpu->arch.msr_platform_info = MSR_PLATFORM_INFO_CPUID_FAULT;
|
||||||
kvm_vcpu_mtrr_init(vcpu);
|
kvm_vcpu_mtrr_init(vcpu);
|
||||||
vcpu_load(vcpu);
|
vcpu_load(vcpu);
|
||||||
kvm_vcpu_reset(vcpu, false);
|
kvm_vcpu_reset(vcpu, false);
|
||||||
@@ -8058,7 +8059,6 @@ void kvm_vcpu_reset(struct kvm_vcpu *vcpu, bool init_event)
|
@@ -8083,7 +8084,6 @@ void kvm_vcpu_reset(struct kvm_vcpu *vcpu, bool init_event)
|
||||||
kvm_pmu_reset(vcpu);
|
kvm_pmu_reset(vcpu);
|
||||||
vcpu->arch.smbase = 0x30000;
|
vcpu->arch.smbase = 0x30000;
|
||||||
|
|
@ -0,0 +1,22 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||||
|
Date: Fri, 6 Sep 2019 13:04:30 +0200
|
||||||
|
Subject: [PATCH] ntb test: remove unused conflicting SZ_4G define
|
||||||
|
|
||||||
|
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||||
|
---
|
||||||
|
drivers/ntb/test/ntb_perf.c | 1 -
|
||||||
|
1 file changed, 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/ntb/test/ntb_perf.c b/drivers/ntb/test/ntb_perf.c
|
||||||
|
index 427112cf101a..1f8ee33a07a2 100644
|
||||||
|
--- a/drivers/ntb/test/ntb_perf.c
|
||||||
|
+++ b/drivers/ntb/test/ntb_perf.c
|
||||||
|
@@ -74,7 +74,6 @@
|
||||||
|
#define MAX_SRCS 32
|
||||||
|
#define DMA_OUT_RESOURCE_TO msecs_to_jiffies(50)
|
||||||
|
#define DMA_RETRIES 20
|
||||||
|
-#define SZ_4G (1ULL << 32)
|
||||||
|
#define MAX_SEG_ORDER 20 /* no larger than 1M for kmalloc buffer */
|
||||||
|
#define PIDX NTB_DEF_PEER_IDX
|
||||||
|
|
@ -1,133 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Sean Christopherson <sean.j.christopherson@intel.com>
|
|
||||||
Date: Thu, 7 Mar 2019 15:43:02 -0800
|
|
||||||
Subject: [PATCH] KVM: x86: Emulate MSR_IA32_ARCH_CAPABILITIES on AMD hosts
|
|
||||||
|
|
||||||
BugLink: https://bugs.launchpad.net/bugs/1823060
|
|
||||||
|
|
||||||
commit 0cf9135b773bf32fba9dd8e6699c1b331ee4b749 upstream.
|
|
||||||
|
|
||||||
The CPUID flag ARCH_CAPABILITIES is unconditioinally exposed to host
|
|
||||||
userspace for all x86 hosts, i.e. KVM advertises ARCH_CAPABILITIES
|
|
||||||
regardless of hardware support under the pretense that KVM fully
|
|
||||||
emulates MSR_IA32_ARCH_CAPABILITIES. Unfortunately, only VMX hosts
|
|
||||||
handle accesses to MSR_IA32_ARCH_CAPABILITIES (despite KVM_GET_MSRS
|
|
||||||
also reporting MSR_IA32_ARCH_CAPABILITIES for all hosts).
|
|
||||||
|
|
||||||
Move the MSR_IA32_ARCH_CAPABILITIES handling to common x86 code so
|
|
||||||
that it's emulated on AMD hosts.
|
|
||||||
|
|
||||||
Fixes: 1eaafe91a0df4 ("kvm: x86: IA32_ARCH_CAPABILITIES is always supported")
|
|
||||||
Cc: stable@vger.kernel.org
|
|
||||||
Reported-by: Xiaoyao Li <xiaoyao.li@linux.intel.com>
|
|
||||||
Cc: Jim Mattson <jmattson@google.com>
|
|
||||||
Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
|
|
||||||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
||||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
||||||
|
|
||||||
Signed-off-by: Seth Forshee <seth.forshee@canonical.com>
|
|
||||||
|
|
||||||
(back ported from commit 0cf9135b773bf32fba9dd8e6699c1b331ee4b749)
|
|
||||||
Backported-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|
||||||
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|
||||||
---
|
|
||||||
arch/x86/include/asm/kvm_host.h | 1 +
|
|
||||||
arch/x86/kvm/vmx.c | 14 --------------
|
|
||||||
arch/x86/kvm/x86.c | 12 ++++++++++++
|
|
||||||
3 files changed, 13 insertions(+), 14 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
|
|
||||||
index c2bb7da8e5b4..e238785c22d3 100644
|
|
||||||
--- a/arch/x86/include/asm/kvm_host.h
|
|
||||||
+++ b/arch/x86/include/asm/kvm_host.h
|
|
||||||
@@ -509,6 +509,7 @@ struct kvm_vcpu_arch {
|
|
||||||
bool tpr_access_reporting;
|
|
||||||
u64 ia32_xss;
|
|
||||||
u64 microcode_version;
|
|
||||||
+ u64 arch_capabilities;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Paging state of the vcpu
|
|
||||||
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
|
|
||||||
index 921968c00dde..cddbdd2d615d 100644
|
|
||||||
--- a/arch/x86/kvm/vmx.c
|
|
||||||
+++ b/arch/x86/kvm/vmx.c
|
|
||||||
@@ -750,7 +750,6 @@ struct vcpu_vmx {
|
|
||||||
u64 msr_guest_kernel_gs_base;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
- u64 arch_capabilities;
|
|
||||||
u64 spec_ctrl;
|
|
||||||
|
|
||||||
u32 vm_entry_controls_shadow;
|
|
||||||
@@ -3485,12 +3484,6 @@ static int vmx_get_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
|
|
||||||
|
|
||||||
msr_info->data = to_vmx(vcpu)->spec_ctrl;
|
|
||||||
break;
|
|
||||||
- case MSR_IA32_ARCH_CAPABILITIES:
|
|
||||||
- if (!msr_info->host_initiated &&
|
|
||||||
- !guest_cpuid_has(vcpu, X86_FEATURE_ARCH_CAPABILITIES))
|
|
||||||
- return 1;
|
|
||||||
- msr_info->data = to_vmx(vcpu)->arch_capabilities;
|
|
||||||
- break;
|
|
||||||
case MSR_IA32_SYSENTER_CS:
|
|
||||||
msr_info->data = vmcs_read32(GUEST_SYSENTER_CS);
|
|
||||||
break;
|
|
||||||
@@ -3652,11 +3645,6 @@ static int vmx_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
|
|
||||||
vmx_disable_intercept_for_msr(vmx->vmcs01.msr_bitmap, MSR_IA32_PRED_CMD,
|
|
||||||
MSR_TYPE_W);
|
|
||||||
break;
|
|
||||||
- case MSR_IA32_ARCH_CAPABILITIES:
|
|
||||||
- if (!msr_info->host_initiated)
|
|
||||||
- return 1;
|
|
||||||
- vmx->arch_capabilities = data;
|
|
||||||
- break;
|
|
||||||
case MSR_IA32_CR_PAT:
|
|
||||||
if (vmcs_config.vmentry_ctrl & VM_ENTRY_LOAD_IA32_PAT) {
|
|
||||||
if (!kvm_mtrr_valid(vcpu, MSR_IA32_CR_PAT, data))
|
|
||||||
@@ -5914,8 +5902,6 @@ static void vmx_vcpu_setup(struct vcpu_vmx *vmx)
|
|
||||||
++vmx->nmsrs;
|
|
||||||
}
|
|
||||||
|
|
||||||
- vmx->arch_capabilities = kvm_get_arch_capabilities();
|
|
||||||
-
|
|
||||||
vm_exit_controls_init(vmx, vmcs_config.vmexit_ctrl);
|
|
||||||
|
|
||||||
/* 22.2.1, 20.8.1 */
|
|
||||||
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
|
|
||||||
index be629513de13..88f910046a60 100644
|
|
||||||
--- a/arch/x86/kvm/x86.c
|
|
||||||
+++ b/arch/x86/kvm/x86.c
|
|
||||||
@@ -2248,6 +2248,11 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
|
|
||||||
if (msr_info->host_initiated)
|
|
||||||
vcpu->arch.microcode_version = data;
|
|
||||||
break;
|
|
||||||
+ case MSR_IA32_ARCH_CAPABILITIES:
|
|
||||||
+ if (!msr_info->host_initiated)
|
|
||||||
+ return 1;
|
|
||||||
+ vcpu->arch.arch_capabilities = data;
|
|
||||||
+ break;
|
|
||||||
case MSR_EFER:
|
|
||||||
return set_efer(vcpu, data);
|
|
||||||
case MSR_K7_HWCR:
|
|
||||||
@@ -2544,6 +2549,12 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
|
|
||||||
case MSR_IA32_UCODE_REV:
|
|
||||||
msr_info->data = vcpu->arch.microcode_version;
|
|
||||||
break;
|
|
||||||
+ case MSR_IA32_ARCH_CAPABILITIES:
|
|
||||||
+ if (!msr_info->host_initiated &&
|
|
||||||
+ !guest_cpuid_has(vcpu, X86_FEATURE_ARCH_CAPABILITIES))
|
|
||||||
+ return 1;
|
|
||||||
+ msr_info->data = vcpu->arch.arch_capabilities;
|
|
||||||
+ break;
|
|
||||||
case MSR_IA32_TSC:
|
|
||||||
msr_info->data = kvm_scale_tsc(vcpu, rdtsc()) + vcpu->arch.tsc_offset;
|
|
||||||
break;
|
|
||||||
@@ -7957,6 +7968,7 @@ struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm,
|
|
||||||
|
|
||||||
int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu)
|
|
||||||
{
|
|
||||||
+ vcpu->arch.arch_capabilities = kvm_get_arch_capabilities();
|
|
||||||
vcpu->arch.msr_platform_info = MSR_PLATFORM_INFO_CPUID_FAULT;
|
|
||||||
kvm_vcpu_mtrr_init(vcpu);
|
|
||||||
vcpu_load(vcpu);
|
|
@ -1 +1 @@
|
|||||||
Subproject commit 9bff5f095923aab04411cf4e9135b975b70e3ead
|
Subproject commit 7c8b9d356cf823f9ce6d92b3827866f3db8e88e4
|
Loading…
Reference in New Issue
Block a user