Patch "igb: Disable threaded IRQ for igb_msix_other" has been added to the 5.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    igb: Disable threaded IRQ for igb_msix_other

to the 5.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     igb-disable-threaded-irq-for-igb_msix_other.patch
and it can be found in the queue-5.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 380908c1343b7460d32621bab283aa6cdb1705b8
Author: Wander Lairson Costa <wander@xxxxxxxxxx>
Date:   Mon Oct 21 16:26:24 2024 -0700

    igb: Disable threaded IRQ for igb_msix_other
    
    [ Upstream commit 338c4d3902feb5be49bfda530a72c7ab860e2c9f ]
    
    During testing of SR-IOV, Red Hat QE encountered an issue where the
    ip link up command intermittently fails for the igbvf interfaces when
    using the PREEMPT_RT variant. Investigation revealed that
    e1000_write_posted_mbx returns an error due to the lack of an ACK
    from e1000_poll_for_ack.
    
    The underlying issue arises from the fact that IRQs are threaded by
    default under PREEMPT_RT. While the exact hardware details are not
    available, it appears that the IRQ handled by igb_msix_other must
    be processed before e1000_poll_for_ack times out. However,
    e1000_write_posted_mbx is called with preemption disabled, leading
    to a scenario where the IRQ is serviced only after the failure of
    e1000_write_posted_mbx.
    
    To resolve this, we set IRQF_NO_THREAD for the affected interrupt,
    ensuring that the kernel handles it immediately, thereby preventing
    the aforementioned error.
    
    Reproducer:
    
        #!/bin/bash
    
        # echo 2 > /sys/class/net/ens14f0/device/sriov_numvfs
        ipaddr_vlan=3
        nic_test=ens14f0
        vf=${nic_test}v0
    
        while true; do
                ip link set ${nic_test} mtu 1500
                ip link set ${vf} mtu 1500
                ip link set $vf up
                ip link set ${nic_test} vf 0 vlan ${ipaddr_vlan}
                ip addr add 172.30.${ipaddr_vlan}.1/24 dev ${vf}
                ip addr add 2021:db8:${ipaddr_vlan}::1/64 dev ${vf}
                if ! ip link show $vf | grep 'state UP'; then
                        echo 'Error found'
                        break
                fi
                ip link set $vf down
        done
    
    Signed-off-by: Wander Lairson Costa <wander@xxxxxxxxxx>
    Fixes: 9d5c824399de ("igb: PCI-Express 82575 Gigabit Ethernet driver")
    Reported-by: Yuying Ma <yuma@xxxxxxxxxx>
    Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@xxxxxxxxx>
    Tested-by: Rafal Romanowski <rafal.romanowski@xxxxxxxxx>
    Signed-off-by: Jacob Keller <jacob.e.keller@xxxxxxxxx>
    Reviewed-by: Simon Horman <horms@xxxxxxxxxx>
    Signed-off-by: Paolo Abeni <pabeni@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
index 17cdda3fe415a..e1936aa94077b 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -936,7 +936,7 @@ static int igb_request_msix(struct igb_adapter *adapter)
 	int i, err = 0, vector = 0, free_vector = 0;
 
 	err = request_irq(adapter->msix_entries[vector].vector,
-			  igb_msix_other, 0, netdev->name, adapter);
+			  igb_msix_other, IRQF_NO_THREAD, netdev->name, adapter);
 	if (err)
 		goto err_out;
 




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux