kernel-packages team mailing list archive
-
kernel-packages team
-
Mailing list archive
-
Message #77437
[Bug 1359514] Re: pci-xgene-msi: fixed deadlock in irq_set_affinity
** 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 Kernel
Packages, which is subscribed to linux in Ubuntu.
https://bugs.launchpad.net/bugs/1359514
Title:
pci-xgene-msi: fixed deadlock in irq_set_affinity
Status in “linux” package in Ubuntu:
Triaged
Bug description:
[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.
[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.
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1359514/+subscriptions
References