** Patch removed: "0001-UBUNTU-SAUCE-no-up-pci-xgene-msi-fixed-deadlock-in-i.patch" https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1359514/+attachment/4188555/+files/0001-UBUNTU-SAUCE-no-up-pci-xgene-msi-fixed-deadlock-in-i.patch
** Patch added: "0001-UBUNTU-SAUCE-no-up-pci-xgene-msi-fixed-deadlock-in-i.patch" https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1359514/+attachment/4188597/+files/0001-UBUNTU-SAUCE-no-up-pci-xgene-msi-fixed-deadlock-in-i.patch ** Description changed: + [IMPACT] Issue: CPU affinity is changed while irqbalance is running. - - + Problem explanation: - - - Old code - - + Call xgene_msi_cascade function (CPU x) - - + raw_spin_lock(&desc->lock); (CPU x) - - + Goto generic_handle_irq (CPU x) - - + The CPU x doesn't have a chance to exit the xgene_msi_cascade function to unlock desc->lock before Linux scheduce and call xgene_msi_set_affinity (irqbalance is caller) in the same CPU x - - + In irq_set_affinity, call raw_spin_lock_irqsave(&desc->lock, flags) which cause deadlock to CPU x because it disables preempt - - - New code - - + Use chained_irq_enter and exit as the standard way to cascade interrupt functions. + + + Problem explanation: + + - Old code + + + Call xgene_msi_cascade function (CPU x) + + + raw_spin_lock(&desc->lock); (CPU x) + + + Goto generic_handle_irq (CPU x) + + + The CPU x doesn't have a chance to exit the xgene_msi_cascade + function to unlock desc->lock before Linux scheduce and call + xgene_msi_set_affinity (irqbalance is caller) in the same CPU x + + + In irq_set_affinity, call raw_spin_lock_irqsave(&desc->lock, + flags) which cause deadlock to CPU x because it disables preempt + + - New code + + + Use chained_irq_enter and exit as the standard way to cascade + interrupt functions. + + [TEST CASE] + Turn off irqbalance + Run a single tcp stream + Randomly change the affinity of the receiving ring: + + @ ethtool -S $INTF | grep rx[0-9].*_pac @ - to detect the rx ring + @ grep $INTF /proc/interrupts@ - to find it's interrupt + @ printf "%x" $(( 2 ** $((RANDOM % 8)) )) > /proc/irq/$IRQ/smp_affinity @ - to change the affinity + + [Regression Potential] + Fix specific to the xgene pci msi code. -- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/1359514 Title: pci-xgene-msi: fixed deadlock in irq_set_affinity To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1359514/+subscriptions -- ubuntu-bugs mailing list [email protected] https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs
