54
54
* /proc/interrupts printing:
57
int show_interrupts(struct seq_file *p, void *v)
56
int arch_show_interrupts(struct seq_file *p, int prec)
59
int i = *(loff_t *) v, j;
60
struct irqaction * action;
66
for_each_online_cpu(j) {
67
snprintf(cpuname, 10, "CPU%d", j);
68
seq_printf(p, "%10s ", cpuname);
74
raw_spin_lock_irqsave(&irq_desc[i].lock, flags);
75
action = irq_desc[i].action;
78
seq_printf(p, "%3d: ",i);
80
seq_printf(p, "%10u ", kstat_irqs(i));
82
for_each_online_cpu(j) {
83
seq_printf(p, "%10u ", kstat_irqs_cpu(i, j));
86
seq_printf(p, " %14s", irq_desc[i].chip->name);
87
seq_printf(p, " %s", action->name);
89
for (action=action->next; action; action = action->next)
90
seq_printf(p, ", %s", action->name);
94
raw_spin_unlock_irqrestore(&irq_desc[i].lock, flags);
95
} else if (i == NR_IRQS)
96
seq_printf(p, "ERR: %10u\n", atomic_read(&irq_err_count));
58
seq_printf(p, "ERR: %10u\n", atomic_read(&irq_err_count));
103
65
void set_irq_affinity_info (unsigned int irq, int hwid, int redir)
105
67
if (irq < NR_IRQS) {
106
cpumask_copy(irq_desc[irq].affinity,
68
cpumask_copy(irq_get_irq_data(irq)->affinity,
107
69
cpumask_of(cpu_logical_id(hwid)));
108
70
irq_redir[irq] = (char) (redir & 0xff);
131
93
static void migrate_irqs(void)
133
struct irq_desc *desc;
136
97
for (irq=0; irq < NR_IRQS; irq++) {
137
desc = irq_desc + irq;
98
struct irq_desc *desc = irq_to_desc(irq);
99
struct irq_data *data = irq_desc_get_irq_data(desc);
100
struct irq_chip *chip = irq_data_get_irq_chip(data);
139
if (desc->status == IRQ_DISABLED)
102
if (irqd_irq_disabled(data))
145
108
* tell CPU not to respond to these local intr sources.
146
109
* such as ITV,CPEI,MCA etc.
148
if (desc->status == IRQ_PER_CPU)
111
if (irqd_is_per_cpu(data))
151
if (cpumask_any_and(irq_desc[irq].affinity, cpu_online_mask)
114
if (cpumask_any_and(data->affinity, cpu_online_mask)
154
117
* Save it for phase 2 processing
161
124
* Al three are essential, currently WARN_ON.. maybe panic?
163
if (desc->chip && desc->chip->disable &&
164
desc->chip->enable && desc->chip->set_affinity) {
165
desc->chip->disable(irq);
166
desc->chip->set_affinity(irq,
167
cpumask_of(new_cpu));
168
desc->chip->enable(irq);
126
if (chip && chip->irq_disable &&
127
chip->irq_enable && chip->irq_set_affinity) {
128
chip->irq_disable(data);
129
chip->irq_set_affinity(data,
130
cpumask_of(new_cpu), false);
131
chip->irq_enable(data);
170
WARN_ON((!(desc->chip) || !(desc->chip->disable) ||
171
!(desc->chip->enable) ||
172
!(desc->chip->set_affinity)));
133
WARN_ON((!chip || !chip->irq_disable ||
135
!chip->irq_set_affinity));