diff options
Diffstat (limited to 'kernel/irq/manage.c')
| -rw-r--r-- | kernel/irq/manage.c | 19 | 
1 files changed, 9 insertions, 10 deletions
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index ef30b4762947..27667e82ecc9 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c @@ -25,12 +25,11 @@  #include "internals.h"  #if defined(CONFIG_IRQ_FORCED_THREADING) && !defined(CONFIG_PREEMPT_RT) -__read_mostly bool force_irqthreads; -EXPORT_SYMBOL_GPL(force_irqthreads); +DEFINE_STATIC_KEY_FALSE(force_irqthreads_key);  static int __init setup_forced_irqthreads(char *arg)  { -	force_irqthreads = true; +	static_branch_enable(&force_irqthreads_key);  	return 0;  }  early_param("threadirqs", setup_forced_irqthreads); @@ -1260,8 +1259,8 @@ static int irq_thread(void *data)  	irqreturn_t (*handler_fn)(struct irq_desc *desc,  			struct irqaction *action); -	if (force_irqthreads && test_bit(IRQTF_FORCED_THREAD, -					&action->thread_flags)) +	if (force_irqthreads() && test_bit(IRQTF_FORCED_THREAD, +					   &action->thread_flags))  		handler_fn = irq_forced_thread_fn;  	else  		handler_fn = irq_thread_fn; @@ -1322,7 +1321,7 @@ EXPORT_SYMBOL_GPL(irq_wake_thread);  static int irq_setup_forced_threading(struct irqaction *new)  { -	if (!force_irqthreads) +	if (!force_irqthreads())  		return 0;  	if (new->flags & (IRQF_NO_THREAD | IRQF_PERCPU | IRQF_ONESHOT))  		return 0; @@ -2072,9 +2071,9 @@ const void *free_nmi(unsigned int irq, void *dev_id)   *	request_threaded_irq - allocate an interrupt line   *	@irq: Interrupt line to allocate   *	@handler: Function to be called when the IRQ occurs. - *		  Primary handler for threaded interrupts - *		  If NULL and thread_fn != NULL the default - *		  primary handler is installed + *		  Primary handler for threaded interrupts. + *		  If handler is NULL and thread_fn != NULL + *		  the default primary handler is installed.   *	@thread_fn: Function called from the irq handler thread   *		    If NULL, no irq thread is created   *	@irqflags: Interrupt type flags @@ -2108,7 +2107,7 @@ const void *free_nmi(unsigned int irq, void *dev_id)   *   *	IRQF_SHARED		Interrupt is shared   *	IRQF_TRIGGER_*		Specify active edge(s) or level - * + *	IRQF_ONESHOT		Run thread_fn with interrupt line masked   */  int request_threaded_irq(unsigned int irq, irq_handler_t handler,  			 irq_handler_t thread_fn, unsigned long irqflags,  | 
