Commit a460e745 authored by Ingo Molnar's avatar Ingo Molnar Committed by Linus Torvalds

[PATCH] genirq: clean up irq-flow-type naming

Introduce desc->name and eliminate the handle_irq_name() hack.  Add
set_irq_chip_and_handler_name() to set the flow type and name at once.
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
Acked-by: default avatarThomas Gleixner <tglx@linutronix.de>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Matthew Wilcox <willy@debian.org>
Cc: Kyle McMartin <kyle@mcmartin.ca>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 308ba5fc
...@@ -113,7 +113,8 @@ void make_8259A_irq(unsigned int irq) ...@@ -113,7 +113,8 @@ void make_8259A_irq(unsigned int irq)
{ {
disable_irq_nosync(irq); disable_irq_nosync(irq);
io_apic_irqs &= ~(1<<irq); io_apic_irqs &= ~(1<<irq);
set_irq_chip_and_handler(irq, &i8259A_chip, handle_level_irq); set_irq_chip_and_handler_name(irq, &i8259A_chip, handle_level_irq,
"XT");
enable_irq(irq); enable_irq(irq);
} }
...@@ -369,8 +370,8 @@ void __init init_ISA_irqs (void) ...@@ -369,8 +370,8 @@ void __init init_ISA_irqs (void)
/* /*
* 16 old-style INTA-cycle interrupts: * 16 old-style INTA-cycle interrupts:
*/ */
set_irq_chip_and_handler(i, &i8259A_chip, set_irq_chip_and_handler_name(i, &i8259A_chip,
handle_level_irq); handle_level_irq, "XT");
} else { } else {
/* /*
* 'high' PCI IRQs filled in on demand * 'high' PCI IRQs filled in on demand
......
...@@ -1225,11 +1225,11 @@ static void ioapic_register_intr(int irq, int vector, unsigned long trigger) ...@@ -1225,11 +1225,11 @@ static void ioapic_register_intr(int irq, int vector, unsigned long trigger)
{ {
if ((trigger == IOAPIC_AUTO && IO_APIC_irq_trigger(irq)) || if ((trigger == IOAPIC_AUTO && IO_APIC_irq_trigger(irq)) ||
trigger == IOAPIC_LEVEL) trigger == IOAPIC_LEVEL)
set_irq_chip_and_handler(irq, &ioapic_chip, set_irq_chip_and_handler_name(irq, &ioapic_chip,
handle_fasteoi_irq); handle_fasteoi_irq, "fasteoi");
else else
set_irq_chip_and_handler(irq, &ioapic_chip, set_irq_chip_and_handler_name(irq, &ioapic_chip,
handle_edge_irq); handle_edge_irq, "edge");
set_intr_gate(vector, interrupt[irq]); set_intr_gate(vector, interrupt[irq]);
} }
...@@ -2235,7 +2235,8 @@ static inline void check_timer(void) ...@@ -2235,7 +2235,8 @@ static inline void check_timer(void)
printk(KERN_INFO "...trying to set up timer as Virtual Wire IRQ..."); printk(KERN_INFO "...trying to set up timer as Virtual Wire IRQ...");
disable_8259A_irq(0); disable_8259A_irq(0);
set_irq_chip_and_handler(0, &lapic_chip, handle_fasteoi_irq); set_irq_chip_and_handler_name(0, &lapic_chip, handle_fasteoi_irq,
"fasteio");
apic_write_around(APIC_LVT0, APIC_DM_FIXED | vector); /* Fixed mode */ apic_write_around(APIC_LVT0, APIC_DM_FIXED | vector); /* Fixed mode */
enable_8259A_irq(0); enable_8259A_irq(0);
...@@ -2541,7 +2542,8 @@ int arch_setup_msi_irq(unsigned int irq, struct pci_dev *dev) ...@@ -2541,7 +2542,8 @@ int arch_setup_msi_irq(unsigned int irq, struct pci_dev *dev)
write_msi_msg(irq, &msg); write_msi_msg(irq, &msg);
set_irq_chip_and_handler(irq, &msi_chip, handle_edge_irq); set_irq_chip_and_handler_name(irq, &msi_chip, handle_edge_irq,
"edge");
return 0; return 0;
} }
...@@ -2636,7 +2638,8 @@ int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev) ...@@ -2636,7 +2638,8 @@ int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev)
write_ht_irq_low(irq, low); write_ht_irq_low(irq, low);
write_ht_irq_high(irq, high); write_ht_irq_high(irq, high);
set_irq_chip_and_handler(irq, &ht_irq_chip, handle_edge_irq); set_irq_chip_and_handler_name(irq, &ht_irq_chip,
handle_edge_irq, "edge");
} }
return vector; return vector;
} }
......
...@@ -258,7 +258,7 @@ int show_interrupts(struct seq_file *p, void *v) ...@@ -258,7 +258,7 @@ int show_interrupts(struct seq_file *p, void *v)
seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]); seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
#endif #endif
seq_printf(p, " %8s", irq_desc[i].chip->name); seq_printf(p, " %8s", irq_desc[i].chip->name);
seq_printf(p, "-%s", handle_irq_name(irq_desc[i].handle_irq)); seq_printf(p, "-%-8s", irq_desc[i].name);
seq_printf(p, " %s", action->name); seq_printf(p, " %s", action->name);
for (action=action->next; action; action = action->next) for (action=action->next; action; action = action->next)
......
...@@ -178,7 +178,8 @@ void make_8259A_irq(unsigned int irq) ...@@ -178,7 +178,8 @@ void make_8259A_irq(unsigned int irq)
{ {
disable_irq_nosync(irq); disable_irq_nosync(irq);
io_apic_irqs &= ~(1<<irq); io_apic_irqs &= ~(1<<irq);
set_irq_chip_and_handler(irq, &i8259A_chip, handle_level_irq); set_irq_chip_and_handler_name(irq, &i8259A_chip, handle_level_irq,
"XT");
enable_irq(irq); enable_irq(irq);
} }
...@@ -431,8 +432,8 @@ void __init init_ISA_irqs (void) ...@@ -431,8 +432,8 @@ void __init init_ISA_irqs (void)
/* /*
* 16 old-style INTA-cycle interrupts: * 16 old-style INTA-cycle interrupts:
*/ */
set_irq_chip_and_handler(i, &i8259A_chip, set_irq_chip_and_handler_name(i, &i8259A_chip,
handle_level_irq); handle_level_irq, "XT");
} else { } else {
/* /*
* 'high' PCI IRQs filled in on demand * 'high' PCI IRQs filled in on demand
......
...@@ -696,11 +696,11 @@ static void ioapic_register_intr(int irq, int vector, unsigned long trigger) ...@@ -696,11 +696,11 @@ static void ioapic_register_intr(int irq, int vector, unsigned long trigger)
{ {
if ((trigger == IOAPIC_AUTO && IO_APIC_irq_trigger(irq)) || if ((trigger == IOAPIC_AUTO && IO_APIC_irq_trigger(irq)) ||
trigger == IOAPIC_LEVEL) trigger == IOAPIC_LEVEL)
set_irq_chip_and_handler(irq, &ioapic_chip, set_irq_chip_and_handler_name(irq, &ioapic_chip,
handle_fasteoi_irq); handle_fasteoi_irq, "fasteoi");
else else
set_irq_chip_and_handler(irq, &ioapic_chip, set_irq_chip_and_handler_name(irq, &ioapic_chip,
handle_edge_irq); handle_edge_irq, "edge");
} }
static void __init setup_IO_APIC_irqs(void) static void __init setup_IO_APIC_irqs(void)
...@@ -806,7 +806,7 @@ static void __init setup_ExtINT_IRQ0_pin(unsigned int apic, unsigned int pin, in ...@@ -806,7 +806,7 @@ static void __init setup_ExtINT_IRQ0_pin(unsigned int apic, unsigned int pin, in
* The timer IRQ doesn't have to know that behind the * The timer IRQ doesn't have to know that behind the
* scene we have a 8259A-master in AEOI mode ... * scene we have a 8259A-master in AEOI mode ...
*/ */
set_irq_chip_and_handler(0, &ioapic_chip, handle_edge_irq); set_irq_chip_and_handler_name(0, &ioapic_chip, handle_edge_irq, "edge");
/* /*
* Add it to the IO-APIC irq-routing table: * Add it to the IO-APIC irq-routing table:
...@@ -1839,7 +1839,7 @@ int arch_setup_msi_irq(unsigned int irq, struct pci_dev *dev) ...@@ -1839,7 +1839,7 @@ int arch_setup_msi_irq(unsigned int irq, struct pci_dev *dev)
write_msi_msg(irq, &msg); write_msi_msg(irq, &msg);
set_irq_chip_and_handler(irq, &msi_chip, handle_edge_irq); set_irq_chip_and_handler_name(irq, &msi_chip, handle_edge_irq, "edge");
return 0; return 0;
} }
...@@ -1936,7 +1936,8 @@ int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev) ...@@ -1936,7 +1936,8 @@ int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev)
write_ht_irq_low(irq, low); write_ht_irq_low(irq, low);
write_ht_irq_high(irq, high); write_ht_irq_high(irq, high);
set_irq_chip_and_handler(irq, &ht_irq_chip, handle_edge_irq); set_irq_chip_and_handler_name(irq, &ht_irq_chip,
handle_edge_irq, "edge");
} }
return vector; return vector;
} }
......
...@@ -75,7 +75,7 @@ int show_interrupts(struct seq_file *p, void *v) ...@@ -75,7 +75,7 @@ int show_interrupts(struct seq_file *p, void *v)
seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]); seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
#endif #endif
seq_printf(p, " %8s", irq_desc[i].chip->name); seq_printf(p, " %8s", irq_desc[i].chip->name);
seq_printf(p, "-%s", handle_irq_name(irq_desc[i].handle_irq)); seq_printf(p, "-%-8s", irq_desc[i].name);
seq_printf(p, " %s", action->name); seq_printf(p, " %s", action->name);
for (action=action->next; action; action = action->next) for (action=action->next; action; action = action->next)
......
...@@ -141,6 +141,7 @@ struct irq_chip { ...@@ -141,6 +141,7 @@ struct irq_chip {
* @pending_mask: pending rebalanced interrupts * @pending_mask: pending rebalanced interrupts
* @dir: /proc/irq/ procfs entry * @dir: /proc/irq/ procfs entry
* @affinity_entry: /proc/irq/smp_affinity procfs entry on SMP * @affinity_entry: /proc/irq/smp_affinity procfs entry on SMP
* @name: flow handler name for /proc/interrupts output
* *
* Pad this out to 32 bytes for cache and indexing reasons. * Pad this out to 32 bytes for cache and indexing reasons.
*/ */
...@@ -167,6 +168,7 @@ struct irq_desc { ...@@ -167,6 +168,7 @@ struct irq_desc {
#ifdef CONFIG_PROC_FS #ifdef CONFIG_PROC_FS
struct proc_dir_entry *dir; struct proc_dir_entry *dir;
#endif #endif
const char *name;
} ____cacheline_aligned; } ____cacheline_aligned;
extern struct irq_desc irq_desc[NR_IRQS]; extern struct irq_desc irq_desc[NR_IRQS];
...@@ -271,12 +273,6 @@ extern void fastcall handle_simple_irq(unsigned int irq, struct irq_desc *desc); ...@@ -271,12 +273,6 @@ extern void fastcall handle_simple_irq(unsigned int irq, struct irq_desc *desc);
extern void fastcall handle_percpu_irq(unsigned int irq, struct irq_desc *desc); extern void fastcall handle_percpu_irq(unsigned int irq, struct irq_desc *desc);
extern void fastcall handle_bad_irq(unsigned int irq, struct irq_desc *desc); extern void fastcall handle_bad_irq(unsigned int irq, struct irq_desc *desc);
/*
* Get a descriptive string for the highlevel handler, for
* /proc/interrupts output:
*/
extern const char *handle_irq_name(irq_flow_handler_t handle);
/* /*
* Monolithic do_IRQ implementation. * Monolithic do_IRQ implementation.
* (is an explicit fastcall, because i386 4KSTACKS calls it from assembly) * (is an explicit fastcall, because i386 4KSTACKS calls it from assembly)
...@@ -326,10 +322,12 @@ extern struct irq_chip no_irq_chip; ...@@ -326,10 +322,12 @@ extern struct irq_chip no_irq_chip;
extern struct irq_chip dummy_irq_chip; extern struct irq_chip dummy_irq_chip;
extern void extern void
set_irq_chip_and_handler(unsigned int irq, struct irq_chip *chip, set_irq_chip_and_handler_name(unsigned int irq, struct irq_chip *chip,
irq_flow_handler_t handle); irq_flow_handler_t handle, const char *name);
extern void extern void
__set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained); __set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained,
const char *name);
/* /*
* Set a highlevel flow handler for a given IRQ: * Set a highlevel flow handler for a given IRQ:
...@@ -337,7 +335,7 @@ __set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained); ...@@ -337,7 +335,7 @@ __set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained);
static inline void static inline void
set_irq_handler(unsigned int irq, irq_flow_handler_t handle) set_irq_handler(unsigned int irq, irq_flow_handler_t handle)
{ {
__set_irq_handler(irq, handle, 0); __set_irq_handler(irq, handle, 0, NULL);
} }
/* /*
...@@ -349,7 +347,7 @@ static inline void ...@@ -349,7 +347,7 @@ static inline void
set_irq_chained_handler(unsigned int irq, set_irq_chained_handler(unsigned int irq,
irq_flow_handler_t handle) irq_flow_handler_t handle)
{ {
__set_irq_handler(irq, handle, 1); __set_irq_handler(irq, handle, 1, NULL);
} }
/* Handle dynamic irq creation and destruction */ /* Handle dynamic irq creation and destruction */
......
...@@ -499,7 +499,8 @@ handle_percpu_irq(unsigned int irq, struct irq_desc *desc) ...@@ -499,7 +499,8 @@ handle_percpu_irq(unsigned int irq, struct irq_desc *desc)
#endif /* CONFIG_SMP */ #endif /* CONFIG_SMP */
void void
__set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained) __set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained,
const char *name)
{ {
struct irq_desc *desc; struct irq_desc *desc;
unsigned long flags; unsigned long flags;
...@@ -540,6 +541,7 @@ __set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained) ...@@ -540,6 +541,7 @@ __set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained)
desc->depth = 1; desc->depth = 1;
} }
desc->handle_irq = handle; desc->handle_irq = handle;
desc->name = name;
if (handle != handle_bad_irq && is_chained) { if (handle != handle_bad_irq && is_chained) {
desc->status &= ~IRQ_DISABLED; desc->status &= ~IRQ_DISABLED;
...@@ -555,30 +557,13 @@ set_irq_chip_and_handler(unsigned int irq, struct irq_chip *chip, ...@@ -555,30 +557,13 @@ set_irq_chip_and_handler(unsigned int irq, struct irq_chip *chip,
irq_flow_handler_t handle) irq_flow_handler_t handle)
{ {
set_irq_chip(irq, chip); set_irq_chip(irq, chip);
__set_irq_handler(irq, handle, 0); __set_irq_handler(irq, handle, 0, NULL);
} }
/* void
* Get a descriptive string for the highlevel handler, for set_irq_chip_and_handler_name(unsigned int irq, struct irq_chip *chip,
* /proc/interrupts output: irq_flow_handler_t handle, const char *name)
*/
const char *
handle_irq_name(irq_flow_handler_t handle)
{ {
if (handle == handle_level_irq) set_irq_chip(irq, chip);
return "level "; __set_irq_handler(irq, handle, 0, name);
if (handle == handle_fasteoi_irq)
return "fasteoi";
if (handle == handle_edge_irq)
return "edge ";
if (handle == handle_simple_irq)
return "simple ";
#ifdef CONFIG_SMP
if (handle == handle_percpu_irq)
return "percpu ";
#endif
if (handle == handle_bad_irq)
return "bad ";
return NULL;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment