From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751726AbdBBQpT (ORCPT ); Thu, 2 Feb 2017 11:45:19 -0500 Received: from mfb01-md.ns.itscom.net ([175.177.155.109]:52290 "EHLO mfb01-md.ns.itscom.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751147AbdBBQpS (ORCPT ); Thu, 2 Feb 2017 11:45:18 -0500 X-Greylist: delayed 418 seconds by postgrey-1.27 at vger.kernel.org; Thu, 02 Feb 2017 11:45:18 EST From: "J. R. Okajima" To: peterz@infradead.org Cc: linux-kernel@vger.kernel.org Subject: [PATCH 2/3] lockdep: consolidate by new validate_held_lock() Date: Fri, 3 Feb 2017 01:38:16 +0900 Message-Id: <1486053497-9948-2-git-send-email-hooanon05g@gmail.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1486053497-9948-1-git-send-email-hooanon05g@gmail.com> References: <20170131163253.GQ6515@twins.programming.kicks-ass.net> <1486053497-9948-1-git-send-email-hooanon05g@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org A simple consolidataion. The behaviour should not change. Signed-off-by: J. R. Okajima --- kernel/locking/lockdep.c | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c index b7a2001..7dc8f8e 100644 --- a/kernel/locking/lockdep.c +++ b/kernel/locking/lockdep.c @@ -3464,6 +3464,23 @@ static struct held_lock *find_held_lock(struct task_struct *curr, return ret; } +static int validate_held_lock(struct task_struct *curr, unsigned int depth, + int idx) +{ + struct held_lock *hlock; + + for (hlock = curr->held_locks + idx; idx < depth; idx++, hlock++) + if (!__lock_acquire(hlock->instance, + hlock_class(hlock)->subclass, + hlock->trylock, + hlock->read, hlock->check, + hlock->hardirqs_off, + hlock->nest_lock, hlock->acquire_ip, + hlock->references, hlock->pin_count)) + return 1; + return 0; +} + static int __lock_set_class(struct lockdep_map *lock, const char *name, struct lock_class_key *key, unsigned int subclass, @@ -3494,15 +3511,8 @@ __lock_set_class(struct lockdep_map *lock, const char *name, curr->lockdep_depth = i; curr->curr_chain_key = hlock->prev_chain_key; - for (; i < depth; i++) { - hlock = curr->held_locks + i; - if (!__lock_acquire(hlock->instance, - hlock_class(hlock)->subclass, hlock->trylock, - hlock->read, hlock->check, hlock->hardirqs_off, - hlock->nest_lock, hlock->acquire_ip, - hlock->references, hlock->pin_count)) - return 0; - } + if (validate_held_lock(curr, depth, i)) + return 0; /* * I took it apart and put it back together again, except now I have @@ -3573,15 +3583,8 @@ __lock_release(struct lockdep_map *lock, int nested, unsigned long ip) curr->lockdep_depth = i; curr->curr_chain_key = hlock->prev_chain_key; - for (i++; i < depth; i++) { - hlock = curr->held_locks + i; - if (!__lock_acquire(hlock->instance, - hlock_class(hlock)->subclass, hlock->trylock, - hlock->read, hlock->check, hlock->hardirqs_off, - hlock->nest_lock, hlock->acquire_ip, - hlock->references, hlock->pin_count)) - return 0; - } + if (validate_held_lock(curr, depth, i + 1)) + return 0; /* * We had N bottles of beer on the wall, we drank one, but now -- 2.1.4