Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 58050
b: refs/heads/master
c: 48d8d7e
h: refs/heads/master
v: v3
  • Loading branch information
Siddha, Suresh B authored and Linus Torvalds committed Jun 26, 2007
1 parent 07763c0 commit b074cfc
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 4 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: c47e285dee9673087273fafcff06a44c58ed4efd
refs/heads/master: 48d8d7ee5dd17c64833e0343ab4ae8ef01cc2648
32 changes: 29 additions & 3 deletions trunk/arch/x86_64/kernel/irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -144,17 +144,43 @@ void fixup_irqs(cpumask_t map)

for (irq = 0; irq < NR_IRQS; irq++) {
cpumask_t mask;
int break_affinity = 0;
int set_affinity = 1;

if (irq == 2)
continue;

/* interrupt's are disabled at this point */
spin_lock(&irq_desc[irq].lock);

if (!irq_has_action(irq) ||
cpus_equal(irq_desc[irq].affinity, map)) {
spin_unlock(&irq_desc[irq].lock);
continue;
}

cpus_and(mask, irq_desc[irq].affinity, map);
if (any_online_cpu(mask) == NR_CPUS) {
printk("Breaking affinity for irq %i\n", irq);
if (cpus_empty(mask)) {
break_affinity = 1;
mask = map;
}

if (irq_desc[irq].chip->mask)
irq_desc[irq].chip->mask(irq);

if (irq_desc[irq].chip->set_affinity)
irq_desc[irq].chip->set_affinity(irq, mask);
else if (irq_desc[irq].action && !(warned++))
else if (!(warned++))
set_affinity = 0;

if (irq_desc[irq].chip->unmask)
irq_desc[irq].chip->unmask(irq);

spin_unlock(&irq_desc[irq].lock);

if (break_affinity && set_affinity)
printk("Broke affinity for irq %i\n", irq);
else if (!set_affinity)
printk("Cannot set affinity for irq %i\n", irq);
}

Expand Down

0 comments on commit b074cfc

Please sign in to comment.