On Fri, Feb 03, 2023 at 11:55:20PM -0300, Leonardo Brás wrote: > On Fri, 2023-02-03 at 10:55 -0800, Paul E. McKenney wrote: > > On Fri, Feb 03, 2023 at 03:45:05PM -0300, Leonardo Brás wrote: > > > On Fri, 2023-02-03 at 10:19 -0800, Paul E. McKenney wrote: > > > > On Fri, Feb 03, 2023 at 02:32:35PM -0300, Leonardo Brás wrote: > > > > > On Fri, 2023-02-03 at 08:47 -0800, Paul E. McKenney wrote: > > > > > > On Sat, Feb 04, 2023 at 12:23:25AM +0900, Akira Yokosawa wrote: > > > > > > > Under shallow clone of perfbook repo, "git describe" can't work. > > > > > > > Catch the error and use "git log" to obtain the commit id instead. > > > > > > > > > > > > > > Following is the comparison of autodate.tex. > > > > > > > > > > > > > > Before: > > > > > > > > > > > > > > \date{February 3, 2023 \\ Tag: \texttt{} } > > > > > > > \newcommand{\commityear}{2023} > > > > > > > \newcommand{\commitid}{} > > > > > > > \IfQqzBg{}{\setboolean{qqzbg}{false}} > > > > > > > % tcolorbox version: 5.1 > > > > > > > \tcbsetforeverylayer{autoparskip} > > > > > > > > > > > > > > After: > > > > > > > > > > > > > > \date{February 3, 2023 \\ Commit: \texttt{g25bd138c30bf} (shallow clone) } > > > > > > > \newcommand{\commityear}{2023} > > > > > > > \newcommand{\commitid}{g25bd138c30bf} > > > > > > > \IfQqzBg{}{\setboolean{qqzbg}{false}} > > > > > > > % tcolorbox version: 5.1 > > > > > > > \tcbsetforeverylayer{autoparskip} > > > > > > > > > > > > > > Signed-off-by: Akira Yokosawa <akiyks@xxxxxxxxx> > > > > > > > Cc: Leonardo Bras <leobras.c@xxxxxxxxx> > > > > > > > > > > > > Thank you, Akira, and I have queued this. > > > > > > > > > > > > Leonardo, could you please check to see whether this works for you in > > > > > > your particular environment? > > > > > > > > > > > > > > > > Sure, > > > > > I reconfigured it as a shallow git clone, and then pushed master + this patch on > > > > > leobras_ci, and it seems to have worked just fine. Please see: > > > > > https://gitlab.com/linux-kernel/perfbook/-/jobs/3712415008/artifacts/file/perfbook.pdf > > > > > > > > > > > > > > > > If it does, please include something > > > > > > like this in your reply: > > > > > > > > > > > > > > > > > > > > > > > > > > > > So, yeah: > > > > > Tested-by: Leonardo Bras <leobras.c@xxxxxxxxx> > > > > > > > > Applied, thank you very much! > > > > > > > > > Paul, could you please help me test some other feature? > > > > > It would require you to push master + this patch on a test branch in your > > > > > kernel.org repository. > > > > > > > > > > If everything works as intended, it should automatically trigger the build + > > > > > testing for that branch. > > > > > > > > One approach is to go into the CodeSamples/count directory and invoke > > > > all the programs with no arguments. If they all exit with zero status, > > > > life is good. > > > > > > I think there was a misunderstanding: > > > I asked help for testing a Gitlab feature, which is buiding any test branches > > > from your kernel.org repository automatically when you push to a new branch. > > > > > > > > > > > Would you be interested in adding a "make check" target to the > > > > CodeSamples/count/Makefile to support this? > > > > > > Sure, I could do that! > > > Just noticed by running `make -C CodeSamples/` it doesn't generate anything in > > > CodeSamples/count: > > > > > > ### None in count/ can be built on arch: 'unknown'. > > > > > > I did some hacking, and then tried: > > > make target=x86 -C CodeSamples/ > > > > > > And suddenly I see errors such as: > > > > > > cc -g -o lockdeq -DTEST lockdeq.c -lpthread > > > lockdeq.c:78:26: error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before > > > ‘____cacheline_internodealigned_in_smp’ > > > 78 | spinlock_t rlock ____cacheline_internodealigned_in_smp; > > > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > > lockdeq.c: In function ‘init_pdeq’: > > > lockdeq.c:100:12: error: ‘struct pdeq’ has no member named ‘ridx’; did you mean > > > ‘lidx’? > > > 100 | d->ridx = 1; > > > | ^~~~ > > > | lidx > > > > > > and warnings such as : > > > cc -g -Wall -o xchglock xchglock.c -lpthread > > > xchglock.c: In function ‘main’: > > > xchglock.c:87:9: warning: implicit declaration of function ‘smp_mb’; did you > > > mean ‘cmm_mb’? [-Wimplicit-function-declaration] > > > 87 | smp_mb(); > > > | ^~~~~~ > > > | cmm_mb > > > /usr/bin/ld: /tmp/ccDvA7Yo.o: in function `main': > > > /dev/shm/perfbook/CodeSamples/locking/xchglock.c:87: undefined reference to > > > `smp_mb' > > > /usr/bin/ld: /dev/shm/perfbook/CodeSamples/locking/xchglock.c:91: undefined > > > reference to `smp_mb' > > > /usr/bin/ld: /dev/shm/perfbook/CodeSamples/locking/xchglock.c:93: undefined > > > reference to `smp_mb' > > > /usr/bin/ld: /dev/shm/perfbook/CodeSamples/locking/xchglock.c:95: undefined > > > reference to `smp_mb' > > > collect2: error: ld returned 1 exit status > > > make[1]: *** [Makefile:21: xchglock] Error 1 > > > > > > Is that the correct way of calling the make on CodeSamples? > > > > Ah, the top-level Makefile has some historical baggage, which is entirely > > my doing. Something about me not expecting this to be a publicly > > available project when I first set it up. ;-) > > > > So I suggest something like this: > > > > cd CodeSamples > > make pthreads > > cd count > > make > > > > Please let me know how this goes. > > No luck: > > ### > [perfbook]$ cd CodeSamples/ > [CodeSamples]$ make pthreads > echo "#ifndef __PERFBOOK_API_H__" > api.h > echo "#define __PERFBOOK_API_H__" >> api.h > echo "/* MECHANICALLY GENERATED, DO NOT EDIT!!! */" >> api.h > echo "" >> api.h > cat linux/common.h >> api.h > echo "" >> api.h > cat api-pthreads/api-pthreads.h | \ > sed '/begin{snippet}/d' | \ > sed '/end{snippet}/d' >> api.h > echo "" >> api.h > cat api-pthreads/api-gcc.h >> api.h > cat api-pthreads/api-linux.h >> api.h > echo "" >> api.h > if test -f /usr/include/urcu-call-rcu.h -o \ > -f /usr/local/include/urcu-call-rcu.h -o \ > -f /usr/include//urcu-call-rcu.h -o \ > -f /usr/include/urcu-call-rcu.h ; \ > then \ > echo "#define _LGPL_SOURCE" >> api.h; \ > echo "#include <urcu/rculist.h>" >> api.h; \ > echo "#include <urcu/rcuhlist.h>" >> api.h; \ > echo "#include <urcu-pointer.h>" >> api.h; \ > elif test -d /usr/include/urcu -o -d /usr/local/include/urcu ; \ > then \ > echo "#define _LGPL_SOURCE" >> api.h; \ > echo "#include <urcu/rculist.h>" >> api.h; \ > echo "#include <urcu/rcuhlist.h>" >> api.h; \ > echo "#include <urcu-pointer-static.h>" >> api.h; \ > else \ > echo "### Missing liburcu package!!! Install it. ###"; \ > exit 1; \ > fi > echo "#endif /* #ifndef __PERFBOOK_API_H__ */" >> api.h > echo "# MECHANICALLY GENERATED, DO NOT EDIT!!!" > Makefile.arch > echo "" >> Makefile.arch > [CodeSamples]$ cd count/ > [count]$ make > ### None in count/ can be built on arch: 'unknown'. > ### > > > So, for some reason, it couldn't still get the architecture. > > Oh, I noticed depends.mk use `uname -p` for getting the arch, which is non- > portable: > > ### > uname --help > Usage: uname [OPTION]... > Print certain system information. With no OPTION, same as -s. > [...] > -m, --machine print the machine hardware name > -p, --processor print the processor type (non-portable) > ### > > > I heard some distros patch this by doing uname -p the same as uname -m, which > seems to have the correct output. I patched this and then now it works: > > ### > make > make -C .. Makefile.arch > make[1]: Entering directory '/dev/shm/perfbook/CodeSamples' > make pthreads > make[2]: Entering directory '/dev/shm/perfbook/CodeSamples' > echo "#ifndef __PERFBOOK_API_H__" > api.h > echo "#define __PERFBOOK_API_H__" >> api.h > echo "/* MECHANICALLY GENERATED, DO NOT EDIT!!! */" >> api.h > echo "" >> api.h > cat linux/common.h >> api.h > echo "" >> api.h > cat arch-x86/arch-x86.h >> api.h > echo "" >> api.h > cat api-pthreads/api-pthreads.h | \ > sed '/begin{snippet}/d' | \ > sed '/end{snippet}/d' >> api.h > echo "" >> api.h > cat api-pthreads/api-gcc.h >> api.h > cat api-pthreads/api-linux.h >> api.h > echo "" >> api.h > if test -f /usr/include/urcu-call-rcu.h -o \ > -f /usr/local/include/urcu-call-rcu.h -o \ > -f /usr/include/x86_64-linux-gnu/urcu-call-rcu.h -o \ > -f /usr/include/urcu-call-rcu.h ; \ > then \ > echo "#define _LGPL_SOURCE" >> api.h; \ > echo "#include <urcu/rculist.h>" >> api.h; \ > echo "#include <urcu/rcuhlist.h>" >> api.h; \ > echo "#include <urcu-pointer.h>" >> api.h; \ > elif test -d /usr/include/urcu -o -d /usr/local/include/urcu ; \ > then \ > echo "#define _LGPL_SOURCE" >> api.h; \ > echo "#include <urcu/rculist.h>" >> api.h; \ > echo "#include <urcu/rcuhlist.h>" >> api.h; \ > echo "#include <urcu-pointer-static.h>" >> api.h; \ > else \ > echo "### Missing liburcu package!!! Install it. ###"; \ > exit 1; \ > fi > echo "#endif /* #ifndef __PERFBOOK_API_H__ */" >> api.h > echo "# MECHANICALLY GENERATED, DO NOT EDIT!!!" > Makefile.arch > echo "" >> Makefile.arch > cat arch-x86/Makefile.arch >> Makefile.arch > make[2]: Leaving directory '/dev/shm/perfbook/CodeSamples' > make[1]: Leaving directory '/dev/shm/perfbook/CodeSamples' > cc -g -O3 -Wall -o count_atomic count_atomic.c -lpthread > cc -g -O3 -Wall -o count_end count_end.c -lpthread > cc -g -O3 -Wall -o count_end_rcu count_end_rcu.c -lpthread > cc -g -O3 -Wall -o count_lim count_lim.c -lpthread > cc -g -O3 -Wall -o count_lim_app count_lim_app.c -lpthread > cc -g -O3 -Wall -o count_lim_atomic count_lim_atomic.c -lpthread > cc -g -O3 -Wall -o count_lim_sig count_lim_sig.c -lpthread > cc -g -O3 -Wall -o count_limd count_limd.c -lpthread > cc -g -O3 -Wall -o count_nonatomic count_nonatomic.c -lpthread > cc -g -O3 -Wall -o count_stack count_stack.c -lpthread > cc -g -O3 -Wall -o count_stat count_stat.c -lpthread > cc -g -O3 -Wall -o count_stat_atomic count_stat_atomic.c -lpthread > cc -g -O3 -Wall -o count_stat_eventual count_stat_eventual.c -lpthread > cc -g -O3 -Wall -o count_tstat count_tstat.c -lpthread > ### > > I will send a patch fixing the uname soon :) Thank you for digging into this! And yes, portability is easier than it was 40 years ago, but still not easy. :-/ Thanx, Paul > > This should probably be documented somewhere, perhaps in howto/howto.tex > > or maybe in BUILD-FAQ.txt. Thoughts? > > > > Thanx, Paul > > Best regards, > Leo >