Messages in this thread Patch in this message | | | From | chenshiyan <> | Subject | [PATCH V1] nohz: exit nohz idle before invoking softirq | Date | Mon, 28 Dec 2020 11:47:48 +0800 |
| |
From: "shiyan.csy" <shiyan.csy@alibaba-inc.com>
exit nohz idle before invoking softirq, or it maymiss some ticks during softirq.
Signed-off-by: Shiyan Chen <chenshiyan@linux.alibaba.com> --- kernel/softirq.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/kernel/softirq.c b/kernel/softirq.c index 9d71046..59bd6fe 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -404,6 +404,10 @@ static inline void tick_irq_exit(void) if (!in_irq()) tick_nohz_irq_exit(); } + + /* need to exit nohz idle if there's a softirq */ + if (in_serving_softirq() || local_softirq_pending()) + tick_nohz_idle_exit(); #endif } @@ -416,10 +420,11 @@ static inline void __irq_exit_rcu(void) #endif account_hardirq_exit(current); preempt_count_sub(HARDIRQ_OFFSET); - if (!in_interrupt() && local_softirq_pending()) - invoke_softirq(); + /* must call before invoke_softirq */ tick_irq_exit(); + if (!in_interrupt() && local_softirq_pending()) + invoke_softirq(); } /** -- 1.8.3.1
| |