Skip to content
  • Boqun Feng's avatar
    sparse: Add __private to privatize members of structs · ad315455
    Boqun Feng authored
    
    
    In C programming language, we don't have a easy way to privatize a
    member of a structure. However in kernel, sometimes there is a need to
    privatize a member in case of potential bugs or misuses.
    
    Fortunately, the noderef attribute of sparse is a way to privatize a
    member, as by defining a member as noderef, the address-of operator on
    the member will produce a noderef pointer to that member, and if anyone
    wants to dereference that kind of pointers to read or modify the member,
    sparse will yell.
    
    Based on this, __private modifier and related operation ACCESS_PRIVATE()
    are introduced, which could help detect undesigned public uses of
    private members of structs. Here is an example of sparse's output if it
    detect an undersigned public use:
    
    | kernel/rcu/tree.c:4453:25: warning: incorrect type in argument 1 (different modifiers)
    | kernel/rcu/tree.c:4453:25:    expected struct raw_spinlock [usertype] *lock
    | kernel/rcu/tree.c:4453:25:    got struct raw_spinlock [noderef] *<noident>
    
    Also, this patch improves compiler.h a little bit by adding comments for
    "#else" and "#endif".
    
    Signed-off-by: default avatarBoqun Feng <boqun.feng@gmail.com>
    Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
    ad315455