Skip to content

Commit

Permalink
powerpc: core irq_data conversion.
Browse files Browse the repository at this point in the history
Signed-off-by: Lennert Buytenhek <[email protected]>
Signed-off-by: Benjamin Herrenschmidt <[email protected]>
  • Loading branch information
buytenh authored and ozbenh committed Mar 10, 2011
1 parent 73909af commit e118028
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 16 deletions.
23 changes: 16 additions & 7 deletions arch/powerpc/kernel/irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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");
Expand Down Expand Up @@ -313,20 +315,24 @@ 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;

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);
}
Expand Down Expand Up @@ -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);
Expand Down
21 changes: 12 additions & 9 deletions arch/powerpc/kernel/machine_kexec.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}

Expand Down

0 comments on commit e118028

Please sign in to comment.