aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/interrupt.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/interrupt.h')
-rw-r--r--include/linux/interrupt.h33
1 files changed, 11 insertions, 22 deletions
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
index 5e865b554940..db43b58a3355 100644
--- a/include/linux/interrupt.h
+++ b/include/linux/interrupt.h
@@ -11,14 +11,13 @@
11#include <linux/irqnr.h> 11#include <linux/irqnr.h>
12#include <linux/hardirq.h> 12#include <linux/hardirq.h>
13#include <linux/irqflags.h> 13#include <linux/irqflags.h>
14#include <linux/smp.h>
15#include <linux/percpu.h>
16#include <linux/hrtimer.h> 14#include <linux/hrtimer.h>
17#include <linux/kref.h> 15#include <linux/kref.h>
18#include <linux/workqueue.h> 16#include <linux/workqueue.h>
19 17
20#include <linux/atomic.h> 18#include <linux/atomic.h>
21#include <asm/ptrace.h> 19#include <asm/ptrace.h>
20#include <asm/irq.h>
22 21
23/* 22/*
24 * These correspond to the IORESOURCE_IRQ_* defines in 23 * These correspond to the IORESOURCE_IRQ_* defines in
@@ -374,6 +373,16 @@ struct softirq_action
374 373
375asmlinkage void do_softirq(void); 374asmlinkage void do_softirq(void);
376asmlinkage void __do_softirq(void); 375asmlinkage void __do_softirq(void);
376
377#ifdef __ARCH_HAS_DO_SOFTIRQ
378void do_softirq_own_stack(void);
379#else
380static inline void do_softirq_own_stack(void)
381{
382 __do_softirq();
383}
384#endif
385
377extern void open_softirq(int nr, void (*action)(struct softirq_action *)); 386extern void open_softirq(int nr, void (*action)(struct softirq_action *));
378extern void softirq_init(void); 387extern void softirq_init(void);
379extern void __raise_softirq_irqoff(unsigned int nr); 388extern void __raise_softirq_irqoff(unsigned int nr);
@@ -381,15 +390,6 @@ extern void __raise_softirq_irqoff(unsigned int nr);
381extern void raise_softirq_irqoff(unsigned int nr); 390extern void raise_softirq_irqoff(unsigned int nr);
382extern void raise_softirq(unsigned int nr); 391extern void raise_softirq(unsigned int nr);
383 392
384/* This is the worklist that queues up per-cpu softirq work.
385 *
386 * send_remote_sendirq() adds work to these lists, and
387 * the softirq handler itself dequeues from them. The queues
388 * are protected by disabling local cpu interrupts and they must
389 * only be accessed by the local cpu that they are for.
390 */
391DECLARE_PER_CPU(struct list_head [NR_SOFTIRQS], softirq_work_list);
392
393DECLARE_PER_CPU(struct task_struct *, ksoftirqd); 393DECLARE_PER_CPU(struct task_struct *, ksoftirqd);
394 394
395static inline struct task_struct *this_cpu_ksoftirqd(void) 395static inline struct task_struct *this_cpu_ksoftirqd(void)
@@ -397,17 +397,6 @@ static inline struct task_struct *this_cpu_ksoftirqd(void)
397 return this_cpu_read(ksoftirqd); 397 return this_cpu_read(ksoftirqd);
398} 398}
399 399
400/* Try to send a softirq to a remote cpu. If this cannot be done, the
401 * work will be queued to the local cpu.
402 */
403extern void send_remote_softirq(struct call_single_data *cp, int cpu, int softirq);
404
405/* Like send_remote_softirq(), but the caller must disable local cpu interrupts
406 * and compute the current cpu, passed in as 'this_cpu'.
407 */
408extern void __send_remote_softirq(struct call_single_data *cp, int cpu,
409 int this_cpu, int softirq);
410
411/* Tasklets --- multithreaded analogue of BHs. 400/* Tasklets --- multithreaded analogue of BHs.
412 401
413 Main feature differing them of generic softirqs: tasklet 402 Main feature differing them of generic softirqs: tasklet