#include <linux/jiffies.h>
#include <linux/irq.h>
#include <linux/module.h>
#include <linux/interrupt.h>
#include <linux/moduleparam.h>
#include <linux/timer.h>
#include "internals.h"
static int irqfixup __read_mostly;
#define POLL_SPURIOUS_IRQ_INTERVAL …
static void poll_spurious_irqs(struct timer_list *unused);
static DEFINE_TIMER(poll_spurious_irq_timer, poll_spurious_irqs);
static int irq_poll_cpu;
static atomic_t irq_poll_active;
bool irq_wait_for_poll(struct irq_desc *desc)
__must_hold(&desc->lock)
{ … }
static int try_one_irq(struct irq_desc *desc, bool force)
{ … }
static int misrouted_irq(int irq)
{ … }
static void poll_spurious_irqs(struct timer_list *unused)
{ … }
static inline int bad_action_ret(irqreturn_t action_ret)
{ … }
static void __report_bad_irq(struct irq_desc *desc, irqreturn_t action_ret)
{ … }
static void report_bad_irq(struct irq_desc *desc, irqreturn_t action_ret)
{ … }
static inline int
try_misrouted_irq(unsigned int irq, struct irq_desc *desc,
irqreturn_t action_ret)
{ … }
#define SPURIOUS_DEFERRED …
void note_interrupt(struct irq_desc *desc, irqreturn_t action_ret)
{ … }
bool noirqdebug __read_mostly;
int noirqdebug_setup(char *str)
{ … }
__setup(…);
module_param(noirqdebug, bool, 0644);
MODULE_PARM_DESC(…) …;
static int __init irqfixup_setup(char *str)
{ … }
__setup(…);
module_param(irqfixup, int, 0644);
static int __init irqpoll_setup(char *str)
{ … }
__setup(…);