On Thu, 4 Dec 2008 13:12:58 +0100, "Bart Van Assche" <bart.vanassche@xxxxxxxxx> 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 -- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html