update patches for Ubuntu-5.15.0-54.60
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
parent
81e07e4618
commit
1de3bb1f40
@ -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 86fc429a0e43..0bf84788ff5b 100644
|
index 3ae5f6a3eae4..1888f6a9306b 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
|
||||||
@@ -79,7 +79,7 @@ module_param(halt_poll_ns, uint, 0644);
|
@@ -79,7 +79,7 @@ module_param(halt_poll_ns, uint, 0644);
|
||||||
|
@ -10,10 +10,10 @@ 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/net/core/dev.c b/net/core/dev.c
|
diff --git a/net/core/dev.c b/net/core/dev.c
|
||||||
index 276cca563325..c96ddc500eb3 100644
|
index be51644e95da..3247678314e2 100644
|
||||||
--- a/net/core/dev.c
|
--- a/net/core/dev.c
|
||||||
+++ b/net/core/dev.c
|
+++ b/net/core/dev.c
|
||||||
@@ -10529,7 +10529,7 @@ static void netdev_wait_allrefs(struct net_device *dev)
|
@@ -10530,7 +10530,7 @@ static void netdev_wait_allrefs(struct net_device *dev)
|
||||||
if (refcnt != 1 &&
|
if (refcnt != 1 &&
|
||||||
time_after(jiffies, warning_time +
|
time_after(jiffies, warning_time +
|
||||||
netdev_unregister_timeout_secs * HZ)) {
|
netdev_unregister_timeout_secs * HZ)) {
|
||||||
|
@ -19,7 +19,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|||||||
1 file changed, 4 insertions(+), 46 deletions(-)
|
1 file changed, 4 insertions(+), 46 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
|
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
|
||||||
index 4f26c222f5f2..c0abe906b84e 100644
|
index 103ee42f6717..6b73e9179111 100644
|
||||||
--- a/drivers/pci/probe.c
|
--- a/drivers/pci/probe.c
|
||||||
+++ b/drivers/pci/probe.c
|
+++ b/drivers/pci/probe.c
|
||||||
@@ -20,7 +20,6 @@
|
@@ -20,7 +20,6 @@
|
||||||
|
@ -56,7 +56,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|||||||
1 file changed, 27 insertions(+), 4 deletions(-)
|
1 file changed, 27 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
|
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
|
||||||
index c0abe906b84e..8b7c58dec9e4 100644
|
index 6b73e9179111..50eef5b211f4 100644
|
||||||
--- a/drivers/pci/probe.c
|
--- a/drivers/pci/probe.c
|
||||||
+++ b/drivers/pci/probe.c
|
+++ b/drivers/pci/probe.c
|
||||||
@@ -883,11 +883,11 @@ static void pci_set_bus_msi_domain(struct pci_bus *bus)
|
@@ -883,11 +883,11 @@ static void pci_set_bus_msi_domain(struct pci_bus *bus)
|
||||||
|
@ -18,7 +18,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|||||||
1 file changed, 1 insertion(+)
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
|
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
|
||||||
index 8496ffc67c32..1856de48be6b 100644
|
index 3b4e1d8d239a..ad58eb751b4f 100644
|
||||||
--- a/arch/x86/kvm/emulate.c
|
--- a/arch/x86/kvm/emulate.c
|
||||||
+++ b/arch/x86/kvm/emulate.c
|
+++ b/arch/x86/kvm/emulate.c
|
||||||
@@ -2861,6 +2861,7 @@ static int em_sysexit(struct x86_emulate_ctxt *ctxt)
|
@@ -2861,6 +2861,7 @@ static int em_sysexit(struct x86_emulate_ctxt *ctxt)
|
||||||
|
@ -21,7 +21,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|||||||
1 file changed, 57 insertions(+), 28 deletions(-)
|
1 file changed, 57 insertions(+), 28 deletions(-)
|
||||||
|
|
||||||
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
|
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
|
||||||
index 1856de48be6b..7cf3cd26748d 100644
|
index ad58eb751b4f..e095debb7022 100644
|
||||||
--- a/arch/x86/kvm/emulate.c
|
--- a/arch/x86/kvm/emulate.c
|
||||||
+++ b/arch/x86/kvm/emulate.c
|
+++ b/arch/x86/kvm/emulate.c
|
||||||
@@ -795,8 +795,7 @@ static int linearize(struct x86_emulate_ctxt *ctxt,
|
@@ -795,8 +795,7 @@ static int linearize(struct x86_emulate_ctxt *ctxt,
|
||||||
|
@ -17,7 +17,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|||||||
1 file changed, 5 insertions(+)
|
1 file changed, 5 insertions(+)
|
||||||
|
|
||||||
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
|
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
|
||||||
index 7cf3cd26748d..5be4b9927221 100644
|
index e095debb7022..9dc100399c94 100644
|
||||||
--- a/arch/x86/kvm/emulate.c
|
--- a/arch/x86/kvm/emulate.c
|
||||||
+++ b/arch/x86/kvm/emulate.c
|
+++ b/arch/x86/kvm/emulate.c
|
||||||
@@ -2638,6 +2638,11 @@ static int em_rsm(struct x86_emulate_ctxt *ctxt)
|
@@ -2638,6 +2638,11 @@ static int em_rsm(struct x86_emulate_ctxt *ctxt)
|
||||||
|
@ -19,7 +19,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|||||||
1 file changed, 13 insertions(+), 1 deletion(-)
|
1 file changed, 13 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
|
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
|
||||||
index 5be4b9927221..8e8975496a2d 100644
|
index 9dc100399c94..70ed6c458084 100644
|
||||||
--- a/arch/x86/kvm/emulate.c
|
--- a/arch/x86/kvm/emulate.c
|
||||||
+++ b/arch/x86/kvm/emulate.c
|
+++ b/arch/x86/kvm/emulate.c
|
||||||
@@ -3634,11 +3634,23 @@ static int em_movbe(struct x86_emulate_ctxt *ctxt)
|
@@ -3634,11 +3634,23 @@ static int em_movbe(struct x86_emulate_ctxt *ctxt)
|
||||||
|
@ -17,10 +17,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|||||||
3 files changed, 225 insertions(+)
|
3 files changed, 225 insertions(+)
|
||||||
|
|
||||||
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
|
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
|
||||||
index 8e8975496a2d..58bc09040b3b 100644
|
index 70ed6c458084..a332d6f5d4dc 100644
|
||||||
--- a/arch/x86/kvm/emulate.c
|
--- a/arch/x86/kvm/emulate.c
|
||||||
+++ b/arch/x86/kvm/emulate.c
|
+++ b/arch/x86/kvm/emulate.c
|
||||||
@@ -5824,3 +5824,9 @@ bool emulator_can_use_gpa(struct x86_emulate_ctxt *ctxt)
|
@@ -5827,3 +5827,9 @@ bool emulator_can_use_gpa(struct x86_emulate_ctxt *ctxt)
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -267,10 +267,10 @@ index fb09cd22cb7f..0b2bbcce321a 100644
|
|||||||
#if defined(CONFIG_X86_32)
|
#if defined(CONFIG_X86_32)
|
||||||
#define X86EMUL_MODE_HOST X86EMUL_MODE_PROT32
|
#define X86EMUL_MODE_HOST X86EMUL_MODE_PROT32
|
||||||
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 7a06f7599c8f..1a6dde98d521 100644
|
index a4377e50a721..d394cf17a864 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
|
||||||
@@ -12479,6 +12479,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_vmgexit_msr_protocol_exit);
|
@@ -12502,6 +12502,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_vmgexit_msr_protocol_exit);
|
||||||
static int __init kvm_x86_init(void)
|
static int __init kvm_x86_init(void)
|
||||||
{
|
{
|
||||||
kvm_mmu_x86_module_init();
|
kvm_mmu_x86_module_init();
|
||||||
|
@ -17,7 +17,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|||||||
6 files changed, 28 insertions(+), 20 deletions(-)
|
6 files changed, 28 insertions(+), 20 deletions(-)
|
||||||
|
|
||||||
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
|
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
|
||||||
index 4a25a459412e..0669a533451d 100644
|
index 1172a201d851..c4e382af1853 100644
|
||||||
--- a/arch/x86/include/asm/kvm_host.h
|
--- a/arch/x86/include/asm/kvm_host.h
|
||||||
+++ b/arch/x86/include/asm/kvm_host.h
|
+++ b/arch/x86/include/asm/kvm_host.h
|
||||||
@@ -200,6 +200,7 @@ typedef enum exit_fastpath_completion fastpath_t;
|
@@ -200,6 +200,7 @@ typedef enum exit_fastpath_completion fastpath_t;
|
||||||
@ -40,7 +40,7 @@ index 4a25a459412e..0669a533451d 100644
|
|||||||
|
|
||||||
int (*mem_enc_op)(struct kvm *kvm, void __user *argp);
|
int (*mem_enc_op)(struct kvm *kvm, void __user *argp);
|
||||||
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
|
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
|
||||||
index 58bc09040b3b..6b579368b813 100644
|
index a332d6f5d4dc..382d7773a8b0 100644
|
||||||
--- a/arch/x86/kvm/emulate.c
|
--- a/arch/x86/kvm/emulate.c
|
||||||
+++ b/arch/x86/kvm/emulate.c
|
+++ b/arch/x86/kvm/emulate.c
|
||||||
@@ -2566,16 +2566,18 @@ static int rsm_load_state_64(struct x86_emulate_ctxt *ctxt,
|
@@ -2566,16 +2566,18 @@ static int rsm_load_state_64(struct x86_emulate_ctxt *ctxt,
|
||||||
@ -105,7 +105,7 @@ index 0b2bbcce321a..3b37b3e17379 100644
|
|||||||
int (*set_xcr)(struct x86_emulate_ctxt *ctxt, u32 index, u64 xcr);
|
int (*set_xcr)(struct x86_emulate_ctxt *ctxt, u32 index, u64 xcr);
|
||||||
};
|
};
|
||||||
diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c
|
diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c
|
||||||
index d1ba4da93985..dee4d66ff5b5 100644
|
index 81b8eb0fa912..de82175f0aad 100644
|
||||||
--- a/arch/x86/kvm/svm/svm.c
|
--- a/arch/x86/kvm/svm/svm.c
|
||||||
+++ b/arch/x86/kvm/svm/svm.c
|
+++ b/arch/x86/kvm/svm/svm.c
|
||||||
@@ -4313,12 +4313,14 @@ static int svm_smi_allowed(struct kvm_vcpu *vcpu, bool for_injection)
|
@@ -4313,12 +4313,14 @@ static int svm_smi_allowed(struct kvm_vcpu *vcpu, bool for_injection)
|
||||||
@ -143,10 +143,10 @@ index d1ba4da93985..dee4d66ff5b5 100644
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
|
diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
|
||||||
index 1bc7f76fa0d2..fc0bb685283d 100644
|
index ff1861312448..290f4d0aca7e 100644
|
||||||
--- a/arch/x86/kvm/vmx/vmx.c
|
--- a/arch/x86/kvm/vmx/vmx.c
|
||||||
+++ b/arch/x86/kvm/vmx/vmx.c
|
+++ b/arch/x86/kvm/vmx/vmx.c
|
||||||
@@ -7595,7 +7595,7 @@ static int vmx_smi_allowed(struct kvm_vcpu *vcpu, bool for_injection)
|
@@ -7594,7 +7594,7 @@ static int vmx_smi_allowed(struct kvm_vcpu *vcpu, bool for_injection)
|
||||||
return !is_smm(vcpu);
|
return !is_smm(vcpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,7 +155,7 @@ index 1bc7f76fa0d2..fc0bb685283d 100644
|
|||||||
{
|
{
|
||||||
struct vcpu_vmx *vmx = to_vmx(vcpu);
|
struct vcpu_vmx *vmx = to_vmx(vcpu);
|
||||||
|
|
||||||
@@ -7609,7 +7609,7 @@ static int vmx_enter_smm(struct kvm_vcpu *vcpu, char *smstate)
|
@@ -7608,7 +7608,7 @@ static int vmx_enter_smm(struct kvm_vcpu *vcpu, char *smstate)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -165,10 +165,10 @@ index 1bc7f76fa0d2..fc0bb685283d 100644
|
|||||||
struct vcpu_vmx *vmx = to_vmx(vcpu);
|
struct vcpu_vmx *vmx = to_vmx(vcpu);
|
||||||
int ret;
|
int ret;
|
||||||
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 1a6dde98d521..5554e4bd70fd 100644
|
index d394cf17a864..f416ccf8a71f 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
|
||||||
@@ -7333,9 +7333,9 @@ static void emulator_exiting_smm(struct x86_emulate_ctxt *ctxt)
|
@@ -7351,9 +7351,9 @@ static void emulator_exiting_smm(struct x86_emulate_ctxt *ctxt)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int emulator_leave_smm(struct x86_emulate_ctxt *ctxt,
|
static int emulator_leave_smm(struct x86_emulate_ctxt *ctxt,
|
||||||
@ -180,7 +180,7 @@ index 1a6dde98d521..5554e4bd70fd 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void emulator_triple_fault(struct x86_emulate_ctxt *ctxt)
|
static void emulator_triple_fault(struct x86_emulate_ctxt *ctxt)
|
||||||
@@ -9194,25 +9194,25 @@ static void enter_smm(struct kvm_vcpu *vcpu)
|
@@ -9212,25 +9212,25 @@ static void enter_smm(struct kvm_vcpu *vcpu)
|
||||||
struct kvm_segment cs, ds;
|
struct kvm_segment cs, ds;
|
||||||
struct desc_ptr dt;
|
struct desc_ptr dt;
|
||||||
unsigned long cr0;
|
unsigned long cr0;
|
||||||
|
@ -15,7 +15,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|||||||
2 files changed, 60 insertions(+), 96 deletions(-)
|
2 files changed, 60 insertions(+), 96 deletions(-)
|
||||||
|
|
||||||
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
|
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
|
||||||
index 6b579368b813..63e9c9ef25a2 100644
|
index 382d7773a8b0..616337ad077c 100644
|
||||||
--- a/arch/x86/kvm/emulate.c
|
--- a/arch/x86/kvm/emulate.c
|
||||||
+++ b/arch/x86/kvm/emulate.c
|
+++ b/arch/x86/kvm/emulate.c
|
||||||
@@ -2343,25 +2343,17 @@ static void rsm_set_desc_flags(struct desc_struct *desc, u32 flags)
|
@@ -2343,25 +2343,17 @@ static void rsm_set_desc_flags(struct desc_struct *desc, u32 flags)
|
||||||
@ -145,10 +145,10 @@ index 6b579368b813..63e9c9ef25a2 100644
|
|||||||
if (ret != X86EMUL_CONTINUE)
|
if (ret != X86EMUL_CONTINUE)
|
||||||
goto emulate_shutdown;
|
goto emulate_shutdown;
|
||||||
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 5554e4bd70fd..13e457996477 100644
|
index f416ccf8a71f..c42e8be7b4ab 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
|
||||||
@@ -9048,22 +9048,18 @@ static u32 enter_smm_get_segment_flags(struct kvm_segment *seg)
|
@@ -9066,22 +9066,18 @@ static u32 enter_smm_get_segment_flags(struct kvm_segment *seg)
|
||||||
return flags;
|
return flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -179,7 +179,7 @@ index 5554e4bd70fd..13e457996477 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_X86_64
|
#ifdef CONFIG_X86_64
|
||||||
@@ -9084,54 +9080,47 @@ static void enter_smm_save_seg_64(struct kvm_vcpu *vcpu, char *buf, int n)
|
@@ -9102,54 +9098,47 @@ static void enter_smm_save_seg_64(struct kvm_vcpu *vcpu, char *buf, int n)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -257,7 +257,7 @@ index 5554e4bd70fd..13e457996477 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_X86_64
|
#ifdef CONFIG_X86_64
|
||||||
@@ -9202,7 +9191,7 @@ static void enter_smm(struct kvm_vcpu *vcpu)
|
@@ -9220,7 +9209,7 @@ static void enter_smm(struct kvm_vcpu *vcpu)
|
||||||
enter_smm_save_state_64(vcpu, (char *)&smram);
|
enter_smm_save_state_64(vcpu, (char *)&smram);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
@ -16,7 +16,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|||||||
2 files changed, 62 insertions(+), 101 deletions(-)
|
2 files changed, 62 insertions(+), 101 deletions(-)
|
||||||
|
|
||||||
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
|
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
|
||||||
index 63e9c9ef25a2..2677a342fb10 100644
|
index 616337ad077c..72e895b0b61a 100644
|
||||||
--- a/arch/x86/kvm/emulate.c
|
--- a/arch/x86/kvm/emulate.c
|
||||||
+++ b/arch/x86/kvm/emulate.c
|
+++ b/arch/x86/kvm/emulate.c
|
||||||
@@ -2357,24 +2357,16 @@ static void rsm_load_seg_32(struct x86_emulate_ctxt *ctxt,
|
@@ -2357,24 +2357,16 @@ static void rsm_load_seg_32(struct x86_emulate_ctxt *ctxt,
|
||||||
@ -154,10 +154,10 @@ index 63e9c9ef25a2..2677a342fb10 100644
|
|||||||
#endif
|
#endif
|
||||||
ret = rsm_load_state_32(ctxt, &smram.smram32);
|
ret = rsm_load_state_32(ctxt, &smram.smram32);
|
||||||
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 13e457996477..6aa50ec9b2a9 100644
|
index c42e8be7b4ab..0f38c8fa4287 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
|
||||||
@@ -9063,20 +9063,17 @@ static void enter_smm_save_seg_32(struct kvm_vcpu *vcpu,
|
@@ -9081,20 +9081,17 @@ static void enter_smm_save_seg_32(struct kvm_vcpu *vcpu,
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_X86_64
|
#ifdef CONFIG_X86_64
|
||||||
@ -185,7 +185,7 @@ index 13e457996477..6aa50ec9b2a9 100644
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -9124,57 +9121,51 @@ static void enter_smm_save_state_32(struct kvm_vcpu *vcpu, struct kvm_smram_stat
|
@@ -9142,57 +9139,51 @@ static void enter_smm_save_state_32(struct kvm_vcpu *vcpu, struct kvm_smram_stat
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_X86_64
|
#ifdef CONFIG_X86_64
|
||||||
@ -268,7 +268,7 @@ index 13e457996477..6aa50ec9b2a9 100644
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -9188,7 +9179,7 @@ static void enter_smm(struct kvm_vcpu *vcpu)
|
@@ -9206,7 +9197,7 @@ static void enter_smm(struct kvm_vcpu *vcpu)
|
||||||
memset(smram.bytes, 0, sizeof(smram.bytes));
|
memset(smram.bytes, 0, sizeof(smram.bytes));
|
||||||
#ifdef CONFIG_X86_64
|
#ifdef CONFIG_X86_64
|
||||||
if (guest_cpuid_has(vcpu, X86_FEATURE_LM))
|
if (guest_cpuid_has(vcpu, X86_FEATURE_LM))
|
||||||
|
@ -17,10 +17,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|||||||
2 files changed, 6 insertions(+), 21 deletions(-)
|
2 files changed, 6 insertions(+), 21 deletions(-)
|
||||||
|
|
||||||
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
|
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
|
||||||
index 0669a533451d..5673d08daa67 100644
|
index c4e382af1853..932c0f659468 100644
|
||||||
--- a/arch/x86/include/asm/kvm_host.h
|
--- a/arch/x86/include/asm/kvm_host.h
|
||||||
+++ b/arch/x86/include/asm/kvm_host.h
|
+++ b/arch/x86/include/asm/kvm_host.h
|
||||||
@@ -1936,12 +1936,6 @@ static inline int kvm_cpu_get_apicid(int mps_cpu)
|
@@ -1937,12 +1937,6 @@ static inline int kvm_cpu_get_apicid(int mps_cpu)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -34,7 +34,7 @@ index 0669a533451d..5673d08daa67 100644
|
|||||||
|
|
||||||
int alloc_all_memslots_rmaps(struct kvm *kvm);
|
int alloc_all_memslots_rmaps(struct kvm *kvm);
|
||||||
diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c
|
diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c
|
||||||
index dee4d66ff5b5..423a32287357 100644
|
index de82175f0aad..399a7f2e0d1f 100644
|
||||||
--- a/arch/x86/kvm/svm/svm.c
|
--- a/arch/x86/kvm/svm/svm.c
|
||||||
+++ b/arch/x86/kvm/svm/svm.c
|
+++ b/arch/x86/kvm/svm/svm.c
|
||||||
@@ -4319,15 +4319,11 @@ static int svm_enter_smm(struct kvm_vcpu *vcpu, union kvm_smram *smram)
|
@@ -4319,15 +4319,11 @@ static int svm_enter_smm(struct kvm_vcpu *vcpu, union kvm_smram *smram)
|
||||||
|
@ -19,7 +19,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|||||||
1 file changed, 9 insertions(+)
|
1 file changed, 9 insertions(+)
|
||||||
|
|
||||||
diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c
|
diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c
|
||||||
index 423a32287357..1d7f6fba034c 100644
|
index 399a7f2e0d1f..cbfd9b23c32b 100644
|
||||||
--- a/arch/x86/kvm/svm/svm.c
|
--- a/arch/x86/kvm/svm/svm.c
|
||||||
+++ b/arch/x86/kvm/svm/svm.c
|
+++ b/arch/x86/kvm/svm/svm.c
|
||||||
@@ -4322,6 +4322,15 @@ static int svm_enter_smm(struct kvm_vcpu *vcpu, union kvm_smram *smram)
|
@@ -4322,6 +4322,15 @@ static int svm_enter_smm(struct kvm_vcpu *vcpu, union kvm_smram *smram)
|
||||||
|
@ -30,7 +30,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|||||||
3 files changed, 32 insertions(+), 7 deletions(-)
|
3 files changed, 32 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
|
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
|
||||||
index 2677a342fb10..3ccd0d0f451f 100644
|
index 72e895b0b61a..dbd65ea22e46 100644
|
||||||
--- a/arch/x86/kvm/emulate.c
|
--- a/arch/x86/kvm/emulate.c
|
||||||
+++ b/arch/x86/kvm/emulate.c
|
+++ b/arch/x86/kvm/emulate.c
|
||||||
@@ -2419,7 +2419,7 @@ static int rsm_load_state_32(struct x86_emulate_ctxt *ctxt,
|
@@ -2419,7 +2419,7 @@ static int rsm_load_state_32(struct x86_emulate_ctxt *ctxt,
|
||||||
@ -128,10 +128,10 @@ index 3b37b3e17379..a64c190abf28 100644
|
|||||||
__CHECK_SMRAM64_OFFSET(auto_hlt_restart, 0xFEC9);
|
__CHECK_SMRAM64_OFFSET(auto_hlt_restart, 0xFEC9);
|
||||||
__CHECK_SMRAM64_OFFSET(reserved2, 0xFECA);
|
__CHECK_SMRAM64_OFFSET(reserved2, 0xFECA);
|
||||||
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 6aa50ec9b2a9..85b0a31c1999 100644
|
index 0f38c8fa4287..e6da373339ca 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
|
||||||
@@ -7320,6 +7320,11 @@ static void emulator_set_nmi_mask(struct x86_emulate_ctxt *ctxt, bool masked)
|
@@ -7338,6 +7338,11 @@ static void emulator_set_nmi_mask(struct x86_emulate_ctxt *ctxt, bool masked)
|
||||||
static_call(kvm_x86_set_nmi_mask)(emul_to_vcpu(ctxt), masked);
|
static_call(kvm_x86_set_nmi_mask)(emul_to_vcpu(ctxt), masked);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,7 +143,7 @@ index 6aa50ec9b2a9..85b0a31c1999 100644
|
|||||||
static unsigned emulator_get_hflags(struct x86_emulate_ctxt *ctxt)
|
static unsigned emulator_get_hflags(struct x86_emulate_ctxt *ctxt)
|
||||||
{
|
{
|
||||||
return emul_to_vcpu(ctxt)->arch.hflags;
|
return emul_to_vcpu(ctxt)->arch.hflags;
|
||||||
@@ -7389,6 +7394,7 @@ static const struct x86_emulate_ops emulate_ops = {
|
@@ -7407,6 +7412,7 @@ static const struct x86_emulate_ops emulate_ops = {
|
||||||
.guest_has_fxsr = emulator_guest_has_fxsr,
|
.guest_has_fxsr = emulator_guest_has_fxsr,
|
||||||
.guest_has_rdpid = emulator_guest_has_rdpid,
|
.guest_has_rdpid = emulator_guest_has_rdpid,
|
||||||
.set_nmi_mask = emulator_set_nmi_mask,
|
.set_nmi_mask = emulator_set_nmi_mask,
|
||||||
@ -151,7 +151,7 @@ index 6aa50ec9b2a9..85b0a31c1999 100644
|
|||||||
.get_hflags = emulator_get_hflags,
|
.get_hflags = emulator_get_hflags,
|
||||||
.exiting_smm = emulator_exiting_smm,
|
.exiting_smm = emulator_exiting_smm,
|
||||||
.leave_smm = emulator_leave_smm,
|
.leave_smm = emulator_leave_smm,
|
||||||
@@ -9118,6 +9124,8 @@ static void enter_smm_save_state_32(struct kvm_vcpu *vcpu, struct kvm_smram_stat
|
@@ -9136,6 +9142,8 @@ static void enter_smm_save_state_32(struct kvm_vcpu *vcpu, struct kvm_smram_stat
|
||||||
smram->cr4 = kvm_read_cr4(vcpu);
|
smram->cr4 = kvm_read_cr4(vcpu);
|
||||||
smram->smm_revision = 0x00020000;
|
smram->smm_revision = 0x00020000;
|
||||||
smram->smbase = vcpu->arch.smbase;
|
smram->smbase = vcpu->arch.smbase;
|
||||||
@ -160,7 +160,7 @@ index 6aa50ec9b2a9..85b0a31c1999 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_X86_64
|
#ifdef CONFIG_X86_64
|
||||||
@@ -9166,6 +9174,8 @@ static void enter_smm_save_state_64(struct kvm_vcpu *vcpu, struct kvm_smram_stat
|
@@ -9184,6 +9192,8 @@ static void enter_smm_save_state_64(struct kvm_vcpu *vcpu, struct kvm_smram_stat
|
||||||
enter_smm_save_seg_64(vcpu, &smram->ds, VCPU_SREG_DS);
|
enter_smm_save_seg_64(vcpu, &smram->ds, VCPU_SREG_DS);
|
||||||
enter_smm_save_seg_64(vcpu, &smram->fs, VCPU_SREG_FS);
|
enter_smm_save_seg_64(vcpu, &smram->fs, VCPU_SREG_FS);
|
||||||
enter_smm_save_seg_64(vcpu, &smram->gs, VCPU_SREG_GS);
|
enter_smm_save_seg_64(vcpu, &smram->gs, VCPU_SREG_GS);
|
||||||
@ -169,7 +169,7 @@ index 6aa50ec9b2a9..85b0a31c1999 100644
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -9202,6 +9212,8 @@ static void enter_smm(struct kvm_vcpu *vcpu)
|
@@ -9220,6 +9230,8 @@ static void enter_smm(struct kvm_vcpu *vcpu)
|
||||||
kvm_set_rflags(vcpu, X86_EFLAGS_FIXED);
|
kvm_set_rflags(vcpu, X86_EFLAGS_FIXED);
|
||||||
kvm_rip_write(vcpu, 0x8000);
|
kvm_rip_write(vcpu, 0x8000);
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
From 955c2b4d64593baecc87c64d1354cd5786975bd9 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Maxim Levitsky <mlevitsk@redhat.com>
|
From: Maxim Levitsky <mlevitsk@redhat.com>
|
||||||
Date: Mon, 6 Jun 2022 21:11:49 +0300
|
Date: Mon, 6 Jun 2022 21:11:49 +0300
|
||||||
Subject: [PATCH] KVM: SVM: fix tsc scaling cache logic
|
Subject: [PATCH] KVM: SVM: fix tsc scaling cache logic
|
||||||
@ -36,15 +36,16 @@ Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|||||||
[FE: backport, mainly dropped parts for the not yet present
|
[FE: backport, mainly dropped parts for the not yet present
|
||||||
5228eb96a487 ("KVM: x86: nSVM: implement nested TSC scaling")]
|
5228eb96a487 ("KVM: x86: nSVM: implement nested TSC scaling")]
|
||||||
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
|
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
|
||||||
|
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||||
---
|
---
|
||||||
arch/x86/kvm/svm/svm.c | 30 +++++++++++++++++++-----------
|
arch/x86/kvm/svm/svm.c | 30 +++++++++++++++++++-----------
|
||||||
1 file changed, 19 insertions(+), 11 deletions(-)
|
1 file changed, 19 insertions(+), 11 deletions(-)
|
||||||
|
|
||||||
diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c
|
diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c
|
||||||
index 938b9b24f0ee..ea87d06bdaba 100644
|
index cbfd9b23c32b..14d6cad2afdc 100644
|
||||||
--- a/arch/x86/kvm/svm/svm.c
|
--- a/arch/x86/kvm/svm/svm.c
|
||||||
+++ b/arch/x86/kvm/svm/svm.c
|
+++ b/arch/x86/kvm/svm/svm.c
|
||||||
@@ -468,11 +468,24 @@ static int has_svm(void)
|
@@ -472,11 +472,24 @@ static int has_svm(void)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,7 +71,7 @@ index 938b9b24f0ee..ea87d06bdaba 100644
|
|||||||
|
|
||||||
cpu_svm_disable();
|
cpu_svm_disable();
|
||||||
|
|
||||||
@@ -514,8 +527,7 @@ static int svm_hardware_enable(void)
|
@@ -518,8 +531,7 @@ static int svm_hardware_enable(void)
|
||||||
wrmsrl(MSR_VM_HSAVE_PA, __sme_page_pa(sd->save_area));
|
wrmsrl(MSR_VM_HSAVE_PA, __sme_page_pa(sd->save_area));
|
||||||
|
|
||||||
if (static_cpu_has(X86_FEATURE_TSCRATEMSR)) {
|
if (static_cpu_has(X86_FEATURE_TSCRATEMSR)) {
|
||||||
@ -80,7 +81,7 @@ index 938b9b24f0ee..ea87d06bdaba 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1128,9 +1140,10 @@ static void svm_write_tsc_offset(struct kvm_vcpu *vcpu, u64 offset)
|
@@ -1132,9 +1144,10 @@ static void svm_write_tsc_offset(struct kvm_vcpu *vcpu, u64 offset)
|
||||||
|
|
||||||
static void svm_write_tsc_multiplier(struct kvm_vcpu *vcpu, u64 multiplier)
|
static void svm_write_tsc_multiplier(struct kvm_vcpu *vcpu, u64 multiplier)
|
||||||
{
|
{
|
||||||
@ -92,7 +93,7 @@ index 938b9b24f0ee..ea87d06bdaba 100644
|
|||||||
/* Evaluate instruction intercepts that depend on guest CPUID features. */
|
/* Evaluate instruction intercepts that depend on guest CPUID features. */
|
||||||
static void svm_recalc_instruction_intercepts(struct kvm_vcpu *vcpu,
|
static void svm_recalc_instruction_intercepts(struct kvm_vcpu *vcpu,
|
||||||
struct vcpu_svm *svm)
|
struct vcpu_svm *svm)
|
||||||
@@ -1453,13 +1466,8 @@ static void svm_prepare_guest_switch(struct kvm_vcpu *vcpu)
|
@@ -1457,13 +1470,8 @@ static void svm_prepare_guest_switch(struct kvm_vcpu *vcpu)
|
||||||
vmsave(__sme_page_pa(sd->save_area));
|
vmsave(__sme_page_pa(sd->save_area));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,6 +109,3 @@ index 938b9b24f0ee..ea87d06bdaba 100644
|
|||||||
|
|
||||||
if (likely(tsc_aux_uret_slot >= 0))
|
if (likely(tsc_aux_uret_slot >= 0))
|
||||||
kvm_set_user_return_msr(tsc_aux_uret_slot, svm->tsc_aux, -1ull);
|
kvm_set_user_return_msr(tsc_aux_uret_slot, svm->tsc_aux, -1ull);
|
||||||
--
|
|
||||||
2.30.2
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jim Mattson <jmattson@google.com>
|
|
||||||
Date: Wed, 10 Aug 2022 14:30:50 -0700
|
|
||||||
Subject: [PATCH] KVM: VMX: Heed the 'msr' argument in msr_write_intercepted()
|
|
||||||
|
|
||||||
[ Upstream commit 020dac4187968535f089f83f376a72beb3451311 ]
|
|
||||||
|
|
||||||
Regardless of the 'msr' argument passed to the VMX version of
|
|
||||||
msr_write_intercepted(), the function always checks to see if a
|
|
||||||
specific MSR (IA32_SPEC_CTRL) is intercepted for write. This behavior
|
|
||||||
seems unintentional and unexpected.
|
|
||||||
|
|
||||||
Modify the function so that it checks to see if the provided 'msr'
|
|
||||||
index is intercepted for write.
|
|
||||||
|
|
||||||
Fixes: 67f4b9969c30 ("KVM: nVMX: Handle dynamic MSR intercept toggling")
|
|
||||||
Cc: Sean Christopherson <seanjc@google.com>
|
|
||||||
Signed-off-by: Jim Mattson <jmattson@google.com>
|
|
||||||
Reviewed-by: Sean Christopherson <seanjc@google.com>
|
|
||||||
Message-Id: <20220810213050.2655000-1-jmattson@google.com>
|
|
||||||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
||||||
Signed-off-by: Sasha Levin <sashal@kernel.org>
|
|
||||||
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|
||||||
---
|
|
||||||
arch/x86/kvm/vmx/vmx.c | 3 +--
|
|
||||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
|
|
||||||
index fc0bb685283d..290f4d0aca7e 100644
|
|
||||||
--- a/arch/x86/kvm/vmx/vmx.c
|
|
||||||
+++ b/arch/x86/kvm/vmx/vmx.c
|
|
||||||
@@ -831,8 +831,7 @@ static bool msr_write_intercepted(struct vcpu_vmx *vmx, u32 msr)
|
|
||||||
if (!(exec_controls_get(vmx) & CPU_BASED_USE_MSR_BITMAPS))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
- return vmx_test_msr_bitmap_write(vmx->loaded_vmcs->msr_bitmap,
|
|
||||||
- MSR_IA32_SPEC_CTRL);
|
|
||||||
+ return vmx_test_msr_bitmap_write(vmx->loaded_vmcs->msr_bitmap, msr);
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int __vmx_vcpu_run_flags(struct vcpu_vmx *vmx)
|
|
@ -1,63 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Liu Jian <liujian56@huawei.com>
|
|
||||||
Date: Tue, 9 Aug 2022 17:49:15 +0800
|
|
||||||
Subject: [PATCH] skmsg: Fix wrong last sg check in sk_msg_recvmsg()
|
|
||||||
|
|
||||||
[ Upstream commit 583585e48d965338e73e1eb383768d16e0922d73 ]
|
|
||||||
|
|
||||||
Fix one kernel NULL pointer dereference as below:
|
|
||||||
|
|
||||||
[ 224.462334] Call Trace:
|
|
||||||
[ 224.462394] __tcp_bpf_recvmsg+0xd3/0x380
|
|
||||||
[ 224.462441] ? sock_has_perm+0x78/0xa0
|
|
||||||
[ 224.462463] tcp_bpf_recvmsg+0x12e/0x220
|
|
||||||
[ 224.462494] inet_recvmsg+0x5b/0xd0
|
|
||||||
[ 224.462534] __sys_recvfrom+0xc8/0x130
|
|
||||||
[ 224.462574] ? syscall_trace_enter+0x1df/0x2e0
|
|
||||||
[ 224.462606] ? __do_page_fault+0x2de/0x500
|
|
||||||
[ 224.462635] __x64_sys_recvfrom+0x24/0x30
|
|
||||||
[ 224.462660] do_syscall_64+0x5d/0x1d0
|
|
||||||
[ 224.462709] entry_SYSCALL_64_after_hwframe+0x65/0xca
|
|
||||||
|
|
||||||
In commit 9974d37ea75f ("skmsg: Fix invalid last sg check in
|
|
||||||
sk_msg_recvmsg()"), we change last sg check to sg_is_last(),
|
|
||||||
but in sockmap redirection case (without stream_parser/stream_verdict/
|
|
||||||
skb_verdict), we did not mark the end of the scatterlist. Check the
|
|
||||||
sk_msg_alloc, sk_msg_page_add, and bpf_msg_push_data functions, they all
|
|
||||||
do not mark the end of sg. They are expected to use sg.end for end
|
|
||||||
judgment. So the judgment of '(i != msg_rx->sg.end)' is added back here.
|
|
||||||
|
|
||||||
Fixes: 9974d37ea75f ("skmsg: Fix invalid last sg check in sk_msg_recvmsg()")
|
|
||||||
Signed-off-by: Liu Jian <liujian56@huawei.com>
|
|
||||||
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
|
|
||||||
Acked-by: John Fastabend <john.fastabend@gmail.com>
|
|
||||||
Acked-by: Jakub Sitnicki <jakub@cloudflare.com>
|
|
||||||
Link: https://lore.kernel.org/bpf/20220809094915.150391-1-liujian56@huawei.com
|
|
||||||
Signed-off-by: Sasha Levin <sashal@kernel.org>
|
|
||||||
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|
||||||
---
|
|
||||||
net/core/skmsg.c | 4 ++--
|
|
||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/net/core/skmsg.c b/net/core/skmsg.c
|
|
||||||
index f50f8d95b628..23d65fe160c3 100644
|
|
||||||
--- a/net/core/skmsg.c
|
|
||||||
+++ b/net/core/skmsg.c
|
|
||||||
@@ -462,7 +462,7 @@ int sk_msg_recvmsg(struct sock *sk, struct sk_psock *psock, struct msghdr *msg,
|
|
||||||
|
|
||||||
if (copied == len)
|
|
||||||
break;
|
|
||||||
- } while (!sg_is_last(sge));
|
|
||||||
+ } while ((i != msg_rx->sg.end) && !sg_is_last(sge));
|
|
||||||
|
|
||||||
if (unlikely(peek)) {
|
|
||||||
msg_rx = sk_psock_next_msg(psock, msg_rx);
|
|
||||||
@@ -472,7 +472,7 @@ int sk_msg_recvmsg(struct sock *sk, struct sk_psock *psock, struct msghdr *msg,
|
|
||||||
}
|
|
||||||
|
|
||||||
msg_rx->sg.start = i;
|
|
||||||
- if (!sge->length && sg_is_last(sge)) {
|
|
||||||
+ if (!sge->length && (i == msg_rx->sg.end || sg_is_last(sge))) {
|
|
||||||
msg_rx = sk_psock_dequeue_msg(psock);
|
|
||||||
kfree_sk_msg(msg_rx);
|
|
||||||
}
|
|
@ -1,51 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Chris Wilson <chris.p.wilson@intel.com>
|
|
||||||
Date: Wed, 27 Jul 2022 14:29:54 +0200
|
|
||||||
Subject: [PATCH] drm/i915/gt: Skip TLB invalidations once wedged
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
[ Upstream commit e5a95c83ed1492c0f442b448b20c90c8faaf702b ]
|
|
||||||
|
|
||||||
Skip all further TLB invalidations once the device is wedged and
|
|
||||||
had been reset, as, on such cases, it can no longer process instructions
|
|
||||||
on the GPU and the user no longer has access to the TLB's in each engine.
|
|
||||||
|
|
||||||
So, an attempt to do a TLB cache invalidation will produce a timeout.
|
|
||||||
|
|
||||||
That helps to reduce the performance regression introduced by TLB
|
|
||||||
invalidate logic.
|
|
||||||
|
|
||||||
Cc: stable@vger.kernel.org
|
|
||||||
Fixes: 7938d61591d3 ("drm/i915: Flush TLBs before releasing backing store")
|
|
||||||
Signed-off-by: Chris Wilson <chris.p.wilson@intel.com>
|
|
||||||
Cc: Fei Yang <fei.yang@intel.com>
|
|
||||||
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
|
|
||||||
Reviewed-by: Andi Shyti <andi.shyti@linux.intel.com>
|
|
||||||
Acked-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
|
|
||||||
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
|
|
||||||
Signed-off-by: Andi Shyti <andi.shyti@linux.intel.com>
|
|
||||||
Link: https://patchwork.freedesktop.org/patch/msgid/5aa86564b9ec5fe7fe605c1dd7de76855401ed73.1658924372.git.mchehab@kernel.org
|
|
||||||
(cherry picked from commit be0366f168033374a93e4c43fdaa1a90ab905184)
|
|
||||||
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
|
|
||||||
Signed-off-by: Sasha Levin <sashal@kernel.org>
|
|
||||||
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|
||||||
---
|
|
||||||
drivers/gpu/drm/i915/gt/intel_gt.c | 3 +++
|
|
||||||
1 file changed, 3 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/i915/gt/intel_gt.c b/drivers/gpu/drm/i915/gt/intel_gt.c
|
|
||||||
index 3a76000d15bf..ed8ad3b26395 100644
|
|
||||||
--- a/drivers/gpu/drm/i915/gt/intel_gt.c
|
|
||||||
+++ b/drivers/gpu/drm/i915/gt/intel_gt.c
|
|
||||||
@@ -949,6 +949,9 @@ void intel_gt_invalidate_tlbs(struct intel_gt *gt)
|
|
||||||
if (I915_SELFTEST_ONLY(gt->awake == -ENODEV))
|
|
||||||
return;
|
|
||||||
|
|
||||||
+ if (intel_gt_is_wedged(gt))
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
if (GRAPHICS_VER(i915) == 12) {
|
|
||||||
regs = gen12_regs;
|
|
||||||
num = ARRAY_SIZE(gen12_regs);
|
|
@ -1,60 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Lukas Wunner <lukas@wunner.de>
|
|
||||||
Date: Fri, 23 Sep 2022 06:09:52 +0200
|
|
||||||
Subject: [PATCH] net: phy: Don't WARN for PHY_UP state in
|
|
||||||
mdio_bus_phy_resume()
|
|
||||||
|
|
||||||
[ Upstream commit ea64cdfad124922c931633e39287c5a31a9b14a1 ]
|
|
||||||
|
|
||||||
Commit 744d23c71af3 ("net: phy: Warn about incorrect mdio_bus_phy_resume()
|
|
||||||
state") introduced a WARN() on resume from system sleep if a PHY is not
|
|
||||||
in PHY_HALTED state.
|
|
||||||
|
|
||||||
Commit 6dbe852c379f ("net: phy: Don't WARN for PHY_READY state in
|
|
||||||
mdio_bus_phy_resume()") added an exemption for PHY_READY state from
|
|
||||||
the WARN().
|
|
||||||
|
|
||||||
It turns out PHY_UP state needs to be exempted as well because the
|
|
||||||
following may happen on suspend:
|
|
||||||
|
|
||||||
mdio_bus_phy_suspend()
|
|
||||||
phy_stop_machine()
|
|
||||||
phydev->state = PHY_UP # if (phydev->state >= PHY_UP)
|
|
||||||
|
|
||||||
Fixes: 744d23c71af3 ("net: phy: Warn about incorrect mdio_bus_phy_resume() state")
|
|
||||||
Reported-by: Marek Szyprowski <m.szyprowski@samsung.com>
|
|
||||||
Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
|
|
||||||
Link: https://lore.kernel.org/netdev/2b1a1588-505e-dff3-301d-bfc1fb14d685@samsung.com/
|
|
||||||
Signed-off-by: Lukas Wunner <lukas@wunner.de>
|
|
||||||
Acked-by: Florian Fainelli <f.fainelli@gmail.com>
|
|
||||||
Cc: Xiaolei Wang <xiaolei.wang@windriver.com>
|
|
||||||
Link: https://lore.kernel.org/r/8128fdb51eeebc9efbf3776a4097363a1317aaf1.1663905575.git.lukas@wunner.de
|
|
||||||
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|
||||||
Signed-off-by: Sasha Levin <sashal@kernel.org>
|
|
||||||
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|
||||||
---
|
|
||||||
drivers/net/phy/phy_device.c | 10 ++++++----
|
|
||||||
1 file changed, 6 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
|
|
||||||
index b616f55ea222..c5b92ffaffb9 100644
|
|
||||||
--- a/drivers/net/phy/phy_device.c
|
|
||||||
+++ b/drivers/net/phy/phy_device.c
|
|
||||||
@@ -315,11 +315,13 @@ static __maybe_unused int mdio_bus_phy_resume(struct device *dev)
|
|
||||||
|
|
||||||
phydev->suspended_by_mdio_bus = 0;
|
|
||||||
|
|
||||||
- /* If we manged to get here with the PHY state machine in a state neither
|
|
||||||
- * PHY_HALTED nor PHY_READY this is an indication that something went wrong
|
|
||||||
- * and we should most likely be using MAC managed PM and we are not.
|
|
||||||
+ /* If we managed to get here with the PHY state machine in a state
|
|
||||||
+ * neither PHY_HALTED, PHY_READY nor PHY_UP, this is an indication
|
|
||||||
+ * that something went wrong and we should most likely be using
|
|
||||||
+ * MAC managed PM, but we are not.
|
|
||||||
*/
|
|
||||||
- WARN_ON(phydev->state != PHY_HALTED && phydev->state != PHY_READY);
|
|
||||||
+ WARN_ON(phydev->state != PHY_HALTED && phydev->state != PHY_READY &&
|
|
||||||
+ phydev->state != PHY_UP);
|
|
||||||
|
|
||||||
ret = phy_init_hw(phydev);
|
|
||||||
if (ret < 0)
|
|
@ -1,169 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Lijo Lazar <lijo.lazar@amd.com>
|
|
||||||
Date: Thu, 8 Sep 2022 08:28:57 +0530
|
|
||||||
Subject: [PATCH] drm/amdgpu: Don't enable LTR if not supported
|
|
||||||
|
|
||||||
commit 6c20490663553cd7e07d8de8af482012329ab9d6 upstream.
|
|
||||||
|
|
||||||
As per PCIE Base Spec r4.0 Section 6.18
|
|
||||||
'Software must not enable LTR in an Endpoint unless the Root Complex
|
|
||||||
and all intermediate Switches indicate support for LTR.'
|
|
||||||
|
|
||||||
This fixes the Unsupported Request error reported through AER during
|
|
||||||
ASPM enablement.
|
|
||||||
|
|
||||||
Link: https://bugzilla.kernel.org/show_bug.cgi?id=216455
|
|
||||||
|
|
||||||
The error was unnoticed before and got visible because of the commit
|
|
||||||
referenced below. This doesn't fix anything in the commit below, rather
|
|
||||||
fixes the issue in amdgpu exposed by the commit. The reference is only
|
|
||||||
to associate this commit with below one so that both go together.
|
|
||||||
|
|
||||||
Fixes: 8795e182b02d ("PCI/portdrv: Don't disable AER reporting in get_port_device_capability()")
|
|
||||||
|
|
||||||
Reported-by: Gustaw Smolarczyk <wielkiegie@gmail.com>
|
|
||||||
Signed-off-by: Lijo Lazar <lijo.lazar@amd.com>
|
|
||||||
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
|
|
||||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
||||||
|
|
||||||
Cc: stable@vger.kernel.org
|
|
||||||
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
|
||||||
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|
||||||
---
|
|
||||||
drivers/gpu/drm/amd/amdgpu/nbio_v2_3.c | 9 ++++++++-
|
|
||||||
drivers/gpu/drm/amd/amdgpu/nbio_v6_1.c | 9 ++++++++-
|
|
||||||
drivers/gpu/drm/amd/amdgpu/nbio_v7_4.c | 9 ++++++++-
|
|
||||||
3 files changed, 24 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/amd/amdgpu/nbio_v2_3.c b/drivers/gpu/drm/amd/amdgpu/nbio_v2_3.c
|
|
||||||
index b184b656b9b6..6f21154d4891 100644
|
|
||||||
--- a/drivers/gpu/drm/amd/amdgpu/nbio_v2_3.c
|
|
||||||
+++ b/drivers/gpu/drm/amd/amdgpu/nbio_v2_3.c
|
|
||||||
@@ -366,6 +366,7 @@ static void nbio_v2_3_enable_aspm(struct amdgpu_device *adev,
|
|
||||||
WREG32_PCIE(smnPCIE_LC_CNTL, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
+#ifdef CONFIG_PCIEASPM
|
|
||||||
static void nbio_v2_3_program_ltr(struct amdgpu_device *adev)
|
|
||||||
{
|
|
||||||
uint32_t def, data;
|
|
||||||
@@ -387,9 +388,11 @@ static void nbio_v2_3_program_ltr(struct amdgpu_device *adev)
|
|
||||||
if (def != data)
|
|
||||||
WREG32_PCIE(smnBIF_CFG_DEV0_EPF0_DEVICE_CNTL2, data);
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
static void nbio_v2_3_program_aspm(struct amdgpu_device *adev)
|
|
||||||
{
|
|
||||||
+#ifdef CONFIG_PCIEASPM
|
|
||||||
uint32_t def, data;
|
|
||||||
|
|
||||||
def = data = RREG32_PCIE(smnPCIE_LC_CNTL);
|
|
||||||
@@ -445,7 +448,10 @@ static void nbio_v2_3_program_aspm(struct amdgpu_device *adev)
|
|
||||||
if (def != data)
|
|
||||||
WREG32_PCIE(smnPCIE_LC_CNTL6, data);
|
|
||||||
|
|
||||||
- nbio_v2_3_program_ltr(adev);
|
|
||||||
+ /* Don't bother about LTR if LTR is not enabled
|
|
||||||
+ * in the path */
|
|
||||||
+ if (adev->pdev->ltr_path)
|
|
||||||
+ nbio_v2_3_program_ltr(adev);
|
|
||||||
|
|
||||||
def = data = RREG32_SOC15(NBIO, 0, mmRCC_BIF_STRAP3);
|
|
||||||
data |= 0x5DE0 << RCC_BIF_STRAP3__STRAP_VLINK_ASPM_IDLE_TIMER__SHIFT;
|
|
||||||
@@ -469,6 +475,7 @@ static void nbio_v2_3_program_aspm(struct amdgpu_device *adev)
|
|
||||||
data &= ~PCIE_LC_CNTL3__LC_DSC_DONT_ENTER_L23_AFTER_PME_ACK_MASK;
|
|
||||||
if (def != data)
|
|
||||||
WREG32_PCIE(smnPCIE_LC_CNTL3, data);
|
|
||||||
+#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static void nbio_v2_3_apply_lc_spc_mode_wa(struct amdgpu_device *adev)
|
|
||||||
diff --git a/drivers/gpu/drm/amd/amdgpu/nbio_v6_1.c b/drivers/gpu/drm/amd/amdgpu/nbio_v6_1.c
|
|
||||||
index 0d2d629e2d6a..be3f6c52c3ff 100644
|
|
||||||
--- a/drivers/gpu/drm/amd/amdgpu/nbio_v6_1.c
|
|
||||||
+++ b/drivers/gpu/drm/amd/amdgpu/nbio_v6_1.c
|
|
||||||
@@ -278,6 +278,7 @@ static void nbio_v6_1_init_registers(struct amdgpu_device *adev)
|
|
||||||
WREG32_PCIE(smnPCIE_CI_CNTL, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
+#ifdef CONFIG_PCIEASPM
|
|
||||||
static void nbio_v6_1_program_ltr(struct amdgpu_device *adev)
|
|
||||||
{
|
|
||||||
uint32_t def, data;
|
|
||||||
@@ -299,9 +300,11 @@ static void nbio_v6_1_program_ltr(struct amdgpu_device *adev)
|
|
||||||
if (def != data)
|
|
||||||
WREG32_PCIE(smnBIF_CFG_DEV0_EPF0_DEVICE_CNTL2, data);
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
static void nbio_v6_1_program_aspm(struct amdgpu_device *adev)
|
|
||||||
{
|
|
||||||
+#ifdef CONFIG_PCIEASPM
|
|
||||||
uint32_t def, data;
|
|
||||||
|
|
||||||
def = data = RREG32_PCIE(smnPCIE_LC_CNTL);
|
|
||||||
@@ -357,7 +360,10 @@ static void nbio_v6_1_program_aspm(struct amdgpu_device *adev)
|
|
||||||
if (def != data)
|
|
||||||
WREG32_PCIE(smnPCIE_LC_CNTL6, data);
|
|
||||||
|
|
||||||
- nbio_v6_1_program_ltr(adev);
|
|
||||||
+ /* Don't bother about LTR if LTR is not enabled
|
|
||||||
+ * in the path */
|
|
||||||
+ if (adev->pdev->ltr_path)
|
|
||||||
+ nbio_v6_1_program_ltr(adev);
|
|
||||||
|
|
||||||
def = data = RREG32_PCIE(smnRCC_BIF_STRAP3);
|
|
||||||
data |= 0x5DE0 << RCC_BIF_STRAP3__STRAP_VLINK_ASPM_IDLE_TIMER__SHIFT;
|
|
||||||
@@ -381,6 +387,7 @@ static void nbio_v6_1_program_aspm(struct amdgpu_device *adev)
|
|
||||||
data &= ~PCIE_LC_CNTL3__LC_DSC_DONT_ENTER_L23_AFTER_PME_ACK_MASK;
|
|
||||||
if (def != data)
|
|
||||||
WREG32_PCIE(smnPCIE_LC_CNTL3, data);
|
|
||||||
+#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
const struct amdgpu_nbio_funcs nbio_v6_1_funcs = {
|
|
||||||
diff --git a/drivers/gpu/drm/amd/amdgpu/nbio_v7_4.c b/drivers/gpu/drm/amd/amdgpu/nbio_v7_4.c
|
|
||||||
index f50045cebd44..74cd7543729b 100644
|
|
||||||
--- a/drivers/gpu/drm/amd/amdgpu/nbio_v7_4.c
|
|
||||||
+++ b/drivers/gpu/drm/amd/amdgpu/nbio_v7_4.c
|
|
||||||
@@ -630,6 +630,7 @@ const struct amdgpu_nbio_ras_funcs nbio_v7_4_ras_funcs = {
|
|
||||||
.ras_fini = amdgpu_nbio_ras_fini,
|
|
||||||
};
|
|
||||||
|
|
||||||
+#ifdef CONFIG_PCIEASPM
|
|
||||||
static void nbio_v7_4_program_ltr(struct amdgpu_device *adev)
|
|
||||||
{
|
|
||||||
uint32_t def, data;
|
|
||||||
@@ -651,9 +652,11 @@ static void nbio_v7_4_program_ltr(struct amdgpu_device *adev)
|
|
||||||
if (def != data)
|
|
||||||
WREG32_PCIE(smnBIF_CFG_DEV0_EPF0_DEVICE_CNTL2, data);
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
static void nbio_v7_4_program_aspm(struct amdgpu_device *adev)
|
|
||||||
{
|
|
||||||
+#ifdef CONFIG_PCIEASPM
|
|
||||||
uint32_t def, data;
|
|
||||||
|
|
||||||
def = data = RREG32_PCIE(smnPCIE_LC_CNTL);
|
|
||||||
@@ -709,7 +712,10 @@ static void nbio_v7_4_program_aspm(struct amdgpu_device *adev)
|
|
||||||
if (def != data)
|
|
||||||
WREG32_PCIE(smnPCIE_LC_CNTL6, data);
|
|
||||||
|
|
||||||
- nbio_v7_4_program_ltr(adev);
|
|
||||||
+ /* Don't bother about LTR if LTR is not enabled
|
|
||||||
+ * in the path */
|
|
||||||
+ if (adev->pdev->ltr_path)
|
|
||||||
+ nbio_v7_4_program_ltr(adev);
|
|
||||||
|
|
||||||
def = data = RREG32_PCIE(smnRCC_BIF_STRAP3);
|
|
||||||
data |= 0x5DE0 << RCC_BIF_STRAP3__STRAP_VLINK_ASPM_IDLE_TIMER__SHIFT;
|
|
||||||
@@ -733,6 +739,7 @@ static void nbio_v7_4_program_aspm(struct amdgpu_device *adev)
|
|
||||||
data &= ~PCIE_LC_CNTL3__LC_DSC_DONT_ENTER_L23_AFTER_PME_ACK_MASK;
|
|
||||||
if (def != data)
|
|
||||||
WREG32_PCIE(smnPCIE_LC_CNTL3, data);
|
|
||||||
+#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
const struct amdgpu_nbio_funcs nbio_v7_4_funcs = {
|
|
@ -1,87 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Alex Deucher <alexander.deucher@amd.com>
|
|
||||||
Date: Fri, 9 Sep 2022 11:47:20 -0400
|
|
||||||
Subject: [PATCH] drm/amdgpu: move nbio ih_doorbell_range() into ih code for
|
|
||||||
vega
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
commit dc1d85cb790f2091eea074cee24a704b2d6c4a06 upstream.
|
|
||||||
|
|
||||||
This mirrors what we do for other asics and this way we are
|
|
||||||
sure the ih doorbell range is properly initialized.
|
|
||||||
|
|
||||||
There is a comment about the way doorbells on gfx9 work that
|
|
||||||
requires that they are initialized for other IPs before GFX
|
|
||||||
is initialized. In this case IH is initialized before GFX,
|
|
||||||
so there should be no issue.
|
|
||||||
|
|
||||||
This is a prerequisite for fixing the Unsupported Request error
|
|
||||||
reported through AER during driver load.
|
|
||||||
|
|
||||||
Link: https://bugzilla.kernel.org/show_bug.cgi?id=216373
|
|
||||||
|
|
||||||
The error was unnoticed before and got visible because of the commit
|
|
||||||
referenced below. This doesn't fix anything in the commit below, rather
|
|
||||||
fixes the issue in amdgpu exposed by the commit. The reference is only
|
|
||||||
to associate this commit with below one so that both go together.
|
|
||||||
|
|
||||||
Fixes: 8795e182b02d ("PCI/portdrv: Don't disable AER reporting in get_port_device_capability()")
|
|
||||||
|
|
||||||
Acked-by: Christian König <christian.koenig@amd.com>
|
|
||||||
Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
|
|
||||||
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
|
||||||
Cc: stable@vger.kernel.org
|
|
||||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
||||||
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|
||||||
---
|
|
||||||
drivers/gpu/drm/amd/amdgpu/soc15.c | 3 ---
|
|
||||||
drivers/gpu/drm/amd/amdgpu/vega10_ih.c | 4 ++++
|
|
||||||
drivers/gpu/drm/amd/amdgpu/vega20_ih.c | 4 ++++
|
|
||||||
3 files changed, 8 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/amd/amdgpu/soc15.c b/drivers/gpu/drm/amd/amdgpu/soc15.c
|
|
||||||
index bdb47ae96ce6..723b088094f2 100644
|
|
||||||
--- a/drivers/gpu/drm/amd/amdgpu/soc15.c
|
|
||||||
+++ b/drivers/gpu/drm/amd/amdgpu/soc15.c
|
|
||||||
@@ -1429,9 +1429,6 @@ static void soc15_doorbell_range_init(struct amdgpu_device *adev)
|
|
||||||
ring->use_doorbell, ring->doorbell_index,
|
|
||||||
adev->doorbell_index.sdma_doorbell_range);
|
|
||||||
}
|
|
||||||
-
|
|
||||||
- adev->nbio.funcs->ih_doorbell_range(adev, adev->irq.ih.use_doorbell,
|
|
||||||
- adev->irq.ih.doorbell_index);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/amd/amdgpu/vega10_ih.c b/drivers/gpu/drm/amd/amdgpu/vega10_ih.c
|
|
||||||
index a9ca6988009e..73728fa85997 100644
|
|
||||||
--- a/drivers/gpu/drm/amd/amdgpu/vega10_ih.c
|
|
||||||
+++ b/drivers/gpu/drm/amd/amdgpu/vega10_ih.c
|
|
||||||
@@ -289,6 +289,10 @@ static int vega10_ih_irq_init(struct amdgpu_device *adev)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (!amdgpu_sriov_vf(adev))
|
|
||||||
+ adev->nbio.funcs->ih_doorbell_range(adev, adev->irq.ih.use_doorbell,
|
|
||||||
+ adev->irq.ih.doorbell_index);
|
|
||||||
+
|
|
||||||
pci_set_master(adev->pdev);
|
|
||||||
|
|
||||||
/* enable interrupts */
|
|
||||||
diff --git a/drivers/gpu/drm/amd/amdgpu/vega20_ih.c b/drivers/gpu/drm/amd/amdgpu/vega20_ih.c
|
|
||||||
index f51dfc38ac65..ac34af4cb178 100644
|
|
||||||
--- a/drivers/gpu/drm/amd/amdgpu/vega20_ih.c
|
|
||||||
+++ b/drivers/gpu/drm/amd/amdgpu/vega20_ih.c
|
|
||||||
@@ -340,6 +340,10 @@ static int vega20_ih_irq_init(struct amdgpu_device *adev)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (!amdgpu_sriov_vf(adev))
|
|
||||||
+ adev->nbio.funcs->ih_doorbell_range(adev, adev->irq.ih.use_doorbell,
|
|
||||||
+ adev->irq.ih.doorbell_index);
|
|
||||||
+
|
|
||||||
pci_set_master(adev->pdev);
|
|
||||||
|
|
||||||
/* enable interrupts */
|
|
@ -1,100 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Alex Deucher <alexander.deucher@amd.com>
|
|
||||||
Date: Fri, 9 Sep 2022 11:53:27 -0400
|
|
||||||
Subject: [PATCH] drm/amdgpu: move nbio sdma_doorbell_range() into sdma code
|
|
||||||
for vega
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
commit e3163bc8ffdfdb405e10530b140135b2ee487f89 upstream.
|
|
||||||
|
|
||||||
This mirrors what we do for other asics and this way we are
|
|
||||||
sure the sdma doorbell range is properly initialized.
|
|
||||||
|
|
||||||
There is a comment about the way doorbells on gfx9 work that
|
|
||||||
requires that they are initialized for other IPs before GFX
|
|
||||||
is initialized. However, the statement says that it applies to
|
|
||||||
multimedia as well, but the VCN code currently initializes
|
|
||||||
doorbells after GFX and there are no known issues there. In my
|
|
||||||
testing at least I don't see any problems on SDMA.
|
|
||||||
|
|
||||||
This is a prerequisite for fixing the Unsupported Request error
|
|
||||||
reported through AER during driver load.
|
|
||||||
|
|
||||||
Link: https://bugzilla.kernel.org/show_bug.cgi?id=216373
|
|
||||||
|
|
||||||
The error was unnoticed before and got visible because of the commit
|
|
||||||
referenced below. This doesn't fix anything in the commit below, rather
|
|
||||||
fixes the issue in amdgpu exposed by the commit. The reference is only
|
|
||||||
to associate this commit with below one so that both go together.
|
|
||||||
|
|
||||||
Fixes: 8795e182b02d ("PCI/portdrv: Don't disable AER reporting in get_port_device_capability()")
|
|
||||||
|
|
||||||
Acked-by: Christian König <christian.koenig@amd.com>
|
|
||||||
Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
|
|
||||||
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
|
||||||
Cc: stable@vger.kernel.org
|
|
||||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
||||||
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|
||||||
---
|
|
||||||
drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 5 +++++
|
|
||||||
drivers/gpu/drm/amd/amdgpu/soc15.c | 22 ----------------------
|
|
||||||
2 files changed, 5 insertions(+), 22 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
|
|
||||||
index 9014f71d52dd..8b20326c4c05 100644
|
|
||||||
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
|
|
||||||
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
|
|
||||||
@@ -1507,6 +1507,11 @@ static int sdma_v4_0_start(struct amdgpu_device *adev)
|
|
||||||
WREG32_SDMA(i, mmSDMA0_CNTL, temp);
|
|
||||||
|
|
||||||
if (!amdgpu_sriov_vf(adev)) {
|
|
||||||
+ ring = &adev->sdma.instance[i].ring;
|
|
||||||
+ adev->nbio.funcs->sdma_doorbell_range(adev, i,
|
|
||||||
+ ring->use_doorbell, ring->doorbell_index,
|
|
||||||
+ adev->doorbell_index.sdma_doorbell_range);
|
|
||||||
+
|
|
||||||
/* unhalt engine */
|
|
||||||
temp = RREG32_SDMA(i, mmSDMA0_F32_CNTL);
|
|
||||||
temp = REG_SET_FIELD(temp, SDMA0_F32_CNTL, HALT, 0);
|
|
||||||
diff --git a/drivers/gpu/drm/amd/amdgpu/soc15.c b/drivers/gpu/drm/amd/amdgpu/soc15.c
|
|
||||||
index 723b088094f2..7d5ff50435e5 100644
|
|
||||||
--- a/drivers/gpu/drm/amd/amdgpu/soc15.c
|
|
||||||
+++ b/drivers/gpu/drm/amd/amdgpu/soc15.c
|
|
||||||
@@ -1416,22 +1416,6 @@ static int soc15_common_sw_fini(void *handle)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static void soc15_doorbell_range_init(struct amdgpu_device *adev)
|
|
||||||
-{
|
|
||||||
- int i;
|
|
||||||
- struct amdgpu_ring *ring;
|
|
||||||
-
|
|
||||||
- /* sdma/ih doorbell range are programed by hypervisor */
|
|
||||||
- if (!amdgpu_sriov_vf(adev)) {
|
|
||||||
- for (i = 0; i < adev->sdma.num_instances; i++) {
|
|
||||||
- ring = &adev->sdma.instance[i].ring;
|
|
||||||
- adev->nbio.funcs->sdma_doorbell_range(adev, i,
|
|
||||||
- ring->use_doorbell, ring->doorbell_index,
|
|
||||||
- adev->doorbell_index.sdma_doorbell_range);
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
static int soc15_common_hw_init(void *handle)
|
|
||||||
{
|
|
||||||
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
|
|
||||||
@@ -1451,12 +1435,6 @@ static int soc15_common_hw_init(void *handle)
|
|
||||||
|
|
||||||
/* enable the doorbell aperture */
|
|
||||||
soc15_enable_doorbell_aperture(adev, true);
|
|
||||||
- /* HW doorbell routing policy: doorbell writing not
|
|
||||||
- * in SDMA/IH/MM/ACV range will be routed to CP. So
|
|
||||||
- * we need to init SDMA/IH/MM/ACV doorbell range prior
|
|
||||||
- * to CP ip block init and ring test.
|
|
||||||
- */
|
|
||||||
- soc15_doorbell_range_init(adev);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
@ -1,130 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Victor Skvortsov <victor.skvortsov@amd.com>
|
|
||||||
Date: Thu, 16 Dec 2021 17:01:45 +0000
|
|
||||||
Subject: [PATCH] drm/amdgpu: Separate vf2pf work item init from virt data
|
|
||||||
exchange
|
|
||||||
|
|
||||||
[ Upstream commit 892deb48269c65376f3eeb5b4c032ff2c2979bd7 ]
|
|
||||||
|
|
||||||
We want to be able to call virt data exchange conditionally
|
|
||||||
after gmc sw init to reserve bad pages as early as possible.
|
|
||||||
Since this is a conditional call, we will need
|
|
||||||
to call it again unconditionally later in the init sequence.
|
|
||||||
|
|
||||||
Refactor the data exchange function so it can be
|
|
||||||
called multiple times without re-initializing the work item.
|
|
||||||
|
|
||||||
v2: Cleaned up the code. Kept the original call to init_exchange_data()
|
|
||||||
inside early init to initialize the work item, afterwards call
|
|
||||||
exchange_data() when needed.
|
|
||||||
|
|
||||||
Signed-off-by: Victor Skvortsov <victor.skvortsov@amd.com>
|
|
||||||
Reviewed By: Shaoyun.liu <Shaoyun.liu@amd.com>
|
|
||||||
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
|
||||||
Signed-off-by: Sasha Levin <sashal@kernel.org>
|
|
||||||
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|
||||||
---
|
|
||||||
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 6 +++-
|
|
||||||
drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 36 ++++++++++++++--------
|
|
||||||
drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h | 1 +
|
|
||||||
3 files changed, 30 insertions(+), 13 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
|
|
||||||
index d1af709cc7dc..f443b4630f9d 100644
|
|
||||||
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
|
|
||||||
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
|
|
||||||
@@ -2390,6 +2390,10 @@ static int amdgpu_device_ip_init(struct amdgpu_device *adev)
|
|
||||||
|
|
||||||
/* need to do gmc hw init early so we can allocate gpu mem */
|
|
||||||
if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC) {
|
|
||||||
+ /* Try to reserve bad pages early */
|
|
||||||
+ if (amdgpu_sriov_vf(adev))
|
|
||||||
+ amdgpu_virt_exchange_data(adev);
|
|
||||||
+
|
|
||||||
r = amdgpu_device_vram_scratch_init(adev);
|
|
||||||
if (r) {
|
|
||||||
DRM_ERROR("amdgpu_vram_scratch_init failed %d\n", r);
|
|
||||||
@@ -2421,7 +2425,7 @@ static int amdgpu_device_ip_init(struct amdgpu_device *adev)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (amdgpu_sriov_vf(adev))
|
|
||||||
- amdgpu_virt_init_data_exchange(adev);
|
|
||||||
+ amdgpu_virt_exchange_data(adev);
|
|
||||||
|
|
||||||
r = amdgpu_ib_pool_init(adev);
|
|
||||||
if (r) {
|
|
||||||
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
|
|
||||||
index 16787c675f35..cce03aad5f0e 100644
|
|
||||||
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
|
|
||||||
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
|
|
||||||
@@ -614,17 +614,35 @@ void amdgpu_virt_fini_data_exchange(struct amdgpu_device *adev)
|
|
||||||
|
|
||||||
void amdgpu_virt_init_data_exchange(struct amdgpu_device *adev)
|
|
||||||
{
|
|
||||||
- uint64_t bp_block_offset = 0;
|
|
||||||
- uint32_t bp_block_size = 0;
|
|
||||||
- struct amd_sriov_msg_pf2vf_info *pf2vf_v2 = NULL;
|
|
||||||
-
|
|
||||||
adev->virt.fw_reserve.p_pf2vf = NULL;
|
|
||||||
adev->virt.fw_reserve.p_vf2pf = NULL;
|
|
||||||
adev->virt.vf2pf_update_interval_ms = 0;
|
|
||||||
|
|
||||||
- if (adev->mman.fw_vram_usage_va != NULL) {
|
|
||||||
+ if (adev->bios != NULL) {
|
|
||||||
adev->virt.vf2pf_update_interval_ms = 2000;
|
|
||||||
|
|
||||||
+ adev->virt.fw_reserve.p_pf2vf =
|
|
||||||
+ (struct amd_sriov_msg_pf2vf_info_header *)
|
|
||||||
+ (adev->bios + (AMD_SRIOV_MSG_PF2VF_OFFSET_KB << 10));
|
|
||||||
+
|
|
||||||
+ amdgpu_virt_read_pf2vf_data(adev);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (adev->virt.vf2pf_update_interval_ms != 0) {
|
|
||||||
+ INIT_DELAYED_WORK(&adev->virt.vf2pf_work, amdgpu_virt_update_vf2pf_work_item);
|
|
||||||
+ schedule_delayed_work(&(adev->virt.vf2pf_work), msecs_to_jiffies(adev->virt.vf2pf_update_interval_ms));
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+void amdgpu_virt_exchange_data(struct amdgpu_device *adev)
|
|
||||||
+{
|
|
||||||
+ uint64_t bp_block_offset = 0;
|
|
||||||
+ uint32_t bp_block_size = 0;
|
|
||||||
+ struct amd_sriov_msg_pf2vf_info *pf2vf_v2 = NULL;
|
|
||||||
+
|
|
||||||
+ if (adev->mman.fw_vram_usage_va != NULL) {
|
|
||||||
+
|
|
||||||
adev->virt.fw_reserve.p_pf2vf =
|
|
||||||
(struct amd_sriov_msg_pf2vf_info_header *)
|
|
||||||
(adev->mman.fw_vram_usage_va + (AMD_SRIOV_MSG_PF2VF_OFFSET_KB << 10));
|
|
||||||
@@ -655,16 +673,10 @@ void amdgpu_virt_init_data_exchange(struct amdgpu_device *adev)
|
|
||||||
(adev->bios + (AMD_SRIOV_MSG_PF2VF_OFFSET_KB << 10));
|
|
||||||
|
|
||||||
amdgpu_virt_read_pf2vf_data(adev);
|
|
||||||
-
|
|
||||||
- return;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- if (adev->virt.vf2pf_update_interval_ms != 0) {
|
|
||||||
- INIT_DELAYED_WORK(&adev->virt.vf2pf_work, amdgpu_virt_update_vf2pf_work_item);
|
|
||||||
- schedule_delayed_work(&(adev->virt.vf2pf_work), adev->virt.vf2pf_update_interval_ms);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+
|
|
||||||
void amdgpu_detect_virtualization(struct amdgpu_device *adev)
|
|
||||||
{
|
|
||||||
uint32_t reg;
|
|
||||||
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h
|
|
||||||
index 8d4c20bb71c5..9adfb8d63280 100644
|
|
||||||
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h
|
|
||||||
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h
|
|
||||||
@@ -308,6 +308,7 @@ int amdgpu_virt_alloc_mm_table(struct amdgpu_device *adev);
|
|
||||||
void amdgpu_virt_free_mm_table(struct amdgpu_device *adev);
|
|
||||||
void amdgpu_virt_release_ras_err_handler_data(struct amdgpu_device *adev);
|
|
||||||
void amdgpu_virt_init_data_exchange(struct amdgpu_device *adev);
|
|
||||||
+void amdgpu_virt_exchange_data(struct amdgpu_device *adev);
|
|
||||||
void amdgpu_virt_fini_data_exchange(struct amdgpu_device *adev);
|
|
||||||
void amdgpu_detect_virtualization(struct amdgpu_device *adev);
|
|
||||||
|
|
@ -1,69 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Alex Deucher <alexander.deucher@amd.com>
|
|
||||||
Date: Tue, 30 Aug 2022 10:59:49 -0400
|
|
||||||
Subject: [PATCH] drm/amdgpu: make sure to init common IP before gmc
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
[ Upstream commit a8671493d2074950553da3cf07d1be43185ef6c6 ]
|
|
||||||
|
|
||||||
Move common IP init before GMC init so that HDP gets
|
|
||||||
remapped before GMC init which uses it.
|
|
||||||
|
|
||||||
This fixes the Unsupported Request error reported through
|
|
||||||
AER during driver load. The error happens as a write happens
|
|
||||||
to the remap offset before real remapping is done.
|
|
||||||
|
|
||||||
Link: https://bugzilla.kernel.org/show_bug.cgi?id=216373
|
|
||||||
|
|
||||||
The error was unnoticed before and got visible because of the commit
|
|
||||||
referenced below. This doesn't fix anything in the commit below, rather
|
|
||||||
fixes the issue in amdgpu exposed by the commit. The reference is only
|
|
||||||
to associate this commit with below one so that both go together.
|
|
||||||
|
|
||||||
Fixes: 8795e182b02d ("PCI/portdrv: Don't disable AER reporting in get_port_device_capability()")
|
|
||||||
|
|
||||||
Acked-by: Christian König <christian.koenig@amd.com>
|
|
||||||
Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
|
|
||||||
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
|
||||||
Cc: stable@vger.kernel.org
|
|
||||||
Signed-off-by: Sasha Levin <sashal@kernel.org>
|
|
||||||
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|
||||||
---
|
|
||||||
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 14 +++++++++++---
|
|
||||||
1 file changed, 11 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
|
|
||||||
index f443b4630f9d..7450773821f4 100644
|
|
||||||
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
|
|
||||||
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
|
|
||||||
@@ -2388,8 +2388,16 @@ static int amdgpu_device_ip_init(struct amdgpu_device *adev)
|
|
||||||
}
|
|
||||||
adev->ip_blocks[i].status.sw = true;
|
|
||||||
|
|
||||||
- /* need to do gmc hw init early so we can allocate gpu mem */
|
|
||||||
- if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC) {
|
|
||||||
+ if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_COMMON) {
|
|
||||||
+ /* need to do common hw init early so everything is set up for gmc */
|
|
||||||
+ r = adev->ip_blocks[i].version->funcs->hw_init((void *)adev);
|
|
||||||
+ if (r) {
|
|
||||||
+ DRM_ERROR("hw_init %d failed %d\n", i, r);
|
|
||||||
+ goto init_failed;
|
|
||||||
+ }
|
|
||||||
+ adev->ip_blocks[i].status.hw = true;
|
|
||||||
+ } else if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC) {
|
|
||||||
+ /* need to do gmc hw init early so we can allocate gpu mem */
|
|
||||||
/* Try to reserve bad pages early */
|
|
||||||
if (amdgpu_sriov_vf(adev))
|
|
||||||
amdgpu_virt_exchange_data(adev);
|
|
||||||
@@ -3037,8 +3045,8 @@ static int amdgpu_device_ip_reinit_early_sriov(struct amdgpu_device *adev)
|
|
||||||
int i, r;
|
|
||||||
|
|
||||||
static enum amd_ip_block_type ip_order[] = {
|
|
||||||
- AMD_IP_BLOCK_TYPE_GMC,
|
|
||||||
AMD_IP_BLOCK_TYPE_COMMON,
|
|
||||||
+ AMD_IP_BLOCK_TYPE_GMC,
|
|
||||||
AMD_IP_BLOCK_TYPE_PSP,
|
|
||||||
AMD_IP_BLOCK_TYPE_IH,
|
|
||||||
};
|
|
Loading…
Reference in New Issue
Block a user