Hi, Leonardo Brás wrote: [...] >> Hi Akira, >> >> That's a creative way of dealing with this issue, but if we want to add that >> complexity, I would rather use $(pkg-config --libs liburcu). >> >> Wouldn't this fix the issue as well? >> >> Thanks! > > Also, according to Paul's comment on v2 patch it shouldn't be needed: > >>> On the other hand, sys_membarrier() was introduced in 2015 (5b25b13ab08f6), >>> and no supported kernel (>v4.2) should still miss this syscall. Is it worth >>> the added complexity? Is so, let's do it. > >> If the -lurcu-signal is left off for old versions of the userspace RCU >> library, doesn't it simply fall back to using explicit memory barriers? >> Or am I yet again misremembering? > >> Thanx, Paul > > Isn't the above correct? > I have no idea ..., but your v2 patch causes this build error with liburcu <15.0: ------------------------------------------------------------------------ cc -g -O3 -Wall -fcommon -o route_rcu route_rcu.c ../lib/random.c -lpthread -lurcu /usr/bin/ld: /tmp/ccjHTQfN.o: warning: relocation against `urcu_signal_gp' in read-only section `.text' /usr/bin/ld: /tmp/ccjHTQfN.o: in function `_urcu_signal_read_lock': /usr/include/x86_64-linux-gnu/urcu/static/urcu-signal.h:97: undefined reference to `urcu_signal_reader' /usr/bin/ld: /tmp/ccjHTQfN.o: in function `_urcu_signal_read_lock_update': /usr/include/x86_64-linux-gnu/urcu/static/urcu-signal.h:75: undefined reference to `urcu_signal_gp' /usr/bin/ld: /tmp/ccjHTQfN.o: in function `urcu_common_wake_up_gp': /usr/include/x86_64-linux-gnu/urcu/static/urcu-common.h:96: undefined reference to `urcu_signal_gp' /usr/bin/ld: /usr/include/x86_64-linux-gnu/urcu/static/urcu-common.h:96: undefined reference to `urcu_signal_gp' /usr/bin/ld: /usr/include/x86_64-linux-gnu/urcu/static/urcu-common.h:97: undefined reference to `urcu_signal_gp' /usr/bin/ld: /tmp/ccjHTQfN.o: in function `futex': /usr/include/x86_64-linux-gnu/urcu/futex.h:72: undefined reference to `urcu_signal_gp' /usr/bin/ld: /tmp/ccjHTQfN.o:/usr/include/x86_64-linux-gnu/urcu/static/urcu-common.h:97: more undefined references to `urcu_signal_gp' follow /usr/bin/ld: /tmp/ccjHTQfN.o: in function `perftest_reader': git/perfbook/CodeSamples/defer/routetorture.h:103: undefined reference to `urcu_signal_register_thread' /usr/bin/ld: git/perfbook/CodeSamples/defer/routetorture.h:126: undefined reference to `urcu_signal_synchronize_rcu' /usr/bin/ld: git/perfbook/CodeSamples/defer/routetorture.h:128: undefined reference to `urcu_signal_synchronize_rcu' /usr/bin/ld: git/perfbook/CodeSamples/defer/routetorture.h:130: undefined reference to `urcu_signal_unregister_thread' /usr/bin/ld: /tmp/ccjHTQfN.o: in function `route_del': git/perfbook/CodeSamples/defer/route_rcu.c:124: undefined reference to `urcu_signal_call_rcu' /usr/bin/ld: /tmp/ccjHTQfN.o: in function `stresstest_updater': git/perfbook/CodeSamples/defer/routetorture.h:216: undefined reference to `urcu_signal_register_thread' /usr/bin/ld: git/perfbook/CodeSamples/defer/routetorture.h:260: undefined reference to `urcu_signal_synchronize_rcu' /usr/bin/ld: git/perfbook/CodeSamples/defer/routetorture.h:262: undefined reference to `urcu_signal_synchronize_rcu' /usr/bin/ld: git/perfbook/CodeSamples/defer/routetorture.h:264: undefined reference to `urcu_signal_unregister_thread' /usr/bin/ld: /tmp/ccjHTQfN.o: in function `route_clear': git/perfbook/CodeSamples/defer/route_rcu.c:149: undefined reference to `urcu_signal_synchronize_rcu' /usr/bin/ld: /tmp/ccjHTQfN.o: in function `smoketest': git/perfbook/CodeSamples/defer/routetorture.h:47: undefined reference to `urcu_signal_register_thread' /usr/bin/ld: git/perfbook/CodeSamples/defer/routetorture.h:62: undefined reference to `urcu_signal_unregister_thread' /usr/bin/ld: warning: creating DT_TEXTREL in a PIE collect2: error: ld returned 1 exit status make[1]: *** [Makefile:134: route_rcu] Error 1 make[1]: Leaving directory 'git/perfbook/CodeSamples/defer' ---------------------------------------------------------------- This is under Ubuntu 22.04 LTS. This looks to me as an unacceptable build regression. The use of $(pkg-config --libs liburcu) didn't occur to me. I'll give it a try. Thanks, Akira