diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2011-02-07 16:02:20 +0100 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2011-02-19 12:58:07 +0100 |
commit | 3b8249e759c701c4a82f99d957be651a7657bf6f (patch) | |
tree | f758675da3bb37282eefd50e57456d09b208b452 /kernel/irq/proc.c | |
parent | 569bda8df11effa03e618729293c7961696abb10 (diff) | |
download | op-kernel-dev-3b8249e759c701c4a82f99d957be651a7657bf6f.zip op-kernel-dev-3b8249e759c701c4a82f99d957be651a7657bf6f.tar.gz |
genirq: Do not copy affinity before set
While rumaging through arch code I found that there are a few
workarounds which deal with the fact that the initial affinity setting
from request_irq() copies the mask into irq_data->affinity before the
chip code is called. In the normal path we unconditionally copy the
mask when the chip code returns 0.
Copy after the code is called and add a return code
IRQ_SET_MASK_OK_NOCOPY for the chip functions, which prevents the
copy. That way we see the real mask when the chip function decided to
truncate it further as some arches do. IRQ_SET_MASK_OK is 0, which is
the current behaviour.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'kernel/irq/proc.c')
-rw-r--r-- | kernel/irq/proc.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/kernel/irq/proc.c b/kernel/irq/proc.c index 6c8a2a9..a46bd76 100644 --- a/kernel/irq/proc.c +++ b/kernel/irq/proc.c @@ -89,7 +89,7 @@ static ssize_t irq_affinity_proc_write(struct file *file, if (!cpumask_intersects(new_value, cpu_online_mask)) { /* Special case for empty set - allow the architecture code to set default SMP affinity. */ - err = irq_select_affinity_usr(irq) ? -EINVAL : count; + err = irq_select_affinity_usr(irq, new_value) ? -EINVAL : count; } else { irq_set_affinity(irq, new_value); err = count; |