Using sparse to catch invalid RCU dereferences?

From: Johannes Berg
Date: Tue Apr 08 2008 - 10:27:27 EST


Hi,

Just a thought, I haven't tried this yet because I'm not entirely sure
it's actually correct. I was just thinking it should be possible to
introduce something like

#define __rcu __attribute__((address_space(3)))

(for sparse only, of course) and then be able to say

struct myfoo *foo __rcu;

and sparse would warn on

struct myfoo *bar = foo;

but not on

struct myfoo *bar = rcu_dereference(foo);

by way of using __force inside rcu_dereference(), rcu_assign_pointer()
etc.

Would this be feasible? Or should one actually use __bitwise/__force to
also get the warning when assigning between two variables both marked
__rcu?

johannes

Attachment: signature.asc
Description: This is a digitally signed message part