aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/irq/manage.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/irq/manage.c')
-rw-r--r--kernel/irq/manage.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
index f8914b92b664..60c49e324390 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -89,7 +89,14 @@ int irq_set_affinity(unsigned int irq, cpumask_t cpumask)
89 set_balance_irq_affinity(irq, cpumask); 89 set_balance_irq_affinity(irq, cpumask);
90 90
91#ifdef CONFIG_GENERIC_PENDING_IRQ 91#ifdef CONFIG_GENERIC_PENDING_IRQ
92 set_pending_irq(irq, cpumask); 92 if (desc->status & IRQ_MOVE_PCNTXT) {
93 unsigned long flags;
94
95 spin_lock_irqsave(&desc->lock, flags);
96 desc->chip->set_affinity(irq, cpumask);
97 spin_unlock_irqrestore(&desc->lock, flags);
98 } else
99 set_pending_irq(irq, cpumask);
93#else 100#else
94 desc->affinity = cpumask; 101 desc->affinity = cpumask;
95 desc->chip->set_affinity(irq, cpumask); 102 desc->chip->set_affinity(irq, cpumask);
@@ -177,8 +184,7 @@ static void __enable_irq(struct irq_desc *desc, unsigned int irq)
177{ 184{
178 switch (desc->depth) { 185 switch (desc->depth) {
179 case 0: 186 case 0:
180 printk(KERN_WARNING "Unbalanced enable for IRQ %d\n", irq); 187 WARN(1, KERN_WARNING "Unbalanced enable for IRQ %d\n", irq);
181 WARN_ON(1);
182 break; 188 break;
183 case 1: { 189 case 1: {
184 unsigned int status = desc->status & ~IRQ_DISABLED; 190 unsigned int status = desc->status & ~IRQ_DISABLED;
@@ -324,7 +330,8 @@ static int __irq_set_trigger(struct irq_chip *chip, unsigned int irq,
324 ret = chip->set_type(irq, flags & IRQF_TRIGGER_MASK); 330 ret = chip->set_type(irq, flags & IRQF_TRIGGER_MASK);
325 331
326 if (ret) 332 if (ret)
327 pr_err("setting flow type for irq %u failed (%pF)\n", 333 pr_err("setting trigger mode %d for irq %u failed (%pF)\n",
334 (int)(flags & IRQF_TRIGGER_MASK),
328 irq, chip->set_type); 335 irq, chip->set_type);
329 336
330 return ret; 337 return ret;