** 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

Reply via email to