Re: [patch 3/9] input: ads7846.c sparse lock annotation
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date: 2009-05-14 03:51:51
On Wed, May 13, 2009 at 08:34:27PM -0700, Harvey Harrison wrote:
On Wed, 2009-05-13 at 20:24 -0700, Dmitry Torokhov wrote:quoted
On Tue, May 12, 2009 at 01:43:06PM -0700, akpm@linux-foundation.org wrote:quoted
From: Harvey Harrison <redacted> Signed-off-by: Harvey Harrison <redacted> Cc: Dmitry Torokhov <redacted> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- /* Must be called with ts->lock held */ static void ads7846_disable(struct ads7846 *ts) +__releases(&ts->lock) +__acquires(&ts->lock) {I still haven't gotten any explanation why this is needed and also I am still getting sparce warnings with this patch applied. Please drop.Sorry, I didn't realize I had a local patchset doing extra context checking of what lock is passed in to spin_lock/unlock...it helps to document when a function requires a lock held (see the comment)
I understand the comment ;) The annotation syntax is confusing though... Maybe if instead of __releases and __acquires it said __needs_lock() and __leaves_locked() that would make more sense...
The culprit in this function:
while (ts->pending) {
spin_unlock_irq(&ts->lock);
msleep(1);
spin_lock_irq(&ts->lock);
}
Anyways, as current sparse will still warn please drop.
Harvey-- Dmitry