diff --git a/include/linux/hardirq.h b/include/linux/hardirq.h index 612472aaa79c1607159794a2257356bde263e9a0..6f657d7f2d04668f7aa360158c582d33f63fcacb 100644 --- a/include/linux/hardirq.h +++ b/include/linux/hardirq.h @@ -106,12 +106,7 @@ static inline void account_system_vtime(struct task_struct *tsk) * always balanced, so the interrupted value of ->hardirq_context * will always be restored. */ -#define irq_enter() \ - do { \ - account_system_vtime(current); \ - add_preempt_count(HARDIRQ_OFFSET); \ - trace_hardirq_enter(); \ - } while (0) +extern void irq_enter(void); /* * Exit irq context without processing softirqs: diff --git a/kernel/softirq.c b/kernel/softirq.c index 918e52df090e88ee0a03096bee651e6c3a4d6dce..14e1a14f94d20538f269049642d8a455f6dfb9ef 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -273,6 +273,16 @@ EXPORT_SYMBOL(do_softirq); #endif +/* + * Enter an interrupt context. + */ +void irq_enter(void) +{ + account_system_vtime(current); + add_preempt_count(HARDIRQ_OFFSET); + trace_hardirq_enter(); +} + #ifdef __ARCH_IRQ_EXIT_IRQS_DISABLED # define invoke_softirq() __do_softirq() #else