rebase patches on top of Ubuntu-5.3.0-40.32
(generated with debian/scripts/import-upstream-tag) Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
parent
41e87bf3f0
commit
6ad155377d
@ -55,10 +55,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||
2 files changed, 111 insertions(+)
|
||||
|
||||
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
|
||||
index 76e82a38ba09..0c9417dab9d9 100644
|
||||
index a0e45b4c7a08..d22b0fac61c0 100644
|
||||
--- a/Documentation/admin-guide/kernel-parameters.txt
|
||||
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
||||
@@ -3389,6 +3389,15 @@
|
||||
@@ -3395,6 +3395,15 @@
|
||||
Also, it enforces the PCI Local Bus spec
|
||||
rule that those bits should be 0 in system reset
|
||||
events (useful for kexec/kdump cases).
|
||||
@ -75,7 +75,7 @@ index 76e82a38ba09..0c9417dab9d9 100644
|
||||
Safety option to keep boot IRQs enabled. This
|
||||
should never be necessary.
|
||||
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
|
||||
index 4558d1192817..22104194fc8d 100644
|
||||
index 66cd9678c672..7f589736a49e 100644
|
||||
--- a/drivers/pci/quirks.c
|
||||
+++ b/drivers/pci/quirks.c
|
||||
@@ -193,6 +193,106 @@ static int __init pci_apply_final_quirks(void)
|
||||
@ -185,7 +185,7 @@ index 4558d1192817..22104194fc8d 100644
|
||||
/*
|
||||
* Decoding should be disabled for a PCI device during BAR sizing to avoid
|
||||
* conflict. But doing so may cause problems on host bridge and perhaps other
|
||||
@@ -4567,6 +4667,8 @@ static const struct pci_dev_acs_enabled {
|
||||
@@ -4573,6 +4673,8 @@ static const struct pci_dev_acs_enabled {
|
||||
{ PCI_VENDOR_ID_CAVIUM, PCI_ANY_ID, pci_quirk_cavium_acs },
|
||||
/* APM X-Gene */
|
||||
{ PCI_VENDOR_ID_AMCC, 0xE004, pci_quirk_xgene_acs },
|
||||
|
@ -18,7 +18,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
|
||||
index 2a0e281542cc..257896531139 100644
|
||||
index 9e4b0036141f..70a2c4c27bed 100644
|
||||
--- a/arch/x86/kvm/vmx/vmx.c
|
||||
+++ b/arch/x86/kvm/vmx/vmx.c
|
||||
@@ -103,7 +103,7 @@ module_param(enable_apicv, bool, S_IRUGO);
|
||||
|
@ -60,7 +60,7 @@ index 3fcf2f84bcce..da1d6be46a0c 100644
|
||||
}
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
|
||||
index 4b4d516b15e0..106b666a2cc3 100644
|
||||
index 305abddc274a..dbdd46ba9bfe 100644
|
||||
--- a/drivers/gpu/drm/i915/display/intel_dp.c
|
||||
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
|
||||
@@ -5649,6 +5649,12 @@ intel_dp_detect(struct drm_connector *connector,
|
@ -1,86 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Yazen Ghannam <yazen.ghannam@amd.com>
|
||||
Date: Thu, 21 Nov 2019 08:15:08 -0600
|
||||
Subject: [PATCH] x86/MCE/AMD: Allow Reserved types to be overwritten in
|
||||
smca_banks[]
|
||||
|
||||
Each logical CPU in Scalable MCA systems controls a unique set of MCA
|
||||
banks in the system. These banks are not shared between CPUs. The bank
|
||||
types and ordering will be the same across CPUs on currently available
|
||||
systems.
|
||||
|
||||
However, some CPUs may see a bank as Reserved/Read-as-Zero (RAZ) while
|
||||
other CPUs do not. In this case, the bank seen as Reserved on one CPU is
|
||||
assumed to be the same type as the bank seen as a known type on another
|
||||
CPU.
|
||||
|
||||
In general, this occurs when the hardware represented by the MCA bank
|
||||
is disabled, e.g. disabled memory controllers on certain models, etc.
|
||||
The MCA bank is disabled in the hardware, so there is no possibility of
|
||||
getting an MCA/MCE from it even if it is assumed to have a known type.
|
||||
|
||||
For example:
|
||||
|
||||
Full system:
|
||||
Bank | Type seen on CPU0 | Type seen on CPU1
|
||||
------------------------------------------------
|
||||
0 | LS | LS
|
||||
1 | UMC | UMC
|
||||
2 | CS | CS
|
||||
|
||||
System with hardware disabled:
|
||||
Bank | Type seen on CPU0 | Type seen on CPU1
|
||||
------------------------------------------------
|
||||
0 | LS | LS
|
||||
1 | UMC | RAZ
|
||||
2 | CS | CS
|
||||
|
||||
For this reason, there is a single, global struct smca_banks[] that is
|
||||
initialized at boot time. This array is initialized on each CPU as it
|
||||
comes online. However, the array will not be updated if an entry already
|
||||
exists.
|
||||
|
||||
This works as expected when the first CPU (usually CPU0) has all
|
||||
possible MCA banks enabled. But if the first CPU has a subset, then it
|
||||
will save a "Reserved" type in smca_banks[]. Successive CPUs will then
|
||||
not be able to update smca_banks[] even if they encounter a known bank
|
||||
type.
|
||||
|
||||
This may result in unexpected behavior. Depending on the system
|
||||
configuration, a user may observe issues enumerating the MCA
|
||||
thresholding sysfs interface. The issues may be as trivial as sysfs
|
||||
entries not being available, or as severe as system hangs.
|
||||
|
||||
For example:
|
||||
|
||||
Bank | Type seen on CPU0 | Type seen on CPU1
|
||||
------------------------------------------------
|
||||
0 | LS | LS
|
||||
1 | RAZ | UMC
|
||||
2 | CS | CS
|
||||
|
||||
Extend the smca_banks[] entry check to return if the entry is a
|
||||
non-reserved type. Otherwise, continue so that CPUs that encounter a
|
||||
known bank type can update smca_banks[].
|
||||
|
||||
Fixes: 68627a697c19 ("x86/mce/AMD, EDAC/mce_amd: Enumerate Reserved SMCA bank type")
|
||||
Signed-off-by: Yazen Ghannam <yazen.ghannam@amd.com>
|
||||
Signed-off-by: Borislav Petkov <bp@suse.de>
|
||||
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||
---
|
||||
arch/x86/kernel/cpu/mce/amd.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/x86/kernel/cpu/mce/amd.c b/arch/x86/kernel/cpu/mce/amd.c
|
||||
index 6ea7fdc82f3c..08e09c8c269f 100644
|
||||
--- a/arch/x86/kernel/cpu/mce/amd.c
|
||||
+++ b/arch/x86/kernel/cpu/mce/amd.c
|
||||
@@ -266,7 +266,7 @@ static void smca_configure(unsigned int bank, unsigned int cpu)
|
||||
smca_set_misc_banks_map(bank, cpu);
|
||||
|
||||
/* Return early if this bank was already initialized. */
|
||||
- if (smca_banks[bank].hwid)
|
||||
+ if (smca_banks[bank].hwid && smca_banks[bank].hwid->hwid_mcatype != 0)
|
||||
return;
|
||||
|
||||
if (rdmsr_safe_on_cpu(cpu, MSR_AMD64_SMCA_MCx_IPID(bank), &low, &high)) {
|
@ -23,10 +23,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
|
||||
index 778b3a899769..92d8e4ebba16 100644
|
||||
index 9c45e6ca30fd..80e860bd39d5 100644
|
||||
--- a/arch/x86/kvm/x86.c
|
||||
+++ b/arch/x86/kvm/x86.c
|
||||
@@ -3393,6 +3393,9 @@ static void kvm_steal_time_set_preempted(struct kvm_vcpu *vcpu)
|
||||
@@ -3399,6 +3399,9 @@ static void kvm_steal_time_set_preempted(struct kvm_vcpu *vcpu)
|
||||
if (!(vcpu->arch.st.msr_val & KVM_MSR_ENABLED))
|
||||
return;
|
||||
|
@ -39,10 +39,10 @@ index f68e174f452f..7c06343614a4 100644
|
||||
|
||||
u64 tsc_offset;
|
||||
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
|
||||
index 92d8e4ebba16..41fee3d359ab 100644
|
||||
index 80e860bd39d5..cb18560b07bc 100644
|
||||
--- a/arch/x86/kvm/x86.c
|
||||
+++ b/arch/x86/kvm/x86.c
|
||||
@@ -8936,6 +8936,9 @@ static void fx_init(struct kvm_vcpu *vcpu)
|
||||
@@ -8945,6 +8945,9 @@ static void fx_init(struct kvm_vcpu *vcpu)
|
||||
void kvm_arch_vcpu_free(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
void *wbinvd_dirty_mask = vcpu->arch.wbinvd_dirty_mask;
|
||||
@ -52,7 +52,7 @@ index 92d8e4ebba16..41fee3d359ab 100644
|
||||
|
||||
kvmclock_reset(vcpu);
|
||||
|
||||
@@ -9602,11 +9605,18 @@ int kvm_arch_create_memslot(struct kvm *kvm, struct kvm_memory_slot *slot,
|
||||
@@ -9611,11 +9614,18 @@ int kvm_arch_create_memslot(struct kvm *kvm, struct kvm_memory_slot *slot,
|
||||
|
||||
void kvm_arch_memslots_updated(struct kvm *kvm, u64 gen)
|
||||
{
|
@ -28,10 +28,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||
1 file changed, 29 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
|
||||
index 41fee3d359ab..431e34965707 100644
|
||||
index cb18560b07bc..f63fa5846f08 100644
|
||||
--- a/arch/x86/kvm/x86.c
|
||||
+++ b/arch/x86/kvm/x86.c
|
||||
@@ -2482,43 +2482,45 @@ static void kvm_vcpu_flush_tlb(struct kvm_vcpu *vcpu, bool invalidate_gpa)
|
||||
@@ -2488,43 +2488,45 @@ static void kvm_vcpu_flush_tlb(struct kvm_vcpu *vcpu, bool invalidate_gpa)
|
||||
|
||||
static void record_steal_time(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
@ -92,7 +92,7 @@ index 41fee3d359ab..431e34965707 100644
|
||||
}
|
||||
|
||||
int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
|
||||
@@ -3390,18 +3392,25 @@ void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
|
||||
@@ -3396,18 +3398,25 @@ void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
|
||||
|
||||
static void kvm_steal_time_set_preempted(struct kvm_vcpu *vcpu)
|
||||
{
|
@ -38,10 +38,10 @@ index 7c06343614a4..f62f4ff5f4f4 100644
|
||||
} st;
|
||||
|
||||
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
|
||||
index 431e34965707..c059728f8a44 100644
|
||||
index f63fa5846f08..6ce9ace8a801 100644
|
||||
--- a/arch/x86/kvm/x86.c
|
||||
+++ b/arch/x86/kvm/x86.c
|
||||
@@ -2503,7 +2503,7 @@ static void record_steal_time(struct kvm_vcpu *vcpu)
|
||||
@@ -2509,7 +2509,7 @@ static void record_steal_time(struct kvm_vcpu *vcpu)
|
||||
if (xchg(&st->preempted, 0) & KVM_VCPU_FLUSH_TLB)
|
||||
kvm_vcpu_flush_tlb(vcpu, false);
|
||||
|
||||
@ -50,7 +50,7 @@ index 431e34965707..c059728f8a44 100644
|
||||
|
||||
if (st->version & 1)
|
||||
st->version += 1; /* first time write, random junk */
|
||||
@@ -2676,11 +2676,6 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
|
||||
@@ -2682,11 +2682,6 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
|
||||
if (data & KVM_STEAL_RESERVED_MASK)
|
||||
return 1;
|
||||
|
||||
@ -62,7 +62,7 @@ index 431e34965707..c059728f8a44 100644
|
||||
vcpu->arch.st.msr_val = data;
|
||||
|
||||
if (!(data & KVM_MSR_ENABLED))
|
||||
@@ -3398,7 +3393,7 @@ static void kvm_steal_time_set_preempted(struct kvm_vcpu *vcpu)
|
||||
@@ -3404,7 +3399,7 @@ static void kvm_steal_time_set_preempted(struct kvm_vcpu *vcpu)
|
||||
if (!(vcpu->arch.st.msr_val & KVM_MSR_ENABLED))
|
||||
return;
|
||||
|
||||
@ -71,7 +71,7 @@ index 431e34965707..c059728f8a44 100644
|
||||
return;
|
||||
|
||||
if (kvm_map_gfn(vcpu, vcpu->arch.st.msr_val >> PAGE_SHIFT, &map,
|
||||
@@ -3408,7 +3403,7 @@ static void kvm_steal_time_set_preempted(struct kvm_vcpu *vcpu)
|
||||
@@ -3414,7 +3409,7 @@ static void kvm_steal_time_set_preempted(struct kvm_vcpu *vcpu)
|
||||
st = map.hva +
|
||||
offset_in_page(vcpu->arch.st.msr_val & KVM_STEAL_VALID_BITS);
|
||||
|
Loading…
Reference in New Issue
Block a user