Bug 433534 - kernel-rt-2.6.24.1-24.el5rt ignores irq-affinity on some nvidia chipsets
kernel-rt-2.6.24.1-24.el5rt ignores irq-affinity on some nvidia chipsets
Status: CLOSED NEXTRELEASE
Product: Red Hat Enterprise MRG
Classification: Red Hat
Component: realtime-kernel (Show other bugs)
beta
x86_64 Linux
low Severity high
: ---
: ---
Assigned To: Steven Rostedt
:
Depends On:
Blocks:
  Show dependency treegraph
 
Reported: 2008-02-19 16:44 EST by Seth Hunter
Modified: 2008-03-11 11:07 EDT (History)
1 user (show)

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Environment:
Last Closed: 2008-03-11 11:07:33 EDT
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---


Attachments (Terms of Use)
patch to fix x86 64 irq smp affinity (687 bytes, patch)
2008-02-19 19:17 EST, Steven Rostedt
no flags Details | Diff

  None (edit)
Description Seth Hunter 2008-02-19 16:44:39 EST
The recent upgrade to the 2.6.24-based RT kernel seems to have broken the
ability on some systems to bind hardware interrupts to specific CPUs. 
Empirically, this seems like it may only happen on nvidia/nforce-based motherboards.

On affected systems, echo'ing a processor mask into /proc/irq/#/smp_affinity is
successful (i.e. a subsequent cat of the file shows the desired value), but
/proc/interrupts continues to show all interrupts arriving on CPU0.  This
capability worked correctly in the 2.6.21-based MRG kernel.
Comment 1 Steven Rostedt 2008-02-19 19:17:30 EST
Created attachment 295360 [details]
patch to fix x86 64 irq smp affinity


It seems that x86_64 isn't honoring smp_affinity changes for level interrupts.
Looking into this, I found that the code to change the affinity is delayed
(CONFIG_GENERIC_PENDING_IRQ) to a better time to touch the apic. The changes
are made in the ack of the interrupt. But the code in the ack will not change
the apic if an irq is in progress.

On vanilla, this is fine, because the IRQ_INPROGRESS bit is cleared before
acking. But with threaded interrupts, we keep the IRQ_INPROGRESS bit set
through out the ack. This bit doesn't get cleared until after the thread is
run.

The race that this is trying to prevent is not applicable when interrupts are
threaded. This patch will perform the update to the smp affinity of the irq in
the ack when interrupts are threaded, regardless of the IRQ_INPROGRESS bit.
Comment 2 Seth Hunter 2008-02-19 21:48:45 EST
I can confirm that Steven's patch fixed the issue on my machines.  Thanks!

Note You need to log in before you can comment on or make changes to this bug.