Messages in this thread | | | Subject | Re: A question about sparse: how to use acquires() and releases() correctly ? | Date | Thu, 04 Dec 2008 14:06:36 +0100 | From | Johannes Berg <> |
| |
On Thu, 4 Dec 2008 13:12:58 +0100, "Bart Van Assche" <bart.vanassche@gmail.com> wrote: > [ping] > > Is there anyone who can help me with the question below ?
>> void dev_seq_stop(struct seq_file *seq, void *v) >> __releases(dev_base_lock) >> { >> read_unlock(&dev_base_lock); >> } >> >> The command "make C=2 M=net/core" produces the following output for >> the above function (using a sparse binary built from the sparse git >> repository, last updated on August 26, 2008): >> >> net/core/dev.c:2579:2: warning: context problem in 'dev_seq_stop': >> '_read_unlock' expected different context >> net/core/dev.c:2579:2: context 'lock': wanted >= 1, got 0
I don't think sparse can properly handle this yet, at least not in a way you'd expect it to. I've extended sparse to handle it, but the current git tree has only a partial set of my changes applied, and the remaining ones have been contested. (I still think my initial changes should be reverted in the meantime)
>> My questions are as follows: >> * Which argument type should be passed to __releases() -- a pointer to >> a lock structure or the lock strucure itself ? In the header file >> include/linux/spinlock_api_smp.h a pointer is passed to __acquires() >> and __releases(), while other code (like the above) passes the lock >> structure itself to the __acquires() and __releases() annotations.
sparse prett much ignores the first argument anyway, this isn't defined yet.
>> * If the __releases() annotation is used correctly in net/core/dev.c, >> why does sparse complain about a context problem ?
Maybe it is? I don't know off-hand.
johannes
| |