current->softirqs_enabled used to mean that either all or no softirqs are enabled. Now things are getting a bit different with the new per vector masking extension after which current->softirqs_enabled will stay on as long as there is a single vector still enabled.
Let's adapt the check to the updated semantics. We can't deduce much from softirq_count() alone anymore except when it's 0. Reviewed-by: David S. Miller <[email protected]> Signed-off-by: Frederic Weisbecker <[email protected]> Cc: Mauro Carvalho Chehab <[email protected]> Cc: Joel Fernandes <[email protected]> Cc: Thomas Gleixner <[email protected]> Cc: Pavan Kondeti <[email protected]> Cc: Paul E . McKenney <[email protected]> Cc: David S . Miller <[email protected]> Cc: Ingo Molnar <[email protected]> Cc: Sebastian Andrzej Siewior <[email protected]> Cc: Linus Torvalds <[email protected]> Cc: Peter Zijlstra <[email protected]> --- kernel/locking/lockdep.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c index ce027d436651..aab634b07d67 100644 --- a/kernel/locking/lockdep.c +++ b/kernel/locking/lockdep.c @@ -3911,13 +3911,8 @@ static void check_flags(unsigned long flags) * check if not in hardirq contexts: */ if (!hardirq_count()) { - if (softirq_count()) { - /* like the above, but with softirqs */ - DEBUG_LOCKS_WARN_ON(current->softirqs_enabled); - } else { - /* lick the above, does it taste good? */ + if (!softirq_count()) DEBUG_LOCKS_WARN_ON(!current->softirqs_enabled); - } } if (!debug_locks) -- 2.21.0

