IRQ smp_affinity reverting
Issue
Attempting to steer interrupt from Solarflare NIC to core0 using:
# echo 00000001 >/proc/irq/192/smp_affinity
Initial inspection shows value changed:
[root@lx-cnscitcffexb-fut02 ~]# cat /proc/irq/192/smp_affinity
000000,00000001
However reverts after an interrupt arrives on this queue:
[root@lx-cnscitcffexb-fut02 ~]# cat /proc/irq/192/smp_affinity
000000,08000000
Used SystemTap script:
probe begin
{
printf("tracing...\n")
}
probe kernel.function("irq_set_affinity")
{
printf("irq_set_affinity called:\n")
print_stack(backtrace())
print_usyms(ubacktrace())
}
probe kernel.function("setup_affinity")
{
printf("setup_affinity called:\n")
print_stack(backtrace())
print_usyms(ubacktrace())
}
This was to check if some other process was doing the reset i.e. irqbalance. This is not the case. No other user space process is shown. The trace is:
irq_set_affinity called:
0xffffffff810e8970 : irq_set_affinity+0x0/0x140 [kernel]
0xffffffff810eabe5 : write_irq_affinity+0x135/0x140 [kernel]
0xffffffff810eac3c : irq_affinity_proc_write+0x1c/0x20 [kernel]
0xffffffff811f3ade : proc_reg_write+0x7e/0xc0 [kernel]
0xffffffff81188df8 : vfs_write+0xb8/0x1a0 [kernel]
0xffffffff811896f1 : sys_write+0x51/0x90 [kernel]
0xffffffff8100b288 : tracesys+0xd9/0xde [kernel]
0x3b05cdb490 : __write_nocancel+0x7/0x57 [/lib64/libc-2.12.so]
0x3b05c71ae3 : _IO_file_write@@GLIBC_2.2.5+0x43/0xa0 [/lib64/libc-2.12.so]
0x3b05c73095 : _IO_do_write@@GLIBC_2.2.5+0x95/0x12a [/lib64/libc-2.12.so]
0x3b05c723ef : _IO_file_overflow@@GLIBC_2.2.5+0x14f/0x240 [/lib64/libc-2.12.so]
0x3b05c6f147 : putc+0xb7/0xfd [/lib64/libc-2.12.so]
0x469ace : 0x469ace [/bin/bash+0x69ace/0xd4000]
Which looks good and we can see the kernel routine "irq_set_affinity" being called.
Server is a HP DL380 Gen 9 with Haswell processors.
Environment
Red Hat Enterprise Linux
6.5
Subscriber exclusive content
A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.