lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Tue, 1 Dec 2020 01:12:26 +0100 From: Frederic Weisbecker <frederic@...nel.org> To: Thomas Gleixner <tglx@...utronix.de> Cc: LKML <linux-kernel@...r.kernel.org>, Frederic Weisbecker <frederic@...nel.org>, Tony Luck <tony.luck@...el.com>, Peter Zijlstra <peterz@...radead.org>, Vasily Gorbik <gor@...ux.ibm.com>, Michael Ellerman <mpe@...erman.id.au>, Benjamin Herrenschmidt <benh@...nel.crashing.org>, Paul Mackerras <paulus@...ba.org>, Christian Borntraeger <borntraeger@...ibm.com>, Fenghua Yu <fenghua.yu@...el.com>, Heiko Carstens <hca@...ux.ibm.com> Subject: [PATCH 5/5] irq: Call tick_irq_enter() inside HARDIRQ_OFFSET Now that account_irq_enter_time() 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 <frederic@...nel.org> Cc: Peter Zijlstra <peterz@...radead.org> Cc: Tony Luck <tony.luck@...el.com> Cc: Fenghua Yu <fenghua.yu@...el.com> Cc: Michael Ellerman <mpe@...erman.id.au> Cc: Benjamin Herrenschmidt <benh@...nel.crashing.org> Cc: Paul Mackerras <paulus@...ba.org> Cc: Heiko Carstens <hca@...ux.ibm.com> Cc: Vasily Gorbik <gor@...ux.ibm.com> Cc: Christian Borntraeger <borntraeger@...ibm.com> --- kernel/softirq.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/kernel/softirq.c b/kernel/softirq.c index 24254c41bb7c..447ee4d6fe4d 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -377,16 +377,12 @@ asmlinkage __visible void __softirq_entry __do_softirq(void) */ 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_irq_enter_time(current); } /** -- 2.25.1
Powered by blists - more mailing lists