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

Commit e1180287 authored by Lennert Buytenhek's avatar Lennert Buytenhek Committed by Benjamin Herrenschmidt
Browse files

powerpc: core irq_data conversion.

parent 73909af7
Loading
Loading
Loading
Loading
+16 −7
Original line number Diff line number Diff line
@@ -237,6 +237,7 @@ int show_interrupts(struct seq_file *p, void *v)
	int i = *(loff_t *) v, j, prec;
	struct irqaction *action;
	struct irq_desc *desc;
	struct irq_chip *chip;

	if (i > nr_irqs)
		return 0;
@@ -270,8 +271,9 @@ int show_interrupts(struct seq_file *p, void *v)
	for_each_online_cpu(j)
		seq_printf(p, "%10u ", kstat_irqs_cpu(i, j));

	if (desc->chip)
		seq_printf(p, "  %-16s", desc->chip->name);
	chip = get_irq_desc_chip(desc);
	if (chip)
		seq_printf(p, "  %-16s", chip->name);
	else
		seq_printf(p, "  %-16s", "None");
	seq_printf(p, " %-8s", (desc->status & IRQ_LEVEL) ? "Level" : "Edge");
@@ -313,6 +315,8 @@ void fixup_irqs(const struct cpumask *map)
	alloc_cpumask_var(&mask, GFP_KERNEL);

	for_each_irq(irq) {
		struct irq_chip *chip;

		desc = irq_to_desc(irq);
		if (!desc)
			continue;
@@ -320,13 +324,15 @@ void fixup_irqs(const struct cpumask *map)
		if (desc->status & IRQ_PER_CPU)
			continue;

		cpumask_and(mask, desc->affinity, map);
		chip = get_irq_desc_chip(desc);

		cpumask_and(mask, desc->irq_data.affinity, map);
		if (cpumask_any(mask) >= nr_cpu_ids) {
			printk("Breaking affinity for irq %i\n", irq);
			cpumask_copy(mask, map);
		}
		if (desc->chip->set_affinity)
			desc->chip->set_affinity(irq, mask);
		if (chip->irq_set_affinity)
			chip->irq_set_affinity(&desc->irq_data, mask, true);
		else if (desc->action && !(warned++))
			printk("Cannot set affinity for irq %i\n", irq);
	}
@@ -1145,11 +1151,14 @@ static int virq_debug_show(struct seq_file *m, void *private)
		raw_spin_lock_irqsave(&desc->lock, flags);

		if (desc->action && desc->action->handler) {
			struct irq_chip *chip;

			seq_printf(m, "%5d  ", i);
			seq_printf(m, "0x%05lx  ", virq_to_hw(i));

			if (desc->chip && desc->chip->name)
				p = desc->chip->name;
			chip = get_irq_desc_chip(desc);
			if (chip && chip->name)
				p = chip->name;
			else
				p = none;
			seq_printf(m, "%-15s  ", p);
+12 −9
Original line number Diff line number Diff line
@@ -26,20 +26,23 @@ void machine_kexec_mask_interrupts(void) {

	for_each_irq(i) {
		struct irq_desc *desc = irq_to_desc(i);
		struct irq_chip *chip;

		if (!desc || !desc->chip)
		if (!desc)
			continue;

		if (desc->chip->eoi &&
		    desc->status & IRQ_INPROGRESS)
			desc->chip->eoi(i);
		chip = get_irq_desc_chip(desc);
		if (!chip)
			continue;

		if (chip->irq_eoi && desc->status & IRQ_INPROGRESS)
			chip->irq_eoi(&desc->irq_data);

		if (desc->chip->mask)
			desc->chip->mask(i);
		if (chip->irq_mask)
			chip->irq_mask(&desc->irq_data);

		if (desc->chip->disable &&
		    !(desc->status & IRQ_DISABLED))
			desc->chip->disable(i);
		if (chip->irq_disable && !(desc->status & IRQ_DISABLED))
			chip->irq_disable(&desc->irq_data);
	}
}