aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/irq.h4
-rw-r--r--kernel/irq/Kconfig4
-rw-r--r--kernel/irq/proc.c15
3 files changed, 22 insertions, 1 deletions
diff --git a/include/linux/irq.h b/include/linux/irq.h
index 1d3577f30d4..5d876c9b3a3 100644
--- a/include/linux/irq.h
+++ b/include/linux/irq.h
@@ -28,6 +28,7 @@
28#include <asm/ptrace.h> 28#include <asm/ptrace.h>
29#include <asm/irq_regs.h> 29#include <asm/irq_regs.h>
30 30
31struct seq_file;
31struct irq_desc; 32struct irq_desc;
32struct irq_data; 33struct irq_data;
33typedef void (*irq_flow_handler_t)(unsigned int irq, 34typedef void (*irq_flow_handler_t)(unsigned int irq,
@@ -270,6 +271,7 @@ static inline bool irqd_can_move_in_process_context(struct irq_data *d)
270 * @irq_set_wake: enable/disable power-management wake-on of an IRQ 271 * @irq_set_wake: enable/disable power-management wake-on of an IRQ
271 * @irq_bus_lock: function to lock access to slow bus (i2c) chips 272 * @irq_bus_lock: function to lock access to slow bus (i2c) chips
272 * @irq_bus_sync_unlock:function to sync and unlock slow bus (i2c) chips 273 * @irq_bus_sync_unlock:function to sync and unlock slow bus (i2c) chips
274 * @irq_print_chip: optional to print special chip info in show_interrupts
273 * @flags: chip specific flags 275 * @flags: chip specific flags
274 * 276 *
275 * @release: release function solely used by UML 277 * @release: release function solely used by UML
@@ -317,6 +319,8 @@ struct irq_chip {
317 void (*irq_bus_lock)(struct irq_data *data); 319 void (*irq_bus_lock)(struct irq_data *data);
318 void (*irq_bus_sync_unlock)(struct irq_data *data); 320 void (*irq_bus_sync_unlock)(struct irq_data *data);
319 321
322 void (*irq_print_chip)(struct irq_data *data, struct seq_file *p);
323
320 unsigned long flags; 324 unsigned long flags;
321 325
322 /* Currently used only by UML, might disappear one day.*/ 326 /* Currently used only by UML, might disappear one day.*/
diff --git a/kernel/irq/Kconfig b/kernel/irq/Kconfig
index 09bef82d74c..00f2c037267 100644
--- a/kernel/irq/Kconfig
+++ b/kernel/irq/Kconfig
@@ -31,6 +31,10 @@ config GENERIC_IRQ_PROBE
31config GENERIC_IRQ_SHOW 31config GENERIC_IRQ_SHOW
32 bool 32 bool
33 33
34# Print level/edge extra information
35config GENERIC_IRQ_SHOW_LEVEL
36 bool
37
34# Support for delayed migration from interrupt context 38# Support for delayed migration from interrupt context
35config GENERIC_PENDING_IRQ 39config GENERIC_PENDING_IRQ
36 bool 40 bool
diff --git a/kernel/irq/proc.c b/kernel/irq/proc.c
index 760248de109..626d092eed9 100644
--- a/kernel/irq/proc.c
+++ b/kernel/irq/proc.c
@@ -404,7 +404,20 @@ int show_interrupts(struct seq_file *p, void *v)
404 seq_printf(p, "%*d: ", prec, i); 404 seq_printf(p, "%*d: ", prec, i);
405 for_each_online_cpu(j) 405 for_each_online_cpu(j)
406 seq_printf(p, "%10u ", kstat_irqs_cpu(i, j)); 406 seq_printf(p, "%10u ", kstat_irqs_cpu(i, j));
407 seq_printf(p, " %8s", desc->irq_data.chip->name); 407
408 if (desc->irq_data.chip) {
409 if (desc->irq_data.chip->irq_print_chip)
410 desc->irq_data.chip->irq_print_chip(&desc->irq_data, p);
411 else if (desc->irq_data.chip->name)
412 seq_printf(p, " %8s", desc->irq_data.chip->name);
413 else
414 seq_printf(p, " %8s", "-");
415 } else {
416 seq_printf(p, " %8s", "None");
417 }
418#ifdef CONFIG_GENIRC_IRQ_SHOW_LEVEL
419 seq_printf(p, " %-8s", irqd_is_level_type(&desc->irq_data) ? "Level" : "Edge");
420#endif
408 if (desc->name) 421 if (desc->name)
409 seq_printf(p, "-%-8s", desc->name); 422 seq_printf(p, "-%-8s", desc->name);
410 423