(if there's a good writeup on this, or a previous mailing post explaining this, a pointer to that will do just fine.) i'm trying to understand how this context checking is actually done by sparse. from the sparse man page: "Functions with the extended attribute __attribute__((context(expression,in_context,out_context)) require the context expression (for instance, a lock) to have the value in_context (a constant nonnegative integer) when called, and return with the value out_context (a constant nonnegative integer)." fair enough, but what are the possibilities for that "expression" and what exactly is being compared to the values of 0 or 1? sure, a lock is an obvious candidate, but you can't really simply be comparing the value of a lock to 0 or 1 -- a lock is a *structure* which doesn't have a simple value of 0 or 1. so, to try to keep things simple, what is happening in the background with code like this: ===== static void *aarp_seq_start(struct seq_file *seq, loff_t *pos) __acquires(aarp_lock) { struct aarp_iter_state *iter = seq->private; read_lock_bh(&aarp_lock); iter->table = resolved; iter->bucket = 0; return *pos ? iter_next(iter, pos) : SEQ_START_TOKEN; } ===== and how is that call to read_lock_bh() changing the "context" value of the object aarp_lock? thanks for any enlightenment. rday -- ======================================================================== Robert P. J. Day Linux Consulting, Training and Annoying Kernel Pedantry: Have classroom, will lecture. http://crashcourse.ca Waterloo, Ontario, CANADA ======================================================================== -- 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