From: Frederic Weisbecker Date: Wed, 2 Dec 2020 11:57:32 +0000 (+0100) Subject: irq: Call tick_irq_enter() inside HARDIRQ_OFFSET X-Git-Tag: accepted/tizen/unified/20230118.172025~8173^2~31 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d14ce74f1fb376ccbbc0b05ded477ada51253729;p=platform%2Fkernel%2Flinux-rpi.git irq: Call tick_irq_enter() inside HARDIRQ_OFFSET Now that account_hardirq_enter() is called after HARDIRQ_OFFSET has been incremented, there is nothing left that prevents us from also moving tick_irq_enter() after HARDIRQ_OFFSET is incremented. The desired outcome is to remove the nasty hack that prevents softirqs from being raised through ksoftirqd instead of the hardirq bottom half. Also tick_irq_enter() then becomes appropriately covered by lockdep. Signed-off-by: Frederic Weisbecker Signed-off-by: Thomas Gleixner Link: https://lore.kernel.org/r/20201202115732.27827-6-frederic@kernel.org --- diff --git a/kernel/softirq.c b/kernel/softirq.c index b8f42b3..d5bfd5e 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -377,16 +377,12 @@ restart: */ void irq_enter_rcu(void) { - if (is_idle_task(current) && !in_interrupt()) { - /* - * Prevent raise_softirq from needlessly waking up ksoftirqd - * here, as softirq will be serviced on return from interrupt. - */ - local_bh_disable(); + __irq_enter_raw(); + + if (is_idle_task(current) && (irq_count() == HARDIRQ_OFFSET)) tick_irq_enter(); - _local_bh_enable(); - } - __irq_enter(); + + account_hardirq_enter(current); } /**