X-Git-Url: https://git.karo-electronics.de/?a=blobdiff_plain;f=Documentation%2FRCU%2Frculist_nulls.txt;h=18f9651ff23d411e96737ec070d4fc6bc29c50fe;hb=ef9a61bef917e38f8e096f6df303329aed6cf467;hp=93cb28d05dcd92da30dde47ec58205e2b0851022;hpb=e12c4fa377ffda2490476caae17f24daaf9c9bd7;p=karo-tx-linux.git diff --git a/Documentation/RCU/rculist_nulls.txt b/Documentation/RCU/rculist_nulls.txt index 93cb28d05dcd..18f9651ff23d 100644 --- a/Documentation/RCU/rculist_nulls.txt +++ b/Documentation/RCU/rculist_nulls.txt @@ -83,11 +83,12 @@ not detect it missed following items in original chain. obj = kmem_cache_alloc(...); lock_chain(); // typically a spin_lock() obj->key = key; -atomic_inc(&obj->refcnt); /* * we need to make sure obj->key is updated before obj->next + * or obj->refcnt */ smp_wmb(); +atomic_set(&obj->refcnt, 1); hlist_add_head_rcu(&obj->obj_node, list); unlock_chain(); // typically a spin_unlock() @@ -159,6 +160,10 @@ out: obj = kmem_cache_alloc(cachep); lock_chain(); // typically a spin_lock() obj->key = key; +/* + * changes to obj->key must be visible before refcnt one + */ +smp_wmb(); atomic_set(&obj->refcnt, 1); /* * insert obj in RCU way (readers might be traversing chain)