mirror of
https://git.proxmox.com/git/pve-kernel
synced 2025-04-28 16:53:28 +00:00
rebase patches on top of Ubuntu-6.11.0-24.24
(generated with debian/scripts/import-upstream-tag) Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
parent
a78931e1e5
commit
e46261e72e
@ -75,7 +75,7 @@ index 5ea6b2d54edaff9b7efa20235de92970cabcf769..e36ab4a38709f697860e785c1eb2e8c4
|
|||||||
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 bf02ee61a933403deba8ba7063d1732fc3ed540e..113e93b623616d787ad1b4d7619a2921069d587b 100644
|
index 3914e23f7f22c23fde6bb5905904212a348efcdb..a7aea52a0dd01379427f41718064ac4fbad1f66c 100644
|
||||||
--- a/drivers/pci/quirks.c
|
--- a/drivers/pci/quirks.c
|
||||||
+++ b/drivers/pci/quirks.c
|
+++ b/drivers/pci/quirks.c
|
||||||
@@ -300,6 +300,106 @@ static int __init pci_apply_final_quirks(void)
|
@@ -300,6 +300,106 @@ static int __init pci_apply_final_quirks(void)
|
||||||
@ -185,7 +185,7 @@ index bf02ee61a933403deba8ba7063d1732fc3ed540e..113e93b623616d787ad1b4d7619a2921
|
|||||||
/*
|
/*
|
||||||
* Decoding should be disabled for a PCI device during BAR sizing to avoid
|
* 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
|
* conflict. But doing so may cause problems on host bridge and perhaps other
|
||||||
@@ -5121,6 +5221,8 @@ static const struct pci_dev_acs_enabled {
|
@@ -5124,6 +5224,8 @@ static const struct pci_dev_acs_enabled {
|
||||||
{ PCI_VENDOR_ID_CAVIUM, 0xA060, pci_quirk_mf_endpoint_acs },
|
{ PCI_VENDOR_ID_CAVIUM, 0xA060, pci_quirk_mf_endpoint_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 },
|
||||||
|
@ -14,10 +14,10 @@ Signed-off-by: Fabian Grünbichler <f.gruenbichler@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 25f20c5cc8f55fca8c726df31d8433025e15ebb4..d0fa7a5768d555fce321533a2d46703d647d7474 100644
|
index 06a02e87394e22e279bc7e62822164988e9e973c..fac4fed1b3f9620cc2ec15b7c7683f9c311192de 100644
|
||||||
--- a/net/core/dev.c
|
--- a/net/core/dev.c
|
||||||
+++ b/net/core/dev.c
|
+++ b/net/core/dev.c
|
||||||
@@ -10680,7 +10680,7 @@ static struct net_device *netdev_wait_allrefs_any(struct list_head *list)
|
@@ -10699,7 +10699,7 @@ static struct net_device *netdev_wait_allrefs_any(struct list_head *list)
|
||||||
if (time_after(jiffies, warning_time +
|
if (time_after(jiffies, warning_time +
|
||||||
READ_ONCE(netdev_unregister_timeout_secs) * HZ)) {
|
READ_ONCE(netdev_unregister_timeout_secs) * HZ)) {
|
||||||
list_for_each_entry(dev, list, todo_list) {
|
list_for_each_entry(dev, list, todo_list) {
|
||||||
|
@ -110,7 +110,7 @@ index ad479cfb91bc7bc5d400d2c098536abb4d4babe5..e55eecb2f3646ff7ef63c107c5cc5481
|
|||||||
|
|
||||||
int cpuid_query_maxphyaddr(struct kvm_vcpu *vcpu);
|
int cpuid_query_maxphyaddr(struct kvm_vcpu *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 3667ba359e63579eaff36fea92bf19a84e5df592..4d10fc1a9b4114d1e2edf133717f307043560263 100644
|
index 4040bdebebf2ff5783895608215505f13ded668f..aa7d3ef88a644565afdacec434547a284b2f0f76 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
|
||||||
@@ -5633,6 +5633,19 @@ static int kvm_vcpu_ioctl_x86_set_xsave(struct kvm_vcpu *vcpu,
|
@@ -5633,6 +5633,19 @@ static int kvm_vcpu_ioctl_x86_set_xsave(struct kvm_vcpu *vcpu,
|
||||||
|
@ -11,7 +11,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|||||||
1 file changed, 5 insertions(+), 1 deletion(-)
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
|
diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
|
||||||
index b857633622ea8550299554e211b84c48196bf902..5cb3b52b350c3d6bd627a29e6000ab10b58fd6e1 100644
|
index 0d80f97ecc8a3d9c6a75d522494e1687fa29ac49..676f94c491dc87b5882100c6e08af0f3221592b2 100644
|
||||||
--- a/drivers/iommu/intel/iommu.c
|
--- a/drivers/iommu/intel/iommu.c
|
||||||
+++ b/drivers/iommu/intel/iommu.c
|
+++ b/drivers/iommu/intel/iommu.c
|
||||||
@@ -228,6 +228,7 @@ EXPORT_SYMBOL_GPL(intel_iommu_enabled);
|
@@ -228,6 +228,7 @@ EXPORT_SYMBOL_GPL(intel_iommu_enabled);
|
||||||
|
@ -17,10 +17,10 @@ gfx").
|
|||||||
1 file changed, 68 deletions(-)
|
1 file changed, 68 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
|
diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
|
||||||
index 5cb3b52b350c3d6bd627a29e6000ab10b58fd6e1..9d2de5cdaeaf5f19d7fea14a21b018033e275ac7 100644
|
index 676f94c491dc87b5882100c6e08af0f3221592b2..00bf41e964fb3c62fce13b49f55c01295ea3e6fd 100644
|
||||||
--- a/drivers/iommu/intel/iommu.c
|
--- a/drivers/iommu/intel/iommu.c
|
||||||
+++ b/drivers/iommu/intel/iommu.c
|
+++ b/drivers/iommu/intel/iommu.c
|
||||||
@@ -4780,74 +4780,6 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1632, quirk_iommu_igfx);
|
@@ -4782,74 +4782,6 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1632, quirk_iommu_igfx);
|
||||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x163A, quirk_iommu_igfx);
|
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x163A, quirk_iommu_igfx);
|
||||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x163D, quirk_iommu_igfx);
|
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x163D, quirk_iommu_igfx);
|
||||||
|
|
||||||
|
@ -1,77 +0,0 @@
|
|||||||
From 179893798c518361c20cb11b5b0c71cecf019ad4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ilya Maximets <i.maximets@ovn.org>
|
|
||||||
Date: Thu, 9 Jan 2025 13:21:24 +0100
|
|
||||||
Subject: [PATCH] openvswitch: fix lockup on tx to unregistering netdev with
|
|
||||||
carrier
|
|
||||||
|
|
||||||
Commit in a fixes tag attempted to fix the issue in the following
|
|
||||||
sequence of calls:
|
|
||||||
|
|
||||||
do_output
|
|
||||||
-> ovs_vport_send
|
|
||||||
-> dev_queue_xmit
|
|
||||||
-> __dev_queue_xmit
|
|
||||||
-> netdev_core_pick_tx
|
|
||||||
-> skb_tx_hash
|
|
||||||
|
|
||||||
When device is unregistering, the 'dev->real_num_tx_queues' goes to
|
|
||||||
zero and the 'while (unlikely(hash >= qcount))' loop inside the
|
|
||||||
'skb_tx_hash' becomes infinite, locking up the core forever.
|
|
||||||
|
|
||||||
But unfortunately, checking just the carrier status is not enough to
|
|
||||||
fix the issue, because some devices may still be in unregistering
|
|
||||||
state while reporting carrier status OK.
|
|
||||||
|
|
||||||
One example of such device is a net/dummy. It sets carrier ON
|
|
||||||
on start, but it doesn't implement .ndo_stop to set the carrier off.
|
|
||||||
And it makes sense, because dummy doesn't really have a carrier.
|
|
||||||
Therefore, while this device is unregistering, it's still easy to hit
|
|
||||||
the infinite loop in the skb_tx_hash() from the OVS datapath. There
|
|
||||||
might be other drivers that do the same, but dummy by itself is
|
|
||||||
important for the OVS ecosystem, because it is frequently used as a
|
|
||||||
packet sink for tcpdump while debugging OVS deployments. And when the
|
|
||||||
issue is hit, the only way to recover is to reboot.
|
|
||||||
|
|
||||||
Fix that by also checking if the device is running. The running
|
|
||||||
state is handled by the net core during unregistering, so it covers
|
|
||||||
unregistering case better, and we don't really need to send packets
|
|
||||||
to devices that are not running anyway.
|
|
||||||
|
|
||||||
While only checking the running state might be enough, the carrier
|
|
||||||
check is preserved. The running and the carrier states seem disjoined
|
|
||||||
throughout the code and different drivers. And other core functions
|
|
||||||
like __dev_direct_xmit() check both before attempting to transmit
|
|
||||||
a packet. So, it seems safer to check both flags in OVS as well.
|
|
||||||
|
|
||||||
Fixes: 066b86787fa3 ("net: openvswitch: fix race on port output")
|
|
||||||
Reported-by: Friedrich Weber <f.weber@proxmox.com>
|
|
||||||
Closes: https://mail.openvswitch.org/pipermail/ovs-discuss/2025-January/053423.html
|
|
||||||
Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
|
|
||||||
Tested-by: Friedrich Weber <f.weber@proxmox.com>
|
|
||||||
Reviewed-by: Aaron Conole <aconole@redhat.com>
|
|
||||||
Link: https://patch.msgid.link/20250109122225.4034688-1-i.maximets@ovn.org
|
|
||||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|
||||||
(cherry picked from commit 47e55e4b410f7d552e43011baa5be1aab4093990)
|
|
||||||
Signed-off-by: Friedrich Weber <f.weber@proxmox.com>
|
|
||||||
---
|
|
||||||
net/openvswitch/actions.c | 4 +++-
|
|
||||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/net/openvswitch/actions.c b/net/openvswitch/actions.c
|
|
||||||
index 101f9a23792c..896f50387347 100644
|
|
||||||
--- a/net/openvswitch/actions.c
|
|
||||||
+++ b/net/openvswitch/actions.c
|
|
||||||
@@ -930,7 +930,9 @@ static void do_output(struct datapath *dp, struct sk_buff *skb, int out_port,
|
|
||||||
{
|
|
||||||
struct vport *vport = ovs_vport_rcu(dp, out_port);
|
|
||||||
|
|
||||||
- if (likely(vport && netif_carrier_ok(vport->dev))) {
|
|
||||||
+ if (likely(vport &&
|
|
||||||
+ netif_running(vport->dev) &&
|
|
||||||
+ netif_carrier_ok(vport->dev))) {
|
|
||||||
u16 mru = OVS_CB(skb)->mru;
|
|
||||||
u32 cutlen = OVS_CB(skb)->cutlen;
|
|
||||||
|
|
||||||
--
|
|
||||||
2.39.5
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user