On Tue, Oct 06, 2020 at 08:41:49AM -0700, Paul E. McKenney wrote: >On Tue, Oct 06, 2020 at 02:40:20PM +0800, Junchang Wang wrote: >> On Mon, Oct 05, 2020 at 03:12:22PM -0700, Paul E. McKenney wrote: >> >On Sat, Oct 03, 2020 at 09:19:25AM -0700, Paul E. McKenney wrote: >> >> On Sat, Oct 03, 2020 at 12:28:47PM +0800, Junchang Wang wrote: >> > >> >[ . . . ] >> > >> >> But sadly, this change does not fix this bug: >> >> >> >> $ ./hash_bkt_hazptr --schroedinger --nreaders 1 --duration 1000 --updatewait 0 --nbuckets 8192 --elems/writer 8192 >> >> Segmentation fault (core dumped) >> >> >> >> Can't have everything. ;-) >> >> >> >> It appears that hashtorture manages to fail to call the per-thread >> >> hazard-pointers initialization on some paths, so it is no surprise >> >> that Junchang's fix doesn't fix this bug. >> > >> > Thanx, Paul >> > >> >------------------------------------------------------------------------ >> > >> >commit 2533decebb7fca65d2860174246966f5ed255dd0 >> >Author: Paul E. McKenney <paulmck@xxxxxxxxxx> >> >Date: Mon Oct 5 15:10:03 2020 -0700 >> > >> > datastruct/hash: Add missing hash_register_thread() >> > >> > The zoo_test() function was missing the hash_register_thread() invocation >> > that is required to make hazard pointers work correctly. The lack >> > of this invocation results in a segmentation violation. This commit >> > therefore adds this call. >> > >> > Signed-off-by: Paul E. McKenney <paulmck@xxxxxxxxxx> >> > >> >> Hi Paul, >> >> This patch fixes the bug, and now "./hash_bkt_hazptr --schroedinger" works >> correctly on my servers. Thanks a lot. > >Thank you for testing! May I apply your Tested-by? > Hi Paul, I'm very happy that I can help improve perfbook. Please add a Tested-by: Junchang Wang <junchang2020@xxxxxxxxx> Thanks, --Junchang > Thanx, Paul > >> --Junchang >> >> >diff --git a/CodeSamples/datastruct/hash/hashtorture.h b/CodeSamples/datastruct/hash/hashtorture.h >> >index 6d30cb8..7d43e11 100644 >> >--- a/CodeSamples/datastruct/hash/hashtorture.h >> >+++ b/CodeSamples/datastruct/hash/hashtorture.h >> >@@ -1211,6 +1211,7 @@ void zoo_test(void) >> > for (i = 0; i < nupdaters * elperupdater; i++) { >> > sprintf(&zoo_names[ZOO_NAMELEN * i], "a%ld", i); >> > } >> >+ hash_register_thread(); >> > >> > zhep = malloc(sizeof(*zhep)); >> > BUG_ON(!zhep);