hardirq.h 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. #ifndef __ASM_HARDIRQ_H
  2. #define __ASM_HARDIRQ_H
  3. #include <linux/config.h>
  4. #include <linux/cache.h>
  5. #include <linux/threads.h>
  6. typedef struct {
  7. unsigned int __softirq_pending;
  8. } ____cacheline_aligned irq_cpustat_t;
  9. #include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */
  10. #define HARDIRQ_BITS 8
  11. /*
  12. * The hardirq mask has to be large enough to have space
  13. * for potentially all IRQ sources in the system nesting
  14. * on a single CPU:
  15. */
  16. #if (1 << HARDIRQ_BITS) < NR_IRQS
  17. # error HARDIRQ_BITS is too low!
  18. #endif
  19. #ifndef CONFIG_SMP
  20. extern asmlinkage void __do_softirq(void);
  21. #define irq_exit() \
  22. do { \
  23. preempt_count() -= IRQ_EXIT_OFFSET; \
  24. if (!in_interrupt() && local_softirq_pending()) \
  25. __do_softirq(); \
  26. preempt_enable_no_resched(); \
  27. } while (0)
  28. #endif
  29. #endif /* __ASM_HARDIRQ_H */