On Fri, Apr 26, 2019 at 12:38:40AM +0900, Akira Yokosawa wrote: > Hi Junchang, > > On Thu, 25 Apr 2019 16:29:51 +0800, Junchang Wang wrote: > > Hi Paul and Akira, > > > > This patch set replaces plain accesses and ACCESS_ONCE() with READ_ONCE() > > and WRITE_ONCE() in Toy RCU examples. I will send another patch updating > > tex file accordingly on top of this patch set. > > As far as accesses to rcu_gp_ctr, this patch set looks good to me. > > In updating toyrcu.tex file, I suggested to extract the snippets from > code under CodeSamples/defer, but some snippets in toyrcu.tex consist of > code from both .h and .c. Current scheme does not support such merging > of snippets from multiple source files. > > Your option is to manually convert verbbox environment to Verbatim > environment. Sorry I suggested infeasible extractions the other day. > rcu_qs.c and rcu_qs.h are in separate snippets, and they can be > extracted by fcvextract.pl. In this case, commit 4a41491166cd > ("defer/hazptr: Extract snippet from hazptr.c") should be a good example, > especially the "gobbleblank=yes" option. Given that these are toy implementations, pleaee feel free to reorganize the code to make snippet extraction work better. (Please check to see if anything else uses these -- I do not believe so, but memory can be a tricky thing sometimes.) > If you have any question, feel free to ask me. I'm looking forward to > seeing your update. > > Paul, in the sources Junchang has touched, per-thread variable > "rcu_reader_gp" is updated by its owner, but is read accessed from > for_each_thread loops in updater side. So I think accesses to each of > them need to be annotated by WRITE_ONCE (in owner) and READ_ONCE (in updater). > I looked at only the diffs in the 1st patch set and didn't notice the raciness > of them. Agreed, WRITE_ONCE() by owner and READ_ONCE() by updater. > Macros for accessing per-thread variables are expanded to array references, > and there are "barrier()"s in these loops. > So I think there is little chance those accesses would be optimized by > currently available compilers. > > Do you see the need to annotate the accesses to per-thread variable? If a per-thread variable is accessed by multiple threads, it would be good to annotate the accesses as needed. That said, I have no idea how well annotation interacts with the per-thread accesses, so some experimentation might be required. Thnax, Paul > Thanks, Akira > > > > > -- > > Junchang Wang (3): > > rcu: Use READ_ONCE() and WRITE_ONCE() for shared variable rcu_gp_ctr > > rcu_nest: Use READ_ONCE() and WRITE_ONCE() for shared variable > > rcu_gp_ctr > > rcu_qs: Use READ_ONCE() AND WRITE_ONCE() for shared variable > > rcu_gp_ctr > > > > CodeSamples/defer/rcu.c | 2 +- > > CodeSamples/defer/rcu.h | 4 ++-- > > CodeSamples/defer/rcu_nest.c | 2 +- > > CodeSamples/defer/rcu_nest.h | 2 +- > > CodeSamples/defer/rcu_qs.c | 2 +- > > CodeSamples/defer/rcu_qs.h | 4 ++-- > > 6 files changed, 8 insertions(+), 8 deletions(-) > > >