Re: [PATCH] fix might sleep oops in irq affinity callback hook
From: Joe Korty <hidden>
Date: 2013-08-22 19:01:17
On Wed, Aug 21, 2013 at 05:09:28PM -0400, Joe Korty wrote:
On Wed, Aug 21, 2013 at 11:53:47AM -0400, Sebastian Andrzej Siewior wrote:quoted
Joe could you please test this one? In 3.10 we have one user of __irq_set_affinity_locked() and we might get more.Hi Sebastian, I backported the patch to 3.6.11.6-rt38 and added a few printk's so that when daemon started I would see that and when each affinity hook was executed I would see that too. The system came up and the printk for daemon start showed up near where the sfc driver started, but no affinity action printk appeared. Thus the patch as written does not seem to work.
Hi Sebastian, Today I intrumented both the nort and rt paths through the affinity hook logic, and built and booted both nort and rt kernels. Here is what I found: For the nort kernel, each time I change the affinity of one of the SFC driver IRQs listed in /proc/interrupts, I get a notice in dmesg that the SFC callback was invoked. For the rt kernel, I get the message only for the first time the affinity for some SFC IRQ is changed. Subsequent changes of the _same_ IRQ do not have the callback invoked. If I go and change some other SFC IRQ that will also invoke the callback the first time only. finny# echo 1 >/proc/irq/46/smp_affinity; dmesg | fgrep genirq genirq: set_affinity_thread STARTED genirq: NOTIFIER CALLED ... finny# echo 1 >/proc/irq/46/smp_affinity; dmesg | fgrep genirq genirq: set_affinity_thread STARTED genirq: NOTIFIER CALLED ... finny# echo 1 >/proc/irq/46/smp_affinity; dmesg | fgrep genirq genirq: set_affinity_thread STARTED genirq: NOTIFIER CALLED ... finny# echo 2 >/proc/irq/46/smp_affinity; dmesg | fgrep genirq genirq: set_affinity_thread STARTED genirq: NOTIFIER CALLED ... finny# echo 2 >/proc/irq/47/smp_affinity; dmesg | fgrep genirq genirq: set_affinity_thread STARTED genirq: NOTIFIER CALLED ... genirq: NOTIFIER CALLED ... finny# echo 2 >/proc/irq/47/smp_affinity; dmesg | fgrep genirq genirq: set_affinity_thread STARTED genirq: NOTIFIER CALLED ... genirq: NOTIFIER CALLED ... finny# echo 1 >/proc/irq/47/smp_affinity; dmesg | fgrep genirq genirq: set_affinity_thread STARTED genirq: NOTIFIER CALLED ... genirq: NOTIFIER CALLED ... Regards, Joe