Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 239007b8 authored by Thomas Gleixner's avatar Thomas Gleixner
Browse files

genirq: Convert irq_desc.lock to raw_spinlock



Convert locks which cannot be sleeping locks in preempt-rt to
raw_spinlocks.

Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Acked-by: default avatarPeter Zijlstra <peterz@infradead.org>
Acked-by: default avatarIngo Molnar <mingo@elte.hu>
parent 9f5a5621
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -81,7 +81,7 @@ show_interrupts(struct seq_file *p, void *v)
#endif

	if (irq < ACTUAL_NR_IRQS) {
		spin_lock_irqsave(&irq_desc[irq].lock, flags);
		raw_spin_lock_irqsave(&irq_desc[irq].lock, flags);
		action = irq_desc[irq].action;
		if (!action) 
			goto unlock;
@@ -105,7 +105,7 @@ show_interrupts(struct seq_file *p, void *v)

		seq_putc(p, '\n');
unlock:
		spin_unlock_irqrestore(&irq_desc[irq].lock, flags);
		raw_spin_unlock_irqrestore(&irq_desc[irq].lock, flags);
	} else if (irq == ACTUAL_NR_IRQS) {
#ifdef CONFIG_SMP
		seq_puts(p, "IPI: ");
+2 −2
Original line number Diff line number Diff line
@@ -26,9 +26,9 @@ extern int show_fiq_list(struct seq_file *, void *);
 */
#define do_bad_IRQ(irq,desc)				\
do {							\
	spin_lock(&desc->lock);				\
	raw_spin_lock(&desc->lock);			\
	handle_bad_irq(irq, desc);			\
	spin_unlock(&desc->lock);			\
	raw_spin_unlock(&desc->lock);			\
} while(0)

#endif
+6 −6
Original line number Diff line number Diff line
@@ -69,7 +69,7 @@ int show_interrupts(struct seq_file *p, void *v)
	}

	if (i < NR_IRQS) {
		spin_lock_irqsave(&irq_desc[i].lock, flags);
		raw_spin_lock_irqsave(&irq_desc[i].lock, flags);
		action = irq_desc[i].action;
		if (!action)
			goto unlock;
@@ -84,7 +84,7 @@ int show_interrupts(struct seq_file *p, void *v)

		seq_putc(p, '\n');
unlock:
		spin_unlock_irqrestore(&irq_desc[i].lock, flags);
		raw_spin_unlock_irqrestore(&irq_desc[i].lock, flags);
	} else if (i == NR_IRQS) {
#ifdef CONFIG_FIQ
		show_fiq_list(p, v);
@@ -139,7 +139,7 @@ void set_irq_flags(unsigned int irq, unsigned int iflags)
	}

	desc = irq_desc + irq;
	spin_lock_irqsave(&desc->lock, flags);
	raw_spin_lock_irqsave(&desc->lock, flags);
	desc->status |= IRQ_NOREQUEST | IRQ_NOPROBE | IRQ_NOAUTOEN;
	if (iflags & IRQF_VALID)
		desc->status &= ~IRQ_NOREQUEST;
@@ -147,7 +147,7 @@ void set_irq_flags(unsigned int irq, unsigned int iflags)
		desc->status &= ~IRQ_NOPROBE;
	if (!(iflags & IRQF_NOAUTOEN))
		desc->status &= ~IRQ_NOAUTOEN;
	spin_unlock_irqrestore(&desc->lock, flags);
	raw_spin_unlock_irqrestore(&desc->lock, flags);
}

void __init init_IRQ(void)
@@ -166,9 +166,9 @@ static void route_irq(struct irq_desc *desc, unsigned int irq, unsigned int cpu)
{
	pr_debug("IRQ%u: moving from cpu%u to cpu%u\n", irq, desc->node, cpu);

	spin_lock_irq(&desc->lock);
	raw_spin_lock_irq(&desc->lock);
	desc->chip->set_affinity(irq, cpumask_of(cpu));
	spin_unlock_irq(&desc->lock);
	raw_spin_unlock_irq(&desc->lock);
}

/*
+4 −4
Original line number Diff line number Diff line
@@ -66,7 +66,7 @@ static void handle_prio_irq(unsigned int irq, struct irq_desc *desc)
	struct irqaction *action;
	irqreturn_t action_ret;

	spin_lock(&desc->lock);
	raw_spin_lock(&desc->lock);

	BUG_ON(desc->status & IRQ_INPROGRESS);

@@ -78,7 +78,7 @@ static void handle_prio_irq(unsigned int irq, struct irq_desc *desc)
		goto out_mask;

	desc->status |= IRQ_INPROGRESS;
	spin_unlock(&desc->lock);
	raw_spin_unlock(&desc->lock);

	action_ret = handle_IRQ_event(irq, action);

@@ -87,7 +87,7 @@ static void handle_prio_irq(unsigned int irq, struct irq_desc *desc)
	 * Maybe this function should go to kernel/irq/chip.c? */
	note_interrupt(irq, desc, action_ret);

	spin_lock(&desc->lock);
	raw_spin_lock(&desc->lock);
	desc->status &= ~IRQ_INPROGRESS;

	if (desc->status & IRQ_DISABLED)
@@ -97,7 +97,7 @@ static void handle_prio_irq(unsigned int irq, struct irq_desc *desc)
	/* ack unconditionally to unmask lower prio irqs */
	desc->chip->ack(irq);

	spin_unlock(&desc->lock);
	raw_spin_unlock(&desc->lock);
}
#define handle_irq handle_prio_irq
#endif
+2 −2
Original line number Diff line number Diff line
@@ -51,7 +51,7 @@ int show_interrupts(struct seq_file *p, void *v)
	}

	if (i < NR_IRQS) {
		spin_lock_irqsave(&irq_desc[i].lock, flags);
		raw_spin_lock_irqsave(&irq_desc[i].lock, flags);
		action = irq_desc[i].action;
		if (!action)
			goto unlock;
@@ -66,7 +66,7 @@ int show_interrupts(struct seq_file *p, void *v)

		seq_putc(p, '\n');
	unlock:
		spin_unlock_irqrestore(&irq_desc[i].lock, flags);
		raw_spin_unlock_irqrestore(&irq_desc[i].lock, flags);
	}

	return 0;
Loading