Mock Version: 4.1 Mock Version: 4.1 Mock Version: 4.1 ENTER ['do_with_status'](['bash', '--login', '-c', '/usr/bin/rpmbuild -bs --noclean --target i686 --nodeps /builddir/build/SPECS/libfabric.spec'], chrootPath='/var/lib/mock/inferit-8_8-bootstrap-build-28090-47138/root'env={'TERM': 'vt100', 'SHELL': '/bin/bash', 'HOME': '/builddir', 'HOSTNAME': 'mock', 'PATH': '/usr/bin:/bin:/usr/sbin:/sbin', 'PROMPT_COMMAND': 'printf "\\033]0;\\007"', 'PS1': ' \\s-\\v\\$ ', 'LANG': 'C.UTF-8'}shell=Falselogger=timeout=86400uid=991gid=135user='mockbuild'nspawn_args=['--capability=cap_ipc_lock', '--bind=/tmp/mock-resolv.5xbr8yz0:/etc/resolv.conf', '--bind=/dev/mapper/control', '--bind=/dev/loop-control', '--bind=/dev/loop0', '--bind=/dev/loop1', '--bind=/dev/loop2', '--bind=/dev/loop3', '--bind=/dev/loop4', '--bind=/dev/loop5', '--bind=/dev/loop6', '--bind=/dev/loop7', '--bind=/dev/loop8', '--bind=/dev/loop9', '--bind=/dev/loop10', '--bind=/dev/loop11']unshare_net=TrueprintOutput=False) Using nspawn with args ['--capability=cap_ipc_lock', '--bind=/tmp/mock-resolv.5xbr8yz0:/etc/resolv.conf', '--bind=/dev/mapper/control', '--bind=/dev/loop-control', '--bind=/dev/loop0', '--bind=/dev/loop1', '--bind=/dev/loop2', '--bind=/dev/loop3', '--bind=/dev/loop4', '--bind=/dev/loop5', '--bind=/dev/loop6', '--bind=/dev/loop7', '--bind=/dev/loop8', '--bind=/dev/loop9', '--bind=/dev/loop10', '--bind=/dev/loop11'] Executing command: ['/usr/bin/systemd-nspawn', '-q', '-M', '2813269042724fbd9ab6433befc4dccf', '-D', '/var/lib/mock/inferit-8_8-bootstrap-build-28090-47138/root', '-a', '-u', 'mockbuild', '--capability=cap_ipc_lock', '--bind=/tmp/mock-resolv.5xbr8yz0:/etc/resolv.conf', '--bind=/dev/mapper/control', '--bind=/dev/loop-control', '--bind=/dev/loop0', '--bind=/dev/loop1', '--bind=/dev/loop2', '--bind=/dev/loop3', '--bind=/dev/loop4', '--bind=/dev/loop5', '--bind=/dev/loop6', '--bind=/dev/loop7', '--bind=/dev/loop8', '--bind=/dev/loop9', '--bind=/dev/loop10', '--bind=/dev/loop11', '--console=pipe', '--setenv=TERM=vt100', '--setenv=SHELL=/bin/bash', '--setenv=HOME=/builddir', '--setenv=HOSTNAME=mock', '--setenv=PATH=/usr/bin:/bin:/usr/sbin:/sbin', '--setenv=PROMPT_COMMAND=printf "\\033]0;\\007"', '--setenv=PS1= \\s-\\v\\$ ', '--setenv=LANG=C.UTF-8', '--resolv-conf=off', 'bash', '--login', '-c', '/usr/bin/rpmbuild -bs --noclean --target i686 --nodeps /builddir/build/SPECS/libfabric.spec'] with env {'TERM': 'vt100', 'SHELL': '/bin/bash', 'HOME': '/builddir', 'HOSTNAME': 'mock', 'PATH': '/usr/bin:/bin:/usr/sbin:/sbin', 'PROMPT_COMMAND': 'printf "\\033]0;\\007"', 'PS1': ' \\s-\\v\\$ ', 'LANG': 'C.UTF-8', 'SYSTEMD_NSPAWN_TMPFS_TMP': '0', 'SYSTEMD_SECCOMP': '0'} and shell False warning: bogus date in %changelog: Wed Jul 11 2017 Orion Poplawski - 1.4.2-1 Building target platforms: i686 Building for target i686 Wrote: /builddir/build/SRPMS/libfabric-1.18.0-1.el8.src.rpm Child return code was: 0 ENTER ['do_with_status'](['bash', '--login', '-c', '/usr/bin/rpmbuild -bb --noclean --target i686 --nodeps /builddir/build/SPECS/libfabric.spec'], chrootPath='/var/lib/mock/inferit-8_8-bootstrap-build-28090-47138/root'env={'TERM': 'vt100', 'SHELL': '/bin/bash', 'HOME': '/builddir', 'HOSTNAME': 'mock', 'PATH': '/usr/bin:/bin:/usr/sbin:/sbin', 'PROMPT_COMMAND': 'printf "\\033]0;\\007"', 'PS1': ' \\s-\\v\\$ ', 'LANG': 'C.UTF-8'}shell=Falselogger=timeout=86400uid=991gid=135user='mockbuild'nspawn_args=['--capability=cap_ipc_lock', '--bind=/tmp/mock-resolv.5xbr8yz0:/etc/resolv.conf', '--bind=/dev/mapper/control', '--bind=/dev/loop-control', '--bind=/dev/loop0', '--bind=/dev/loop1', '--bind=/dev/loop2', '--bind=/dev/loop3', '--bind=/dev/loop4', '--bind=/dev/loop5', '--bind=/dev/loop6', '--bind=/dev/loop7', '--bind=/dev/loop8', '--bind=/dev/loop9', '--bind=/dev/loop10', '--bind=/dev/loop11']unshare_net=TrueprintOutput=False) Using nspawn with args ['--capability=cap_ipc_lock', '--bind=/tmp/mock-resolv.5xbr8yz0:/etc/resolv.conf', '--bind=/dev/mapper/control', '--bind=/dev/loop-control', '--bind=/dev/loop0', '--bind=/dev/loop1', '--bind=/dev/loop2', '--bind=/dev/loop3', '--bind=/dev/loop4', '--bind=/dev/loop5', '--bind=/dev/loop6', '--bind=/dev/loop7', '--bind=/dev/loop8', '--bind=/dev/loop9', '--bind=/dev/loop10', '--bind=/dev/loop11'] Executing command: ['/usr/bin/systemd-nspawn', '-q', '-M', '91c20d4adb914f92b244da922b0483b1', '-D', '/var/lib/mock/inferit-8_8-bootstrap-build-28090-47138/root', '-a', '-u', 'mockbuild', '--capability=cap_ipc_lock', '--bind=/tmp/mock-resolv.5xbr8yz0:/etc/resolv.conf', '--bind=/dev/mapper/control', '--bind=/dev/loop-control', '--bind=/dev/loop0', '--bind=/dev/loop1', '--bind=/dev/loop2', '--bind=/dev/loop3', '--bind=/dev/loop4', '--bind=/dev/loop5', '--bind=/dev/loop6', '--bind=/dev/loop7', '--bind=/dev/loop8', '--bind=/dev/loop9', '--bind=/dev/loop10', '--bind=/dev/loop11', '--console=pipe', '--setenv=TERM=vt100', '--setenv=SHELL=/bin/bash', '--setenv=HOME=/builddir', '--setenv=HOSTNAME=mock', '--setenv=PATH=/usr/bin:/bin:/usr/sbin:/sbin', '--setenv=PROMPT_COMMAND=printf "\\033]0;\\007"', '--setenv=PS1= \\s-\\v\\$ ', '--setenv=LANG=C.UTF-8', '--resolv-conf=off', 'bash', '--login', '-c', '/usr/bin/rpmbuild -bb --noclean --target i686 --nodeps /builddir/build/SPECS/libfabric.spec'] with env {'TERM': 'vt100', 'SHELL': '/bin/bash', 'HOME': '/builddir', 'HOSTNAME': 'mock', 'PATH': '/usr/bin:/bin:/usr/sbin:/sbin', 'PROMPT_COMMAND': 'printf "\\033]0;\\007"', 'PS1': ' \\s-\\v\\$ ', 'LANG': 'C.UTF-8', 'SYSTEMD_NSPAWN_TMPFS_TMP': '0', 'SYSTEMD_SECCOMP': '0'} and shell False warning: bogus date in %changelog: Wed Jul 11 2017 Orion Poplawski - 1.4.2-1 Building target platforms: i686 Building for target i686 Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.xeQhU1 + umask 022 + cd /builddir/build/BUILD + cd /builddir/build/BUILD + rm -rf libfabric-1.18.0 + /usr/bin/bzip2 -dc /builddir/build/SOURCES/libfabric-1.18.0.tar.bz2 + /usr/bin/tar -xof - + STATUS=0 + '[' 0 -ne 0 ']' + cd libfabric-1.18.0 + /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w . + exit 0 Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.3dNZ2e + umask 022 + cd /builddir/build/BUILD + cd libfabric-1.18.0 + ./autogen.sh + autoreconf -ivf autoreconf: Entering directory `.' autoreconf: configure.ac: not using Gettext autoreconf: running: aclocal --force -I config autoreconf: configure.ac: tracing autoreconf: running: libtoolize --copy --force libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, 'config'. libtoolize: copying file 'config/ltmain.sh' libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'config'. libtoolize: copying file 'config/libtool.m4' libtoolize: copying file 'config/ltoptions.m4' libtoolize: copying file 'config/ltsugar.m4' libtoolize: copying file 'config/ltversion.m4' libtoolize: copying file 'config/lt~obsolete.m4' autoreconf: running: /usr/bin/autoconf --force autoreconf: running: /usr/bin/autoheader --force autoreconf: running: automake --add-missing --copy --force-missing configure.ac:65: installing 'config/compile' configure.ac:16: installing 'config/missing' Makefile.am: installing 'config/depcomp' autoreconf: Leaving directory `.' + CFLAGS='-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' + export CFLAGS + CXXFLAGS='-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' + export CXXFLAGS + FFLAGS='-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -I/usr/lib/gfortran/modules' + export FFLAGS + FCFLAGS='-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -I/usr/lib/gfortran/modules' + export FCFLAGS + LDFLAGS='-Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld' + export LDFLAGS + '[' 1 = 1 ']' +++ dirname ./configure ++ find . -name config.guess -o -name config.sub + for i in $(find $(dirname ./configure) -name config.guess -o -name config.sub) ++ basename ./config/config.guess + '[' -f /usr/lib/rpm/redhat/config.guess ']' + /usr/bin/rm -f ./config/config.guess ++ basename ./config/config.guess + /usr/bin/cp -fv /usr/lib/rpm/redhat/config.guess ./config/config.guess '/usr/lib/rpm/redhat/config.guess' -> './config/config.guess' + for i in $(find $(dirname ./configure) -name config.guess -o -name config.sub) ++ basename ./config/config.sub + '[' -f /usr/lib/rpm/redhat/config.sub ']' + /usr/bin/rm -f ./config/config.sub ++ basename ./config/config.sub + /usr/bin/cp -fv /usr/lib/rpm/redhat/config.sub ./config/config.sub '/usr/lib/rpm/redhat/config.sub' -> './config/config.sub' + '[' 1 = 1 ']' + '[' x '!=' 'x-Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld' ']' ++ find . -name ltmain.sh + for i in $(find . -name ltmain.sh) + /usr/bin/sed -i.backup -e 's~compiler_flags=$~compiler_flags="-Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld"~' ./config/ltmain.sh + ./configure --build=i686-redhat-linux-gnu --host=i686-redhat-linux-gnu --program-prefix= --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info --disable-static --disable-silent-rules checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... gawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking how to create a pax tar archive... gnutar checking whether make supports nested variables... (cached) yes checking build system type... i686-redhat-linux-gnu checking host system type... i686-redhat-linux-gnu checking whether make supports the include directive... yes (GNU style) checking for i686-redhat-linux-gnu-gcc... no checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking whether gcc understands -c and -o together... yes checking dependency style of gcc... none checking dependency style of gcc... none checking for i686-redhat-linux-gnu-ar... no checking for i686-redhat-linux-gnu-lib... no checking for i686-redhat-linux-gnu-link... no checking for ar... ar checking the archiver (ar) interface... ar checking for i686-redhat-linux-gnu-gcc... gcc checking whether we are using the GNU C compiler... (cached) yes checking whether gcc accepts -g... (cached) yes checking for gcc option to accept ISO C89... (cached) none needed checking whether gcc understands -c and -o together... (cached) yes checking dependency style of gcc... (cached) none checking for gcc option to accept ISO C99... none needed checking how to run the C preprocessor... gcc -E checking for grep that handles long lines and -e... /usr/bin/grep checking for egrep... /usr/bin/grep -E checking for ANSI C header files... yes checking for typeof syntax and keyword spelling... typeof checking how to print strings... printf checking for a sed that does not truncate output... /usr/bin/sed checking for fgrep... /usr/bin/grep -F checking for ld used by gcc... /usr/bin/ld checking if the linker (/usr/bin/ld) is GNU ld... yes checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B checking the name lister (/usr/bin/nm -B) interface... BSD nm checking whether ln -s works... yes checking the maximum length of command line arguments... 1572864 checking how to convert i686-redhat-linux-gnu file names to i686-redhat-linux-gnu format... func_convert_file_noop checking how to convert i686-redhat-linux-gnu file names to toolchain format... func_convert_file_noop checking for /usr/bin/ld option to reload object files... -r checking for i686-redhat-linux-gnu-objdump... no checking for objdump... objdump checking how to recognize dependent libraries... pass_all checking for i686-redhat-linux-gnu-dlltool... no checking for dlltool... no checking how to associate runtime and link libraries... printf %s\n checking for i686-redhat-linux-gnu-ar... ar checking for archiver @FILE support... @ checking for i686-redhat-linux-gnu-strip... no checking for strip... strip checking for i686-redhat-linux-gnu-ranlib... no checking for ranlib... ranlib checking command to parse /usr/bin/nm -B output from gcc object... ok checking for sysroot... no checking for a working dd... /usr/bin/dd checking how to truncate binary pipes... /usr/bin/dd bs=4096 count=1 checking for i686-redhat-linux-gnu-mt... no checking for mt... no checking if : is a manifest tool... no checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking for dlfcn.h... yes checking for objdir... .libs checking if gcc supports -fno-rtti -fno-exceptions... no checking for gcc option to produce PIC... -fPIC -DPIC checking if gcc PIC flag -fPIC -DPIC works... yes checking if gcc static flag -static works... no checking if gcc supports -c -o file.o... yes checking if gcc supports -c -o file.o... (cached) yes checking whether the gcc linker (/usr/bin/ld) supports shared libraries... yes checking whether -lc should be explicitly linked in... no checking dynamic linker characteristics... GNU/Linux ld.so checking how to hardcode library paths into programs... immediate checking whether stripping libraries is possible... yes checking if libtool supports shared libraries... yes checking whether to build shared libraries... yes checking whether to build static libraries... no configure: creating ./config.lt config.lt: creating libtool checking for dlopen in -ldl... yes checking for pthread_mutex_init in -lpthread... yes checking for pthread_spin_init... yes checking for shm_open... no checking for library containing shm_open... -lrt checking for epoll_create... yes checking linux/perf_event.h usability... yes checking linux/perf_event.h presence... yes checking for linux/perf_event.h... yes checking whether __builtin_ia32_rdpmc is declared... yes checking compiler support for c11 atomics... yes checking compiler support for c11 atomic `least` types... yes checking compiler support for built-in atomics... yes checking for library containing __atomic_load_8... -latomic checking compiler support for built-in memory model aware atomics... yes checking for __int128... no checking compiler support for cpuid... yes checking whether ld accepts --version-script... yes checking for .symver assembler support... yes checking for __alias__ attribute support... yes checking for getifaddrs... yes checking ethtool support... yes checking whether ethtool_cmd_speed is declared... yes checking whether SPEED_UNKNOWN is declared... yes checking linux/userfaultfd.h usability... yes checking linux/userfaultfd.h presence... yes checking for linux/userfaultfd.h... yes checking whether __NR_userfaultfd is declared... yes checking for userfaultfd unmap support... yes checking for elf.h... yes checking for sys/auxv.h... yes checking for library containing clock_gettime... none required checking liburing.h usability... no checking liburing.h presence... no checking for liburing.h... no checking cuda_runtime.h usability... no checking cuda_runtime.h presence... no checking for cuda_runtime.h... no checking level_zero/ze_api.h usability... no checking level_zero/ze_api.h presence... no checking for level_zero/ze_api.h... no checking nrt/nrt.h usability... no checking nrt/nrt.h presence... no checking for nrt/nrt.h... no checking habanalabs/synapse_api.h usability... no checking habanalabs/synapse_api.h presence... no checking for habanalabs/synapse_api.h... no checking for __curbrk... yes checking for __clear_cache... yes checking linux/mman.h usability... yes checking linux/mman.h presence... yes checking for linux/mman.h... yes checking sys/syscall.h usability... yes checking sys/syscall.h presence... yes checking for sys/syscall.h... yes checking whether __syscall is declared... no checking for __syscall... no checking hsa/hsa_ext_amd.h usability... no checking hsa/hsa_ext_amd.h presence... no checking for hsa/hsa_ext_amd.h... no checking size of void *... 4 configure: *** Configuring psm provider checking psm.h usability... no checking psm.h presence... no checking for psm.h... no configure: psm provider: disabled configure: *** Configuring psm2 provider checking psm2.h usability... no checking psm2.h presence... no checking for psm2.h... no configure: configure: recheck psm2 without psm2_info_query. checking psm2.h usability... no checking psm2.h presence... no checking for psm2.h... no configure: recheck psm2 without psm2_mq_ipeek_dequeue_multi. checking psm2.h usability... no checking psm2.h presence... no checking for psm2.h... no configure: recheck psm2 without psm2_mq_fp_msg. checking psm2.h usability... no checking psm2.h presence... no checking for psm2.h... no configure: recheck psm2 without psm2_am_register_handlers_2. checking psm2.h usability... no checking psm2.h presence... no checking for psm2.h... no configure: psm2 provider: disabled configure: *** Configuring psm3 provider checking sys/mman.h usability... yes checking sys/mman.h presence... yes checking for sys/mman.h... yes configure: looking for library without search path checking for shm_open in -lrt... yes checking numa.h usability... no checking numa.h presence... no checking for numa.h... no checking infiniband/verbs.h usability... yes checking infiniband/verbs.h presence... yes checking for infiniband/verbs.h... yes configure: looking for library without search path checking for ibv_get_device_list in -libverbs... yes checking uuid/uuid.h usability... no checking uuid/uuid.h presence... no checking for uuid/uuid.h... no checking for -msse4.2 support... yes checking for -mavx support... yes checking for -mavx2 support... yes checking for grep that handles long lines and -e... (cached) /usr/bin/grep checking for -Wno-address-of-packed-member support... no checking rdma/rv_user_ioctls.h usability... no checking rdma/rv_user_ioctls.h presence... no checking for rdma/rv_user_ioctls.h... no configure: psm3 provider: disabled configure: *** Configuring sockets provider checking sys/socket.h usability... yes checking sys/socket.h presence... yes checking for sys/socket.h... yes checking for shm_open... (cached) no checking sys/mman.h usability... yes checking sys/mman.h presence... yes checking for sys/mman.h... yes configure: looking for library without search path checking for shm_open in -lrt... yes checking for getifaddrs... (cached) yes configure: sockets provider: include in libfabric configure: *** Configuring verbs provider checking infiniband/verbs.h usability... yes checking infiniband/verbs.h presence... yes checking for infiniband/verbs.h... yes configure: looking for library without search path checking for ibv_open_device in -libverbs... yes checking if libibverbs is linkable by libtool... yes checking rdma/rdma_cma.h usability... yes checking rdma/rdma_cma.h presence... yes checking for rdma/rdma_cma.h... yes configure: looking for library without search path checking for rdma_create_qp in -lrdmacm... yes checking rdma/rdma_cma.h usability... yes checking rdma/rdma_cma.h presence... yes checking for rdma/rdma_cma.h... yes configure: looking for library without search path checking for rdma_create_qp_ex in -lrdmacm... yes checking whether ibv_query_device_ex is declared... yes checking whether IBV_QPT_XRC_SEND is declared... yes checking whether rdma_establish is declared... yes checking whether ibv_reg_dmabuf_mr is declared... yes configure: verbs provider: include in libfabric configure: *** Configuring efa provider checking infiniband/verbs.h usability... yes checking infiniband/verbs.h presence... yes checking for infiniband/verbs.h... yes configure: looking for library without search path checking for ibv_open_device in -libverbs... yes checking if libibverbs is linkable by libtool... yes checking for GCC... yes checking infiniband/efadv.h usability... yes checking infiniband/efadv.h presence... yes checking for infiniband/efadv.h... yes configure: looking for library without search path checking for efadv_query_ah in -lefa... yes checking infiniband/efadv.h usability... yes checking infiniband/efadv.h presence... yes checking for infiniband/efadv.h... yes configure: looking for library without search path checking for efadv_query_device in -lefa... yes checking for struct efadv_device_attr.max_rdma_size... yes checking whether EFADV_DEVICE_ATTR_CAPS_RNR_RETRY is declared... yes checking whether EFADV_DEVICE_ATTR_CAPS_RDMA_WRITE is declared... no checking whether ibv_is_fork_initialized is declared... yes configure: WARNING: The EFA provider is not supported on 32-bit systems. checking infiniband/efadv.h usability... yes checking infiniband/efadv.h presence... yes checking for infiniband/efadv.h... yes configure: looking for library without search path checking for efadv_create_cq in -lefa... yes checking infiniband/efadv.h usability... yes checking infiniband/efadv.h presence... yes checking for infiniband/efadv.h... yes configure: looking for library without search path checking for efadv_cq_from_ibv_cq_ex in -lefa... yes configure: efa provider: disabled configure: *** Configuring usnic provider checking for infiniband/verbs.h... (cached) yes checking infiniband/driver.h usability... no checking infiniband/driver.h presence... no checking for infiniband/driver.h... no checking if building usnic fake verbs driver... no configure: checking for libnl3 checking for libnl3 prefix... /usr checking for /usr/include/libnl3... found configure: looking for header without includes checking netlink/version.h usability... yes checking netlink/version.h presence... yes checking for netlink/version.h... yes configure: looking for library without search path checking for nl_socket_set_peer_groups in -lnl-3... yes checking for library containing nl_rtgen_request... -lnl-route-3 checking to ensure these really are libnl3 headers... yes configure: usnic provider: include in libfabric checking for i686-redhat-linux-gnu-pkg-config... /usr/bin/i686-redhat-linux-gnu-pkg-config checking pkg-config is at least version 0.9.0... yes configure: *** Configuring gni provider checking for CRAY_GNI_HEADERS... no configure: gni provider: disabled configure: *** Configuring udp provider checking for sys/socket.h... (cached) yes configure: udp provider: include in libfabric configure: *** Configuring tcp provider configure: tcp provider: include in libfabric configure: *** Configuring rxm provider configure: rxm provider: include in libfabric configure: *** Configuring mrail provider configure: mrail provider: include in libfabric configure: *** Configuring rxd provider configure: rxd provider: include in libfabric configure: *** Configuring bgq provider checking for direct bgq provider... no configure: bgq provider: disabled configure: *** Configuring shm provider checking for process_vm_readv... yes checking for shm_open... (cached) no checking sys/mman.h usability... yes checking sys/mman.h presence... yes checking for sys/mman.h... yes configure: looking for library without search path checking for shm_open in -lrt... yes checking accel-config/libaccel_config.h usability... no checking accel-config/libaccel_config.h presence... no checking for accel-config/libaccel_config.h... no configure: shm provider: include in libfabric configure: *** Configuring sm2 provider checking for process_vm_readv... (cached) yes checking for shm_open... (cached) no checking sys/mman.h usability... yes checking sys/mman.h presence... yes checking for sys/mman.h... yes configure: looking for library without search path checking for shm_open in -lrt... yes checking accel-config/libaccel_config.h usability... no checking accel-config/libaccel_config.h presence... no checking for accel-config/libaccel_config.h... no configure: sm2 provider: include in libfabric configure: *** Configuring rstream provider configure: rstream provider: include in libfabric configure: *** Configuring ucx provider configure: ucx provider: disabled configure: *** Configuring perf provider configure: perf provider: include in libfabric configure: *** Configuring trace provider configure: trace provider: include in libfabric configure: *** Configuring hook_debug provider configure: hook_debug provider: include in libfabric configure: *** Configuring hook_hmem provider configure: hook_hmem provider: include in libfabric configure: *** Configuring dmabuf_peer_mem provider configure: dmabuf_peer_mem provider: include in libfabric configure: *** Configuring opx provider configure: opx provider: disabled checking that generated files are newer than configure... done configure: creating ./config.status config.status: creating libfabric.pc config.status: creating Makefile config.status: creating libfabric.spec config.status: creating libfabric.map config.status: creating config.h config.status: executing depfiles commands config.status: executing libtool commands *** *** Built-in providers: dmabuf_peer_mem hook_hmem hook_debug trace perf rstream sm2 shm rxd mrail rxm tcp udp usnic verbs sockets *** DSO providers: *** + /usr/bin/make -O -j16 /usr/bin/make all-am make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o util/strerror.o util/strerror.c make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o util/info.o util/info.c make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o src/libfabric_la-perf.lo `test -f 'src/perf.c' || echo './'`src/perf.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c src/perf.c -fPIC -DPIC -o src/.libs/libfabric_la-perf.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/hook/src/src_libfabric_la-hook_cntr.lo `test -f 'prov/hook/src/hook_cntr.c' || echo './'`prov/hook/src/hook_cntr.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/hook/src/hook_cntr.c -fPIC -DPIC -o prov/hook/src/.libs/src_libfabric_la-hook_cntr.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/hook/src/src_libfabric_la-hook_av.lo `test -f 'prov/hook/src/hook_av.c' || echo './'`prov/hook/src/hook_av.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/hook/src/hook_av.c -fPIC -DPIC -o prov/hook/src/.libs/src_libfabric_la-hook_av.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/hook/src/src_libfabric_la-hook_cq.lo `test -f 'prov/hook/src/hook_cq.c' || echo './'`prov/hook/src/hook_cq.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/hook/src/hook_cq.c -fPIC -DPIC -o prov/hook/src/.libs/src_libfabric_la-hook_cq.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/hook/src/src_libfabric_la-hook_cm.lo `test -f 'prov/hook/src/hook_cm.c' || echo './'`prov/hook/src/hook_cm.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/hook/src/hook_cm.c -fPIC -DPIC -o prov/hook/src/.libs/src_libfabric_la-hook_cm.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/hook/src/src_libfabric_la-hook_domain.lo `test -f 'prov/hook/src/hook_domain.c' || echo './'`prov/hook/src/hook_domain.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/hook/src/hook_domain.c -fPIC -DPIC -o prov/hook/src/.libs/src_libfabric_la-hook_domain.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/hook/src/hook_domain.c:36: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ prov/hook/src/hook_domain.c: In function 'hook_set_send_handler': prov/hook/src/hook_domain.c:124:12: warning: passing argument 2 of 'domain->base_ops_flow_ctrl->set_send_handler' from incompatible pointer type [-Wincompatible-pointer-types] hook_credit_handler); ^~~~~~~~~~~~~~~~~~~ prov/hook/src/hook_domain.c:124:12: note: expected 'ssize_t (*)(struct fid_ep *, uint64_t)' {aka 'int (*)(struct fid_ep *, long long unsigned int)'} but argument is of type 'ssize_t (*)(struct fid_ep *, size_t)' {aka 'int (*)(struct fid_ep *, unsigned int)'} prov/hook/src/hook_domain.c: At top level: prov/hook/src/hook_domain.c:150:17: warning: initialization of 'void (*)(struct fid_ep *, uint64_t)' {aka 'void (*)(struct fid_ep *, long long unsigned int)'} from incompatible pointer type 'void (*)(struct fid_ep *, size_t)' {aka 'void (*)(struct fid_ep *, unsigned int)'} [-Wincompatible-pointer-types] .add_credits = hook_add_credits, ^~~~~~~~~~~~~~~~ prov/hook/src/hook_domain.c:150:17: note: (near initialization for 'hook_ops_flow_ctrl.add_credits') prov/hook/src/hook_domain.c:152:22: warning: initialization of 'void (*)(struct fid_domain *, ssize_t (*)(struct fid_ep *, uint64_t))' {aka 'void (*)(struct fid_domain *, int (*)(struct fid_ep *, long long unsigned int))'} from incompatible pointer type 'void (*)(struct fid_domain *, ssize_t (*)(struct fid_ep *, size_t))' {aka 'void (*)(struct fid_domain *, int (*)(struct fid_ep *, unsigned int))'} [-Wincompatible-pointer-types] .set_send_handler = hook_set_send_handler, ^~~~~~~~~~~~~~~~~~~~~ prov/hook/src/hook_domain.c:152:22: note: (near initialization for 'hook_ops_flow_ctrl.set_send_handler') make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/hook/src/src_libfabric_la-hook_eq.lo `test -f 'prov/hook/src/hook_eq.c' || echo './'`prov/hook/src/hook_eq.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/hook/src/hook_eq.c -fPIC -DPIC -o prov/hook/src/.libs/src_libfabric_la-hook_eq.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o src/libfabric_la-log.lo `test -f 'src/log.c' || echo './'`src/log.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c src/log.c -fPIC -DPIC -o src/.libs/libfabric_la-log.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from src/log.c:45: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o src/libfabric_la-abi_1_0.lo `test -f 'src/abi_1_0.c' || echo './'`src/abi_1_0.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c src/abi_1_0.c -fPIC -DPIC -o src/.libs/libfabric_la-abi_1_0.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from src/abi_1_0.c:42: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/hook/src/src_libfabric_la-hook.lo `test -f 'prov/hook/src/hook.c' || echo './'`prov/hook/src/hook.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/hook/src/hook.c -fPIC -DPIC -o prov/hook/src/.libs/src_libfabric_la-hook.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/hook/src/src_libfabric_la-hook_ep.lo `test -f 'prov/hook/src/hook_ep.c' || echo './'`prov/hook/src/hook_ep.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/hook/src/hook_ep.c -fPIC -DPIC -o prov/hook/src/.libs/src_libfabric_la-hook_ep.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o src/libfabric_la-var.lo `test -f 'src/var.c' || echo './'`src/var.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c src/var.c -fPIC -DPIC -o src/.libs/libfabric_la-var.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/hook/src/src_libfabric_la-hook_wait.lo `test -f 'prov/hook/src/hook_wait.c' || echo './'`prov/hook/src/hook_wait.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/hook/src/hook_wait.c -fPIC -DPIC -o prov/hook/src/.libs/src_libfabric_la-hook_wait.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o src/libfabric_la-hmem_cuda_gdrcopy.lo `test -f 'src/hmem_cuda_gdrcopy.c' || echo './'`src/hmem_cuda_gdrcopy.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c src/hmem_cuda_gdrcopy.c -fPIC -DPIC -o src/.libs/libfabric_la-hmem_cuda_gdrcopy.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o src/libfabric_la-hmem_ze.lo `test -f 'src/hmem_ze.c' || echo './'`src/hmem_ze.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c src/hmem_ze.c -fPIC -DPIC -o src/.libs/libfabric_la-hmem_ze.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from src/hmem_ze.c:38: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o src/libfabric_la-fi_tostr.lo `test -f 'src/fi_tostr.c' || echo './'`src/fi_tostr.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c src/fi_tostr.c -fPIC -DPIC -o src/.libs/libfabric_la-fi_tostr.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o src/libfabric_la-hmem_rocr.lo `test -f 'src/hmem_rocr.c' || echo './'`src/hmem_rocr.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c src/hmem_rocr.c -fPIC -DPIC -o src/.libs/libfabric_la-hmem_rocr.o In file included from src/hmem_rocr.c:38: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o src/libfabric_la-hmem_cuda.lo `test -f 'src/hmem_cuda.c' || echo './'`src/hmem_cuda.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c src/hmem_cuda.c -fPIC -DPIC -o src/.libs/libfabric_la-hmem_cuda.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/hook/src/src_libfabric_la-hook_xfer.lo `test -f 'prov/hook/src/hook_xfer.c' || echo './'`prov/hook/src/hook_xfer.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/hook/src/hook_xfer.c -fPIC -DPIC -o prov/hook/src/.libs/src_libfabric_la-hook_xfer.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o src/libfabric_la-fabric.lo `test -f 'src/fabric.c' || echo './'`src/fabric.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c src/fabric.c -fPIC -DPIC -o src/.libs/libfabric_la-fabric.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from src/fabric.c:47: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o src/libfabric_la-rbtree.lo `test -f 'src/rbtree.c' || echo './'`src/rbtree.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c src/rbtree.c -fPIC -DPIC -o src/.libs/libfabric_la-rbtree.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o src/libfabric_la-hmem_neuron.lo `test -f 'src/hmem_neuron.c' || echo './'`src/hmem_neuron.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c src/hmem_neuron.c -fPIC -DPIC -o src/.libs/libfabric_la-hmem_neuron.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o src/libfabric_la-hmem_synapseai.lo `test -f 'src/hmem_synapseai.c' || echo './'`src/hmem_synapseai.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c src/hmem_synapseai.c -fPIC -DPIC -o src/.libs/libfabric_la-hmem_synapseai.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o src/libfabric_la-hmem_ipc_cache.lo `test -f 'src/hmem_ipc_cache.c' || echo './'`src/hmem_ipc_cache.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c src/hmem_ipc_cache.c -fPIC -DPIC -o src/.libs/libfabric_la-hmem_ipc_cache.o In file included from ./include/ofi_util.h:61, from src/hmem_ipc_cache.c:34: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_mr.h:46, from src/hmem_ipc_cache.c:33: src/hmem_ipc_cache.c: In function 'ipc_cache_add_region': src/hmem_ipc_cache.c:68:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 8 has type 'size_t' {aka 'unsigned int'} [-Wformat=] "Failed to open hmem handle, addr: %p, len: %lu\n", ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->info.iov.iov_base, entry->info.iov.iov_len); ~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ src/hmem_ipc_cache.c:67:3: note: in expansion of macro 'FI_WARN' FI_WARN(&core_prov, FI_LOG_CORE, ^~~~~~~ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o src/libfabric_la-hmem.lo `test -f 'src/hmem.c' || echo './'`src/hmem.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c src/hmem.c -fPIC -DPIC -o src/.libs/libfabric_la-hmem.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' src/hmem.c: In function 'ofi_async_copy_hmem_iov_buf': src/hmem.c:216:10: warning: passing argument 3 of 'ofi_iov_bytes_to_copy' from incompatible pointer type [-Wincompatible-pointer-types] &hmem_iov_offset, &hmem_buf); ^~~~~~~~~~~~~~~~ In file included from src/hmem.c:41: ./include/ofi_iov.h:87:26: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'uint64_t *' {aka 'long long unsigned int *'} size_t *size, size_t *offset, char **copy_buf) ~~~~~~~~^~~~~~ src/hmem.c: In function 'ofi_copy_hmem_iov_buf': src/hmem.c:252:10: warning: passing argument 3 of 'ofi_iov_bytes_to_copy' from incompatible pointer type [-Wincompatible-pointer-types] &hmem_iov_offset, &hmem_buf); ^~~~~~~~~~~~~~~~ In file included from src/hmem.c:41: ./include/ofi_iov.h:87:26: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'uint64_t *' {aka 'long long unsigned int *'} size_t *size, size_t *offset, char **copy_buf) ~~~~~~~~^~~~~~ src/hmem.c: In function 'ofi_copy_mr_iov': src/hmem.c:282:47: warning: passing argument 3 of 'ofi_iov_bytes_to_copy' from incompatible pointer type [-Wincompatible-pointer-types] len = ofi_iov_bytes_to_copy(&iov[i], &size, &offset, &hmem_buf); ^~~~~~~ In file included from src/hmem.c:41: ./include/ofi_iov.h:87:26: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'uint64_t *' {aka 'long long unsigned int *'} size_t *size, size_t *offset, char **copy_buf) ~~~~~~~~^~~~~~ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o src/libfabric_la-enosys.lo `test -f 'src/enosys.c' || echo './'`src/enosys.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c src/enosys.c -fPIC -DPIC -o src/.libs/libfabric_la-enosys.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o util/pingpong.o util/pingpong.c make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from util/pingpong.c:55: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o src/libfabric_la-fasthash.lo `test -f 'src/fasthash.c' || echo './'`src/fasthash.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c src/fasthash.c -fPIC -DPIC -o src/.libs/libfabric_la-fasthash.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o src/shared/libfabric_la-ofi_str.lo `test -f 'src/shared/ofi_str.c' || echo './'`src/shared/ofi_str.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c src/shared/ofi_str.c -fPIC -DPIC -o src/shared/.libs/libfabric_la-ofi_str.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o src/libfabric_la-tree.lo `test -f 'src/tree.c' || echo './'`src/tree.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c src/tree.c -fPIC -DPIC -o src/.libs/libfabric_la-tree.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o src/libfabric_la-mem.lo `test -f 'src/mem.c' || echo './'`src/mem.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c src/mem.c -fPIC -DPIC -o src/.libs/libfabric_la-mem.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from src/mem.c:44: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o src/libfabric_la-indexer.lo `test -f 'src/indexer.c' || echo './'`src/indexer.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c src/indexer.c -fPIC -DPIC -o src/.libs/libfabric_la-indexer.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o src/libfabric_la-iov.lo `test -f 'src/iov.c' || echo './'`src/iov.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c src/iov.c -fPIC -DPIC -o src/.libs/libfabric_la-iov.o src/iov.c: In function 'ofi_copy_iov_buf': src/iov.c:48:40: warning: passing argument 2 of 'ofi_iov_bytes_to_copy' from incompatible pointer type [-Wincompatible-pointer-types] len = ofi_iov_bytes_to_copy(&iov[i], &bufsize, &iov_offset, ^~~~~~~~ In file included from src/iov.c:38: ./include/ofi_iov.h:87:12: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'uint64_t *' {aka 'long long unsigned int *'} size_t *size, size_t *offset, char **copy_buf) ~~~~~~~~^~~~ src/iov.c:48:50: warning: passing argument 3 of 'ofi_iov_bytes_to_copy' from incompatible pointer type [-Wincompatible-pointer-types] len = ofi_iov_bytes_to_copy(&iov[i], &bufsize, &iov_offset, ^~~~~~~~~~~ In file included from src/iov.c:38: ./include/ofi_iov.h:87:26: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'uint64_t *' {aka 'long long unsigned int *'} size_t *size, size_t *offset, char **copy_buf) ~~~~~~~~^~~~~~ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/util/src/src_libfabric_la-util_domain.lo `test -f 'prov/util/src/util_domain.c' || echo './'`prov/util/src/util_domain.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/util/src/util_domain.c -fPIC -DPIC -o prov/util/src/.libs/src_libfabric_la-util_domain.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/util/src/util_domain.c:37: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/util/src/src_libfabric_la-util_cntr.lo `test -f 'prov/util/src/util_cntr.c' || echo './'`prov/util/src/util_cntr.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/util/src/util_cntr.c -fPIC -DPIC -o prov/util/src/.libs/src_libfabric_la-util_cntr.o In file included from ./include/ofi_util.h:61, from prov/util/src/util_cntr.c:37: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/util/src/src_libfabric_la-util_ep.lo `test -f 'prov/util/src/util_ep.c' || echo './'`prov/util/src/util_ep.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/util/src/util_ep.c -fPIC -DPIC -o prov/util/src/.libs/src_libfabric_la-util_ep.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/util/src/util_ep.c:37: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/util/src/src_libfabric_la-rxm_av.lo `test -f 'prov/util/src/rxm_av.c' || echo './'`prov/util/src/rxm_av.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/util/src/rxm_av.c -fPIC -DPIC -o prov/util/src/.libs/src_libfabric_la-rxm_av.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/util/src/rxm_av.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/util/src/src_libfabric_la-util_fabric.lo `test -f 'prov/util/src/util_fabric.c' || echo './'`prov/util/src/util_fabric.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/util/src/util_fabric.c -fPIC -DPIC -o prov/util/src/.libs/src_libfabric_la-util_fabric.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/util/src/util_fabric.c:37: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/util/src/src_libfabric_la-util_pep.lo `test -f 'prov/util/src/util_pep.c' || echo './'`prov/util/src/util_pep.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/util/src/util_pep.c -fPIC -DPIC -o prov/util/src/.libs/src_libfabric_la-util_pep.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/util/src/util_pep.c:37: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/util/src/src_libfabric_la-util_cq.lo `test -f 'prov/util/src/util_cq.c' || echo './'`prov/util/src/util_cq.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/util/src/util_cq.c -fPIC -DPIC -o prov/util/src/.libs/src_libfabric_la-util_cq.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/util/src/util_cq.c:37: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/util/src/src_libfabric_la-util_eq.lo `test -f 'prov/util/src/util_eq.c' || echo './'`prov/util/src/util_eq.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/util/src/util_eq.c -fPIC -DPIC -o prov/util/src/.libs/src_libfabric_la-util_eq.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/util/src/util_eq.c:37: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/util/src/src_libfabric_la-util_poll.lo `test -f 'prov/util/src/util_poll.c' || echo './'`prov/util/src/util_poll.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/util/src/util_poll.c -fPIC -DPIC -o prov/util/src/.libs/src_libfabric_la-util_poll.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/util/src/util_poll.c:37: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/util/src/src_libfabric_la-util_buf.lo `test -f 'prov/util/src/util_buf.c' || echo './'`prov/util/src/util_buf.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/util/src/util_buf.c -fPIC -DPIC -o prov/util/src/.libs/src_libfabric_la-util_buf.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/util/src/util_buf.c:38: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/util/src/src_libfabric_la-util_main.lo `test -f 'prov/util/src/util_main.c' || echo './'`prov/util/src/util_main.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/util/src/util_main.c -fPIC -DPIC -o prov/util/src/.libs/src_libfabric_la-util_main.o In file included from ./include/ofi_util.h:61, from prov/util/src/util_main.c:37: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o src/libfabric_la-common.lo `test -f 'src/common.c' || echo './'`src/common.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c src/common.c -fPIC -DPIC -o src/.libs/libfabric_la-common.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from src/common.c:68: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ src/common.c: In function 'ofi_straddr': src/common.c:440:50: warning: format '%lx' expects argument of type 'long unsigned int', but argument 4 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] size = snprintf(buf, *len, "fi_addr_opx://%016lx", *(uint64_t *)addr); ~~~~~^ ~~~~~~~~~~~~~~~~~ %016llx make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/util/src/src_libfabric_la-util_attr.lo `test -f 'prov/util/src/util_attr.c' || echo './'`prov/util/src/util_attr.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/util/src/util_attr.c -fPIC -DPIC -o prov/util/src/.libs/src_libfabric_la-util_attr.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/util/src/util_attr.c:37: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/util/src/src_libfabric_la-util_av.lo `test -f 'prov/util/src/util_av.c' || echo './'`prov/util/src/util_av.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/util/src/util_av.c -fPIC -DPIC -o prov/util/src/.libs/src_libfabric_la-util_av.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/util/src/util_av.c:51: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from ./include/rdma/fi_ext.h:43, from ./include/ofi_util.h:52, from prov/util/src/util_av.c:51: prov/util/src/util_av.c: In function 'ofi_av_insert_addr': prov/util/src/util_av.c:313:32: warning: format '%llu' expects argument of type 'long long unsigned int', but argument 7 has type 'size_t' {aka 'unsigned int'} [-Wformat=] FI_INFO(av->prov, FI_LOG_AV, "fi_addr: %" PRIu64 "\n", ^~~~~~~~~~~~ ofi_buf_index(entry)); ~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/util/src/util_av.c:313:3: note: in expansion of macro 'FI_INFO' FI_INFO(av->prov, FI_LOG_AV, "fi_addr: %" PRIu64 "\n", ^~~~~~~ In file included from prov/util/src/util_av.c:44: /usr/include/inttypes.h:105:34: note: format string is defined here # define PRIu64 __PRI64_PREFIX "u" make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/util/src/src_libfabric_la-util_mem_hooks.lo `test -f 'prov/util/src/util_mem_hooks.c' || echo './'`prov/util/src/util_mem_hooks.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/util/src/util_mem_hooks.c -fPIC -DPIC -o prov/util/src/.libs/src_libfabric_la-util_mem_hooks.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/util/src/util_mem_hooks.c:60: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/util/src/src_libfabric_la-util_wait.lo `test -f 'prov/util/src/util_wait.c' || echo './'`prov/util/src/util_wait.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/util/src/util_wait.c -fPIC -DPIC -o prov/util/src/.libs/src_libfabric_la-util_wait.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/util/src/util_wait.c:39: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/util/src/src_libfabric_la-util_mr_map.lo `test -f 'prov/util/src/util_mr_map.c' || echo './'`prov/util/src/util_mr_map.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/util/src/util_mr_map.c -fPIC -DPIC -o prov/util/src/.libs/src_libfabric_la-util_mr_map.o In file included from ./include/ofi_util.h:61, from prov/util/src/util_mr_map.c:35: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/util/src/src_libfabric_la-cuda_mem_monitor.lo `test -f 'prov/util/src/cuda_mem_monitor.c' || echo './'`prov/util/src/cuda_mem_monitor.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/util/src/cuda_mem_monitor.c -fPIC -DPIC -o prov/util/src/.libs/src_libfabric_la-cuda_mem_monitor.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/util/src/src_libfabric_la-util_ns.lo `test -f 'prov/util/src/util_ns.c' || echo './'`prov/util/src/util_ns.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/util/src/util_ns.c -fPIC -DPIC -o prov/util/src/.libs/src_libfabric_la-util_ns.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/util/src/util_ns.c:50: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/util/src/src_libfabric_la-rocr_ipc_monitor.lo `test -f 'prov/util/src/rocr_ipc_monitor.c' || echo './'`prov/util/src/rocr_ipc_monitor.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/util/src/rocr_ipc_monitor.c -fPIC -DPIC -o prov/util/src/.libs/src_libfabric_la-rocr_ipc_monitor.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/util/src/src_libfabric_la-rocr_mem_monitor.lo `test -f 'prov/util/src/rocr_mem_monitor.c' || echo './'`prov/util/src/rocr_mem_monitor.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/util/src/rocr_mem_monitor.c -fPIC -DPIC -o prov/util/src/.libs/src_libfabric_la-rocr_mem_monitor.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/util/src/src_libfabric_la-ze_mem_monitor.lo `test -f 'prov/util/src/ze_mem_monitor.c' || echo './'`prov/util/src/ze_mem_monitor.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/util/src/ze_mem_monitor.c -fPIC -DPIC -o prov/util/src/.libs/src_libfabric_la-ze_mem_monitor.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/util/src/src_libfabric_la-cuda_ipc_monitor.lo `test -f 'prov/util/src/cuda_ipc_monitor.c' || echo './'`prov/util/src/cuda_ipc_monitor.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/util/src/cuda_ipc_monitor.c -fPIC -DPIC -o prov/util/src/.libs/src_libfabric_la-cuda_ipc_monitor.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/util/src/src_libfabric_la-util_mem_monitor.lo `test -f 'prov/util/src/util_mem_monitor.c' || echo './'`prov/util/src/util_mem_monitor.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/util/src/util_mem_monitor.c -fPIC -DPIC -o prov/util/src/.libs/src_libfabric_la-util_mem_monitor.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/util/src/util_mem_monitor.c:40: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/util/src/src_libfabric_la-util_mr_cache.lo `test -f 'prov/util/src/util_mr_cache.c' || echo './'`prov/util/src/util_mr_cache.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/util/src/util_mr_cache.c -fPIC -DPIC -o prov/util/src/.libs/src_libfabric_la-util_mr_cache.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/util/src/util_mr_cache.c:39: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/coll/src/src_libfabric_la-coll_attr.lo `test -f 'prov/coll/src/coll_attr.c' || echo './'`prov/coll/src/coll_attr.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/coll/src/coll_attr.c -fPIC -DPIC -o prov/coll/src/.libs/src_libfabric_la-coll_attr.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/coll/src/coll.h:55, from prov/coll/src/coll_attr.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/util/src/src_libfabric_la-util_shm.lo `test -f 'prov/util/src/util_shm.c' || echo './'`prov/util/src/util_shm.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/util/src/util_shm.c -fPIC -DPIC -o prov/util/src/.libs/src_libfabric_la-util_shm.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_shm.h:44, from prov/util/src/util_shm.c:44: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/coll/src/src_libfabric_la-coll_av.lo `test -f 'prov/coll/src/coll_av.c' || echo './'`prov/coll/src/coll_av.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/coll/src/coll_av.c -fPIC -DPIC -o prov/coll/src/.libs/src_libfabric_la-coll_av.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/coll/src/coll.h:55, from prov/coll/src/coll_av.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/coll/src/src_libfabric_la-coll_cq.lo `test -f 'prov/coll/src/coll_cq.c' || echo './'`prov/coll/src/coll_cq.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/coll/src/coll_cq.c -fPIC -DPIC -o prov/coll/src/.libs/src_libfabric_la-coll_cq.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/coll/src/coll.h:55, from prov/coll/src/coll_cq.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/coll/src/src_libfabric_la-coll_av_set.lo `test -f 'prov/coll/src/coll_av_set.c' || echo './'`prov/coll/src/coll_av_set.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/coll/src/coll_av_set.c -fPIC -DPIC -o prov/coll/src/.libs/src_libfabric_la-coll_av_set.o In file included from ./include/ofi_util.h:61, from prov/coll/src/coll.h:55, from prov/coll/src/coll_av_set.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/coll/src/src_libfabric_la-coll_eq.lo `test -f 'prov/coll/src/coll_eq.c' || echo './'`prov/coll/src/coll_eq.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/coll/src/coll_eq.c -fPIC -DPIC -o prov/coll/src/.libs/src_libfabric_la-coll_eq.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/coll/src/coll.h:55, from prov/coll/src/coll_eq.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/coll/src/src_libfabric_la-coll_ep.lo `test -f 'prov/coll/src/coll_ep.c' || echo './'`prov/coll/src/coll_ep.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/coll/src/coll_ep.c -fPIC -DPIC -o prov/coll/src/.libs/src_libfabric_la-coll_ep.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/coll/src/coll.h:55, from prov/coll/src/coll_ep.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/coll/src/src_libfabric_la-coll_domain.lo `test -f 'prov/coll/src/coll_domain.c' || echo './'`prov/coll/src/coll_domain.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/coll/src/coll_domain.c -fPIC -DPIC -o prov/coll/src/.libs/src_libfabric_la-coll_domain.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/coll/src/coll.h:55, from prov/coll/src/coll_domain.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/coll/src/src_libfabric_la-coll_fabric.lo `test -f 'prov/coll/src/coll_fabric.c' || echo './'`prov/coll/src/coll_fabric.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/coll/src/coll_fabric.c -fPIC -DPIC -o prov/coll/src/.libs/src_libfabric_la-coll_fabric.o In file included from ./include/ofi_util.h:61, from prov/coll/src/coll.h:55, from prov/coll/src/coll_fabric.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/coll/src/src_libfabric_la-coll_init.lo `test -f 'prov/coll/src/coll_init.c' || echo './'`prov/coll/src/coll_init.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/coll/src/coll_init.c -fPIC -DPIC -o prov/coll/src/.libs/src_libfabric_la-coll_init.o In file included from ./include/ofi_util.h:61, from prov/coll/src/coll.h:55, from prov/coll/src/coll_init.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o src/linux/libfabric_la-rdpmc.lo `test -f 'src/linux/rdpmc.c' || echo './'`src/linux/rdpmc.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c src/linux/rdpmc.c -fPIC -DPIC -o src/linux/.libs/libfabric_la-rdpmc.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sockets/src/src_libfabric_la-sock_attr.lo `test -f 'prov/sockets/src/sock_attr.c' || echo './'`prov/sockets/src/sock_attr.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sockets/src/sock_attr.c -fPIC -DPIC -o prov/sockets/src/.libs/src_libfabric_la-sock_attr.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from ./prov/sockets/include/sock.h:62, from prov/sockets/src/sock_attr.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o src/linux/libfabric_la-osd.lo `test -f 'src/linux/osd.c' || echo './'`src/linux/osd.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c src/linux/osd.c -fPIC -DPIC -o src/linux/.libs/libfabric_la-osd.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sockets/src/src_libfabric_la-sock_dom.lo `test -f 'prov/sockets/src/sock_dom.c' || echo './'`prov/sockets/src/sock_dom.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sockets/src/sock_dom.c -fPIC -DPIC -o prov/sockets/src/.libs/src_libfabric_la-sock_dom.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/sockets/src/sock_dom.c:39: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o src/unix/libfabric_la-osd.lo `test -f 'src/unix/osd.c' || echo './'`src/unix/osd.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c src/unix/osd.c -fPIC -DPIC -o src/unix/.libs/libfabric_la-osd.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from src/unix/osd.c:56: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/coll/src/src_libfabric_la-coll_coll.lo `test -f 'prov/coll/src/coll_coll.c' || echo './'`prov/coll/src/coll_coll.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/coll/src/coll_coll.c -fPIC -DPIC -o prov/coll/src/.libs/src_libfabric_la-coll_coll.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/coll/src/coll.h:55, from prov/coll/src/coll_coll.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sockets/src/src_libfabric_la-sock_mr.lo `test -f 'prov/sockets/src/sock_mr.c' || echo './'`prov/sockets/src/sock_mr.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sockets/src/sock_mr.c -fPIC -DPIC -o prov/sockets/src/.libs/src_libfabric_la-sock_mr.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/sockets/src/sock_mr.c:38: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sockets/src/src_libfabric_la-sock_ep_dgram.lo `test -f 'prov/sockets/src/sock_ep_dgram.c' || echo './'`prov/sockets/src/sock_ep_dgram.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sockets/src/sock_ep_dgram.c -fPIC -DPIC -o prov/sockets/src/.libs/src_libfabric_la-sock_ep_dgram.o In file included from ./include/ofi_util.h:61, from ./prov/sockets/include/sock.h:62, from ./prov/sockets/include/sock_util.h:42, from prov/sockets/src/sock_ep_dgram.c:53: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sockets/src/src_libfabric_la-sock_poll.lo `test -f 'prov/sockets/src/sock_poll.c' || echo './'`prov/sockets/src/sock_poll.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sockets/src/sock_poll.c -fPIC -DPIC -o prov/sockets/src/.libs/src_libfabric_la-sock_poll.o In file included from ./include/ofi_util.h:61, from ./prov/sockets/include/sock.h:62, from prov/sockets/src/sock_poll.c:38: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sockets/src/src_libfabric_la-sock_av.lo `test -f 'prov/sockets/src/sock_av.c' || echo './'`prov/sockets/src/sock_av.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sockets/src/sock_av.c -fPIC -DPIC -o prov/sockets/src/.libs/src_libfabric_la-sock_av.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from ./prov/sockets/include/sock.h:62, from prov/sockets/src/sock_av.c:52: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sockets/src/src_libfabric_la-sock_ep_rdm.lo `test -f 'prov/sockets/src/sock_ep_rdm.c' || echo './'`prov/sockets/src/sock_ep_rdm.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sockets/src/sock_ep_rdm.c -fPIC -DPIC -o prov/sockets/src/.libs/src_libfabric_la-sock_ep_rdm.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from ./prov/sockets/include/sock.h:62, from prov/sockets/src/sock_ep_rdm.c:54: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sockets/src/src_libfabric_la-sock_wait.lo `test -f 'prov/sockets/src/sock_wait.c' || echo './'`prov/sockets/src/sock_wait.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sockets/src/sock_wait.c -fPIC -DPIC -o prov/sockets/src/.libs/src_libfabric_la-sock_wait.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from ./prov/sockets/include/sock.h:62, from prov/sockets/src/sock_wait.c:40: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sockets/src/src_libfabric_la-sock_eq.lo `test -f 'prov/sockets/src/sock_eq.c' || echo './'`prov/sockets/src/sock_eq.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sockets/src/sock_eq.c -fPIC -DPIC -o prov/sockets/src/.libs/src_libfabric_la-sock_eq.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from ./prov/sockets/include/sock.h:62, from prov/sockets/src/sock_eq.c:45: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sockets/src/src_libfabric_la-sock_cntr.lo `test -f 'prov/sockets/src/sock_cntr.c' || echo './'`prov/sockets/src/sock_cntr.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sockets/src/sock_cntr.c -fPIC -DPIC -o prov/sockets/src/.libs/src_libfabric_la-sock_cntr.o In file included from ./include/ofi_util.h:61, from ./prov/sockets/include/sock.h:62, from prov/sockets/src/sock_cntr.c:41: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sockets/src/src_libfabric_la-sock_fabric.lo `test -f 'prov/sockets/src/sock_fabric.c' || echo './'`prov/sockets/src/sock_fabric.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sockets/src/sock_fabric.c -fPIC -DPIC -o prov/sockets/src/.libs/src_libfabric_la-sock_fabric.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from ./prov/sockets/include/sock.h:62, from prov/sockets/src/sock_fabric.c:45: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sockets/src/src_libfabric_la-sock_ctx.lo `test -f 'prov/sockets/src/sock_ctx.c' || echo './'`prov/sockets/src/sock_ctx.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sockets/src/sock_ctx.c -fPIC -DPIC -o prov/sockets/src/.libs/src_libfabric_la-sock_ctx.o In file included from ./include/ofi_util.h:61, from ./prov/sockets/include/sock.h:62, from prov/sockets/src/sock_ctx.c:38: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sockets/src/src_libfabric_la-sock_rx_entry.lo `test -f 'prov/sockets/src/sock_rx_entry.c' || echo './'`prov/sockets/src/sock_rx_entry.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sockets/src/sock_rx_entry.c -fPIC -DPIC -o prov/sockets/src/.libs/src_libfabric_la-sock_rx_entry.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from ./prov/sockets/include/sock.h:62, from prov/sockets/src/sock_rx_entry.c:44: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sockets/src/src_libfabric_la-sock_cq.lo `test -f 'prov/sockets/src/sock_cq.c' || echo './'`prov/sockets/src/sock_cq.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sockets/src/sock_cq.c -fPIC -DPIC -o prov/sockets/src/.libs/src_libfabric_la-sock_cq.o In file included from ./include/ofi_util.h:61, from ./prov/sockets/include/sock.h:62, from prov/sockets/src/sock_cq.c:48: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sockets/src/src_libfabric_la-sock_comm.lo `test -f 'prov/sockets/src/sock_comm.c' || echo './'`prov/sockets/src/sock_comm.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sockets/src/sock_comm.c -fPIC -DPIC -o prov/sockets/src/.libs/src_libfabric_la-sock_comm.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from ./prov/sockets/include/sock.h:62, from prov/sockets/src/sock_comm.c:41: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/udp/src/src_libfabric_la-udpx_attr.lo `test -f 'prov/udp/src/udpx_attr.c' || echo './'`prov/udp/src/udpx_attr.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/udp/src/udpx_attr.c -fPIC -DPIC -o prov/udp/src/.libs/src_libfabric_la-udpx_attr.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/udp/src/udpx.h:61, from prov/udp/src/udpx_attr.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/util/src/src_libfabric_la-util_atomic.lo `test -f 'prov/util/src/util_atomic.c' || echo './'`prov/util/src/util_atomic.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/util/src/util_atomic.c -fPIC -DPIC -o prov/util/src/.libs/src_libfabric_la-util_atomic.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sockets/src/src_libfabric_la-sock_rma.lo `test -f 'prov/sockets/src/sock_rma.c' || echo './'`prov/sockets/src/sock_rma.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sockets/src/sock_rma.c -fPIC -DPIC -o prov/sockets/src/.libs/src_libfabric_la-sock_rma.o In file included from ./include/ofi_util.h:61, from ./prov/sockets/include/sock.h:62, from prov/sockets/src/sock_rma.c:56: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sockets/src/src_libfabric_la-sock_trigger.lo `test -f 'prov/sockets/src/sock_trigger.c' || echo './'`prov/sockets/src/sock_trigger.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sockets/src/sock_trigger.c -fPIC -DPIC -o prov/sockets/src/.libs/src_libfabric_la-sock_trigger.o In file included from ./include/ofi_util.h:61, from ./prov/sockets/include/sock.h:62, from prov/sockets/src/sock_trigger.c:40: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/udp/src/src_libfabric_la-udpx_cq.lo `test -f 'prov/udp/src/udpx_cq.c' || echo './'`prov/udp/src/udpx_cq.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/udp/src/udpx_cq.c -fPIC -DPIC -o prov/udp/src/.libs/src_libfabric_la-udpx_cq.o In file included from ./include/ofi_util.h:61, from prov/udp/src/udpx.h:61, from prov/udp/src/udpx_cq.c:36: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sockets/src/src_libfabric_la-sock_atomic.lo `test -f 'prov/sockets/src/sock_atomic.c' || echo './'`prov/sockets/src/sock_atomic.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sockets/src/sock_atomic.c -fPIC -DPIC -o prov/sockets/src/.libs/src_libfabric_la-sock_atomic.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from ./prov/sockets/include/sock.h:62, from prov/sockets/src/sock_atomic.c:54: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/udp/src/src_libfabric_la-udpx_domain.lo `test -f 'prov/udp/src/udpx_domain.c' || echo './'`prov/udp/src/udpx_domain.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/udp/src/udpx_domain.c -fPIC -DPIC -o prov/udp/src/.libs/src_libfabric_la-udpx_domain.o In file included from ./include/ofi_util.h:61, from prov/udp/src/udpx.h:61, from prov/udp/src/udpx_domain.c:36: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sockets/src/src_libfabric_la-sock_ep_msg.lo `test -f 'prov/sockets/src/sock_ep_msg.c' || echo './'`prov/sockets/src/sock_ep_msg.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sockets/src/sock_ep_msg.c -fPIC -DPIC -o prov/sockets/src/.libs/src_libfabric_la-sock_ep_msg.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from ./prov/sockets/include/sock.h:62, from prov/sockets/src/sock_ep_msg.c:56: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sockets/src/src_libfabric_la-sock_msg.lo `test -f 'prov/sockets/src/sock_msg.c' || echo './'`prov/sockets/src/sock_msg.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sockets/src/sock_msg.c -fPIC -DPIC -o prov/sockets/src/.libs/src_libfabric_la-sock_msg.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from ./prov/sockets/include/sock.h:62, from prov/sockets/src/sock_msg.c:54: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/udp/src/src_libfabric_la-udpx_fabric.lo `test -f 'prov/udp/src/udpx_fabric.c' || echo './'`prov/udp/src/udpx_fabric.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/udp/src/udpx_fabric.c -fPIC -DPIC -o prov/udp/src/.libs/src_libfabric_la-udpx_fabric.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/udp/src/udpx.h:61, from prov/udp/src/udpx_fabric.c:36: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sockets/src/src_libfabric_la-sock_conn.lo `test -f 'prov/sockets/src/sock_conn.c' || echo './'`prov/sockets/src/sock_conn.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sockets/src/sock_conn.c -fPIC -DPIC -o prov/sockets/src/.libs/src_libfabric_la-sock_conn.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from ./prov/sockets/include/sock.h:62, from prov/sockets/src/sock_conn.c:54: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sockets/src/src_libfabric_la-sock_ep.lo `test -f 'prov/sockets/src/sock_ep.c' || echo './'`prov/sockets/src/sock_ep.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sockets/src/sock_ep.c -fPIC -DPIC -o prov/sockets/src/.libs/src_libfabric_la-sock_ep.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/sockets/src/sock_ep.c:50: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/udp/src/src_libfabric_la-udpx_init.lo `test -f 'prov/udp/src/udpx_init.c' || echo './'`prov/udp/src/udpx_init.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/udp/src/udpx_init.c -fPIC -DPIC -o prov/udp/src/.libs/src_libfabric_la-udpx_init.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/udp/src/udpx.h:61, from prov/udp/src/udpx_init.c:36: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/udp/src/src_libfabric_la-udpx_ep.lo `test -f 'prov/udp/src/udpx_ep.c' || echo './'`prov/udp/src/udpx_ep.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/udp/src/udpx_ep.c -fPIC -DPIC -o prov/udp/src/.libs/src_libfabric_la-udpx_ep.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/udp/src/udpx.h:61, from prov/udp/src/udpx_ep.c:36: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/verbs/src/src_libfabric_la-verbs_cm.lo `test -f 'prov/verbs/src/verbs_cm.c' || echo './'`prov/verbs/src/verbs_cm.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/verbs/src/verbs_cm.c -fPIC -DPIC -o prov/verbs/src/.libs/src_libfabric_la-verbs_cm.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from ./prov/verbs/include/fi_verbs.h:74, from prov/verbs/src/verbs_cm.c:35: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/verbs/src/src_libfabric_la-verbs_cm_xrc.lo `test -f 'prov/verbs/src/verbs_cm_xrc.c' || echo './'`prov/verbs/src/verbs_cm_xrc.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/verbs/src/verbs_cm_xrc.c -fPIC -DPIC -o prov/verbs/src/.libs/src_libfabric_la-verbs_cm_xrc.o In file included from ./include/ofi_util.h:61, from ./prov/verbs/include/fi_verbs.h:74, from prov/verbs/src/verbs_cm_xrc.c:35: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/verbs/src/src_libfabric_la-verbs_domain.lo `test -f 'prov/verbs/src/verbs_domain.c' || echo './'`prov/verbs/src/verbs_domain.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/verbs/src/verbs_domain.c -fPIC -DPIC -o prov/verbs/src/.libs/src_libfabric_la-verbs_domain.o In file included from ./include/ofi_util.h:61, from ./prov/verbs/include/fi_verbs.h:74, from prov/verbs/src/verbs_domain.c:38: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ prov/verbs/src/verbs_domain.c: In function 'vrb_set_credit_handler': prov/verbs/src/verbs_domain.c:49:23: warning: assignment to 'ssize_t (*)(struct fid_ep *, uint64_t)' {aka 'int (*)(struct fid_ep *, long long unsigned int)'} from incompatible pointer type 'ssize_t (*)(struct fid_ep *, size_t)' {aka 'int (*)(struct fid_ep *, unsigned int)'} [-Wincompatible-pointer-types] domain->send_credits = credit_handler; ^ prov/verbs/src/verbs_domain.c: At top level: prov/verbs/src/verbs_domain.c:104:17: warning: initialization of 'void (*)(struct fid_ep *, uint64_t)' {aka 'void (*)(struct fid_ep *, long long unsigned int)'} from incompatible pointer type 'void (*)(struct fid_ep *, size_t)' {aka 'void (*)(struct fid_ep *, unsigned int)'} [-Wincompatible-pointer-types] .add_credits = vrb_add_credits, ^~~~~~~~~~~~~~~ prov/verbs/src/verbs_domain.c:104:17: note: (near initialization for 'vrb_ops_flow_ctrl.add_credits') prov/verbs/src/verbs_domain.c:106:22: warning: initialization of 'void (*)(struct fid_domain *, ssize_t (*)(struct fid_ep *, uint64_t))' {aka 'void (*)(struct fid_domain *, int (*)(struct fid_ep *, long long unsigned int))'} from incompatible pointer type 'void (*)(struct fid_domain *, ssize_t (*)(struct fid_ep *, size_t))' {aka 'void (*)(struct fid_domain *, int (*)(struct fid_ep *, unsigned int))'} [-Wincompatible-pointer-types] .set_send_handler = vrb_set_credit_handler, ^~~~~~~~~~~~~~~~~~~~~~ prov/verbs/src/verbs_domain.c:106:22: note: (near initialization for 'vrb_ops_flow_ctrl.set_send_handler') make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/verbs/src/src_libfabric_la-fi_verbs.lo `test -f 'prov/verbs/src/fi_verbs.c' || echo './'`prov/verbs/src/fi_verbs.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/verbs/src/fi_verbs.c -fPIC -DPIC -o prov/verbs/src/.libs/src_libfabric_la-fi_verbs.o In file included from prov/verbs/src/fi_verbs.c:35: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/verbs/src/src_libfabric_la-verbs_mr.lo `test -f 'prov/verbs/src/verbs_mr.c' || echo './'`prov/verbs/src/verbs_mr.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/verbs/src/verbs_mr.c -fPIC -DPIC -o prov/verbs/src/.libs/src_libfabric_la-verbs_mr.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/verbs/src/verbs_mr.c:34: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ prov/verbs/src/verbs_mr.c: In function 'vrb_mr_ibv_reg_dmabuf_mr': prov/verbs/src/verbs_mr.c:86:42: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] mr = ibv_reg_dmabuf_mr(pd, offset, len, (uint64_t)buf/* iova */, ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/verbs/src/src_libfabric_la-verbs_domain_xrc.lo `test -f 'prov/verbs/src/verbs_domain_xrc.c' || echo './'`prov/verbs/src/verbs_domain_xrc.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/verbs/src/verbs_domain_xrc.c -fPIC -DPIC -o prov/verbs/src/.libs/src_libfabric_la-verbs_domain_xrc.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from ./prov/verbs/include/fi_verbs.h:74, from prov/verbs/src/verbs_domain_xrc.c:35: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/verbs/src/src_libfabric_la-verbs_cq.lo `test -f 'prov/verbs/src/verbs_cq.c' || echo './'`prov/verbs/src/verbs_cq.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/verbs/src/verbs_cq.c -fPIC -DPIC -o prov/verbs/src/.libs/src_libfabric_la-verbs_cq.o In file included from prov/verbs/src/verbs_cq.c:36: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/verbs/src/src_libfabric_la-verbs_msg.lo `test -f 'prov/verbs/src/verbs_msg.c' || echo './'`prov/verbs/src/verbs_msg.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/verbs/src/verbs_msg.c -fPIC -DPIC -o prov/verbs/src/.libs/src_libfabric_la-verbs_msg.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from ./prov/verbs/include/fi_verbs.h:74, from prov/verbs/src/verbs_msg.c:36: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/verbs/src/src_libfabric_la-verbs_dgram_av.lo `test -f 'prov/verbs/src/verbs_dgram_av.c' || echo './'`prov/verbs/src/verbs_dgram_av.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/verbs/src/verbs_dgram_av.c -fPIC -DPIC -o prov/verbs/src/.libs/src_libfabric_la-verbs_dgram_av.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from ./prov/verbs/include/fi_verbs.h:74, from prov/verbs/src/verbs_dgram_av.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/verbs/src/src_libfabric_la-verbs_dgram_ep_msg.lo `test -f 'prov/verbs/src/verbs_dgram_ep_msg.c' || echo './'`prov/verbs/src/verbs_dgram_ep_msg.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/verbs/src/verbs_dgram_ep_msg.c -fPIC -DPIC -o prov/verbs/src/.libs/src_libfabric_la-verbs_dgram_ep_msg.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from ./prov/verbs/include/fi_verbs.h:74, from prov/verbs/src/verbs_dgram_ep_msg.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/verbs/src/src_libfabric_la-verbs_rma.lo `test -f 'prov/verbs/src/verbs_rma.c' || echo './'`prov/verbs/src/verbs_rma.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/verbs/src/verbs_rma.c -fPIC -DPIC -o prov/verbs/src/.libs/src_libfabric_la-verbs_rma.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from ./prov/verbs/include/fi_verbs.h:74, from prov/verbs/src/verbs_rma.c:36: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/usnic_direct/src_libfabric_la-libnl_utils_common.lo `test -f 'prov/usnic/src/usnic_direct/libnl_utils_common.c' || echo './'`prov/usnic/src/usnic_direct/libnl_utils_common.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usnic_direct/libnl_utils_common.c -fPIC -DPIC -o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-libnl_utils_common.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/usnic_direct/src_libfabric_la-usd_caps.lo `test -f 'prov/usnic/src/usnic_direct/usd_caps.c' || echo './'`prov/usnic/src/usnic_direct/usd_caps.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usnic_direct/usd_caps.c -fPIC -DPIC -o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_caps.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/usnic/src/usnic_direct/kcompat.h:54, from prov/usnic/src/usnic_direct/usd.h:48, from prov/usnic/src/usnic_direct/usd_caps.c:54: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/usnic_direct/src_libfabric_la-usd_enum.lo `test -f 'prov/usnic/src/usnic_direct/usd_enum.c' || echo './'`prov/usnic/src/usnic_direct/usd_enum.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usnic_direct/usd_enum.c -fPIC -DPIC -o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_enum.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/usnic_direct/src_libfabric_la-usd_event.lo `test -f 'prov/usnic/src/usnic_direct/usd_event.c' || echo './'`prov/usnic/src/usnic_direct/usd_event.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usnic_direct/usd_event.c -fPIC -DPIC -o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_event.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/usnic/src/usnic_direct/kcompat.h:54, from prov/usnic/src/usnic_direct/usd.h:48, from prov/usnic/src/usnic_direct/usd_event.c:52: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sockets/src/src_libfabric_la-sock_progress.lo `test -f 'prov/sockets/src/sock_progress.c' || echo './'`prov/sockets/src/sock_progress.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sockets/src/sock_progress.c -fPIC -DPIC -o prov/sockets/src/.libs/src_libfabric_la-sock_progress.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/sockets/src/sock_progress.c:59: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/usnic_direct/src_libfabric_la-usd_dest.lo `test -f 'prov/usnic/src/usnic_direct/usd_dest.c' || echo './'`prov/usnic/src/usnic_direct/usd_dest.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usnic_direct/usd_dest.c -fPIC -DPIC -o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_dest.o In file included from prov/usnic/src/usnic_direct/kcompat.h:54, from prov/usnic/src/usnic_direct/usd.h:48, from prov/usnic/src/usnic_direct/usd_dest.c:58: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/usnic_direct/src_libfabric_la-usd_device.lo `test -f 'prov/usnic/src/usnic_direct/usd_device.c' || echo './'`prov/usnic/src/usnic_direct/usd_device.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usnic_direct/usd_device.c -fPIC -DPIC -o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_device.o In file included from prov/usnic/src/usnic_direct/kcompat.h:54, from prov/usnic/src/usnic_direct/usd.h:48, from prov/usnic/src/usnic_direct/usd_device.c:55: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/verbs/src/src_libfabric_la-verbs_eq.lo `test -f 'prov/verbs/src/verbs_eq.c' || echo './'`prov/verbs/src/verbs_eq.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/verbs/src/verbs_eq.c -fPIC -DPIC -o prov/verbs/src/.libs/src_libfabric_la-verbs_eq.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/verbs/src/verbs_eq.c:37: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/usnic_direct/src_libfabric_la-usd_mem.lo `test -f 'prov/usnic/src/usnic_direct/usd_mem.c' || echo './'`prov/usnic/src/usnic_direct/usd_mem.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usnic_direct/usd_mem.c -fPIC -DPIC -o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_mem.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/usnic/src/usnic_direct/kcompat.h:54, from prov/usnic/src/usnic_direct/usd.h:48, from prov/usnic/src/usnic_direct/usd_mem.c:52: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ In file included from prov/usnic/src/usnic_direct/kcompat.h:54, from prov/usnic/src/usnic_direct/usd.h:48, from prov/usnic/src/usnic_direct/usd_mem.c:52: prov/usnic/src/usnic_direct/usd_mem.c: In function 'usd_alloc_mr': prov/usnic/src/usnic_direct/usd_mem.c:134:17: warning: format '%lu' expects argument of type 'long unsigned int', but argument 3 has type 'size_t' {aka 'unsigned int'} [-Wformat=] usd_err("Failed to mmap region of size %lu\n", true_size); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~ ./prov/usnic/src/usnic_direct/kcompat_priv.h:83:42: note: in definition of macro 'usd_err' #define usd_err(args...) fprintf(stderr, args) ^~~~ prov/usnic/src/usnic_direct/usd_mem.c:158:17: warning: format '%lu' expects argument of type 'long unsigned int', but argument 4 has type 'size_t' {aka 'unsigned int'} [-Wformat=] usd_err("Failed to disable child's access to memory %p size %lu\n", ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ vaddr, size); ~~~~ ./prov/usnic/src/usnic_direct/kcompat_priv.h:83:42: note: in definition of macro 'usd_err' #define usd_err(args...) fprintf(stderr, args) ^~~~ prov/usnic/src/usnic_direct/usd_mem.c:166:17: warning: format '%lu' expects argument of type 'long unsigned int', but argument 4 has type 'size_t' {aka 'unsigned int'} [-Wformat=] usd_err("Failed to register memory region %p, size %lu\n", ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ vaddr, size); ~~~~ ./prov/usnic/src/usnic_direct/kcompat_priv.h:83:42: note: in definition of macro 'usd_err' #define usd_err(args...) fprintf(stderr, args) ^~~~ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/usnic_direct/src_libfabric_la-usd_post.lo `test -f 'prov/usnic/src/usnic_direct/usd_post.c' || echo './'`prov/usnic/src/usnic_direct/usd_post.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usnic_direct/usd_post.c -fPIC -DPIC -o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_post.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/usnic/src/usnic_direct/kcompat.h:54, from prov/usnic/src/usnic_direct/usd.h:48, from prov/usnic/src/usnic_direct/usd_post.c:43: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ In file included from prov/usnic/src/usnic_direct/usd_post.c:44: prov/usnic/src/usnic_direct/usd_post.h: In function '_usd_post_send_one': prov/usnic/src/usnic_direct/usd_post.h:76:35: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] wr = vnic_cached_posted_index((dma_addr_t)packet, length, index); ^ prov/usnic/src/usnic_direct/usd_post.c: In function 'usd_post_recv': prov/usnic/src/usnic_direct/usd_post.c:93:32: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] rq_enet_desc_enc(desc, (dma_addr_t) iovp[0].iov_base, ^ prov/usnic/src/usnic_direct/usd_post.c:103:36: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] rq_enet_desc_enc(desc, (dma_addr_t) iovp[i].iov_base, ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/usnic_direct/src_libfabric_la-usd_post_ud_raw.lo `test -f 'prov/usnic/src/usnic_direct/usd_post_ud_raw.c' || echo './'`prov/usnic/src/usnic_direct/usd_post_ud_raw.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usnic_direct/usd_post_ud_raw.c -fPIC -DPIC -o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_post_ud_raw.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/usnic/src/usnic_direct/kcompat.h:54, from prov/usnic/src/usnic_direct/usd.h:48, from prov/usnic/src/usnic_direct/usd_post_ud_raw.c:43: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ In file included from prov/usnic/src/usnic_direct/usd_post_ud_raw.c:44: prov/usnic/src/usnic_direct/usd_post.h: In function '_usd_post_send_one': prov/usnic/src/usnic_direct/usd_post.h:76:35: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] wr = vnic_cached_posted_index((dma_addr_t)packet, length, index); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/usnic_direct/src_libfabric_la-usd_ib_sysfs.lo `test -f 'prov/usnic/src/usnic_direct/usd_ib_sysfs.c' || echo './'`prov/usnic/src/usnic_direct/usd_ib_sysfs.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usnic_direct/usd_ib_sysfs.c -fPIC -DPIC -o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_ib_sysfs.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/usnic/src/usnic_direct/kcompat.h:54, from prov/usnic/src/usnic_direct/usd.h:48, from prov/usnic/src/usnic_direct/usd_ib_sysfs.c:53: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/usnic_direct/src_libfabric_la-usd_poll.lo `test -f 'prov/usnic/src/usnic_direct/usd_poll.c' || echo './'`prov/usnic/src/usnic_direct/usd_poll.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usnic_direct/usd_poll.c -fPIC -DPIC -o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_poll.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/usnic/src/usnic_direct/kcompat.h:54, from prov/usnic/src/usnic_direct/usd.h:48, from prov/usnic/src/usnic_direct/usd_poll.c:46: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ In file included from prov/usnic/src/usnic_direct/kcompat.h:53, from prov/usnic/src/usnic_direct/usd.h:48, from prov/usnic/src/usnic_direct/usd_poll.c:46: prov/usnic/src/usnic_direct/usd_poll.c: In function 'find_rx_lengths': prov/usnic/src/usnic_direct/usd_poll.c:74:28: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] *len_in_pkt_o = ntohs(((struct usd_udp_hdr *)bus_addr)->uh_ip.tot_len) + ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/verbs/src/src_libfabric_la-verbs_info.lo `test -f 'prov/verbs/src/verbs_info.c' || echo './'`prov/verbs/src/verbs_info.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/verbs/src/verbs_info.c -fPIC -DPIC -o prov/verbs/src/.libs/src_libfabric_la-verbs_info.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/verbs/src/verbs_info.c:34: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/usnic_direct/src_libfabric_la-usd_ib_cmd.lo `test -f 'prov/usnic/src/usnic_direct/usd_ib_cmd.c' || echo './'`prov/usnic/src/usnic_direct/usd_ib_cmd.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usnic_direct/usd_ib_cmd.c -fPIC -DPIC -o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_ib_cmd.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/usnic/src/usnic_direct/kcompat.h:54, from prov/usnic/src/usnic_direct/usd_ib_cmd.c:57: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ prov/usnic/src/usnic_direct/usd_ib_cmd.c: In function 'usd_ib_cmd_create_cq': prov/usnic/src/usnic_direct/usd_ib_cmd.c:492:51: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] cmd.usnic_cmd.cur.affinity_mask_ptr = (u64)affinity_mask; ^ prov/usnic/src/usnic_direct/usd_ib_cmd.c:496:51: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] cmd.usnic_cmd.cur.affinity_mask_ptr = (u64)NULL; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/usnic_direct/src_libfabric_la-usd_post_ud_pio_udp.lo `test -f 'prov/usnic/src/usnic_direct/usd_post_ud_pio_udp.c' || echo './'`prov/usnic/src/usnic_direct/usd_post_ud_pio_udp.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usnic_direct/usd_post_ud_pio_udp.c -fPIC -DPIC -o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_post_ud_pio_udp.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/usnic/src/usnic_direct/kcompat.h:54, from prov/usnic/src/usnic_direct/usd.h:48, from prov/usnic/src/usnic_direct/usd_post_ud_pio_udp.c:45: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ In file included from prov/usnic/src/usnic_direct/usd_post_ud_pio_udp.c:46: prov/usnic/src/usnic_direct/usd_post.h: In function '_usd_post_send_one': prov/usnic/src/usnic_direct/usd_post.h:76:35: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] wr = vnic_cached_posted_index((dma_addr_t)packet, length, index); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/usnic_direct/src_libfabric_la-usd_post_ud_udp.lo `test -f 'prov/usnic/src/usnic_direct/usd_post_ud_udp.c' || echo './'`prov/usnic/src/usnic_direct/usd_post_ud_udp.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usnic_direct/usd_post_ud_udp.c -fPIC -DPIC -o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_post_ud_udp.o In file included from prov/usnic/src/usnic_direct/kcompat.h:54, from prov/usnic/src/usnic_direct/usd.h:48, from prov/usnic/src/usnic_direct/usd_post_ud_udp.c:45: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ In file included from prov/usnic/src/usnic_direct/usd_post_ud_udp.c:46: prov/usnic/src/usnic_direct/usd_post.h: In function '_usd_post_send_one': prov/usnic/src/usnic_direct/usd_post.h:76:35: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] wr = vnic_cached_posted_index((dma_addr_t)packet, length, index); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/usnic_direct/src_libfabric_la-usd_socket.lo `test -f 'prov/usnic/src/usnic_direct/usd_socket.c' || echo './'`prov/usnic/src/usnic_direct/usd_socket.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usnic_direct/usd_socket.c -fPIC -DPIC -o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_socket.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/usnic/src/usnic_direct/kcompat.h:54, from prov/usnic/src/usnic_direct/usd.h:48, from prov/usnic/src/usnic_direct/usd_socket.c:53: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/usnic_direct/src_libfabric_la-usd_vnic.lo `test -f 'prov/usnic/src/usnic_direct/usd_vnic.c' || echo './'`prov/usnic/src/usnic_direct/usd_vnic.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usnic_direct/usd_vnic.c -fPIC -DPIC -o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_vnic.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/usnic/src/usnic_direct/kcompat.h:54, from prov/usnic/src/usnic_direct/usd_vnic.c:46: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/usnic_direct/src_libfabric_la-usnic_ip_utils.lo `test -f 'prov/usnic/src/usnic_direct/usnic_ip_utils.c' || echo './'`prov/usnic/src/usnic_direct/usnic_ip_utils.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usnic_direct/usnic_ip_utils.c -fPIC -DPIC -o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usnic_ip_utils.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/verbs/src/src_libfabric_la-verbs_ep.lo `test -f 'prov/verbs/src/verbs_ep.c' || echo './'`prov/verbs/src/verbs_ep.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/verbs/src/verbs_ep.c -fPIC -DPIC -o prov/verbs/src/.libs/src_libfabric_la-verbs_ep.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from ./prov/verbs/include/fi_verbs.h:74, from prov/verbs/src/verbs_ep.c:36: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/usnic_direct/src_libfabric_la-vnic_cq.lo `test -f 'prov/usnic/src/usnic_direct/vnic_cq.c' || echo './'`prov/usnic/src/usnic_direct/vnic_cq.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usnic_direct/vnic_cq.c -fPIC -DPIC -o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-vnic_cq.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/usnic/src/usnic_direct/kcompat.h:54, from prov/usnic/src/usnic_direct/vnic_cq.c:49: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/usnic_direct/src_libfabric_la-vnic_wq.lo `test -f 'prov/usnic/src/usnic_direct/vnic_wq.c' || echo './'`prov/usnic/src/usnic_direct/vnic_wq.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usnic_direct/vnic_wq.c -fPIC -DPIC -o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-vnic_wq.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/usnic/src/usnic_direct/kcompat.h:54, from prov/usnic/src/usnic_direct/vnic_wq.c:51: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/usnic_direct/src_libfabric_la-vnic_intr.lo `test -f 'prov/usnic/src/usnic_direct/vnic_intr.c' || echo './'`prov/usnic/src/usnic_direct/vnic_intr.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usnic_direct/vnic_intr.c -fPIC -DPIC -o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-vnic_intr.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/usnic/src/usnic_direct/kcompat.h:54, from prov/usnic/src/usnic_direct/vnic_intr.c:50: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/usnic_direct/src_libfabric_la-vnic_rq.lo `test -f 'prov/usnic/src/usnic_direct/vnic_rq.c' || echo './'`prov/usnic/src/usnic_direct/vnic_rq.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usnic_direct/vnic_rq.c -fPIC -DPIC -o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-vnic_rq.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/usnic/src/usnic_direct/kcompat.h:54, from prov/usnic/src/usnic_direct/vnic_rq.c:53: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/usnic_direct/src_libfabric_la-usd_queues.lo `test -f 'prov/usnic/src/usnic_direct/usd_queues.c' || echo './'`prov/usnic/src/usnic_direct/usd_queues.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usnic_direct/usd_queues.c -fPIC -DPIC -o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_queues.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/usnic/src/usnic_direct/kcompat.h:54, from prov/usnic/src/usnic_direct/usd_queues.c:54: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ In file included from prov/usnic/src/usnic_direct/kcompat.h:54, from prov/usnic/src/usnic_direct/usd_queues.c:54: prov/usnic/src/usnic_direct/usd_queues.c: In function 'usd_map_one_res': prov/usnic/src/usnic_direct/usd_queues.c:122:17: warning: format '%lx' expects argument of type 'long unsigned int', but argument 4 has type 'dma_addr_t' {aka 'long long unsigned int'} [-Wformat=] usd_err("Failed to map res type %d, bus_addr 0x%lx, len 0x%lx\n", ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ barres->type, iomap->bus_addr, iomap->len); ~~~~~~~~~~~~~~~ ./prov/usnic/src/usnic_direct/kcompat_priv.h:83:42: note: in definition of macro 'usd_err' #define usd_err(args...) fprintf(stderr, args) ^~~~ prov/usnic/src/usnic_direct/usd_queues.c: In function 'usd_create_wq_ud': prov/usnic/src/usnic_direct/usd_queues.c:429:43: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] ret = usd_vnic_wq_init(wq, qp->uq_vf, (uint64_t)wq->uwq_desc_ring); ^ prov/usnic/src/usnic_direct/usd_queues.c: In function 'usd_create_wq_pio': prov/usnic/src/usnic_direct/usd_queues.c:476:11: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] if ((((uint64_t)pio_vaddr ^ pio_paddr) & 511) != 0) { ^ prov/usnic/src/usnic_direct/usd_queues.c:477:56: warning: format '%lx' expects argument of type 'long unsigned int', but argument 4 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] fprintf(stderr, "Alignment mismatch, %p vs 0x%lx, cannot do PIO\n", ~~^ %llx pio_vaddr, pio_paddr); ~~~~~~~~~ prov/usnic/src/usnic_direct/usd_queues.c:493:25: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] wq->pio_v_wq_addr = (void *)ivaddr; ^ prov/usnic/src/usnic_direct/usd_queues.c:494:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] wq->pio_p_wq_addr = pio_paddr + ivaddr - (uint64_t)pio_vaddr; ^ prov/usnic/src/usnic_direct/usd_queues.c:506:25: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] wq->pio_v_pkt_buf = (void *)ivaddr; ^ prov/usnic/src/usnic_direct/usd_queues.c:507:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] wq->pio_p_pkt_buf = pio_paddr + ivaddr - (uint64_t)pio_vaddr; ^ prov/usnic/src/usnic_direct/usd_queues.c: In function 'usd_create_rq': prov/usnic/src/usnic_direct/usd_queues.c:616:43: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] ret = usd_vnic_rq_init(rq, qp->uq_vf, (uint64_t)rq->urq_desc_ring); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/src_libfabric_la-usdf_cm.lo `test -f 'prov/usnic/src/usdf_cm.c' || echo './'`prov/usnic/src/usdf_cm.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usdf_cm.c -fPIC -DPIC -o prov/usnic/src/.libs/src_libfabric_la-usdf_cm.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./prov/usnic/src/usnic_direct/kcompat.h:54, from ./prov/usnic/src/usnic_direct/usd.h:48, from prov/usnic/src/usdf.h:48, from prov/usnic/src/usdf_cm.c:60: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/src_libfabric_la-usdf_endpoint.lo `test -f 'prov/usnic/src/usdf_endpoint.c' || echo './'`prov/usnic/src/usdf_endpoint.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usdf_endpoint.c -fPIC -DPIC -o prov/usnic/src/.libs/src_libfabric_la-usdf_endpoint.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./prov/usnic/src/usnic_direct/kcompat.h:54, from ./prov/usnic/src/usnic_direct/usd.h:48, from prov/usnic/src/usdf.h:48, from prov/usnic/src/usdf_endpoint.c:58: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/src_libfabric_la-usdf_domain.lo `test -f 'prov/usnic/src/usdf_domain.c' || echo './'`prov/usnic/src/usdf_domain.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usdf_domain.c -fPIC -DPIC -o prov/usnic/src/.libs/src_libfabric_la-usdf_domain.o In file included from ./include/ofi_util.h:61, from prov/usnic/src/usdf_domain.c:54: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from ./prov/usnic/src/usnic_direct/kcompat.h:54, from ./prov/usnic/src/usnic_direct/usd.h:48, from prov/usnic/src/usdf.h:48, from prov/usnic/src/usdf_domain.c:57: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/src_libfabric_la-usdf_mem.lo `test -f 'prov/usnic/src/usdf_mem.c' || echo './'`prov/usnic/src/usdf_mem.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usdf_mem.c -fPIC -DPIC -o prov/usnic/src/.libs/src_libfabric_la-usdf_mem.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./prov/usnic/src/usnic_direct/kcompat.h:54, from ./prov/usnic/src/usnic_direct/usd.h:48, from prov/usnic/src/usdf.h:48, from prov/usnic/src/usdf_mem.c:59: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/src_libfabric_la-usdf_av.lo `test -f 'prov/usnic/src/usdf_av.c' || echo './'`prov/usnic/src/usdf_av.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usdf_av.c -fPIC -DPIC -o prov/usnic/src/.libs/src_libfabric_la-usdf_av.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./prov/usnic/src/usnic_direct/kcompat.h:54, from ./prov/usnic/src/usnic_direct/usd.h:48, from prov/usnic/src/usdf_av.c:61: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ prov/usnic/src/usdf_av.c: In function 'usdf_am_insert_sync': prov/usnic/src/usdf_av.c:484:17: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fi_addr[i] = (fi_addr_t)dest; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/src_libfabric_la-usdf_dgram.lo `test -f 'prov/usnic/src/usdf_dgram.c' || echo './'`prov/usnic/src/usdf_dgram.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usdf_dgram.c -fPIC -DPIC -o prov/usnic/src/.libs/src_libfabric_la-usdf_dgram.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./prov/usnic/src/usnic_direct/kcompat.h:54, from ./prov/usnic/src/usnic_direct/usd.h:48, from prov/usnic/src/usdf_dgram.c:57: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ In file included from prov/usnic/src/usdf_dgram.c:58: ./prov/usnic/src/usnic_direct/usd_post.h: In function '_usd_post_send_one': ./prov/usnic/src/usnic_direct/usd_post.h:76:35: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] wr = vnic_cached_posted_index((dma_addr_t)packet, length, index); ^ prov/usnic/src/usdf_dgram.c: In function 'usdf_dgram_recvmsg': prov/usnic/src/usdf_dgram.c:201:25: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] rq_enet_desc_enc(desc, (dma_addr_t) hdr_ptr, ^ prov/usnic/src/usdf_dgram.c:211:26: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] rq_enet_desc_enc(desc, (dma_addr_t) iovp[i].iov_base, ^ prov/usnic/src/usdf_dgram.c: In function 'usdf_dgram_prefix_recvmsg': prov/usnic/src/usdf_dgram.c:555:25: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] rq_enet_desc_enc(desc, (dma_addr_t) hdr_ptr, ^ prov/usnic/src/usdf_dgram.c:567:26: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] rq_enet_desc_enc(desc, (dma_addr_t) iovp[i].iov_base, ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/src_libfabric_la-usdf_cq.lo `test -f 'prov/usnic/src/usdf_cq.c' || echo './'`prov/usnic/src/usdf_cq.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usdf_cq.c -fPIC -DPIC -o prov/usnic/src/.libs/src_libfabric_la-usdf_cq.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/usnic/src/usdf_cq.c:58: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from ./prov/usnic/src/usnic_direct/kcompat.h:54, from ./prov/usnic/src/usnic_direct/usd.h:48, from prov/usnic/src/usdf_cq.c:63: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/usnic_direct/src_libfabric_la-vnic_dev.lo `test -f 'prov/usnic/src/usnic_direct/vnic_dev.c' || echo './'`prov/usnic/src/usnic_direct/vnic_dev.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usnic_direct/vnic_dev.c -fPIC -DPIC -o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-vnic_dev.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/usnic/src/usnic_direct/kcompat.h:54, from prov/usnic/src/usnic_direct/vnic_dev.c:51: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/src_libfabric_la-usdf_progress.lo `test -f 'prov/usnic/src/usdf_progress.c' || echo './'`prov/usnic/src/usdf_progress.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usdf_progress.c -fPIC -DPIC -o prov/usnic/src/.libs/src_libfabric_la-usdf_progress.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./prov/usnic/src/usnic_direct/kcompat.h:54, from ./prov/usnic/src/usnic_direct/usd.h:48, from prov/usnic/src/usdf.h:48, from prov/usnic/src/usdf_progress.c:54: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/src_libfabric_la-usdf_eq.lo `test -f 'prov/usnic/src/usdf_eq.c' || echo './'`prov/usnic/src/usdf_eq.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usdf_eq.c -fPIC -DPIC -o prov/usnic/src/.libs/src_libfabric_la-usdf_eq.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./prov/usnic/src/usnic_direct/kcompat.h:54, from ./prov/usnic/src/usnic_direct/usd.h:48, from prov/usnic/src/usdf_eq.c:62: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ In file included from ./include/ofi_util.h:61, from prov/usnic/src/usdf_eq.c:65: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/src_libfabric_la-usdf_timer.lo `test -f 'prov/usnic/src/usdf_timer.c' || echo './'`prov/usnic/src/usdf_timer.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usdf_timer.c -fPIC -DPIC -o prov/usnic/src/.libs/src_libfabric_la-usdf_timer.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./prov/usnic/src/usnic_direct/kcompat.h:54, from ./prov/usnic/src/usnic_direct/usd.h:48, from prov/usnic/src/usdf.h:48, from prov/usnic/src/usdf_timer.c:49: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/src_libfabric_la-usdf_ep_dgram.lo `test -f 'prov/usnic/src/usdf_ep_dgram.c' || echo './'`prov/usnic/src/usdf_ep_dgram.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usdf_ep_dgram.c -fPIC -DPIC -o prov/usnic/src/.libs/src_libfabric_la-usdf_ep_dgram.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/usnic/src/usdf_ep_dgram.c:58: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from ./prov/usnic/src/usnic_direct/kcompat.h:54, from ./prov/usnic/src/usnic_direct/usd.h:48, from prov/usnic/src/usdf_ep_dgram.c:61: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/src_libfabric_la-usdf_poll.lo `test -f 'prov/usnic/src/usdf_poll.c' || echo './'`prov/usnic/src/usdf_poll.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usdf_poll.c -fPIC -DPIC -o prov/usnic/src/.libs/src_libfabric_la-usdf_poll.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/usnic/src/usdf_poll.c:39: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from ./prov/usnic/src/usnic_direct/kcompat.h:54, from ./prov/usnic/src/usnic_direct/usd.h:48, from prov/usnic/src/usdf.h:48, from prov/usnic/src/usdf_poll.c:41: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/src_libfabric_la-usdf_pep.lo `test -f 'prov/usnic/src/usdf_pep.c' || echo './'`prov/usnic/src/usdf_pep.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usdf_pep.c -fPIC -DPIC -o prov/usnic/src/.libs/src_libfabric_la-usdf_pep.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./prov/usnic/src/usnic_direct/kcompat.h:54, from ./prov/usnic/src/usnic_direct/usd.h:48, from prov/usnic/src/usdf_pep.c:64: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/src_libfabric_la-usdf_fabric.lo `test -f 'prov/usnic/src/usdf_fabric.c' || echo './'`prov/usnic/src/usdf_fabric.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usdf_fabric.c -fPIC -DPIC -o prov/usnic/src/.libs/src_libfabric_la-usdf_fabric.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./prov/usnic/src/usnic_direct/kcompat.h:54, from ./prov/usnic/src/usnic_direct/usd.h:48, from prov/usnic/src/usdf.h:48, from prov/usnic/src/usdf_fabric.c:68: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/src_libfabric_la-usdf_ext.lo `test -f 'prov/usnic/src/usdf_ext.c' || echo './'`prov/usnic/src/usdf_ext.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usdf_ext.c -fPIC -DPIC -o prov/usnic/src/.libs/src_libfabric_la-usdf_ext.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./prov/usnic/src/usnic_direct/kcompat.h:54, from ./prov/usnic/src/usnic_direct/usd.h:48, from prov/usnic/src/usdf.h:48, from prov/usnic/src/usdf_ext.c:35: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/usnic/src/src_libfabric_la-usdf_wait.lo `test -f 'prov/usnic/src/usdf_wait.c' || echo './'`prov/usnic/src/usdf_wait.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/usnic/src/usdf_wait.c -fPIC -DPIC -o prov/usnic/src/.libs/src_libfabric_la-usdf_wait.o In file included from ./include/ofi_util.h:61, from prov/usnic/src/usdf_wait.c:40: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from ./prov/usnic/src/usnic_direct/kcompat.h:54, from ./prov/usnic/src/usnic_direct/usd.h:48, from prov/usnic/src/usdf.h:48, from prov/usnic/src/usdf_wait.c:42: ./prov/usnic/src/usnic_direct/kcompat_priv.h: In function 'pci_alloc_consistent': ./prov/usnic/src/usnic_direct/kcompat_priv.h:66:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *dma_handle = (dma_addr_t) va; ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rxm/src/src_libfabric_la-rxm_attr.lo `test -f 'prov/rxm/src/rxm_attr.c' || echo './'`prov/rxm/src/rxm_attr.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rxm/src/rxm_attr.c -fPIC -DPIC -o prov/rxm/src/.libs/src_libfabric_la-rxm_attr.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/rxm/src/rxm.h:53, from prov/rxm/src/rxm_attr.c:34: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rxm/src/src_libfabric_la-rxm_fabric.lo `test -f 'prov/rxm/src/rxm_fabric.c' || echo './'`prov/rxm/src/rxm_fabric.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rxm/src/rxm_fabric.c -fPIC -DPIC -o prov/rxm/src/.libs/src_libfabric_la-rxm_fabric.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/rxm/src/rxm_fabric.c:36: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rxm/src/src_libfabric_la-rxm_eq.lo `test -f 'prov/rxm/src/rxm_eq.c' || echo './'`prov/rxm/src/rxm_eq.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rxm/src/rxm_eq.c -fPIC -DPIC -o prov/rxm/src/.libs/src_libfabric_la-rxm_eq.o In file included from ./include/ofi_util.h:61, from prov/rxm/src/rxm.h:53, from prov/rxm/src/rxm_eq.c:39: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rxm/src/src_libfabric_la-rxm_init.lo `test -f 'prov/rxm/src/rxm_init.c' || echo './'`prov/rxm/src/rxm_init.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rxm/src/rxm_init.c -fPIC -DPIC -o prov/rxm/src/.libs/src_libfabric_la-rxm_init.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/rxm/src/rxm.h:53, from prov/rxm/src/rxm_init.c:40: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/mrail/src/src_libfabric_la-mrail_attr.lo `test -f 'prov/mrail/src/mrail_attr.c' || echo './'`prov/mrail/src/mrail_attr.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/mrail/src/mrail_attr.c -fPIC -DPIC -o prov/mrail/src/.libs/src_libfabric_la-mrail_attr.o In file included from ./include/ofi_util.h:61, from prov/mrail/src/mrail.h:50, from prov/mrail/src/mrail_attr.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rxm/src/src_libfabric_la-rxm_tagged.lo `test -f 'prov/rxm/src/rxm_tagged.c' || echo './'`prov/rxm/src/rxm_tagged.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rxm/src/rxm_tagged.c -fPIC -DPIC -o prov/rxm/src/.libs/src_libfabric_la-rxm_tagged.o In file included from ./include/ofi_util.h:61, from prov/rxm/src/rxm_tagged.c:41: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/mrail/src/src_libfabric_la-mrail_fabric.lo `test -f 'prov/mrail/src/mrail_fabric.c' || echo './'`prov/mrail/src/mrail_fabric.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/mrail/src/mrail_fabric.c -fPIC -DPIC -o prov/mrail/src/.libs/src_libfabric_la-mrail_fabric.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/mrail/src/mrail.h:50, from prov/mrail/src/mrail_fabric.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rxm/src/src_libfabric_la-rxm_domain.lo `test -f 'prov/rxm/src/rxm_domain.c' || echo './'`prov/rxm/src/rxm_domain.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rxm/src/rxm_domain.c -fPIC -DPIC -o prov/rxm/src/.libs/src_libfabric_la-rxm_domain.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/rxm/src/rxm_domain.c:38: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ prov/rxm/src/rxm_domain.c: At top level: prov/rxm/src/rxm_domain.c:794:17: warning: initialization of 'void (*)(struct fid_ep *, uint64_t)' {aka 'void (*)(struct fid_ep *, long long unsigned int)'} from incompatible pointer type 'void (*)(struct fid_ep *, size_t)' {aka 'void (*)(struct fid_ep *, unsigned int)'} [-Wincompatible-pointer-types] .add_credits = rxm_no_add_credits, ^~~~~~~~~~~~~~~~~~ prov/rxm/src/rxm_domain.c:794:17: note: (near initialization for 'rxm_no_ops_flow_ctrl.add_credits') prov/rxm/src/rxm_domain.c:796:22: warning: initialization of 'void (*)(struct fid_domain *, ssize_t (*)(struct fid_ep *, uint64_t))' {aka 'void (*)(struct fid_domain *, int (*)(struct fid_ep *, long long unsigned int))'} from incompatible pointer type 'void (*)(struct fid_domain *, ssize_t (*)(struct fid_ep *, size_t))' {aka 'void (*)(struct fid_domain *, int (*)(struct fid_ep *, unsigned int))'} [-Wincompatible-pointer-types] .set_send_handler = rxm_no_credit_handler, ^~~~~~~~~~~~~~~~~~~~~ prov/rxm/src/rxm_domain.c:796:22: note: (near initialization for 'rxm_no_ops_flow_ctrl.set_send_handler') prov/rxm/src/rxm_domain.c: In function 'rxm_config_flow_ctrl': prov/rxm/src/rxm_domain.c:818:7: warning: passing argument 2 of 'domain->flow_ctrl_ops->set_send_handler' from incompatible pointer type [-Wincompatible-pointer-types] rxm_send_credits); ^~~~~~~~~~~~~~~~ prov/rxm/src/rxm_domain.c:818:7: note: expected 'ssize_t (*)(struct fid_ep *, uint64_t)' {aka 'int (*)(struct fid_ep *, long long unsigned int)'} but argument is of type 'ssize_t (*)(struct fid_ep *, size_t)' {aka 'int (*)(struct fid_ep *, unsigned int)'} make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rxm/src/src_libfabric_la-rxm_atomic.lo `test -f 'prov/rxm/src/rxm_atomic.c' || echo './'`prov/rxm/src/rxm_atomic.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rxm/src/rxm_atomic.c -fPIC -DPIC -o prov/rxm/src/.libs/src_libfabric_la-rxm_atomic.o In file included from ./include/ofi_util.h:61, from prov/rxm/src/rxm.h:53, from prov/rxm/src/rxm_atomic.c:37: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rxm/src/src_libfabric_la-rxm_rma.lo `test -f 'prov/rxm/src/rxm_rma.c' || echo './'`prov/rxm/src/rxm_rma.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rxm/src/rxm_rma.c -fPIC -DPIC -o prov/rxm/src/.libs/src_libfabric_la-rxm_rma.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/rxm/src/rxm.h:53, from prov/rxm/src/rxm_rma.c:34: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/mrail/src/src_libfabric_la-mrail_init.lo `test -f 'prov/mrail/src/mrail_init.c' || echo './'`prov/mrail/src/mrail_init.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/mrail/src/mrail_init.c -fPIC -DPIC -o prov/mrail/src/.libs/src_libfabric_la-mrail_init.o In file included from ./include/ofi_util.h:61, from prov/mrail/src/mrail.h:50, from prov/mrail/src/mrail_init.c:35: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/mrail/src/src_libfabric_la-mrail_domain.lo `test -f 'prov/mrail/src/mrail_domain.c' || echo './'`prov/mrail/src/mrail_domain.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/mrail/src/mrail_domain.c -fPIC -DPIC -o prov/mrail/src/.libs/src_libfabric_la-mrail_domain.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/mrail/src/mrail.h:50, from prov/mrail/src/mrail_domain.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ prov/mrail/src/mrail_domain.c: In function 'mrail_domain_map_raw': prov/mrail/src/mrail_domain.c:71:16: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] *(map->key) = (uint64_t)mr_map; ^ prov/mrail/src/mrail_domain.c: In function 'mrail_mr_reg': prov/mrail/src/mrail_domain.c:199:4: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] (uint64_t)buf : 0; ^ prov/mrail/src/mrail_domain.c: In function 'mrail_mr_regv': prov/mrail/src/mrail_domain.c:250:4: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] (uint64_t)iov[0].iov_base : 0; ^ prov/mrail/src/mrail_domain.c: In function 'mrail_mr_regattr': prov/mrail/src/mrail_domain.c:298:4: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] (uint64_t)attr->mr_iov[0].iov_base : 0; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rxm/src/src_libfabric_la-rxm_conn.lo `test -f 'prov/rxm/src/rxm_conn.c' || echo './'`prov/rxm/src/rxm_conn.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rxm/src/rxm_conn.c -fPIC -DPIC -o prov/rxm/src/.libs/src_libfabric_la-rxm_conn.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/rxm/src/rxm_conn.c:39: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rxm/src/src_libfabric_la-rxm_msg.lo `test -f 'prov/rxm/src/rxm_msg.c' || echo './'`prov/rxm/src/rxm_msg.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rxm/src/rxm_msg.c -fPIC -DPIC -o prov/rxm/src/.libs/src_libfabric_la-rxm_msg.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/rxm/src/rxm.h:53, from prov/rxm/src/rxm_msg.c:41: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/mrail/src/src_libfabric_la-mrail_av.lo `test -f 'prov/mrail/src/mrail_av.c' || echo './'`prov/mrail/src/mrail_av.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/mrail/src/mrail_av.c -fPIC -DPIC -o prov/mrail/src/.libs/src_libfabric_la-mrail_av.o In file included from ./include/ofi_util.h:61, from prov/mrail/src/mrail.h:50, from prov/mrail/src/mrail_av.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rxd/src/src_libfabric_la-rxd_attr.lo `test -f 'prov/rxd/src/rxd_attr.c' || echo './'`prov/rxd/src/rxd_attr.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rxd/src/rxd_attr.c -fPIC -DPIC -o prov/rxd/src/.libs/src_libfabric_la-rxd_attr.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/rxd/src/rxd.h:54, from prov/rxd/src/rxd_attr.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/mrail/src/src_libfabric_la-mrail_cq.lo `test -f 'prov/mrail/src/mrail_cq.c' || echo './'`prov/mrail/src/mrail_cq.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/mrail/src/mrail_cq.c -fPIC -DPIC -o prov/mrail/src/.libs/src_libfabric_la-mrail_cq.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/mrail/src/mrail.h:50, from prov/mrail/src/mrail_cq.c:35: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ prov/mrail/src/mrail_cq.c: In function 'mrail_cq_process_rndv_req': prov/mrail/src/mrail_cq.c:148:23: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] recv->rndv.context = (void *)rndv_hdr->context; ^ prov/mrail/src/mrail_cq.c: In function 'mrail_cq_process_rndv_ack': prov/mrail/src/mrail_cq.c:207:11: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] tx_buf = (struct mrail_tx_buf *)rndv_hdr->context; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rxd/src/src_libfabric_la-rxd_init.lo `test -f 'prov/rxd/src/rxd_init.c' || echo './'`prov/rxd/src/rxd_init.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rxd/src/rxd_init.c -fPIC -DPIC -o prov/rxd/src/.libs/src_libfabric_la-rxd_init.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/rxd/src/rxd.h:54, from prov/rxd/src/rxd_init.c:39: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rxd/src/src_libfabric_la-rxd_fabric.lo `test -f 'prov/rxd/src/rxd_fabric.c' || echo './'`prov/rxd/src/rxd_fabric.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rxd/src/rxd_fabric.c -fPIC -DPIC -o prov/rxd/src/.libs/src_libfabric_la-rxd_fabric.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/rxd/src/rxd.h:54, from prov/rxd/src/rxd_fabric.c:36: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/mrail/src/src_libfabric_la-mrail_rma.lo `test -f 'prov/mrail/src/mrail_rma.c' || echo './'`prov/mrail/src/mrail_rma.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/mrail/src/mrail_rma.c -fPIC -DPIC -o prov/mrail/src/.libs/src_libfabric_la-mrail_rma.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/mrail/src/mrail.h:50, from prov/mrail/src/mrail_rma.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ prov/mrail/src/mrail_rma.c: In function 'mrail_subreq_to_rail': prov/mrail/src/mrail_rma.c:55:12: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] mr_map = (struct mrail_addr_key *)subreq->rma_iov[i].key; ^ prov/mrail/src/mrail_rma.c: In function 'mrail_ep_inject_write': prov/mrail/src/mrail_rma.c:394:11: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] mr_map = (struct mrail_addr_key *) key; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rxm/src/src_libfabric_la-rxm_ep.lo `test -f 'prov/rxm/src/rxm_ep.c' || echo './'`prov/rxm/src/rxm_ep.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rxm/src/rxm_ep.c -fPIC -DPIC -o prov/rxm/src/.libs/src_libfabric_la-rxm_ep.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/rxm/src/rxm_ep.c:41: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rxd/src/src_libfabric_la-rxd_domain.lo `test -f 'prov/rxd/src/rxd_domain.c' || echo './'`prov/rxd/src/rxd_domain.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rxd/src/rxd_domain.c -fPIC -DPIC -o prov/rxd/src/.libs/src_libfabric_la-rxd_domain.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/rxd/src/rxd.h:54, from prov/rxd/src/rxd_domain.c:37: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/mrail/src/src_libfabric_la-mrail_ep.lo `test -f 'prov/mrail/src/mrail_ep.c' || echo './'`prov/mrail/src/mrail_ep.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/mrail/src/mrail_ep.c -fPIC -DPIC -o prov/mrail/src/.libs/src_libfabric_la-mrail_ep.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/mrail/src/mrail.h:50, from prov/mrail/src/mrail_ep.c:36: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ prov/mrail/src/mrail_ep.c: In function 'mrail_send_rndv_ack_blocking': prov/mrail/src/mrail_ep.c:366:29: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] tx_buf->rndv_hdr.context = (uint64_t)context; ^ prov/mrail/src/mrail_ep.c: In function 'mrail_prepare_rndv_req': prov/mrail/src/mrail_ep.c:418:29: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] tx_buf->rndv_hdr.context = (uint64_t)tx_buf; ^ prov/mrail/src/mrail_ep.c:466:39: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] tx_buf->rndv_req->rma_iov[i].addr = (uint64_t)iov[i].iov_base; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rxd/src/src_libfabric_la-rxd_cntr.lo `test -f 'prov/rxd/src/rxd_cntr.c' || echo './'`prov/rxd/src/rxd_cntr.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rxd/src/rxd_cntr.c -fPIC -DPIC -o prov/rxd/src/.libs/src_libfabric_la-rxd_cntr.o In file included from ./include/ofi_util.h:61, from prov/rxd/src/rxd_cntr.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rxd/src/src_libfabric_la-rxd_av.lo `test -f 'prov/rxd/src/rxd_av.c' || echo './'`prov/rxd/src/rxd_av.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rxd/src/rxd_av.c -fPIC -DPIC -o prov/rxd/src/.libs/src_libfabric_la-rxd_av.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/rxd/src/rxd.h:54, from prov/rxd/src/rxd_av.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ prov/rxd/src/rxd_av.c: In function 'rxd_av_insert_dg_addr': prov/rxd/src/rxd_av.c:178:51: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] ret = ofi_rbmap_insert(&av->rbmap, (void *)addr, (void *)(*rxd_addr), ^ prov/rxd/src/rxd_av.c: In function 'rxd_av_insert': prov/rxd/src/rxd_av.c:222:15: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] rxd_addr = (fi_addr_t) node->data; ^ prov/rxd/src/rxd_av.c: In function 'rxd_av_close': prov/rxd/src/rxd_av.c:368:14: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] rxd_addr = (fi_addr_t) node->data; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rxm/src/src_libfabric_la-rxm_cq.lo `test -f 'prov/rxm/src/rxm_cq.c' || echo './'`prov/rxm/src/rxm_cq.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rxm/src/rxm_cq.c -fPIC -DPIC -o prov/rxm/src/.libs/src_libfabric_la-rxm_cq.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/rxm/src/rxm.h:53, from prov/rxm/src/rxm_cq.c:45: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from prov/rxm/src/rxm_cq.c:41: prov/rxm/src/rxm_cq.c: In function 'rxm_handle_atomic_req': prov/rxm/src/rxm_cq.c:1199:5: warning: format '%ld' expects argument of type 'long int', but argument 7 has type 'ssize_t' {aka 'int'} [-Wformat=] "Atomic RMA MR verify error %ld\n", ret); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/rxm/src/rxm_cq.c:1198:4: note: in expansion of macro 'FI_WARN' FI_WARN(&rxm_prov, FI_LOG_EP_DATA, ^~~~~~~ prov/rxm/src/rxm_cq.c:1217:19: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] void *dst_buf = (void *) req_hdr->rma_ioc[i].addr; ^ In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from prov/rxm/src/rxm_cq.c:41: prov/rxm/src/rxm_cq.c:1226:6: warning: format '%ld' expects argument of type 'long int', but argument 7 has type 'ssize_t' {aka 'int'} [-Wformat=] "Atomic operation failed %ld\n", ret); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/rxm/src/rxm_cq.c:1225:5: note: in expansion of macro 'FI_WARN' FI_WARN(&rxm_prov, FI_LOG_EP_DATA, ^~~~~~~ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/shm/src/src_libfabric_la-smr_attr.lo `test -f 'prov/shm/src/smr_attr.c' || echo './'`prov/shm/src/smr_attr.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/shm/src/smr_attr.c -fPIC -DPIC -o prov/shm/src/.libs/src_libfabric_la-smr_attr.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_shm.h:44, from prov/shm/src/smr.h:58, from prov/shm/src/smr_attr.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from prov/shm/src/smr_attr.c:33: prov/shm/src/smr.h: In function 'smr_mmap_name': prov/shm/src/smr.h:302:52: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] return snprintf(shm_name, SMR_NAME_MAX - 1, "%s_%ld", ~~^ %lld ep_name, msg_id); ~~~~~~ prov/shm/src/smr.h: In function 'smr_cma_loop': prov/shm/src/smr.h:412:26: warning: passing argument 2 of 'ofi_consume_iov' from incompatible pointer type [-Wincompatible-pointer-types] ofi_consume_iov(local, &local_cnt, (size_t) ret); ^~~~~~~~~~ In file included from prov/shm/src/smr.h:65, from prov/shm/src/smr_attr.c:33: ./include/ofi_iov.h:204:51: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'long unsigned int *' void ofi_consume_iov(struct iovec *iovec, size_t *iovec_count, size_t offset); ~~~~~~~~^~~~~~~~~~~ In file included from prov/shm/src/smr_attr.c:33: prov/shm/src/smr.h:413:27: warning: passing argument 2 of 'ofi_consume_iov' from incompatible pointer type [-Wincompatible-pointer-types] ofi_consume_iov(remote, &remote_cnt, (size_t) ret); ^~~~~~~~~~~ In file included from prov/shm/src/smr.h:65, from prov/shm/src/smr_attr.c:33: ./include/ofi_iov.h:204:51: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'long unsigned int *' void ofi_consume_iov(struct iovec *iovec, size_t *iovec_count, size_t offset); ~~~~~~~~^~~~~~~~~~~ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rxd/src/src_libfabric_la-rxd_tagged.lo `test -f 'prov/rxd/src/rxd_tagged.c' || echo './'`prov/rxd/src/rxd_tagged.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rxd/src/rxd_tagged.c -fPIC -DPIC -o prov/rxd/src/.libs/src_libfabric_la-rxd_tagged.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/rxd/src/rxd_tagged.c:35: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rxd/src/src_libfabric_la-rxd_msg.lo `test -f 'prov/rxd/src/rxd_msg.c' || echo './'`prov/rxd/src/rxd_msg.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rxd/src/rxd_msg.c -fPIC -DPIC -o prov/rxd/src/.libs/src_libfabric_la-rxd_msg.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/rxd/src/rxd_msg.c:35: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/shm/src/src_libfabric_la-smr_cq.lo `test -f 'prov/shm/src/smr_cq.c' || echo './'`prov/shm/src/smr_cq.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/shm/src/smr_cq.c -fPIC -DPIC -o prov/shm/src/.libs/src_libfabric_la-smr_cq.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_shm.h:44, from prov/shm/src/smr.h:58, from prov/shm/src/smr_cq.c:36: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from prov/shm/src/smr_cq.c:36: prov/shm/src/smr.h: In function 'smr_mmap_name': prov/shm/src/smr.h:302:52: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] return snprintf(shm_name, SMR_NAME_MAX - 1, "%s_%ld", ~~^ %lld ep_name, msg_id); ~~~~~~ prov/shm/src/smr.h: In function 'smr_cma_loop': prov/shm/src/smr.h:412:26: warning: passing argument 2 of 'ofi_consume_iov' from incompatible pointer type [-Wincompatible-pointer-types] ofi_consume_iov(local, &local_cnt, (size_t) ret); ^~~~~~~~~~ In file included from prov/shm/src/smr.h:65, from prov/shm/src/smr_cq.c:36: ./include/ofi_iov.h:204:51: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'long unsigned int *' void ofi_consume_iov(struct iovec *iovec, size_t *iovec_count, size_t offset); ~~~~~~~~^~~~~~~~~~~ In file included from prov/shm/src/smr_cq.c:36: prov/shm/src/smr.h:413:27: warning: passing argument 2 of 'ofi_consume_iov' from incompatible pointer type [-Wincompatible-pointer-types] ofi_consume_iov(remote, &remote_cnt, (size_t) ret); ^~~~~~~~~~~ In file included from prov/shm/src/smr.h:65, from prov/shm/src/smr_cq.c:36: ./include/ofi_iov.h:204:51: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'long unsigned int *' void ofi_consume_iov(struct iovec *iovec, size_t *iovec_count, size_t offset); ~~~~~~~~^~~~~~~~~~~ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rxd/src/src_libfabric_la-rxd_rma.lo `test -f 'prov/rxd/src/rxd_rma.c' || echo './'`prov/rxd/src/rxd_rma.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rxd/src/rxd_rma.c -fPIC -DPIC -o prov/rxd/src/.libs/src_libfabric_la-rxd_rma.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/rxd/src/rxd_rma.c:35: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/shm/src/src_libfabric_la-smr_domain.lo `test -f 'prov/shm/src/smr_domain.c' || echo './'`prov/shm/src/smr_domain.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/shm/src/smr_domain.c -fPIC -DPIC -o prov/shm/src/.libs/src_libfabric_la-smr_domain.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_shm.h:44, from prov/shm/src/smr.h:58, from prov/shm/src/smr_domain.c:36: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from prov/shm/src/smr_domain.c:36: prov/shm/src/smr.h: In function 'smr_mmap_name': prov/shm/src/smr.h:302:52: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] return snprintf(shm_name, SMR_NAME_MAX - 1, "%s_%ld", ~~^ %lld ep_name, msg_id); ~~~~~~ prov/shm/src/smr.h: In function 'smr_cma_loop': prov/shm/src/smr.h:412:26: warning: passing argument 2 of 'ofi_consume_iov' from incompatible pointer type [-Wincompatible-pointer-types] ofi_consume_iov(local, &local_cnt, (size_t) ret); ^~~~~~~~~~ In file included from prov/shm/src/smr.h:65, from prov/shm/src/smr_domain.c:36: ./include/ofi_iov.h:204:51: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'long unsigned int *' void ofi_consume_iov(struct iovec *iovec, size_t *iovec_count, size_t offset); ~~~~~~~~^~~~~~~~~~~ In file included from prov/shm/src/smr_domain.c:36: prov/shm/src/smr.h:413:27: warning: passing argument 2 of 'ofi_consume_iov' from incompatible pointer type [-Wincompatible-pointer-types] ofi_consume_iov(remote, &remote_cnt, (size_t) ret); ^~~~~~~~~~~ In file included from prov/shm/src/smr.h:65, from prov/shm/src/smr_domain.c:36: ./include/ofi_iov.h:204:51: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'long unsigned int *' void ofi_consume_iov(struct iovec *iovec, size_t *iovec_count, size_t offset); ~~~~~~~~^~~~~~~~~~~ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rxd/src/src_libfabric_la-rxd_atomic.lo `test -f 'prov/rxd/src/rxd_atomic.c' || echo './'`prov/rxd/src/rxd_atomic.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rxd/src/rxd_atomic.c -fPIC -DPIC -o prov/rxd/src/.libs/src_libfabric_la-rxd_atomic.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/rxd/src/rxd.h:54, from prov/rxd/src/rxd_atomic.c:38: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/shm/src/src_libfabric_la-smr_comp.lo `test -f 'prov/shm/src/smr_comp.c' || echo './'`prov/shm/src/smr_comp.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/shm/src/smr_comp.c -fPIC -DPIC -o prov/shm/src/.libs/src_libfabric_la-smr_comp.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_shm.h:44, from prov/shm/src/smr.h:58, from prov/shm/src/smr_comp.c:38: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from prov/shm/src/smr_comp.c:38: prov/shm/src/smr.h: In function 'smr_mmap_name': prov/shm/src/smr.h:302:52: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] return snprintf(shm_name, SMR_NAME_MAX - 1, "%s_%ld", ~~^ %lld ep_name, msg_id); ~~~~~~ prov/shm/src/smr.h: In function 'smr_cma_loop': prov/shm/src/smr.h:412:26: warning: passing argument 2 of 'ofi_consume_iov' from incompatible pointer type [-Wincompatible-pointer-types] ofi_consume_iov(local, &local_cnt, (size_t) ret); ^~~~~~~~~~ In file included from prov/shm/src/smr_comp.c:37: ./include/ofi_iov.h:204:51: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'long unsigned int *' void ofi_consume_iov(struct iovec *iovec, size_t *iovec_count, size_t offset); ~~~~~~~~^~~~~~~~~~~ In file included from prov/shm/src/smr_comp.c:38: prov/shm/src/smr.h:413:27: warning: passing argument 2 of 'ofi_consume_iov' from incompatible pointer type [-Wincompatible-pointer-types] ofi_consume_iov(remote, &remote_cnt, (size_t) ret); ^~~~~~~~~~~ In file included from prov/shm/src/smr_comp.c:37: ./include/ofi_iov.h:204:51: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'long unsigned int *' void ofi_consume_iov(struct iovec *iovec, size_t *iovec_count, size_t offset); ~~~~~~~~^~~~~~~~~~~ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/shm/src/src_libfabric_la-smr_cntr.lo `test -f 'prov/shm/src/smr_cntr.c' || echo './'`prov/shm/src/smr_cntr.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/shm/src/smr_cntr.c -fPIC -DPIC -o prov/shm/src/.libs/src_libfabric_la-smr_cntr.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_shm.h:44, from prov/shm/src/smr.h:58, from prov/shm/src/smr_cntr.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from prov/shm/src/smr_cntr.c:33: prov/shm/src/smr.h: In function 'smr_mmap_name': prov/shm/src/smr.h:302:52: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] return snprintf(shm_name, SMR_NAME_MAX - 1, "%s_%ld", ~~^ %lld ep_name, msg_id); ~~~~~~ prov/shm/src/smr.h: In function 'smr_cma_loop': prov/shm/src/smr.h:412:26: warning: passing argument 2 of 'ofi_consume_iov' from incompatible pointer type [-Wincompatible-pointer-types] ofi_consume_iov(local, &local_cnt, (size_t) ret); ^~~~~~~~~~ In file included from prov/shm/src/smr.h:65, from prov/shm/src/smr_cntr.c:33: ./include/ofi_iov.h:204:51: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'long unsigned int *' void ofi_consume_iov(struct iovec *iovec, size_t *iovec_count, size_t offset); ~~~~~~~~^~~~~~~~~~~ In file included from prov/shm/src/smr_cntr.c:33: prov/shm/src/smr.h:413:27: warning: passing argument 2 of 'ofi_consume_iov' from incompatible pointer type [-Wincompatible-pointer-types] ofi_consume_iov(remote, &remote_cnt, (size_t) ret); ^~~~~~~~~~~ In file included from prov/shm/src/smr.h:65, from prov/shm/src/smr_cntr.c:33: ./include/ofi_iov.h:204:51: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'long unsigned int *' void ofi_consume_iov(struct iovec *iovec, size_t *iovec_count, size_t offset); ~~~~~~~~^~~~~~~~~~~ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rxd/src/src_libfabric_la-rxd_ep.lo `test -f 'prov/rxd/src/rxd_ep.c' || echo './'`prov/rxd/src/rxd_ep.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rxd/src/rxd_ep.c -fPIC -DPIC -o prov/rxd/src/.libs/src_libfabric_la-rxd_ep.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/rxd/src/rxd_ep.c:35: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rxd/src/src_libfabric_la-rxd_cq.lo `test -f 'prov/rxd/src/rxd_cq.c' || echo './'`prov/rxd/src/rxd_cq.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rxd/src/rxd_cq.c -fPIC -DPIC -o prov/rxd/src/.libs/src_libfabric_la-rxd_cq.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/rxd/src/rxd.h:54, from prov/rxd/src/rxd_cq.c:38: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ prov/rxd/src/rxd_cq.c: In function 'rxd_handle_rts': prov/rxd/src/rxd_cq.c:435:14: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] rxd_addr = (fi_addr_t) node->data; ^ prov/rxd/src/rxd_cq.c: In function 'rxd_verify_iov': prov/rxd/src/rxd_cq.c:561:21: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] iov[i].iov_base = (void *) rma[i].addr; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/shm/src/src_libfabric_la-smr_fabric.lo `test -f 'prov/shm/src/smr_fabric.c' || echo './'`prov/shm/src/smr_fabric.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/shm/src/smr_fabric.c -fPIC -DPIC -o prov/shm/src/.libs/src_libfabric_la-smr_fabric.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_shm.h:44, from prov/shm/src/smr.h:58, from prov/shm/src/smr_fabric.c:36: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from prov/shm/src/smr_fabric.c:36: prov/shm/src/smr.h: In function 'smr_mmap_name': prov/shm/src/smr.h:302:52: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] return snprintf(shm_name, SMR_NAME_MAX - 1, "%s_%ld", ~~^ %lld ep_name, msg_id); ~~~~~~ prov/shm/src/smr.h: In function 'smr_cma_loop': prov/shm/src/smr.h:412:26: warning: passing argument 2 of 'ofi_consume_iov' from incompatible pointer type [-Wincompatible-pointer-types] ofi_consume_iov(local, &local_cnt, (size_t) ret); ^~~~~~~~~~ In file included from prov/shm/src/smr.h:65, from prov/shm/src/smr_fabric.c:36: ./include/ofi_iov.h:204:51: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'long unsigned int *' void ofi_consume_iov(struct iovec *iovec, size_t *iovec_count, size_t offset); ~~~~~~~~^~~~~~~~~~~ In file included from prov/shm/src/smr_fabric.c:36: prov/shm/src/smr.h:413:27: warning: passing argument 2 of 'ofi_consume_iov' from incompatible pointer type [-Wincompatible-pointer-types] ofi_consume_iov(remote, &remote_cnt, (size_t) ret); ^~~~~~~~~~~ In file included from prov/shm/src/smr.h:65, from prov/shm/src/smr_fabric.c:36: ./include/ofi_iov.h:204:51: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'long unsigned int *' void ofi_consume_iov(struct iovec *iovec, size_t *iovec_count, size_t offset); ~~~~~~~~^~~~~~~~~~~ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/shm/src/src_libfabric_la-smr_init.lo `test -f 'prov/shm/src/smr_init.c' || echo './'`prov/shm/src/smr_init.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/shm/src/smr_init.c -fPIC -DPIC -o prov/shm/src/.libs/src_libfabric_la-smr_init.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_shm.h:44, from prov/shm/src/smr.h:58, from prov/shm/src/smr_init.c:36: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from prov/shm/src/smr_init.c:36: prov/shm/src/smr.h: In function 'smr_mmap_name': prov/shm/src/smr.h:302:52: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] return snprintf(shm_name, SMR_NAME_MAX - 1, "%s_%ld", ~~^ %lld ep_name, msg_id); ~~~~~~ prov/shm/src/smr.h: In function 'smr_cma_loop': prov/shm/src/smr.h:412:26: warning: passing argument 2 of 'ofi_consume_iov' from incompatible pointer type [-Wincompatible-pointer-types] ofi_consume_iov(local, &local_cnt, (size_t) ret); ^~~~~~~~~~ In file included from prov/shm/src/smr.h:65, from prov/shm/src/smr_init.c:36: ./include/ofi_iov.h:204:51: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'long unsigned int *' void ofi_consume_iov(struct iovec *iovec, size_t *iovec_count, size_t offset); ~~~~~~~~^~~~~~~~~~~ In file included from prov/shm/src/smr_init.c:36: prov/shm/src/smr.h:413:27: warning: passing argument 2 of 'ofi_consume_iov' from incompatible pointer type [-Wincompatible-pointer-types] ofi_consume_iov(remote, &remote_cnt, (size_t) ret); ^~~~~~~~~~~ In file included from prov/shm/src/smr.h:65, from prov/shm/src/smr_init.c:36: ./include/ofi_iov.h:204:51: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'long unsigned int *' void ofi_consume_iov(struct iovec *iovec, size_t *iovec_count, size_t offset); ~~~~~~~~^~~~~~~~~~~ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/shm/src/src_libfabric_la-smr_rma.lo `test -f 'prov/shm/src/smr_rma.c' || echo './'`prov/shm/src/smr_rma.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/shm/src/smr_rma.c -fPIC -DPIC -o prov/shm/src/.libs/src_libfabric_la-smr_rma.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_shm.h:44, from prov/shm/src/smr.h:58, from prov/shm/src/smr_rma.c:39: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from prov/shm/src/smr_rma.c:39: prov/shm/src/smr.h: In function 'smr_mmap_name': prov/shm/src/smr.h:302:52: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] return snprintf(shm_name, SMR_NAME_MAX - 1, "%s_%ld", ~~^ %lld ep_name, msg_id); ~~~~~~ prov/shm/src/smr.h: In function 'smr_cma_loop': prov/shm/src/smr.h:412:26: warning: passing argument 2 of 'ofi_consume_iov' from incompatible pointer type [-Wincompatible-pointer-types] ofi_consume_iov(local, &local_cnt, (size_t) ret); ^~~~~~~~~~ In file included from prov/shm/src/smr_rma.c:38: ./include/ofi_iov.h:204:51: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'long unsigned int *' void ofi_consume_iov(struct iovec *iovec, size_t *iovec_count, size_t offset); ~~~~~~~~^~~~~~~~~~~ In file included from prov/shm/src/smr_rma.c:39: prov/shm/src/smr.h:413:27: warning: passing argument 2 of 'ofi_consume_iov' from incompatible pointer type [-Wincompatible-pointer-types] ofi_consume_iov(remote, &remote_cnt, (size_t) ret); ^~~~~~~~~~~ In file included from prov/shm/src/smr_rma.c:38: ./include/ofi_iov.h:204:51: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'long unsigned int *' void ofi_consume_iov(struct iovec *iovec, size_t *iovec_count, size_t offset); ~~~~~~~~^~~~~~~~~~~ prov/shm/src/smr_rma.c: In function 'smr_rma_fast': prov/shm/src/smr_rma.c:76:27: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] rma_iovec[i].iov_base = (void *) rma_iov[i].addr; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/shm/src/src_libfabric_la-smr_msg.lo `test -f 'prov/shm/src/smr_msg.c' || echo './'`prov/shm/src/smr_msg.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/shm/src/smr_msg.c -fPIC -DPIC -o prov/shm/src/.libs/src_libfabric_la-smr_msg.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_shm.h:44, from prov/shm/src/smr.h:58, from prov/shm/src/smr_msg.c:39: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from prov/shm/src/smr_msg.c:39: prov/shm/src/smr.h: In function 'smr_mmap_name': prov/shm/src/smr.h:302:52: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] return snprintf(shm_name, SMR_NAME_MAX - 1, "%s_%ld", ~~^ %lld ep_name, msg_id); ~~~~~~ prov/shm/src/smr.h: In function 'smr_cma_loop': prov/shm/src/smr.h:412:26: warning: passing argument 2 of 'ofi_consume_iov' from incompatible pointer type [-Wincompatible-pointer-types] ofi_consume_iov(local, &local_cnt, (size_t) ret); ^~~~~~~~~~ In file included from prov/shm/src/smr_msg.c:38: ./include/ofi_iov.h:204:51: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'long unsigned int *' void ofi_consume_iov(struct iovec *iovec, size_t *iovec_count, size_t offset); ~~~~~~~~^~~~~~~~~~~ In file included from prov/shm/src/smr_msg.c:39: prov/shm/src/smr.h:413:27: warning: passing argument 2 of 'ofi_consume_iov' from incompatible pointer type [-Wincompatible-pointer-types] ofi_consume_iov(remote, &remote_cnt, (size_t) ret); ^~~~~~~~~~~ In file included from prov/shm/src/smr_msg.c:38: ./include/ofi_iov.h:204:51: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'long unsigned int *' void ofi_consume_iov(struct iovec *iovec, size_t *iovec_count, size_t offset); ~~~~~~~~^~~~~~~~~~~ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/shm/src/src_libfabric_la-smr_dsa.lo `test -f 'prov/shm/src/smr_dsa.c' || echo './'`prov/shm/src/smr_dsa.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/shm/src/smr_dsa.c -fPIC -DPIC -o prov/shm/src/.libs/src_libfabric_la-smr_dsa.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_shm.h:44, from prov/shm/src/smr.h:58, from prov/shm/src/smr_dsa.c:37: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from prov/shm/src/smr_dsa.c:37: prov/shm/src/smr.h: In function 'smr_mmap_name': prov/shm/src/smr.h:302:52: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] return snprintf(shm_name, SMR_NAME_MAX - 1, "%s_%ld", ~~^ %lld ep_name, msg_id); ~~~~~~ prov/shm/src/smr.h: In function 'smr_cma_loop': prov/shm/src/smr.h:412:26: warning: passing argument 2 of 'ofi_consume_iov' from incompatible pointer type [-Wincompatible-pointer-types] ofi_consume_iov(local, &local_cnt, (size_t) ret); ^~~~~~~~~~ In file included from prov/shm/src/smr.h:65, from prov/shm/src/smr_dsa.c:37: ./include/ofi_iov.h:204:51: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'long unsigned int *' void ofi_consume_iov(struct iovec *iovec, size_t *iovec_count, size_t offset); ~~~~~~~~^~~~~~~~~~~ In file included from prov/shm/src/smr_dsa.c:37: prov/shm/src/smr.h:413:27: warning: passing argument 2 of 'ofi_consume_iov' from incompatible pointer type [-Wincompatible-pointer-types] ofi_consume_iov(remote, &remote_cnt, (size_t) ret); ^~~~~~~~~~~ In file included from prov/shm/src/smr.h:65, from prov/shm/src/smr_dsa.c:37: ./include/ofi_iov.h:204:51: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'long unsigned int *' void ofi_consume_iov(struct iovec *iovec, size_t *iovec_count, size_t offset); ~~~~~~~~^~~~~~~~~~~ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sm2/src/src_libfabric_la-sm2_cq.lo `test -f 'prov/sm2/src/sm2_cq.c' || echo './'`prov/sm2/src/sm2_cq.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sm2/src/sm2_cq.c -fPIC -DPIC -o prov/sm2/src/.libs/src_libfabric_la-sm2_cq.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/sm2/src/sm2_common.h:44, from prov/sm2/src/sm2.h:33, from prov/sm2/src/sm2_cq.c:36: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from prov/sm2/src/sm2_cq.c:36: prov/sm2/src/sm2.h: In function 'sm2_mmap_name': prov/sm2/src/sm2.h:316:52: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] return snprintf(shm_name, SM2_NAME_MAX - 1, "%s_%ld", ~~^ %lld ep_name, msg_id); ~~~~~~ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sm2/src/src_libfabric_la-sm2_attr.lo `test -f 'prov/sm2/src/sm2_attr.c' || echo './'`prov/sm2/src/sm2_attr.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sm2/src/sm2_attr.c -fPIC -DPIC -o prov/sm2/src/.libs/src_libfabric_la-sm2_attr.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/sm2/src/sm2_common.h:44, from prov/sm2/src/sm2.h:33, from prov/sm2/src/sm2_attr.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from prov/sm2/src/sm2_attr.c:33: prov/sm2/src/sm2.h: In function 'sm2_mmap_name': prov/sm2/src/sm2.h:316:52: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] return snprintf(shm_name, SM2_NAME_MAX - 1, "%s_%ld", ~~^ %lld ep_name, msg_id); ~~~~~~ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/shm/src/src_libfabric_la-smr_atomic.lo `test -f 'prov/shm/src/smr_atomic.c' || echo './'`prov/shm/src/smr_atomic.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/shm/src/smr_atomic.c -fPIC -DPIC -o prov/shm/src/.libs/src_libfabric_la-smr_atomic.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_shm.h:44, from prov/shm/src/smr.h:58, from prov/shm/src/smr_atomic.c:38: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from prov/shm/src/smr_atomic.c:38: prov/shm/src/smr.h: In function 'smr_mmap_name': prov/shm/src/smr.h:302:52: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] return snprintf(shm_name, SMR_NAME_MAX - 1, "%s_%ld", ~~^ %lld ep_name, msg_id); ~~~~~~ prov/shm/src/smr.h: In function 'smr_cma_loop': prov/shm/src/smr.h:412:26: warning: passing argument 2 of 'ofi_consume_iov' from incompatible pointer type [-Wincompatible-pointer-types] ofi_consume_iov(local, &local_cnt, (size_t) ret); ^~~~~~~~~~ In file included from prov/shm/src/smr_atomic.c:37: ./include/ofi_iov.h:204:51: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'long unsigned int *' void ofi_consume_iov(struct iovec *iovec, size_t *iovec_count, size_t offset); ~~~~~~~~^~~~~~~~~~~ In file included from prov/shm/src/smr_atomic.c:38: prov/shm/src/smr.h:413:27: warning: passing argument 2 of 'ofi_consume_iov' from incompatible pointer type [-Wincompatible-pointer-types] ofi_consume_iov(remote, &remote_cnt, (size_t) ret); ^~~~~~~~~~~ In file included from prov/shm/src/smr_atomic.c:37: ./include/ofi_iov.h:204:51: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'long unsigned int *' void ofi_consume_iov(struct iovec *iovec, size_t *iovec_count, size_t offset); ~~~~~~~~^~~~~~~~~~~ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/shm/src/src_libfabric_la-smr_av.lo `test -f 'prov/shm/src/smr_av.c' || echo './'`prov/shm/src/smr_av.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/shm/src/smr_av.c -fPIC -DPIC -o prov/shm/src/.libs/src_libfabric_la-smr_av.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_shm.h:44, from prov/shm/src/smr.h:58, from prov/shm/src/smr_av.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from prov/shm/src/smr_av.c:33: prov/shm/src/smr.h: In function 'smr_mmap_name': prov/shm/src/smr.h:302:52: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] return snprintf(shm_name, SMR_NAME_MAX - 1, "%s_%ld", ~~^ %lld ep_name, msg_id); ~~~~~~ prov/shm/src/smr.h: In function 'smr_cma_loop': prov/shm/src/smr.h:412:26: warning: passing argument 2 of 'ofi_consume_iov' from incompatible pointer type [-Wincompatible-pointer-types] ofi_consume_iov(local, &local_cnt, (size_t) ret); ^~~~~~~~~~ In file included from prov/shm/src/smr.h:65, from prov/shm/src/smr_av.c:33: ./include/ofi_iov.h:204:51: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'long unsigned int *' void ofi_consume_iov(struct iovec *iovec, size_t *iovec_count, size_t offset); ~~~~~~~~^~~~~~~~~~~ In file included from prov/shm/src/smr_av.c:33: prov/shm/src/smr.h:413:27: warning: passing argument 2 of 'ofi_consume_iov' from incompatible pointer type [-Wincompatible-pointer-types] ofi_consume_iov(remote, &remote_cnt, (size_t) ret); ^~~~~~~~~~~ In file included from prov/shm/src/smr.h:65, from prov/shm/src/smr_av.c:33: ./include/ofi_iov.h:204:51: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'long unsigned int *' void ofi_consume_iov(struct iovec *iovec, size_t *iovec_count, size_t offset); ~~~~~~~~^~~~~~~~~~~ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sm2/src/src_libfabric_la-sm2_domain.lo `test -f 'prov/sm2/src/sm2_domain.c' || echo './'`prov/sm2/src/sm2_domain.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sm2/src/sm2_domain.c -fPIC -DPIC -o prov/sm2/src/.libs/src_libfabric_la-sm2_domain.o In file included from prov/sm2/src/sm2_common.h:44, from prov/sm2/src/sm2.h:33, from prov/sm2/src/sm2_domain.c:36: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from prov/sm2/src/sm2_domain.c:36: prov/sm2/src/sm2.h: In function 'sm2_mmap_name': prov/sm2/src/sm2.h:316:52: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] return snprintf(shm_name, SM2_NAME_MAX - 1, "%s_%ld", ~~^ %lld ep_name, msg_id); ~~~~~~ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sm2/src/src_libfabric_la-sm2_comp.lo `test -f 'prov/sm2/src/sm2_comp.c' || echo './'`prov/sm2/src/sm2_comp.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sm2/src/sm2_comp.c -fPIC -DPIC -o prov/sm2/src/.libs/src_libfabric_la-sm2_comp.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/sm2/src/sm2_common.h:44, from prov/sm2/src/sm2.h:33, from prov/sm2/src/sm2_comp.c:38: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from prov/sm2/src/sm2_comp.c:38: prov/sm2/src/sm2.h: In function 'sm2_mmap_name': prov/sm2/src/sm2.h:316:52: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] return snprintf(shm_name, SM2_NAME_MAX - 1, "%s_%ld", ~~^ %lld ep_name, msg_id); ~~~~~~ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sm2/src/src_libfabric_la-sm2_cntr.lo `test -f 'prov/sm2/src/sm2_cntr.c' || echo './'`prov/sm2/src/sm2_cntr.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sm2/src/sm2_cntr.c -fPIC -DPIC -o prov/sm2/src/.libs/src_libfabric_la-sm2_cntr.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/sm2/src/sm2_common.h:44, from prov/sm2/src/sm2.h:33, from prov/sm2/src/sm2_cntr.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from prov/sm2/src/sm2_cntr.c:33: prov/sm2/src/sm2.h: In function 'sm2_mmap_name': prov/sm2/src/sm2.h:316:52: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] return snprintf(shm_name, SM2_NAME_MAX - 1, "%s_%ld", ~~^ %lld ep_name, msg_id); ~~~~~~ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/shm/src/src_libfabric_la-smr_progress.lo `test -f 'prov/shm/src/smr_progress.c' || echo './'`prov/shm/src/smr_progress.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/shm/src/smr_progress.c -fPIC -DPIC -o prov/shm/src/.libs/src_libfabric_la-smr_progress.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_shm.h:44, from prov/shm/src/smr.h:58, from prov/shm/src/smr_progress.c:41: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from prov/shm/src/smr_progress.c:41: prov/shm/src/smr.h: In function 'smr_mmap_name': prov/shm/src/smr.h:302:52: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] return snprintf(shm_name, SMR_NAME_MAX - 1, "%s_%ld", ~~^ %lld ep_name, msg_id); ~~~~~~ prov/shm/src/smr.h: In function 'smr_cma_loop': prov/shm/src/smr.h:412:26: warning: passing argument 2 of 'ofi_consume_iov' from incompatible pointer type [-Wincompatible-pointer-types] ofi_consume_iov(local, &local_cnt, (size_t) ret); ^~~~~~~~~~ In file included from prov/shm/src/smr_progress.c:37: ./include/ofi_iov.h:204:51: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'long unsigned int *' void ofi_consume_iov(struct iovec *iovec, size_t *iovec_count, size_t offset); ~~~~~~~~^~~~~~~~~~~ In file included from prov/shm/src/smr_progress.c:41: prov/shm/src/smr.h:413:27: warning: passing argument 2 of 'ofi_consume_iov' from incompatible pointer type [-Wincompatible-pointer-types] ofi_consume_iov(remote, &remote_cnt, (size_t) ret); ^~~~~~~~~~~ In file included from prov/shm/src/smr_progress.c:37: ./include/ofi_iov.h:204:51: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'long unsigned int *' void ofi_consume_iov(struct iovec *iovec, size_t *iovec_count, size_t offset); ~~~~~~~~^~~~~~~~~~~ prov/shm/src/smr_progress.c: In function 'smr_progress_resp': prov/shm/src/smr_progress.c:223:13: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] pending = (struct smr_tx_entry *) resp->msg_id; ^ prov/shm/src/smr_progress.c: In function 'smr_progress_cmd_rma': prov/shm/src/smr_progress.c:933:29: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] iov[iov_count].iov_base = (void *) rma_cmd->rma.rma_iov[iov_count].addr; ^ prov/shm/src/smr_progress.c:985:29: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] ret = smr_complete_rx(ep, (void *) cmd->msg.hdr.msg_id, ^ prov/shm/src/smr_progress.c: In function 'smr_progress_cmd_atomic': prov/shm/src/smr_progress.c:1025:25: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] ioc[ioc_count].addr = (void *) rma_cmd->rma.rma_ioc[ioc_count].addr; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sm2/src/src_libfabric_la-sm2_progress.lo `test -f 'prov/sm2/src/sm2_progress.c' || echo './'`prov/sm2/src/sm2_progress.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sm2/src/sm2_progress.c -fPIC -DPIC -o prov/sm2/src/.libs/src_libfabric_la-sm2_progress.o In file included from prov/sm2/src/sm2_common.h:44, from prov/sm2/src/sm2.h:33, from prov/sm2/src/sm2_progress.c:41: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from prov/sm2/src/sm2_progress.c:41: prov/sm2/src/sm2.h: In function 'sm2_mmap_name': prov/sm2/src/sm2.h:316:52: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] return snprintf(shm_name, SM2_NAME_MAX - 1, "%s_%ld", ~~^ %lld ep_name, msg_id); ~~~~~~ prov/sm2/src/sm2_progress.c: In function 'sm2_progress_resp': prov/sm2/src/sm2_progress.c:129:13: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] pending = (struct sm2_tx_entry *) resp->msg_id; ^ prov/sm2/src/sm2_progress.c: In function 'sm2_progress_cmd_rma': prov/sm2/src/sm2_progress.c:392:29: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] iov[iov_count].iov_base = (void *) rma_cmd->rma.rma_iov[iov_count].addr; ^ prov/sm2/src/sm2_progress.c:436:29: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] ret = sm2_complete_rx(ep, (void *) cmd->msg.hdr.msg_id, ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sm2/src/src_libfabric_la-sm2_fabric.lo `test -f 'prov/sm2/src/sm2_fabric.c' || echo './'`prov/sm2/src/sm2_fabric.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sm2/src/sm2_fabric.c -fPIC -DPIC -o prov/sm2/src/.libs/src_libfabric_la-sm2_fabric.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/sm2/src/sm2_common.h:44, from prov/sm2/src/sm2.h:33, from prov/sm2/src/sm2_fabric.c:36: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from prov/sm2/src/sm2_fabric.c:36: prov/sm2/src/sm2.h: In function 'sm2_mmap_name': prov/sm2/src/sm2.h:316:52: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] return snprintf(shm_name, SM2_NAME_MAX - 1, "%s_%ld", ~~^ %lld ep_name, msg_id); ~~~~~~ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sm2/src/src_libfabric_la-sm2_init.lo `test -f 'prov/sm2/src/sm2_init.c' || echo './'`prov/sm2/src/sm2_init.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sm2/src/sm2_init.c -fPIC -DPIC -o prov/sm2/src/.libs/src_libfabric_la-sm2_init.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/sm2/src/sm2_common.h:44, from prov/sm2/src/sm2.h:33, from prov/sm2/src/sm2_init.c:36: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from prov/sm2/src/sm2_init.c:36: prov/sm2/src/sm2.h: In function 'sm2_mmap_name': prov/sm2/src/sm2.h:316:52: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] return snprintf(shm_name, SM2_NAME_MAX - 1, "%s_%ld", ~~^ %lld ep_name, msg_id); ~~~~~~ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sm2/src/src_libfabric_la-sm2_av.lo `test -f 'prov/sm2/src/sm2_av.c' || echo './'`prov/sm2/src/sm2_av.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sm2/src/sm2_av.c -fPIC -DPIC -o prov/sm2/src/.libs/src_libfabric_la-sm2_av.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/sm2/src/sm2_common.h:44, from prov/sm2/src/sm2.h:33, from prov/sm2/src/sm2_av.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from prov/sm2/src/sm2_av.c:33: prov/sm2/src/sm2.h: In function 'sm2_mmap_name': prov/sm2/src/sm2.h:316:52: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] return snprintf(shm_name, SM2_NAME_MAX - 1, "%s_%ld", ~~^ %lld ep_name, msg_id); ~~~~~~ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/tcp/src/src_libfabric_la-xnet_fabric.lo `test -f 'prov/tcp/src/xnet_fabric.c' || echo './'`prov/tcp/src/xnet_fabric.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/tcp/src/xnet_fabric.c -fPIC -DPIC -o prov/tcp/src/.libs/src_libfabric_la-xnet_fabric.o In file included from ./include/ofi_util.h:61, from prov/tcp/src/xnet.h:60, from prov/tcp/src/xnet_fabric.c:36: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sm2/src/src_libfabric_la-sm2_msg.lo `test -f 'prov/sm2/src/sm2_msg.c' || echo './'`prov/sm2/src/sm2_msg.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sm2/src/sm2_msg.c -fPIC -DPIC -o prov/sm2/src/.libs/src_libfabric_la-sm2_msg.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/sm2/src/sm2_common.h:44, from prov/sm2/src/sm2.h:33, from prov/sm2/src/sm2_msg.c:39: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from prov/sm2/src/sm2_msg.c:39: prov/sm2/src/sm2.h: In function 'sm2_mmap_name': prov/sm2/src/sm2.h:316:52: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] return snprintf(shm_name, SM2_NAME_MAX - 1, "%s_%ld", ~~^ %lld ep_name, msg_id); ~~~~~~ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/tcp/src/src_libfabric_la-xnet_attr.lo `test -f 'prov/tcp/src/xnet_attr.c' || echo './'`prov/tcp/src/xnet_attr.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/tcp/src/xnet_attr.c -fPIC -DPIC -o prov/tcp/src/.libs/src_libfabric_la-xnet_attr.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/tcp/src/xnet.h:60, from prov/tcp/src/xnet_attr.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/tcp/src/src_libfabric_la-xnet_domain.lo `test -f 'prov/tcp/src/xnet_domain.c' || echo './'`prov/tcp/src/xnet_domain.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/tcp/src/xnet_domain.c -fPIC -DPIC -o prov/tcp/src/.libs/src_libfabric_la-xnet_domain.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/tcp/src/xnet.h:60, from prov/tcp/src/xnet_domain.c:37: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/tcp/src/src_libfabric_la-xnet_cm.lo `test -f 'prov/tcp/src/xnet_cm.c' || echo './'`prov/tcp/src/xnet_cm.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/tcp/src/xnet_cm.c -fPIC -DPIC -o prov/tcp/src/.libs/src_libfabric_la-xnet_cm.o In file included from ./include/ofi_util.h:61, from prov/tcp/src/xnet.h:60, from prov/tcp/src/xnet_cm.c:36: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sm2/src/src_libfabric_la-sm2_util.lo `test -f 'prov/sm2/src/sm2_util.c' || echo './'`prov/sm2/src/sm2_util.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sm2/src/sm2_util.c -fPIC -DPIC -o prov/sm2/src/.libs/src_libfabric_la-sm2_util.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/sm2/src/sm2_common.h:44, from prov/sm2/src/sm2_util.c:34: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/shm/src/src_libfabric_la-smr_ep.lo `test -f 'prov/shm/src/smr_ep.c' || echo './'`prov/shm/src/smr_ep.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/shm/src/smr_ep.c -fPIC -DPIC -o prov/shm/src/.libs/src_libfabric_la-smr_ep.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_shm.h:44, from prov/shm/src/smr_signal.h:38, from prov/shm/src/smr_ep.c:41: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from prov/shm/src/smr_signal.h:39, from prov/shm/src/smr_ep.c:41: prov/shm/src/smr.h: In function 'smr_mmap_name': prov/shm/src/smr.h:302:52: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] return snprintf(shm_name, SMR_NAME_MAX - 1, "%s_%ld", ~~^ %lld ep_name, msg_id); ~~~~~~ prov/shm/src/smr.h: In function 'smr_cma_loop': prov/shm/src/smr.h:412:26: warning: passing argument 2 of 'ofi_consume_iov' from incompatible pointer type [-Wincompatible-pointer-types] ofi_consume_iov(local, &local_cnt, (size_t) ret); ^~~~~~~~~~ In file included from prov/shm/src/smr_ep.c:38: ./include/ofi_iov.h:204:51: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'long unsigned int *' void ofi_consume_iov(struct iovec *iovec, size_t *iovec_count, size_t offset); ~~~~~~~~^~~~~~~~~~~ In file included from prov/shm/src/smr_signal.h:39, from prov/shm/src/smr_ep.c:41: prov/shm/src/smr.h:413:27: warning: passing argument 2 of 'ofi_consume_iov' from incompatible pointer type [-Wincompatible-pointer-types] ofi_consume_iov(remote, &remote_cnt, (size_t) ret); ^~~~~~~~~~~ In file included from prov/shm/src/smr_ep.c:38: ./include/ofi_iov.h:204:51: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'long unsigned int *' void ofi_consume_iov(struct iovec *iovec, size_t *iovec_count, size_t offset); ~~~~~~~~^~~~~~~~~~~ prov/shm/src/smr_ep.c: In function 'smr_format_ipc': prov/shm/src/smr_ep.c:417:10: warning: passing argument 4 of 'ofi_hmem_get_base_addr' from incompatible pointer type [-Wincompatible-pointer-types] &cmd->msg.data.ipc_info.base_length); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from prov/shm/src/smr_ep.c:39: ./include/ofi_hmem.h:377:33: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'uint64_t *' {aka 'long long unsigned int *'} void **base_addr, size_t *base_length); ~~~~~~~~^~~~~~~~~~~ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/tcp/src/src_libfabric_la-xnet_rdm_cm.lo `test -f 'prov/tcp/src/xnet_rdm_cm.c' || echo './'`prov/tcp/src/xnet_rdm_cm.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/tcp/src/xnet_rdm_cm.c -fPIC -DPIC -o prov/tcp/src/.libs/src_libfabric_la-xnet_rdm_cm.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/tcp/src/xnet_rdm_cm.c:38: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/sm2/src/src_libfabric_la-sm2_ep.lo `test -f 'prov/sm2/src/sm2_ep.c' || echo './'`prov/sm2/src/sm2_ep.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/sm2/src/sm2_ep.c -fPIC -DPIC -o prov/sm2/src/.libs/src_libfabric_la-sm2_ep.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/sm2/src/sm2_common.h:44, from prov/sm2/src/sm2_signal.h:38, from prov/sm2/src/sm2_ep.c:41: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from prov/sm2/src/sm2_signal.h:39, from prov/sm2/src/sm2_ep.c:41: prov/sm2/src/sm2.h: In function 'sm2_mmap_name': prov/sm2/src/sm2.h:316:52: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] return snprintf(shm_name, SM2_NAME_MAX - 1, "%s_%ld", ~~^ %lld ep_name, msg_id); ~~~~~~ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/tcp/src/src_libfabric_la-xnet_rma.lo `test -f 'prov/tcp/src/xnet_rma.c' || echo './'`prov/tcp/src/xnet_rma.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/tcp/src/xnet_rma.c -fPIC -DPIC -o prov/tcp/src/.libs/src_libfabric_la-xnet_rma.o In file included from ./include/ofi_util.h:61, from prov/tcp/src/xnet.h:60, from prov/tcp/src/xnet_rma.c:37: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/tcp/src/src_libfabric_la-xnet_msg.lo `test -f 'prov/tcp/src/xnet_msg.c' || echo './'`prov/tcp/src/xnet_msg.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/tcp/src/xnet_msg.c -fPIC -DPIC -o prov/tcp/src/.libs/src_libfabric_la-xnet_msg.o In file included from ./include/ofi_util.h:61, from prov/tcp/src/xnet.h:60, from prov/tcp/src/xnet_msg.c:36: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rstream/src/src_libfabric_la-rstream_domain.lo `test -f 'prov/rstream/src/rstream_domain.c' || echo './'`prov/rstream/src/rstream_domain.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rstream/src/rstream_domain.c -fPIC -DPIC -o prov/rstream/src/.libs/src_libfabric_la-rstream_domain.o In file included from ./include/ofi_util.h:61, from prov/rstream/src/rstream.h:53, from prov/rstream/src/rstream_domain.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/tcp/src/src_libfabric_la-xnet_init.lo `test -f 'prov/tcp/src/xnet_init.c' || echo './'`prov/tcp/src/xnet_init.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/tcp/src/xnet_init.c -fPIC -DPIC -o prov/tcp/src/.libs/src_libfabric_la-xnet_init.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/tcp/src/xnet.h:60, from prov/tcp/src/xnet_init.c:38: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/tcp/src/src_libfabric_la-xnet_pep.lo `test -f 'prov/tcp/src/xnet_pep.c' || echo './'`prov/tcp/src/xnet_pep.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/tcp/src/xnet_pep.c -fPIC -DPIC -o prov/tcp/src/.libs/src_libfabric_la-xnet_pep.o In file included from ./include/ofi_util.h:61, from prov/tcp/src/xnet.h:60, from prov/tcp/src/xnet_pep.c:40: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/tcp/src/src_libfabric_la-xnet_eq.lo `test -f 'prov/tcp/src/xnet_eq.c' || echo './'`prov/tcp/src/xnet_eq.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/tcp/src/xnet_eq.c -fPIC -DPIC -o prov/tcp/src/.libs/src_libfabric_la-xnet_eq.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/tcp/src/xnet.h:60, from prov/tcp/src/xnet_eq.c:36: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/tcp/src/src_libfabric_la-xnet_ep.lo `test -f 'prov/tcp/src/xnet_ep.c' || echo './'`prov/tcp/src/xnet_ep.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/tcp/src/xnet_ep.c -fPIC -DPIC -o prov/tcp/src/.libs/src_libfabric_la-xnet_ep.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/tcp/src/xnet.h:60, from prov/tcp/src/xnet_ep.c:40: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_iov.h:39, from prov/tcp/src/xnet_ep.c:39: prov/tcp/src/xnet_ep.c: In function 'xnet_hdr_trace': prov/tcp/src/xnet_ep.c:96:39: warning: format '%zx' expects argument of type 'size_t', but argument 9 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] FI_TRACE(&xnet_prov, FI_LOG_EP_DATA, "%s op:%s tag:0x%zx flags:0x%x " ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/tcp/src/xnet_ep.c:98:26: xnet_op_str(hdr->op), tag, hdr->flags, hdr->op_data, ~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/tcp/src/xnet_ep.c:96:2: note: in expansion of macro 'FI_TRACE' FI_TRACE(&xnet_prov, FI_LOG_EP_DATA, "%s op:%s tag:0x%zx flags:0x%x " ^~~~~~~~ prov/tcp/src/xnet_ep.c:96:57: note: format string is defined here FI_TRACE(&xnet_prov, FI_LOG_EP_DATA, "%s op:%s tag:0x%zx flags:0x%x " ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_iov.h:39, from prov/tcp/src/xnet_ep.c:39: prov/tcp/src/xnet_ep.c:96:39: warning: format '%zu' expects argument of type 'size_t', but argument 13 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] FI_TRACE(&xnet_prov, FI_LOG_EP_DATA, "%s op:%s tag:0x%zx flags:0x%x " ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/tcp/src/xnet_ep.c:99:19: hdr->hdr_size, hdr->size - hdr->hdr_size); ~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/tcp/src/xnet_ep.c:96:2: note: in expansion of macro 'FI_TRACE' FI_TRACE(&xnet_prov, FI_LOG_EP_DATA, "%s op:%s tag:0x%zx flags:0x%x " ^~~~~~~~ prov/tcp/src/xnet_ep.c:97:42: note: format string is defined here "op_data:0x%x hdr_size:%d data_size:%zu\n", dir, ~~^ %llu make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rstream/src/src_libfabric_la-rstream_fabric.lo `test -f 'prov/rstream/src/rstream_fabric.c' || echo './'`prov/rstream/src/rstream_fabric.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rstream/src/rstream_fabric.c -fPIC -DPIC -o prov/rstream/src/.libs/src_libfabric_la-rstream_fabric.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/rstream/src/rstream.h:53, from prov/rstream/src/rstream_fabric.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/tcp/src/src_libfabric_la-xnet_cq.lo `test -f 'prov/tcp/src/xnet_cq.c' || echo './'`prov/tcp/src/xnet_cq.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/tcp/src/xnet_cq.c -fPIC -DPIC -o prov/tcp/src/.libs/src_libfabric_la-xnet_cq.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/tcp/src/xnet.h:60, from prov/tcp/src/xnet_cq.c:36: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rstream/src/src_libfabric_la-rstream_attr.lo `test -f 'prov/rstream/src/rstream_attr.c' || echo './'`prov/rstream/src/rstream_attr.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rstream/src/rstream_attr.c -fPIC -DPIC -o prov/rstream/src/.libs/src_libfabric_la-rstream_attr.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/rstream/src/rstream.h:53, from prov/rstream/src/rstream_attr.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/tcp/src/src_libfabric_la-xnet_rdm.lo `test -f 'prov/tcp/src/xnet_rdm.c' || echo './'`prov/tcp/src/xnet_rdm.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/tcp/src/xnet_rdm.c -fPIC -DPIC -o prov/tcp/src/.libs/src_libfabric_la-xnet_rdm.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/tcp/src/xnet.h:60, from prov/tcp/src/xnet_rdm.c:37: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rstream/src/src_libfabric_la-rstream_cm.lo `test -f 'prov/rstream/src/rstream_cm.c' || echo './'`prov/rstream/src/rstream_cm.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rstream/src/rstream_cm.c -fPIC -DPIC -o prov/rstream/src/.libs/src_libfabric_la-rstream_cm.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/rstream/src/rstream.h:53, from prov/rstream/src/rstream_cm.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/tcp/src/src_libfabric_la-xnet_srx.lo `test -f 'prov/tcp/src/xnet_srx.c' || echo './'`prov/tcp/src/xnet_srx.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/tcp/src/xnet_srx.c -fPIC -DPIC -o prov/tcp/src/.libs/src_libfabric_la-xnet_srx.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/tcp/src/xnet.h:60, from prov/tcp/src/xnet_srx.c:34: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rstream/src/src_libfabric_la-rstream_init.lo `test -f 'prov/rstream/src/rstream_init.c' || echo './'`prov/rstream/src/rstream_init.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rstream/src/rstream_init.c -fPIC -DPIC -o prov/rstream/src/.libs/src_libfabric_la-rstream_init.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/rstream/src/rstream.h:53, from prov/rstream/src/rstream_init.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rstream/src/src_libfabric_la-rstream_eq.lo `test -f 'prov/rstream/src/rstream_eq.c' || echo './'`prov/rstream/src/rstream_eq.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rstream/src/rstream_eq.c -fPIC -DPIC -o prov/rstream/src/.libs/src_libfabric_la-rstream_eq.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/rstream/src/rstream.h:53, from prov/rstream/src/rstream_eq.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rstream/src/src_libfabric_la-rstream_msg.lo `test -f 'prov/rstream/src/rstream_msg.c' || echo './'`prov/rstream/src/rstream_msg.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rstream/src/rstream_msg.c -fPIC -DPIC -o prov/rstream/src/.libs/src_libfabric_la-rstream_msg.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/rstream/src/rstream.h:53, from prov/rstream/src/rstream_msg.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ prov/rstream/src/rstream_msg.c: In function 'rstream_send': prov/rstream/src/rstream_msg.c:536:28: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] ep->local_mr.ldesc, 0, (uint64_t)remote_addr, ^ prov/rstream/src/rstream_msg.c:542:37: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] ep->local_mr.ldesc, cq_data, 0, (uint64_t)remote_addr, ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/rstream/src/src_libfabric_la-rstream_ep.lo `test -f 'prov/rstream/src/rstream_ep.c' || echo './'`prov/rstream/src/rstream_ep.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/rstream/src/rstream_ep.c -fPIC -DPIC -o prov/rstream/src/.libs/src_libfabric_la-rstream_ep.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/rstream/src/rstream.h:53, from prov/rstream/src/rstream_ep.c:33: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ prov/rstream/src/rstream_ep.c: In function 'rstream_process_cm_event': prov/rstream/src/rstream_ep.c:413:34: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] ep->remote_data.mr.data_start = (void *)ntohll(rcv_data->base_addr); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/hook/dmabuf_peer_mem/src/src_libfabric_la-hook_dmabuf_peer_mem.lo `test -f 'prov/hook/dmabuf_peer_mem/src/hook_dmabuf_peer_mem.c' || echo './'`prov/hook/dmabuf_peer_mem/src/hook_dmabuf_peer_mem.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/hook/dmabuf_peer_mem/src/hook_dmabuf_peer_mem.c -fPIC -DPIC -o prov/hook/dmabuf_peer_mem/src/.libs/src_libfabric_la-hook_dmabuf_peer_mem.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' prov/hook/dmabuf_peer_mem/src/hook_dmabuf_peer_mem.c: In function 'get_mr_fd': prov/hook/dmabuf_peer_mem/src/hook_dmabuf_peer_mem.c:188:9: warning: passing argument 3 of 'ze_hmem_get_base_addr' from incompatible pointer type [-Wincompatible-pointer-types] &mr->size); ^~~~~~~~~ In file included from prov/hook/dmabuf_peer_mem/src/hook_dmabuf_peer_mem.c:37: ./include/ofi_hmem.h:205:65: note: expected 'size_t *' {aka 'unsigned int *'} but argument is of type 'uint64_t *' {aka 'long long unsigned int *'} int ze_hmem_get_base_addr(const void *ptr, void **base, size_t *size); ~~~~~~~~^~~~ prov/hook/dmabuf_peer_mem/src/hook_dmabuf_peer_mem.c: In function 'hook_dmabuf_peer_mem_mr_regattr': prov/hook/dmabuf_peer_mem/src/hook_dmabuf_peer_mem.c:170:6: warning: 'fd' may be used uninitialized in this function [-Wmaybe-uninitialized] int fd; ^~ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/tcp/src/src_libfabric_la-xnet_progress.lo `test -f 'prov/tcp/src/xnet_progress.c' || echo './'`prov/tcp/src/xnet_progress.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/tcp/src/xnet_progress.c -fPIC -DPIC -o prov/tcp/src/.libs/src_libfabric_la-xnet_progress.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from ./include/ofi_util.h:61, from prov/tcp/src/xnet.h:60, from prov/tcp/src/xnet_progress.c:37: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ prov/tcp/src/xnet_progress.c: In function 'xnet_progress_cqe': prov/tcp/src/xnet_progress.c:1062:12: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] sockctx = (struct ofi_sockctx *) cqe->user_data; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/hook/perf/src/src_libfabric_la-hook_perf.lo `test -f 'prov/hook/perf/src/hook_perf.c' || echo './'`prov/hook/perf/src/hook_perf.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/hook/perf/src/hook_perf.c -fPIC -DPIC -o prov/hook/perf/src/.libs/src_libfabric_la-hook_perf.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/hook/hook_debug/src/src_libfabric_la-hook_debug.lo `test -f 'prov/hook/hook_debug/src/hook_debug.c' || echo './'`prov/hook/hook_debug/src/hook_debug.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/hook/hook_debug/src/hook_debug.c -fPIC -DPIC -o prov/hook/hook_debug/src/.libs/src_libfabric_la-hook_debug.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' In file included from prov/hook/hook_debug/src/hook_debug.c:36: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/hook/trace/src/src_libfabric_la-hook_trace.lo `test -f 'prov/hook/trace/src/hook_trace.c' || echo './'`prov/hook/trace/src/hook_trace.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/hook/trace/src/hook_trace.c -fPIC -DPIC -o prov/hook/trace/src/.libs/src_libfabric_la-hook_trace.o prov/hook/trace/src/hook_trace.c: In function 'trace_cq_msg_entry': prov/hook/trace/src/hook_trace.c:115:29: warning: format '%lx' expects argument of type 'long unsigned int', but argument 8 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] "ctx %p flags 0x%lx len %zu\n", ~~^ %llx entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:119:29: warning: format '%lx' expects argument of type 'long unsigned int', but argument 8 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] "ctx %p flags 0x%lx\n", ~~^ %llx entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c: In function 'trace_cq_data_entry': prov/hook/trace/src/hook_trace.c:134:29: warning: format '%lx' expects argument of type 'long unsigned int', but argument 8 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~^ %llx entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:134:54: warning: format '%lu' expects argument of type 'long unsigned int', but argument 11 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~^ %llu prov/hook/trace/src/hook_trace.c:137:11: (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:140:29: warning: format '%lx' expects argument of type 'long unsigned int', but argument 8 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] "ctx %p flags 0x%lx\n", ~~^ %llx entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c: In function 'trace_cq_tagged_entry': prov/hook/trace/src/hook_trace.c:155:29: warning: format '%lx' expects argument of type 'long unsigned int', but argument 8 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~^ %llx entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:155:54: warning: format '%lu' expects argument of type 'long unsigned int', but argument 11 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~^ %llu prov/hook/trace/src/hook_trace.c:158:11: (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:155:64: warning: format '%lx' expects argument of type 'long unsigned int', but argument 12 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~^ %llx prov/hook/trace/src/hook_trace.c:159:11: entry[i].tag); ~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:162:29: warning: format '%lx' expects argument of type 'long unsigned int', but argument 8 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] "ctx %p flags 0x%lx\n", ~~^ %llx entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c: In function 'trace_cq_err': prov/hook/trace/src/hook_trace.c:200:28: warning: format '%lx' expects argument of type 'long unsigned int', but argument 8 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~^ %llx prov/hook/trace/src/hook_trace.c:202:29: entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:200:53: warning: format '%lu' expects argument of type 'long unsigned int', but argument 11 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~^ %llu prov/hook/trace/src/hook_trace.c:203:10: entry->data, entry->tag, entry->olen, ~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:200:63: warning: format '%lx' expects argument of type 'long unsigned int', but argument 12 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~^ %llx prov/hook/trace/src/hook_trace.c:203:23: entry->data, entry->tag, entry->olen, ~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:209:28: warning: format '%lx' expects argument of type 'long unsigned int', but argument 8 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~^ %llx prov/hook/trace/src/hook_trace.c:211:29: entry->op_context, entry->flags, ~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:209:38: warning: format '%lu' expects argument of type 'long unsigned int', but argument 9 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~^ %llu prov/hook/trace/src/hook_trace.c:212:10: entry->data, entry->tag, entry->olen, ~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:209:48: warning: format '%lx' expects argument of type 'long unsigned int', but argument 10 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~^ %llx prov/hook/trace/src/hook_trace.c:212:23: entry->data, entry->tag, entry->olen, ~~~~~~~~~~ In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c: In function 'trace_recv': prov/hook/trace/src/hook_trace.c:60:4: warning: format '%zu' expects argument of type 'size_t', but argument 9 has type 'fi_addr_t' {aka 'long long unsigned int'} [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:430:36: TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:59:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:430:2: note: in expansion of macro 'TRACE_EP_MSG' TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:60:27: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:60:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:62:20: buf, len, addr, (uint64_t)data, (uint64_t)flags, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_RMA(ret, ep, buf, len, addr, raddr, data, flags, key, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx key 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:59:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:430:2: note: in expansion of macro 'TRACE_EP_MSG' TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:60:36: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:60:4: warning: format '%zx' expects argument of type 'size_t', but argument 11 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:62:36: buf, len, addr, (uint64_t)data, (uint64_t)flags, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_RMA(ret, ep, buf, len, addr, raddr, data, flags, key, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx key 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:59:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:430:2: note: in expansion of macro 'TRACE_EP_MSG' TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:61:15: note: format string is defined here "flags 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c: In function 'trace_recvv': prov/hook/trace/src/hook_trace.c:60:4: warning: format '%zu' expects argument of type 'size_t', but argument 9 has type 'fi_addr_t' {aka 'long long unsigned int'} [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:444:15: src_addr, 0, 0, context); ~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:59:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:443:2: note: in expansion of macro 'TRACE_EP_MSG' TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:60:27: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:60:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:62:20: buf, len, addr, (uint64_t)data, (uint64_t)flags, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_RMA(ret, ep, buf, len, addr, raddr, data, flags, key, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx key 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:59:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:443:2: note: in expansion of macro 'TRACE_EP_MSG' TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:60:36: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:60:4: warning: format '%zx' expects argument of type 'size_t', but argument 11 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:62:36: buf, len, addr, (uint64_t)data, (uint64_t)flags, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_RMA(ret, ep, buf, len, addr, raddr, data, flags, key, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx key 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:59:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:443:2: note: in expansion of macro 'TRACE_EP_MSG' TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:61:15: note: format string is defined here "flags 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c: In function 'trace_recvmsg': prov/hook/trace/src/hook_trace.c:60:4: warning: format '%zu' expects argument of type 'size_t', but argument 9 has type 'fi_addr_t' {aka 'const long long unsigned int'} [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:457:54: IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:59:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:456:2: note: in expansion of macro 'TRACE_EP_MSG' TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:60:27: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:60:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:62:20: buf, len, addr, (uint64_t)data, (uint64_t)flags, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_RMA(ret, ep, buf, len, addr, raddr, data, flags, key, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx key 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:59:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:456:2: note: in expansion of macro 'TRACE_EP_MSG' TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:60:36: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:60:4: warning: format '%zx' expects argument of type 'size_t', but argument 11 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:62:36: buf, len, addr, (uint64_t)data, (uint64_t)flags, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_RMA(ret, ep, buf, len, addr, raddr, data, flags, key, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx key 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:59:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:456:2: note: in expansion of macro 'TRACE_EP_MSG' TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:61:15: note: format string is defined here "flags 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c: In function 'trace_send': prov/hook/trace/src/hook_trace.c:60:4: warning: format '%zu' expects argument of type 'size_t', but argument 9 has type 'fi_addr_t' {aka 'long long unsigned int'} [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:472:36: TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:59:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:472:2: note: in expansion of macro 'TRACE_EP_MSG' TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:60:27: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:60:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:62:20: buf, len, addr, (uint64_t)data, (uint64_t)flags, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_RMA(ret, ep, buf, len, addr, raddr, data, flags, key, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx key 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:59:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:472:2: note: in expansion of macro 'TRACE_EP_MSG' TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:60:36: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:60:4: warning: format '%zx' expects argument of type 'size_t', but argument 11 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:62:36: buf, len, addr, (uint64_t)data, (uint64_t)flags, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_RMA(ret, ep, buf, len, addr, raddr, data, flags, key, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx key 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:59:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:472:2: note: in expansion of macro 'TRACE_EP_MSG' TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:61:15: note: format string is defined here "flags 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c: In function 'trace_sendv': prov/hook/trace/src/hook_trace.c:60:4: warning: format '%zu' expects argument of type 'size_t', but argument 9 has type 'fi_addr_t' {aka 'long long unsigned int'} [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:486:15: dest_addr, 0, 0, context); ~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:59:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:485:2: note: in expansion of macro 'TRACE_EP_MSG' TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:60:27: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:60:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:62:20: buf, len, addr, (uint64_t)data, (uint64_t)flags, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_RMA(ret, ep, buf, len, addr, raddr, data, flags, key, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx key 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:59:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:485:2: note: in expansion of macro 'TRACE_EP_MSG' TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:60:36: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:60:4: warning: format '%zx' expects argument of type 'size_t', but argument 11 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:62:36: buf, len, addr, (uint64_t)data, (uint64_t)flags, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_RMA(ret, ep, buf, len, addr, raddr, data, flags, key, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx key 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:59:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:485:2: note: in expansion of macro 'TRACE_EP_MSG' TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:61:15: note: format string is defined here "flags 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c: In function 'trace_sendmsg': prov/hook/trace/src/hook_trace.c:60:4: warning: format '%zu' expects argument of type 'size_t', but argument 9 has type 'fi_addr_t' {aka 'const long long unsigned int'} [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:499:54: IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:59:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:498:2: note: in expansion of macro 'TRACE_EP_MSG' TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:60:27: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:60:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:59:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:498:2: note: in expansion of macro 'TRACE_EP_MSG' TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:60:36: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:60:4: warning: format '%zx' expects argument of type 'size_t', but argument 11 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:62:36: buf, len, addr, (uint64_t)data, (uint64_t)flags, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_RMA(ret, ep, buf, len, addr, raddr, data, flags, key, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx key 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:59:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:498:2: note: in expansion of macro 'TRACE_EP_MSG' TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:61:15: note: format string is defined here "flags 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c: In function 'trace_inject': prov/hook/trace/src/hook_trace.c:60:4: warning: format '%zu' expects argument of type 'size_t', but argument 9 has type 'fi_addr_t' {aka 'long long unsigned int'} [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:513:36: TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:59:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:513:2: note: in expansion of macro 'TRACE_EP_MSG' TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:60:27: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:60:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:62:20: buf, len, addr, (uint64_t)data, (uint64_t)flags, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_RMA(ret, ep, buf, len, addr, raddr, data, flags, key, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx key 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:59:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:513:2: note: in expansion of macro 'TRACE_EP_MSG' TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:60:36: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:60:4: warning: format '%zx' expects argument of type 'size_t', but argument 11 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:62:36: buf, len, addr, (uint64_t)data, (uint64_t)flags, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_RMA(ret, ep, buf, len, addr, raddr, data, flags, key, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx key 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:59:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:513:2: note: in expansion of macro 'TRACE_EP_MSG' TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:61:15: note: format string is defined here "flags 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c: In function 'trace_senddata': prov/hook/trace/src/hook_trace.c:60:4: warning: format '%zu' expects argument of type 'size_t', but argument 9 has type 'fi_addr_t' {aka 'long long unsigned int'} [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:526:36: TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:59:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:526:2: note: in expansion of macro 'TRACE_EP_MSG' TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:60:27: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:60:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:62:20: buf, len, addr, (uint64_t)data, (uint64_t)flags, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_RMA(ret, ep, buf, len, addr, raddr, data, flags, key, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx key 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:59:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:526:2: note: in expansion of macro 'TRACE_EP_MSG' TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:60:36: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:60:4: warning: format '%zx' expects argument of type 'size_t', but argument 11 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:62:36: buf, len, addr, (uint64_t)data, (uint64_t)flags, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_RMA(ret, ep, buf, len, addr, raddr, data, flags, key, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx key 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:59:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:526:2: note: in expansion of macro 'TRACE_EP_MSG' TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:61:15: note: format string is defined here "flags 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c: In function 'trace_injectdata': prov/hook/trace/src/hook_trace.c:60:4: warning: format '%zu' expects argument of type 'size_t', but argument 9 has type 'fi_addr_t' {aka 'long long unsigned int'} [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:539:36: TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:59:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:539:2: note: in expansion of macro 'TRACE_EP_MSG' TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:60:27: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:60:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:62:20: buf, len, addr, (uint64_t)data, (uint64_t)flags, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_RMA(ret, ep, buf, len, addr, raddr, data, flags, key, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx key 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:59:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:539:2: note: in expansion of macro 'TRACE_EP_MSG' TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:60:36: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:60:4: warning: format '%zx' expects argument of type 'size_t', but argument 11 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:62:36: buf, len, addr, (uint64_t)data, (uint64_t)flags, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_RMA(ret, ep, buf, len, addr, raddr, data, flags, key, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx key 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:59:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:539:2: note: in expansion of macro 'TRACE_EP_MSG' TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:61:15: note: format string is defined here "flags 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c: In function 'trace_read': prov/hook/trace/src/hook_trace.c:68:4: warning: format '%zu' expects argument of type 'size_t', but argument 9 has type 'fi_addr_t' {aka 'long long unsigned int'} [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:566:36: TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:566:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:68:27: note: format string is defined here "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:70:20: buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:566:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:68:37: note: format string is defined here "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 11 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:70:37: buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:566:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:68:46: note: format string is defined here "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%zx' expects argument of type 'size_t', but argument 12 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:71:4: (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:566:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:69:15: note: format string is defined here "flags 0x%zx key 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%zx' expects argument of type 'size_t', but argument 13 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:71:21: (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:566:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:69:25: note: format string is defined here "flags 0x%zx key 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c: In function 'trace_readv': prov/hook/trace/src/hook_trace.c:68:4: warning: format '%zu' expects argument of type 'size_t', but argument 9 has type 'fi_addr_t' {aka 'long long unsigned int'} [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:582:15: src_addr, addr, 0, 0, key, context); ~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:581:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:68:27: note: format string is defined here "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:70:20: buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:581:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:68:37: note: format string is defined here "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 11 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:70:37: buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:581:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:68:46: note: format string is defined here "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%zx' expects argument of type 'size_t', but argument 12 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:71:4: (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:581:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:69:15: note: format string is defined here "flags 0x%zx key 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%zx' expects argument of type 'size_t', but argument 13 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:71:21: (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:581:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:69:25: note: format string is defined here "flags 0x%zx key 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c: In function 'trace_readmsg': prov/hook/trace/src/hook_trace.c:68:4: warning: format '%zu' expects argument of type 'size_t', but argument 9 has type 'fi_addr_t' {aka 'const long long unsigned int'} [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:595:54: IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:594:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:68:27: note: format string is defined here "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:70:20: buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:594:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:68:37: note: format string is defined here "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 11 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:594:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:68:46: note: format string is defined here "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%zx' expects argument of type 'size_t', but argument 12 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:71:4: (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:594:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:69:15: note: format string is defined here "flags 0x%zx key 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%zx' expects argument of type 'size_t', but argument 13 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:71:21: (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:594:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:69:25: note: format string is defined here "flags 0x%zx key 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c: In function 'trace_write': prov/hook/trace/src/hook_trace.c:68:4: warning: format '%zu' expects argument of type 'size_t', but argument 9 has type 'fi_addr_t' {aka 'long long unsigned int'} [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:613:36: TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:613:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:68:27: note: format string is defined here "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:70:20: buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:613:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:68:37: note: format string is defined here "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 11 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:70:37: buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:613:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:68:46: note: format string is defined here "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%zx' expects argument of type 'size_t', but argument 12 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:71:4: (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:613:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:69:15: note: format string is defined here "flags 0x%zx key 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%zx' expects argument of type 'size_t', but argument 13 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:71:21: (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:613:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:69:25: note: format string is defined here "flags 0x%zx key 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c: In function 'trace_writev': prov/hook/trace/src/hook_trace.c:68:4: warning: format '%zu' expects argument of type 'size_t', but argument 9 has type 'fi_addr_t' {aka 'long long unsigned int'} [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:629:15: dest_addr, addr, 0, 0, key, context); ~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:628:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:68:27: note: format string is defined here "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:70:20: buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:628:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:68:37: note: format string is defined here "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 11 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:70:37: buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:628:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:68:46: note: format string is defined here "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%zx' expects argument of type 'size_t', but argument 12 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:71:4: (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:628:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:69:15: note: format string is defined here "flags 0x%zx key 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%zx' expects argument of type 'size_t', but argument 13 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:71:21: (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:628:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:69:25: note: format string is defined here "flags 0x%zx key 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c: In function 'trace_writemsg': prov/hook/trace/src/hook_trace.c:68:4: warning: format '%zu' expects argument of type 'size_t', but argument 9 has type 'fi_addr_t' {aka 'const long long unsigned int'} [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:642:54: IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:641:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:68:27: note: format string is defined here "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:70:20: buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:641:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:68:37: note: format string is defined here "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 11 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:641:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:68:46: note: format string is defined here "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%zx' expects argument of type 'size_t', but argument 12 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:71:4: (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:641:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:69:15: note: format string is defined here "flags 0x%zx key 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%zx' expects argument of type 'size_t', but argument 13 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:71:21: (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:641:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:69:25: note: format string is defined here "flags 0x%zx key 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c: In function 'trace_inject_write': prov/hook/trace/src/hook_trace.c:68:4: warning: format '%zu' expects argument of type 'size_t', but argument 9 has type 'fi_addr_t' {aka 'long long unsigned int'} [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:659:36: TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:659:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:68:27: note: format string is defined here "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:70:20: buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:659:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:68:37: note: format string is defined here "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 11 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:70:37: buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:659:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:68:46: note: format string is defined here "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%zx' expects argument of type 'size_t', but argument 12 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:71:4: (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:659:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:69:15: note: format string is defined here "flags 0x%zx key 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%zx' expects argument of type 'size_t', but argument 13 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:71:21: (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:659:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:69:25: note: format string is defined here "flags 0x%zx key 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c: In function 'trace_writedata': prov/hook/trace/src/hook_trace.c:68:4: warning: format '%zu' expects argument of type 'size_t', but argument 9 has type 'fi_addr_t' {aka 'long long unsigned int'} [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:674:36: TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:674:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:68:27: note: format string is defined here "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:70:20: buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:674:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:68:37: note: format string is defined here "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 11 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:70:37: buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:674:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:68:46: note: format string is defined here "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%zx' expects argument of type 'size_t', but argument 12 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:71:4: (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:674:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:69:15: note: format string is defined here "flags 0x%zx key 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%zx' expects argument of type 'size_t', but argument 13 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:71:21: (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:674:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:69:25: note: format string is defined here "flags 0x%zx key 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c: In function 'trace_inject_writedata': prov/hook/trace/src/hook_trace.c:68:4: warning: format '%zu' expects argument of type 'size_t', but argument 9 has type 'fi_addr_t' {aka 'long long unsigned int'} [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:689:36: TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:689:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:68:27: note: format string is defined here "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:70:20: buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:689:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:68:37: note: format string is defined here "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 11 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:70:37: buf, len, addr, (uint64_t)raddr, (uint64_t)data, \ ~~~~~~~~~~~~~~~~~ (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:689:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:68:46: note: format string is defined here "buf %p len %zu addr %zu raddr %lu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%zx' expects argument of type 'size_t', but argument 12 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:71:4: (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:689:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:69:15: note: format string is defined here "flags 0x%zx key 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:68:4: warning: format '%zx' expects argument of type 'size_t', but argument 13 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu raddr %lu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:71:21: (uint64_t)flags, (uint64_t)key, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ #define TRACE_EP_TAGGED(ret, ep, buf, len, addr, data, flags, tag, ignore, context) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(ret)) { \ ~~~~~~~~~~~~~~~ FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "buf %p len %zu addr %zu data %lu " \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:67:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:689:2: note: in expansion of macro 'TRACE_EP_RMA' TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ^~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:69:25: note: format string is defined here "flags 0x%zx key 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c: In function 'trace_trecv': prov/hook/trace/src/hook_trace.c:77:4: warning: format '%zu' expects argument of type 'size_t', but argument 9 has type 'fi_addr_t' {aka 'long long unsigned int'} [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:718:39: TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:718:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:77:27: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:79:20: buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:718:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:77:36: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%zx' expects argument of type 'size_t', but argument 11 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:79:36: buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:718:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:78:15: note: format string is defined here "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%lx' expects argument of type 'long unsigned int', but argument 12 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:80:4: (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:718:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:78:25: note: format string is defined here "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%zx' expects argument of type 'size_t', but argument 13 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:80:19: (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:718:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:78:38: note: format string is defined here "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c: In function 'trace_trecvv': prov/hook/trace/src/hook_trace.c:77:4: warning: format '%zu' expects argument of type 'size_t', but argument 9 has type 'fi_addr_t' {aka 'long long unsigned int'} [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:734:18: src_addr, 0, 0, tag, ignore, context); ~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:733:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:77:27: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:79:20: buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t ignore, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:733:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:77:36: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%zx' expects argument of type 'size_t', but argument 11 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:79:36: buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t ignore, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:733:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:78:15: note: format string is defined here "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%lx' expects argument of type 'long unsigned int', but argument 12 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:80:4: (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t ignore, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:733:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:78:25: note: format string is defined here "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%zx' expects argument of type 'size_t', but argument 13 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:80:19: (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t ignore, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:733:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:78:38: note: format string is defined here "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c: In function 'trace_trecvmsg': prov/hook/trace/src/hook_trace.c:77:4: warning: format '%zu' expects argument of type 'size_t', but argument 9 has type 'fi_addr_t' {aka 'const long long unsigned int'} [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:748:57: IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:747:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:77:27: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:747:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:77:36: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%zx' expects argument of type 'size_t', but argument 11 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:79:36: buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t ignore, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:747:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:78:15: note: format string is defined here "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%lx' expects argument of type 'long unsigned int', but argument 12 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:80:4: (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t ignore, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, msg->ignore, msg->context); ~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:747:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:78:25: note: format string is defined here "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%zx' expects argument of type 'size_t', but argument 13 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:80:19: (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t ignore, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, msg->ignore, msg->context); ~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:747:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:78:38: note: format string is defined here "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c: In function 'trace_tsend': prov/hook/trace/src/hook_trace.c:77:4: warning: format '%zu' expects argument of type 'size_t', but argument 9 has type 'fi_addr_t' {aka 'long long unsigned int'} [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:763:39: TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:763:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, context); ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:77:27: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:79:20: buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t ignore, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, msg->ignore, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsend(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsend(myep->hep, buf, len, desc, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:763:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, context); ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:77:36: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%zx' expects argument of type 'size_t', but argument 11 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:79:36: buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t ignore, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, msg->ignore, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsend(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsend(myep->hep, buf, len, desc, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:763:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, context); ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:78:15: note: format string is defined here "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%lx' expects argument of type 'long unsigned int', but argument 12 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:80:4: (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t ignore, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, msg->ignore, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsend(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsend(myep->hep, buf, len, desc, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:763:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, context); ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:78:25: note: format string is defined here "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%zx' expects argument of type 'size_t', but argument 13 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:80:19: (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t ignore, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, msg->ignore, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsend(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsend(myep->hep, buf, len, desc, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:763:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, context); ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:78:38: note: format string is defined here "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c: In function 'trace_tsendv': prov/hook/trace/src/hook_trace.c:77:4: warning: format '%zu' expects argument of type 'size_t', but argument 9 has type 'fi_addr_t' {aka 'long long unsigned int'} [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:777:18: dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:776:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:77:27: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:79:20: buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t ignore, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, msg->ignore, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsend(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsend(myep->hep, buf, len, desc, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendv(myep->hep, iov, desc, count, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:776:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:77:36: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%zx' expects argument of type 'size_t', but argument 11 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:79:36: buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t ignore, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, msg->ignore, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsend(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsend(myep->hep, buf, len, desc, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendv(myep->hep, iov, desc, count, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:776:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:78:15: note: format string is defined here "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%lx' expects argument of type 'long unsigned int', but argument 12 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:80:4: (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t ignore, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, msg->ignore, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsend(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsend(myep->hep, buf, len, desc, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendv(myep->hep, iov, desc, count, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:776:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:78:25: note: format string is defined here "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%zx' expects argument of type 'size_t', but argument 13 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:80:19: (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t ignore, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, msg->ignore, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsend(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsend(myep->hep, buf, len, desc, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendv(myep->hep, iov, desc, count, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:776:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:78:38: note: format string is defined here "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c: In function 'trace_tsendmsg': prov/hook/trace/src/hook_trace.c:77:4: warning: format '%zu' expects argument of type 'size_t', but argument 9 has type 'fi_addr_t' {aka 'const long long unsigned int'} [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:791:57: IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:790:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:77:27: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:790:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:77:36: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%zx' expects argument of type 'size_t', but argument 11 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:79:36: buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t ignore, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, msg->ignore, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsend(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsend(myep->hep, buf, len, desc, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendv(myep->hep, iov, desc, count, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:790:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:78:15: note: format string is defined here "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%lx' expects argument of type 'long unsigned int', but argument 12 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:80:4: (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t ignore, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, msg->ignore, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsend(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsend(myep->hep, buf, len, desc, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendv(myep->hep, iov, desc, count, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, 0, msg->context); ~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:790:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:78:25: note: format string is defined here "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%zx' expects argument of type 'size_t', but argument 13 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:80:19: (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t ignore, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, msg->ignore, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsend(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsend(myep->hep, buf, len, desc, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendv(myep->hep, iov, desc, count, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, 0, msg->context); ~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:790:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:78:38: note: format string is defined here "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c: In function 'trace_tinject': prov/hook/trace/src/hook_trace.c:77:4: warning: format '%zu' expects argument of type 'size_t', but argument 9 has type 'fi_addr_t' {aka 'long long unsigned int'} [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:806:39: TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, NULL); ~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:806:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, NULL); ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:77:27: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:79:20: buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t ignore, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, msg->ignore, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsend(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsend(myep->hep, buf, len, desc, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendv(myep->hep, iov, desc, count, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, 0, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tinject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tinject(myep->hep, buf, len, dest_addr, tag); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:806:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, NULL); ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:77:36: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%zx' expects argument of type 'size_t', but argument 11 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:79:36: buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t ignore, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, msg->ignore, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsend(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsend(myep->hep, buf, len, desc, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendv(myep->hep, iov, desc, count, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, 0, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tinject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tinject(myep->hep, buf, len, dest_addr, tag); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:806:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, NULL); ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:78:15: note: format string is defined here "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%lx' expects argument of type 'long unsigned int', but argument 12 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:80:4: (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t ignore, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, msg->ignore, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsend(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsend(myep->hep, buf, len, desc, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendv(myep->hep, iov, desc, count, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, 0, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tinject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tinject(myep->hep, buf, len, dest_addr, tag); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:806:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, NULL); ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:78:25: note: format string is defined here "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%zx' expects argument of type 'size_t', but argument 13 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:80:19: (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t ignore, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, msg->ignore, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsend(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsend(myep->hep, buf, len, desc, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendv(myep->hep, iov, desc, count, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, 0, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tinject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tinject(myep->hep, buf, len, dest_addr, tag); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:806:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, NULL); ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:78:38: note: format string is defined here "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c: In function 'trace_tsenddata': prov/hook/trace/src/hook_trace.c:77:4: warning: format '%zu' expects argument of type 'size_t', but argument 9 has type 'fi_addr_t' {aka 'long long unsigned int'} [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:821:39: TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, data, 0, tag, 0, context); ~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:821:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, data, 0, tag, 0, context); ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:77:27: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:79:20: buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t ignore, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, msg->ignore, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsend(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsend(myep->hep, buf, len, desc, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendv(myep->hep, iov, desc, count, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, 0, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tinject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tinject(myep->hep, buf, len, dest_addr, tag); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsenddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsenddata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, data, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:821:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, data, 0, tag, 0, context); ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:77:36: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%zx' expects argument of type 'size_t', but argument 11 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:79:36: buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t ignore, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, msg->ignore, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsend(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsend(myep->hep, buf, len, desc, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendv(myep->hep, iov, desc, count, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, 0, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tinject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tinject(myep->hep, buf, len, dest_addr, tag); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsenddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsenddata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, data, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:821:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, data, 0, tag, 0, context); ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:78:15: note: format string is defined here "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%lx' expects argument of type 'long unsigned int', but argument 12 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:80:4: (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t ignore, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, msg->ignore, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsend(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsend(myep->hep, buf, len, desc, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendv(myep->hep, iov, desc, count, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, 0, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tinject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tinject(myep->hep, buf, len, dest_addr, tag); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsenddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsenddata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, data, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:821:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, data, 0, tag, 0, context); ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:78:25: note: format string is defined here "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%zx' expects argument of type 'size_t', but argument 13 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:80:19: (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t ignore, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, msg->ignore, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsend(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsend(myep->hep, buf, len, desc, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendv(myep->hep, iov, desc, count, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, 0, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tinject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tinject(myep->hep, buf, len, dest_addr, tag); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsenddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsenddata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, data, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:821:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, data, 0, tag, 0, context); ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:78:38: note: format string is defined here "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c: In function 'trace_tinjectdata': prov/hook/trace/src/hook_trace.c:77:4: warning: format '%zu' expects argument of type 'size_t', but argument 9 has type 'fi_addr_t' {aka 'long long unsigned int'} [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:834:39: TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, data, 0, tag, 0, NULL); ~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:834:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, data, 0, tag, 0, NULL); ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:77:27: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:79:20: buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t ignore, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, msg->ignore, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsend(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsend(myep->hep, buf, len, desc, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendv(myep->hep, iov, desc, count, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, 0, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tinject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tinject(myep->hep, buf, len, dest_addr, tag); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsenddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsenddata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, data, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tinjectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t tag) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tinjectdata(myep->hep, buf, len, data, dest_addr, tag); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, data, 0, tag, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:834:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, data, 0, tag, 0, NULL); ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:77:36: note: format string is defined here "buf %p len %zu addr %zu data %lu " \ ~~^ %llu In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%zx' expects argument of type 'size_t', but argument 11 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:79:36: buf, len, addr, (uint64_t)data, (uint64_t)flags, \ ~~~~~~~~~~~~~~~~~~ (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t ignore, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, msg->ignore, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsend(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsend(myep->hep, buf, len, desc, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendv(myep->hep, iov, desc, count, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, 0, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tinject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tinject(myep->hep, buf, len, dest_addr, tag); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsenddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsenddata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, data, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tinjectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t tag) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tinjectdata(myep->hep, buf, len, data, dest_addr, tag); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, data, 0, tag, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:834:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, data, 0, tag, 0, NULL); ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:78:15: note: format string is defined here "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%lx' expects argument of type 'long unsigned int', but argument 12 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:80:4: (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t ignore, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, msg->ignore, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsend(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsend(myep->hep, buf, len, desc, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendv(myep->hep, iov, desc, count, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, 0, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tinject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tinject(myep->hep, buf, len, dest_addr, tag); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsenddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsenddata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, data, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tinjectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t tag) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tinjectdata(myep->hep, buf, len, data, dest_addr, tag); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, data, 0, tag, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:834:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, data, 0, tag, 0, NULL); ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:78:25: note: format string is defined here "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c:77:4: warning: format '%zx' expects argument of type 'size_t', but argument 13 has type 'long long unsigned int' [-Wformat=] "buf %p len %zu addr %zu data %lu " \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:80:19: (uint64_t)tag, (uint64_t)ignore, context); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ typedef void (*trace_cq_entry_fn)(const struct fi_provider *prov, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static void ~~~~~~~~~~~ trace_cq_unknown(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ // do nothing ~~~~~~~~~~~~~ } ~ static void ~~~~~~~~~~~ trace_cq_context_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_entry *entry = (struct fi_cq_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p\n", entry[i].op_context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_msg_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_msg_entry *entry = (struct fi_cq_msg_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p fmake[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c -o prov/hook/hook_hmem/src/src_libfabric_la-hook_hmem.lo `test -f 'prov/hook/hook_hmem/src/hook_hmem.c' || echo './'`prov/hook/hook_hmem/src/hook_hmem.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -D_GNU_SOURCE -D__USE_XOPEN2K8 -DSYSCONFDIR=\"/etc\" -DRDMADIR=\"@rdmadir@\" -DPROVDLDIR=\"/usr/lib/libfabric\" -I./prov/sockets/include -I./prov/sockets -I./prov/verbs/include -I./prov/verbs/include/linux -I./prov/verbs/src/ep_rdm -I./prov/verbs/src/ep_dgram -D__LIBUSNIC__ -DWANT_DEBUG_MSGS=0 -DHAVE_LIBNL3=1 -I/usr/include/libnl3 -I./prov/usnic/src/usnic_direct -I./prov/hook/include -I./prov/hook/perf/include -I./prov/hook/hook_debug/include -I./prov/hook/hook_hmem/include -I./prov/hook/dmabuf_peer_mem/include -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c prov/hook/hook_hmem/src/hook_hmem.c -fPIC -DPIC -o prov/hook/hook_hmem/src/.libs/src_libfabric_la-hook_hmem.o make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' lags 0x%lx len %zu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, entry[i].len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_data_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_data_entry *entry = (struct fi_cq_data_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static void ~~~~~~~~~~~ trace_cq_tagged_entry(const struct fi_provider *prov, const char *func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int line, int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct fi_cq_tagged_entry *entry = (struct fi_cq_tagged_entry *)buf; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i < count; i++) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry[i].flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx len %zu buf %p, data %lu tag 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].len, entry[i].buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ (entry[i].flags & FI_REMOTE_CQ_DATA) ? entry[i].data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry[i].tag); ~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(prov, FI_LOG_TRACE, FI_LOG_CQ, func, line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "ctx %p flags 0x%lx\n", ~~~~~~~~~~~~~~~~~~~~~~~ entry[i].op_context, entry[i].flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ } ~ static trace_cq_entry_fn trace_cq_entry[] = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_unknown, ~~~~~~~~~~~~~~~~~ trace_cq_context_entry, ~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_msg_entry, ~~~~~~~~~~~~~~~~~~~ trace_cq_data_entry, ~~~~~~~~~~~~~~~~~~~~ trace_cq_tagged_entry ~~~~~~~~~~~~~~~~~~~~~ }; ~~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int count, void *buf, uint64_t data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ if ((count > 0) && ~~~~~~~~~~~~~~~~~~ fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace_cq_entry[cq->format](cq->domain->fabric->hprov, func, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ line, count, buf, data); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static inline void ~~~~~~~~~~~~~~~~~~ trace_cq_err(struct hook_cq *cq, const char *func, int line, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_cq_err_entry *entry, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char err_buf[80]; ~~~~~~~~~~~~~~~~~ if (!fi_log_enabled(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return; ~~~~~~~ fi_cq_strerror(cq->hcq, entry->prov_errno, entry->err_data, err_buf, 80); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (entry->flags & FI_RECV) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, len %zu buf %p data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, entry->len, entry->buf, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } else { ~~~~~~~~ fi_log(cq->domain->fabric->hprov, FI_LOG_TRACE, FI_LOG_CQ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func, line, ~~~~~~~~~~~ "ctx %p flags 0x%lx, data %lu tag 0x%lx " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "olen %zu err %d (%s) prov_errno %d (%s)\n", ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->op_context, entry->flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->data, entry->tag, entry->olen, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->err, fi_strerror(entry->err), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ entry->prov_errno, err_buf); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_write(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomic(myep->hep, buf, count, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicv(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_writemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_inject(struct fid_ep *ep, const void *buf, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_atomic(myep->hep, buf, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result, result_desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, fi_addr_t dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t addr, uint64_t key, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_readwritemsg(struct fid_ep *ep, const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct fi_ioc *resultv, void **result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t result_count, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicmsg(myep->hep, msg, resultv, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ result_count, flags); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwrite(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *buf, size_t count, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const void *compare, void *compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *result, void *result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomic(myep->hep, buf, count, desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compare, compare_desc, result, result_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritev(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *iov, void **desc, size_t count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_datatype datatype, enum fi_op op, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicv(myep->hep, iov, desc, count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, datatype, op, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_atomic_compwritemsg(struct fid_ep *ep, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_msg_atomic *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const struct fi_ioc *comparev, void **compare_desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t compare_count, struct fi_ioc *resultv, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void **result_desc, size_t result_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicmsg(myep->hep, msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ comparev, compare_desc, compare_count, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ resultv, result_desc, result_count, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_writevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_readwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_fetch_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static int ~~~~~~~~~~ trace_atomic_compwritevalid(struct fid_ep *ep, enum fi_datatype datatype, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ enum fi_op op, size_t *count) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_compare_atomicvalid(myep->hep, datatype, op, count); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ struct fi_ops_atomic trace_atomic_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_atomic), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_atomic_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writev = trace_atomic_writev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_atomic_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_atomic_inject, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwrite = trace_atomic_readwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritev = trace_atomic_readwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritemsg = trace_atomic_readwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwrite = trace_atomic_compwrite, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritev = trace_atomic_compwritev, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritemsg = trace_atomic_compwritemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writevalid = trace_atomic_writevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .readwritevalid = trace_atomic_readwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .compwritevalid = trace_atomic_compwritevalid, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_recv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recv(myep->hep, buf, len, desc, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvv(myep->hep, iov, desc, count, src_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_recvmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_recvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags & FI_REMOTE_CQ_DATA ? msg->data : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_send(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_send(myep->hep, buf, len, desc, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendv(myep->hep, iov, desc, count, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_sendmsg(struct fid_ep *ep, const struct fi_msg *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_sendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject(myep->hep, buf, len, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, 0, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_senddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_senddata(myep->hep, buf, len, desc, data, dest_addr, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_injectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_injectdata(myep->hep, buf, len, data, dest_addr); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_MSG(ret, myep, buf, len, dest_addr, data, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_msg trace_msg_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_msg), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .recv = trace_recv, ~~~~~~~~~~~~~~~~~~~ .recvv = trace_recvv, ~~~~~~~~~~~~~~~~~~~~~ .recvmsg = trace_recvmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .send = trace_send, ~~~~~~~~~~~~~~~~~~~ .sendv = trace_sendv, ~~~~~~~~~~~~~~~~~~~~~ .sendmsg = trace_sendmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject, ~~~~~~~~~~~~~~~~~~~~~~~ .senddata = trace_senddata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_injectdata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_read(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_read(myep->hep, buf, len, desc, src_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_readmsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_readmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_write(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_write(myep->hep, buf, len, desc, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writev(myep->hep, iov, desc, count, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key, context); ~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, 0, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writemsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].addr : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->rma_iov_count ? msg->rma_iov[0].key : 0, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->context); ~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_write(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t addr, uint64_t key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_write(myep->hep, buf, len, dest_addr, addr, key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, 0, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_writedata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_writedata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, addr, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_inject_writedata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t key) ~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_inject_writedata(myep->hep, buf, len, data, dest_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ addr, key); ~~~~~~~~~~~ TRACE_EP_RMA(ret, myep, buf, len, dest_addr, addr, data, 0, key, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static struct fi_ops_rma trace_rma_ops = { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .size = sizeof(struct fi_ops_rma), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .read = trace_read, ~~~~~~~~~~~~~~~~~~~ .readv = trace_readv, ~~~~~~~~~~~~~~~~~~~~~ .readmsg = trace_readmsg, ~~~~~~~~~~~~~~~~~~~~~~~~~ .write = trace_write, ~~~~~~~~~~~~~~~~~~~~~ .writev = trace_writev, ~~~~~~~~~~~~~~~~~~~~~~~ .writemsg = trace_writemsg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .inject = trace_inject_write, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .writedata = trace_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .injectdata = trace_inject_writedata, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static ssize_t ~~~~~~~~~~~~~~ trace_trecv(struct fid_ep *ep, void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t src_addr, uint64_t tag, uint64_t ignore, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecv(myep->hep, buf, len, desc, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t src_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t ignore, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvv(myep->hep, iov, desc, count, src_addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src_addr, 0, 0, tag, ignore, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_trecvmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_trecvmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, msg->ignore, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsend(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsend(myep->hep, buf, len, desc, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendv(struct fid_ep *ep, const struct iovec *iov, void **desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ size_t count, fi_addr_t dest_addr, uint64_t tag, void *context) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendv(myep->hep, iov, desc, count, dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(iov, count), IOV_LEN(iov, count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, 0, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsendmsg(struct fid_ep *ep, const struct fi_msg_tagged *msg, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t flags) ~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsendmsg(myep->hep, msg, flags); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, IOV_BASE(msg->msg_iov, msg->iov_count), ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOV_LEN(msg->msg_iov, msg->iov_count), msg->addr, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MSG_DATA(msg->data, flags), flags, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg->tag, 0, msg->context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tinject(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fi_addr_t dest_addr, uint64_t tag) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tinject(myep->hep, buf, len, dest_addr, tag); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, 0, 0, tag, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tsenddata(struct fid_ep *ep, const void *buf, size_t len, void *desc, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t tag, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void *context) ~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tsenddata(myep->hep, buf, len, desc, data, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dest_addr, tag, context); ~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, data, 0, tag, 0, context); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return ret; ~~~~~~~~~~~ } ~ static ssize_t ~~~~~~~~~~~~~~ trace_tinjectdata(struct fid_ep *ep, const void *buf, size_t len, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t data, fi_addr_t dest_addr, uint64_t tag) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ struct hook_ep *myep = container_of(ep, struct hook_ep, ep); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ssize_t ret; ~~~~~~~~~~~~ ret = fi_tinjectdata(myep->hep, buf, len, data, dest_addr, tag); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, data, 0, tag, 0, NULL); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:76:3: note: in expansion of macro 'FI_TRACE' FI_TRACE((ep)->domain->fabric->hprov, FI_LOG_EP_DATA, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:834:2: note: in expansion of macro 'TRACE_EP_TAGGED' TRACE_EP_TAGGED(ret, myep, buf, len, dest_addr, data, 0, tag, 0, NULL); ^~~~~~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:78:38: note: format string is defined here "flags 0x%zx tag 0x%lx ignore 0x%zx ctx %p\n", \ ~~^ %llx In file included from ./include/ofi_net.h:56, from ./include/ofi.h:54, from ./include/ofi_hook.h:48, from prov/hook/trace/src/hook_trace.c:32: prov/hook/trace/src/hook_trace.c: In function 'trace_listen': prov/hook/trace/src/hook_trace.c:44:13: warning: format '%lx' expects argument of type 'long unsigned int', but argument 8 has type 'long long unsigned int' [-Wformat=] "ep/pep %p flags 0x%lx\n", \ ^~~~~~~~~~~~~~~~~~~~~~~~~ (void *)(ep), (uint64_t)(flags)); \ ~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:43:4: note: in expansion of macro 'FI_TRACE' FI_TRACE((fabric)->hprov, FI_LOG_EP_CTRL, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:904:2: note: in expansion of macro 'TRACE_CM' TRACE_CM(ret, mypep->fabric, (void *)mypep->hpep, 0); ^~~~~~~~ prov/hook/trace/src/hook_trace.c: In function 'trace_accept': prov/hook/trace/src/hook_trace.c:44:13: warning: format '%lx' expects argument of type 'long unsigned int', but argument 8 has type 'long long unsigned int' [-Wformat=] "ep/pep %p flags 0x%lx\n", \ ^~~~~~~~~~~~~~~~~~~~~~~~~ (void *)(ep), (uint64_t)(flags)); \ ~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:43:4: note: in expansion of macro 'FI_TRACE' FI_TRACE((fabric)->hprov, FI_LOG_EP_CTRL, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:915:2: note: in expansion of macro 'TRACE_CM' TRACE_CM(ret, myep->domain->fabric, (void *)myep->hep, 0); ^~~~~~~~ prov/hook/trace/src/hook_trace.c: In function 'trace_reject': prov/hook/trace/src/hook_trace.c:44:13: warning: format '%lx' expects argument of type 'long unsigned int', but argument 8 has type 'long long unsigned int' [-Wformat=] "ep/pep %p flags 0x%lx\n", \ ^~~~~~~~~~~~~~~~~~~~~~~~~ (void *)(ep), (uint64_t)(flags)); \ ~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:43:4: note: in expansion of macro 'FI_TRACE' FI_TRACE((fabric)->hprov, FI_LOG_EP_CTRL, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:927:2: note: in expansion of macro 'TRACE_CM' TRACE_CM(ret, mypep->fabric, (void *)mypep->hpep, 0); ^~~~~~~~ prov/hook/trace/src/hook_trace.c: In function 'trace_shutdown': prov/hook/trace/src/hook_trace.c:44:13: warning: format '%lx' expects argument of type 'long unsigned int', but argument 8 has type 'long long unsigned int' [-Wformat=] "ep/pep %p flags 0x%lx\n", \ ^~~~~~~~~~~~~~~~~~~~~~~~~ (void *)(ep), (uint64_t)(flags)); \ ~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:43:4: note: in expansion of macro 'FI_TRACE' FI_TRACE((fabric)->hprov, FI_LOG_EP_CTRL, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:938:2: note: in expansion of macro 'TRACE_CM' TRACE_CM(ret, myep->domain->fabric, (void *)myep->hep, flags); ^~~~~~~~ prov/hook/trace/src/hook_trace.c: In function 'trace_join': prov/hook/trace/src/hook_trace.c:44:13: warning: format '%lx' expects argument of type 'long unsigned int', but argument 8 has type 'long long unsigned int' [-Wformat=] "ep/pep %p flags 0x%lx\n", \ ^~~~~~~~~~~~~~~~~~~~~~~~~ (void *)(ep), (uint64_t)(flags)); \ ~~~~~~~~~~~~~~~~~ ./include/rdma/providers/fi_log.h:80:25: note: in definition of macro 'FI_LOG' __func__, __LINE__, __VA_ARGS__); \ ^~~~~~~~~~~ prov/hook/trace/src/hook_trace.c:43:4: note: in expansion of macro 'FI_TRACE' FI_TRACE((fabric)->hprov, FI_LOG_EP_CTRL, \ ^~~~~~~~ prov/hook/trace/src/hook_trace.c:950:2: note: in expansion of macro 'TRACE_CM' TRACE_CM(ret, myep->domain->fabric, (void *)myep->hep, flags); ^~~~~~~~ In file included from ./include/ofi_util.h:61, from ./prov/hook/hook_hmem/include/hook_hmem.h:38, from prov/hook/hook_hmem/src/hook_hmem.c:38: ./include/ofi_mem.h: In function 'smr_freestack_init': ./include/ofi_mem.h:279:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] next_aligned_addr = ofi_get_aligned_size((( (uint64_t) fs) + ^ ./include/ofi_mem.h:281:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] fs->entry_base_offset = next_aligned_addr - ((uint64_t) fs); ^ prov/hook/hook_hmem/src/hook_hmem.c: In function 'hook_hmem_add_region': prov/hook/hook_hmem/src/hook_hmem.c:84:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] attr.requested_key = (uint64_t) *hmem_desc; ^ make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=link gcc -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -version-info 22:0:21 -export-dynamic -Wl,--version-script=./libfabric.map -Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -o src/libfabric.la -rpath /usr/lib src/libfabric_la-fabric.lo src/libfabric_la-fi_tostr.lo src/libfabric_la-perf.lo src/libfabric_la-log.lo src/libfabric_la-var.lo src/libfabric_la-abi_1_0.lo prov/hook/src/src_libfabric_la-hook.lo prov/hook/src/src_libfabric_la-hook_av.lo prov/hook/src/src_libfabric_la-hook_cm.lo prov/hook/src/src_libfabric_la-hook_cntr.lo prov/hook/src/src_libfabric_la-hook_cq.lo prov/hook/src/src_libfabric_la-hook_domain.lo prov/hook/src/src_libfabric_la-hook_ep.lo prov/hook/src/src_libfabric_la-hook_eq.lo prov/hook/src/src_libfabric_la-hook_wait.lo prov/hook/src/src_libfabric_la-hook_xfer.lo src/libfabric_la-hmem.lo src/libfabric_la-hmem_rocr.lo src/libfabric_la-hmem_cuda.lo src/libfabric_la-hmem_cuda_gdrcopy.lo src/libfabric_la-hmem_ze.lo src/libfabric_la-hmem_neuron.lo src/libfabric_la-hmem_synapseai.lo src/libfabric_la-hmem_ipc_cache.lo src/libfabric_la-common.lo src/libfabric_la-enosys.lo src/libfabric_la-rbtree.lo src/libfabric_la-tree.lo src/libfabric_la-fasthash.lo src/libfabric_la-indexer.lo src/libfabric_la-mem.lo src/libfabric_la-iov.lo src/shared/libfabric_la-ofi_str.lo prov/util/src/src_libfabric_la-util_atomic.lo prov/util/src/src_libfabric_la-util_attr.lo prov/util/src/src_libfabric_la-util_av.lo prov/util/src/src_libfabric_la-rxm_av.lo prov/util/src/src_libfabric_la-util_cq.lo prov/util/src/src_libfabric_la-util_cntr.lo prov/util/src/src_libfabric_la-util_domain.lo prov/util/src/src_libfabric_la-util_ep.lo prov/util/src/src_libfabric_la-util_pep.lo prov/util/src/src_libfabric_la-util_eq.lo prov/util/src/src_libfabric_la-util_fabric.lo prov/util/src/src_libfabric_la-util_main.lo prov/util/src/src_libfabric_la-util_poll.lo prov/util/src/src_libfabric_la-util_wait.lo prov/util/src/src_libfabric_la-util_buf.lo prov/util/src/src_libfabric_la-util_mr_map.lo prov/util/src/src_libfabric_la-util_ns.lo prov/util/src/src_libfabric_la-util_shm.lo prov/util/src/src_libfabric_la-util_mem_monitor.lo prov/util/src/src_libfabric_la-util_mem_hooks.lo prov/util/src/src_libfabric_la-util_mr_cache.lo prov/util/src/src_libfabric_la-cuda_mem_monitor.lo prov/util/src/src_libfabric_la-rocr_mem_monitor.lo prov/util/src/src_libfabric_la-ze_mem_monitor.lo prov/util/src/src_libfabric_la-cuda_ipc_monitor.lo prov/util/src/src_libfabric_la-rocr_ipc_monitor.lo prov/coll/src/src_libfabric_la-coll_attr.lo prov/coll/src/src_libfabric_la-coll_av.lo prov/coll/src/src_libfabric_la-coll_av_set.lo prov/coll/src/src_libfabric_la-coll_coll.lo prov/coll/src/src_libfabric_la-coll_cq.lo prov/coll/src/src_libfabric_la-coll_domain.lo prov/coll/src/src_libfabric_la-coll_ep.lo prov/coll/src/src_libfabric_la-coll_eq.lo prov/coll/src/src_libfabric_la-coll_fabric.lo prov/coll/src/src_libfabric_la-coll_init.lo src/unix/libfabric_la-osd.lo src/linux/libfabric_la-osd.lo src/linux/libfabric_la-rdpmc.lo prov/sockets/src/src_libfabric_la-sock_attr.lo prov/sockets/src/src_libfabric_la-sock_av.lo prov/sockets/src/src_libfabric_la-sock_dom.lo prov/sockets/src/src_libfabric_la-sock_mr.lo prov/sockets/src/src_libfabric_la-sock_eq.lo prov/sockets/src/src_libfabric_la-sock_cq.lo prov/sockets/src/src_libfabric_la-sock_cntr.lo prov/sockets/src/src_libfabric_la-sock_poll.lo prov/sockets/src/src_libfabric_la-sock_wait.lo prov/sockets/src/src_libfabric_la-sock_ep_rdm.lo prov/sockets/src/src_libfabric_la-sock_ep_dgram.lo prov/sockets/src/src_libfabric_la-sock_ep_msg.lo prov/sockets/src/src_libfabric_la-sock_fabric.lo prov/sockets/src/src_libfabric_la-sock_ep.lo prov/sockets/src/src_libfabric_la-sock_ctx.lo prov/sockets/src/src_libfabric_la-sock_rx_entry.lo prov/sockets/src/src_libfabric_la-sock_progress.lo prov/sockets/src/src_libfabric_la-sock_comm.lo prov/sockets/src/src_libfabric_la-sock_conn.lo prov/sockets/src/src_libfabric_la-sock_msg.lo prov/sockets/src/src_libfabric_la-sock_rma.lo prov/sockets/src/src_libfabric_la-sock_atomic.lo prov/sockets/src/src_libfabric_la-sock_trigger.lo prov/udp/src/src_libfabric_la-udpx_attr.lo prov/udp/src/src_libfabric_la-udpx_cq.lo prov/udp/src/src_libfabric_la-udpx_domain.lo prov/udp/src/src_libfabric_la-udpx_ep.lo prov/udp/src/src_libfabric_la-udpx_fabric.lo prov/udp/src/src_libfabric_la-udpx_init.lo prov/verbs/src/src_libfabric_la-fi_verbs.lo prov/verbs/src/src_libfabric_la-verbs_cm.lo prov/verbs/src/src_libfabric_la-verbs_cm_xrc.lo prov/verbs/src/src_libfabric_la-verbs_cq.lo prov/verbs/src/src_libfabric_la-verbs_domain.lo prov/verbs/src/src_libfabric_la-verbs_domain_xrc.lo prov/verbs/src/src_libfabric_la-verbs_mr.lo prov/verbs/src/src_libfabric_la-verbs_eq.lo prov/verbs/src/src_libfabric_la-verbs_info.lo prov/verbs/src/src_libfabric_la-verbs_ep.lo prov/verbs/src/src_libfabric_la-verbs_msg.lo prov/verbs/src/src_libfabric_la-verbs_rma.lo prov/verbs/src/src_libfabric_la-verbs_dgram_ep_msg.lo prov/verbs/src/src_libfabric_la-verbs_dgram_av.lo prov/usnic/src/usnic_direct/src_libfabric_la-libnl_utils_common.lo prov/usnic/src/usnic_direct/src_libfabric_la-usd_caps.lo prov/usnic/src/usnic_direct/src_libfabric_la-usd_dest.lo prov/usnic/src/usnic_direct/src_libfabric_la-usd_device.lo prov/usnic/src/usnic_direct/src_libfabric_la-usd_event.lo prov/usnic/src/usnic_direct/src_libfabric_la-usd_enum.lo prov/usnic/src/usnic_direct/src_libfabric_la-usd_ib_cmd.lo prov/usnic/src/usnic_direct/src_libfabric_la-usd_ib_sysfs.lo prov/usnic/src/usnic_direct/src_libfabric_la-usd_mem.lo prov/usnic/src/usnic_direct/src_libfabric_la-usd_poll.lo prov/usnic/src/usnic_direct/src_libfabric_la-usd_post.lo prov/usnic/src/usnic_direct/src_libfabric_la-usd_post_ud_raw.lo prov/usnic/src/usnic_direct/src_libfabric_la-usd_post_ud_udp.lo prov/usnic/src/usnic_direct/src_libfabric_la-usd_post_ud_pio_udp.lo prov/usnic/src/usnic_direct/src_libfabric_la-usd_queues.lo prov/usnic/src/usnic_direct/src_libfabric_la-usd_socket.lo prov/usnic/src/usnic_direct/src_libfabric_la-usd_vnic.lo prov/usnic/src/usnic_direct/src_libfabric_la-usnic_ip_utils.lo prov/usnic/src/usnic_direct/src_libfabric_la-vnic_cq.lo prov/usnic/src/usnic_direct/src_libfabric_la-vnic_dev.lo prov/usnic/src/usnic_direct/src_libfabric_la-vnic_rq.lo prov/usnic/src/usnic_direct/src_libfabric_la-vnic_wq.lo prov/usnic/src/usnic_direct/src_libfabric_la-vnic_intr.lo prov/usnic/src/src_libfabric_la-usdf_av.lo prov/usnic/src/src_libfabric_la-usdf_cm.lo prov/usnic/src/src_libfabric_la-usdf_cq.lo prov/usnic/src/src_libfabric_la-usdf_dgram.lo prov/usnic/src/src_libfabric_la-usdf_domain.lo prov/usnic/src/src_libfabric_la-usdf_endpoint.lo prov/usnic/src/src_libfabric_la-usdf_ep_dgram.lo prov/usnic/src/src_libfabric_la-usdf_eq.lo prov/usnic/src/src_libfabric_la-usdf_fabric.lo prov/usnic/src/src_libfabric_la-usdf_mem.lo prov/usnic/src/src_libfabric_la-usdf_pep.lo prov/usnic/src/src_libfabric_la-usdf_progress.lo prov/usnic/src/src_libfabric_la-usdf_timer.lo prov/usnic/src/src_libfabric_la-usdf_poll.lo prov/usnic/src/src_libfabric_la-usdf_ext.lo prov/usnic/src/src_libfabric_la-usdf_wait.lo prov/rxm/src/src_libfabric_la-rxm_attr.lo prov/rxm/src/src_libfabric_la-rxm_init.lo prov/rxm/src/src_libfabric_la-rxm_fabric.lo prov/rxm/src/src_libfabric_la-rxm_domain.lo prov/rxm/src/src_libfabric_la-rxm_conn.lo prov/rxm/src/src_libfabric_la-rxm_ep.lo prov/rxm/src/src_libfabric_la-rxm_msg.lo prov/rxm/src/src_libfabric_la-rxm_tagged.lo prov/rxm/src/src_libfabric_la-rxm_cq.lo prov/rxm/src/src_libfabric_la-rxm_rma.lo prov/rxm/src/src_libfabric_la-rxm_atomic.lo prov/rxm/src/src_libfabric_la-rxm_eq.lo prov/mrail/src/src_libfabric_la-mrail_init.lo prov/mrail/src/src_libfabric_la-mrail_attr.lo prov/mrail/src/src_libfabric_la-mrail_fabric.lo prov/mrail/src/src_libfabric_la-mrail_domain.lo prov/mrail/src/src_libfabric_la-mrail_cq.lo prov/mrail/src/src_libfabric_la-mrail_ep.lo prov/mrail/src/src_libfabric_la-mrail_av.lo prov/mrail/src/src_libfabric_la-mrail_rma.lo prov/rxd/src/src_libfabric_la-rxd_attr.lo prov/rxd/src/src_libfabric_la-rxd_init.lo prov/rxd/src/src_libfabric_la-rxd_fabric.lo prov/rxd/src/src_libfabric_la-rxd_domain.lo prov/rxd/src/src_libfabric_la-rxd_av.lo prov/rxd/src/src_libfabric_la-rxd_cq.lo prov/rxd/src/src_libfabric_la-rxd_cntr.lo prov/rxd/src/src_libfabric_la-rxd_ep.lo prov/rxd/src/src_libfabric_la-rxd_msg.lo prov/rxd/src/src_libfabric_la-rxd_tagged.lo prov/rxd/src/src_libfabric_la-rxd_rma.lo prov/rxd/src/src_libfabric_la-rxd_atomic.lo prov/shm/src/src_libfabric_la-smr_attr.lo prov/shm/src/src_libfabric_la-smr_cq.lo prov/shm/src/src_libfabric_la-smr_domain.lo prov/shm/src/src_libfabric_la-smr_progress.lo prov/shm/src/src_libfabric_la-smr_comp.lo prov/shm/src/src_libfabric_la-smr_cntr.lo prov/shm/src/src_libfabric_la-smr_msg.lo prov/shm/src/src_libfabric_la-smr_rma.lo prov/shm/src/src_libfabric_la-smr_atomic.lo prov/shm/src/src_libfabric_la-smr_ep.lo prov/shm/src/src_libfabric_la-smr_fabric.lo prov/shm/src/src_libfabric_la-smr_init.lo prov/shm/src/src_libfabric_la-smr_av.lo prov/shm/src/src_libfabric_la-smr_dsa.lo prov/sm2/src/src_libfabric_la-sm2_attr.lo prov/sm2/src/src_libfabric_la-sm2_cq.lo prov/sm2/src/src_libfabric_la-sm2_domain.lo prov/sm2/src/src_libfabric_la-sm2_progress.lo prov/sm2/src/src_libfabric_la-sm2_comp.lo prov/sm2/src/src_libfabric_la-sm2_cntr.lo prov/sm2/src/src_libfabric_la-sm2_msg.lo prov/sm2/src/src_libfabric_la-sm2_ep.lo prov/sm2/src/src_libfabric_la-sm2_fabric.lo prov/sm2/src/src_libfabric_la-sm2_init.lo prov/sm2/src/src_libfabric_la-sm2_av.lo prov/sm2/src/src_libfabric_la-sm2_util.lo prov/tcp/src/src_libfabric_la-xnet_fabric.lo prov/tcp/src/src_libfabric_la-xnet_attr.lo prov/tcp/src/src_libfabric_la-xnet_cm.lo prov/tcp/src/src_libfabric_la-xnet_rdm_cm.lo prov/tcp/src/src_libfabric_la-xnet_domain.lo prov/tcp/src/src_libfabric_la-xnet_rma.lo prov/tcp/src/src_libfabric_la-xnet_msg.lo prov/tcp/src/src_libfabric_la-xnet_ep.lo prov/tcp/src/src_libfabric_la-xnet_rdm.lo prov/tcp/src/src_libfabric_la-xnet_pep.lo prov/tcp/src/src_libfabric_la-xnet_srx.lo prov/tcp/src/src_libfabric_la-xnet_cq.lo prov/tcp/src/src_libfabric_la-xnet_eq.lo prov/tcp/src/src_libfabric_la-xnet_init.lo prov/tcp/src/src_libfabric_la-xnet_progress.lo prov/rstream/src/src_libfabric_la-rstream_domain.lo prov/rstream/src/src_libfabric_la-rstream_fabric.lo prov/rstream/src/src_libfabric_la-rstream_attr.lo prov/rstream/src/src_libfabric_la-rstream_init.lo prov/rstream/src/src_libfabric_la-rstream_cm.lo prov/rstream/src/src_libfabric_la-rstream_msg.lo prov/rstream/src/src_libfabric_la-rstream_eq.lo prov/rstream/src/src_libfabric_la-rstream_ep.lo prov/hook/perf/src/src_libfabric_la-hook_perf.lo prov/hook/trace/src/src_libfabric_la-hook_trace.lo prov/hook/hook_debug/src/src_libfabric_la-hook_debug.lo prov/hook/hook_hmem/src/src_libfabric_la-hook_hmem.lo prov/hook/dmabuf_peer_mem/src/src_libfabric_la-hook_dmabuf_peer_mem.lo -lrt -lrdmacm -libverbs -lnl-3 -lnl-route-3 -lrt -lrt dmabuf_peer_mem_shm_LIBS -latomic -lrt -lpthread -ldl libtool: link: gcc -shared -fPIC -DPIC src/.libs/libfabric_la-fabric.o src/.libs/libfabric_la-fi_tostr.o src/.libs/libfabric_la-perf.o src/.libs/libfabric_la-log.o src/.libs/libfabric_la-var.o src/.libs/libfabric_la-abi_1_0.o prov/hook/src/.libs/src_libfabric_la-hook.o prov/hook/src/.libs/src_libfabric_la-hook_av.o prov/hook/src/.libs/src_libfabric_la-hook_cm.o prov/hook/src/.libs/src_libfabric_la-hook_cntr.o prov/hook/src/.libs/src_libfabric_la-hook_cq.o prov/hook/src/.libs/src_libfabric_la-hook_domain.o prov/hook/src/.libs/src_libfabric_la-hook_ep.o prov/hook/src/.libs/src_libfabric_la-hook_eq.o prov/hook/src/.libs/src_libfabric_la-hook_wait.o prov/hook/src/.libs/src_libfabric_la-hook_xfer.o src/.libs/libfabric_la-hmem.o src/.libs/libfabric_la-hmem_rocr.o src/.libs/libfabric_la-hmem_cuda.o src/.libs/libfabric_la-hmem_cuda_gdrcopy.o src/.libs/libfabric_la-hmem_ze.o src/.libs/libfabric_la-hmem_neuron.o src/.libs/libfabric_la-hmem_synapseai.o src/.libs/libfabric_la-hmem_ipc_cache.o src/.libs/libfabric_la-common.o src/.libs/libfabric_la-enosys.o src/.libs/libfabric_la-rbtree.o src/.libs/libfabric_la-tree.o src/.libs/libfabric_la-fasthash.o src/.libs/libfabric_la-indexer.o src/.libs/libfabric_la-mem.o src/.libs/libfabric_la-iov.o src/shared/.libs/libfabric_la-ofi_str.o prov/util/src/.libs/src_libfabric_la-util_atomic.o prov/util/src/.libs/src_libfabric_la-util_attr.o prov/util/src/.libs/src_libfabric_la-util_av.o prov/util/src/.libs/src_libfabric_la-rxm_av.o prov/util/src/.libs/src_libfabric_la-util_cq.o prov/util/src/.libs/src_libfabric_la-util_cntr.o prov/util/src/.libs/src_libfabric_la-util_domain.o prov/util/src/.libs/src_libfabric_la-util_ep.o prov/util/src/.libs/src_libfabric_la-util_pep.o prov/util/src/.libs/src_libfabric_la-util_eq.o prov/util/src/.libs/src_libfabric_la-util_fabric.o prov/util/src/.libs/src_libfabric_la-util_main.o prov/util/src/.libs/src_libfabric_la-util_poll.o prov/util/src/.libs/src_libfabric_la-util_wait.o prov/util/src/.libs/src_libfabric_la-util_buf.o prov/util/src/.libs/src_libfabric_la-util_mr_map.o prov/util/src/.libs/src_libfabric_la-util_ns.o prov/util/src/.libs/src_libfabric_la-util_shm.o prov/util/src/.libs/src_libfabric_la-util_mem_monitor.o prov/util/src/.libs/src_libfabric_la-util_mem_hooks.o prov/util/src/.libs/src_libfabric_la-util_mr_cache.o prov/util/src/.libs/src_libfabric_la-cuda_mem_monitor.o prov/util/src/.libs/src_libfabric_la-rocr_mem_monitor.o prov/util/src/.libs/src_libfabric_la-ze_mem_monitor.o prov/util/src/.libs/src_libfabric_la-cuda_ipc_monitor.o prov/util/src/.libs/src_libfabric_la-rocr_ipc_monitor.o prov/coll/src/.libs/src_libfabric_la-coll_attr.o prov/coll/src/.libs/src_libfabric_la-coll_av.o prov/coll/src/.libs/src_libfabric_la-coll_av_set.o prov/coll/src/.libs/src_libfabric_la-coll_coll.o prov/coll/src/.libs/src_libfabric_la-coll_cq.o prov/coll/src/.libs/src_libfabric_la-coll_domain.o prov/coll/src/.libs/src_libfabric_la-coll_ep.o prov/coll/src/.libs/src_libfabric_la-coll_eq.o prov/coll/src/.libs/src_libfabric_la-coll_fabric.o prov/coll/src/.libs/src_libfabric_la-coll_init.o src/unix/.libs/libfabric_la-osd.o src/linux/.libs/libfabric_la-osd.o src/linux/.libs/libfabric_la-rdpmc.o prov/sockets/src/.libs/src_libfabric_la-sock_attr.o prov/sockets/src/.libs/src_libfabric_la-sock_av.o prov/sockets/src/.libs/src_libfabric_la-sock_dom.o prov/sockets/src/.libs/src_libfabric_la-sock_mr.o prov/sockets/src/.libs/src_libfabric_la-sock_eq.o prov/sockets/src/.libs/src_libfabric_la-sock_cq.o prov/sockets/src/.libs/src_libfabric_la-sock_cntr.o prov/sockets/src/.libs/src_libfabric_la-sock_poll.o prov/sockets/src/.libs/src_libfabric_la-sock_wait.o prov/sockets/src/.libs/src_libfabric_la-sock_ep_rdm.o prov/sockets/src/.libs/src_libfabric_la-sock_ep_dgram.o prov/sockets/src/.libs/src_libfabric_la-sock_ep_msg.o prov/sockets/src/.libs/src_libfabric_la-sock_fabric.o prov/sockets/src/.libs/src_libfabric_la-sock_ep.o prov/sockets/src/.libs/src_libfabric_la-sock_ctx.o prov/sockets/src/.libs/src_libfabric_la-sock_rx_entry.o prov/sockets/src/.libs/src_libfabric_la-sock_progress.o prov/sockets/src/.libs/src_libfabric_la-sock_comm.o prov/sockets/src/.libs/src_libfabric_la-sock_conn.o prov/sockets/src/.libs/src_libfabric_la-sock_msg.o prov/sockets/src/.libs/src_libfabric_la-sock_rma.o prov/sockets/src/.libs/src_libfabric_la-sock_atomic.o prov/sockets/src/.libs/src_libfabric_la-sock_trigger.o prov/udp/src/.libs/src_libfabric_la-udpx_attr.o prov/udp/src/.libs/src_libfabric_la-udpx_cq.o prov/udp/src/.libs/src_libfabric_la-udpx_domain.o prov/udp/src/.libs/src_libfabric_la-udpx_ep.o prov/udp/src/.libs/src_libfabric_la-udpx_fabric.o prov/udp/src/.libs/src_libfabric_la-udpx_init.o prov/verbs/src/.libs/src_libfabric_la-fi_verbs.o prov/verbs/src/.libs/src_libfabric_la-verbs_cm.o prov/verbs/src/.libs/src_libfabric_la-verbs_cm_xrc.o prov/verbs/src/.libs/src_libfabric_la-verbs_cq.o prov/verbs/src/.libs/src_libfabric_la-verbs_domain.o prov/verbs/src/.libs/src_libfabric_la-verbs_domain_xrc.o prov/verbs/src/.libs/src_libfabric_la-verbs_mr.o prov/verbs/src/.libs/src_libfabric_la-verbs_eq.o prov/verbs/src/.libs/src_libfabric_la-verbs_info.o prov/verbs/src/.libs/src_libfabric_la-verbs_ep.o prov/verbs/src/.libs/src_libfabric_la-verbs_msg.o prov/verbs/src/.libs/src_libfabric_la-verbs_rma.o prov/verbs/src/.libs/src_libfabric_la-verbs_dgram_ep_msg.o prov/verbs/src/.libs/src_libfabric_la-verbs_dgram_av.o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-libnl_utils_common.o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_caps.o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_dest.o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_device.o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_event.o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_enum.o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_ib_cmd.o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_ib_sysfs.o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_mem.o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_poll.o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_post.o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_post_ud_raw.o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_post_ud_udp.o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_post_ud_pio_udp.o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_queues.o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_socket.o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usd_vnic.o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-usnic_ip_utils.o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-vnic_cq.o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-vnic_dev.o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-vnic_rq.o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-vnic_wq.o prov/usnic/src/usnic_direct/.libs/src_libfabric_la-vnic_intr.o prov/usnic/src/.libs/src_libfabric_la-usdf_av.o prov/usnic/src/.libs/src_libfabric_la-usdf_cm.o prov/usnic/src/.libs/src_libfabric_la-usdf_cq.o prov/usnic/src/.libs/src_libfabric_la-usdf_dgram.o prov/usnic/src/.libs/src_libfabric_la-usdf_domain.o prov/usnic/src/.libs/src_libfabric_la-usdf_endpoint.o prov/usnic/src/.libs/src_libfabric_la-usdf_ep_dgram.o prov/usnic/src/.libs/src_libfabric_la-usdf_eq.o prov/usnic/src/.libs/src_libfabric_la-usdf_fabric.o prov/usnic/src/.libs/src_libfabric_la-usdf_mem.o prov/usnic/src/.libs/src_libfabric_la-usdf_pep.o prov/usnic/src/.libs/src_libfabric_la-usdf_progress.o prov/usnic/src/.libs/src_libfabric_la-usdf_timer.o prov/usnic/src/.libs/src_libfabric_la-usdf_poll.o prov/usnic/src/.libs/src_libfabric_la-usdf_ext.o prov/usnic/src/.libs/src_libfabric_la-usdf_wait.o prov/rxm/src/.libs/src_libfabric_la-rxm_attr.o prov/rxm/src/.libs/src_libfabric_la-rxm_init.o prov/rxm/src/.libs/src_libfabric_la-rxm_fabric.o prov/rxm/src/.libs/src_libfabric_la-rxm_domain.o prov/rxm/src/.libs/src_libfabric_la-rxm_conn.o prov/rxm/src/.libs/src_libfabric_la-rxm_ep.o prov/rxm/src/.libs/src_libfabric_la-rxm_msg.o prov/rxm/src/.libs/src_libfabric_la-rxm_tagged.o prov/rxm/src/.libs/src_libfabric_la-rxm_cq.o prov/rxm/src/.libs/src_libfabric_la-rxm_rma.o prov/rxm/src/.libs/src_libfabric_la-rxm_atomic.o prov/rxm/src/.libs/src_libfabric_la-rxm_eq.o prov/mrail/src/.libs/src_libfabric_la-mrail_init.o prov/mrail/src/.libs/src_libfabric_la-mrail_attr.o prov/mrail/src/.libs/src_libfabric_la-mrail_fabric.o prov/mrail/src/.libs/src_libfabric_la-mrail_domain.o prov/mrail/src/.libs/src_libfabric_la-mrail_cq.o prov/mrail/src/.libs/src_libfabric_la-mrail_ep.o prov/mrail/src/.libs/src_libfabric_la-mrail_av.o prov/mrail/src/.libs/src_libfabric_la-mrail_rma.o prov/rxd/src/.libs/src_libfabric_la-rxd_attr.o prov/rxd/src/.libs/src_libfabric_la-rxd_init.o prov/rxd/src/.libs/src_libfabric_la-rxd_fabric.o prov/rxd/src/.libs/src_libfabric_la-rxd_domain.o prov/rxd/src/.libs/src_libfabric_la-rxd_av.o prov/rxd/src/.libs/src_libfabric_la-rxd_cq.o prov/rxd/src/.libs/src_libfabric_la-rxd_cntr.o prov/rxd/src/.libs/src_libfabric_la-rxd_ep.o prov/rxd/src/.libs/src_libfabric_la-rxd_msg.o prov/rxd/src/.libs/src_libfabric_la-rxd_tagged.o prov/rxd/src/.libs/src_libfabric_la-rxd_rma.o prov/rxd/src/.libs/src_libfabric_la-rxd_atomic.o prov/shm/src/.libs/src_libfabric_la-smr_attr.o prov/shm/src/.libs/src_libfabric_la-smr_cq.o prov/shm/src/.libs/src_libfabric_la-smr_domain.o prov/shm/src/.libs/src_libfabric_la-smr_progress.o prov/shm/src/.libs/src_libfabric_la-smr_comp.o prov/shm/src/.libs/src_libfabric_la-smr_cntr.o prov/shm/src/.libs/src_libfabric_la-smr_msg.o prov/shm/src/.libs/src_libfabric_la-smr_rma.o prov/shm/src/.libs/src_libfabric_la-smr_atomic.o prov/shm/src/.libs/src_libfabric_la-smr_ep.o prov/shm/src/.libs/src_libfabric_la-smr_fabric.o prov/shm/src/.libs/src_libfabric_la-smr_init.o prov/shm/src/.libs/src_libfabric_la-smr_av.o prov/shm/src/.libs/src_libfabric_la-smr_dsa.o prov/sm2/src/.libs/src_libfabric_la-sm2_attr.o prov/sm2/src/.libs/src_libfabric_la-sm2_cq.o prov/sm2/src/.libs/src_libfabric_la-sm2_domain.o prov/sm2/src/.libs/src_libfabric_la-sm2_progress.o prov/sm2/src/.libs/src_libfabric_la-sm2_comp.o prov/sm2/src/.libs/src_libfabric_la-sm2_cntr.o prov/sm2/src/.libs/src_libfabric_la-sm2_msg.o prov/sm2/src/.libs/src_libfabric_la-sm2_ep.o prov/sm2/src/.libs/src_libfabric_la-sm2_fabric.o prov/sm2/src/.libs/src_libfabric_la-sm2_init.o prov/sm2/src/.libs/src_libfabric_la-sm2_av.o prov/sm2/src/.libs/src_libfabric_la-sm2_util.o prov/tcp/src/.libs/src_libfabric_la-xnet_fabric.o prov/tcp/src/.libs/src_libfabric_la-xnet_attr.o prov/tcp/src/.libs/src_libfabric_la-xnet_cm.o prov/tcp/src/.libs/src_libfabric_la-xnet_rdm_cm.o prov/tcp/src/.libs/src_libfabric_la-xnet_domain.o prov/tcp/src/.libs/src_libfabric_la-xnet_rma.o prov/tcp/src/.libs/src_libfabric_la-xnet_msg.o prov/tcp/src/.libs/src_libfabric_la-xnet_ep.o prov/tcp/src/.libs/src_libfabric_la-xnet_rdm.o prov/tcp/src/.libs/src_libfabric_la-xnet_pep.o prov/tcp/src/.libs/src_libfabric_la-xnet_srx.o prov/tcp/src/.libs/src_libfabric_la-xnet_cq.o prov/tcp/src/.libs/src_libfabric_la-xnet_eq.o prov/tcp/src/.libs/src_libfabric_la-xnet_init.o prov/tcp/src/.libs/src_libfabric_la-xnet_progress.o prov/rstream/src/.libs/src_libfabric_la-rstream_domain.o prov/rstream/src/.libs/src_libfabric_la-rstream_fabric.o prov/rstream/src/.libs/src_libfabric_la-rstream_attr.o prov/rstream/src/.libs/src_libfabric_la-rstream_init.o prov/rstream/src/.libs/src_libfabric_la-rstream_cm.o prov/rstream/src/.libs/src_libfabric_la-rstream_msg.o prov/rstream/src/.libs/src_libfabric_la-rstream_eq.o prov/rstream/src/.libs/src_libfabric_la-rstream_ep.o prov/hook/perf/src/.libs/src_libfabric_la-hook_perf.o prov/hook/trace/src/.libs/src_libfabric_la-hook_trace.o prov/hook/hook_debug/src/.libs/src_libfabric_la-hook_debug.o prov/hook/hook_hmem/src/.libs/src_libfabric_la-hook_hmem.o prov/hook/dmabuf_peer_mem/src/.libs/src_libfabric_la-hook_dmabuf_peer_mem.o -lrdmacm -libverbs -lnl-3 -lnl-route-3 -latomic -lrt -lpthread -ldl -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -O2 -O2 -g -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -Wl,--version-script=./libfabric.map -Wl,-z -Wl,relro -Wl,-z -Wl,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-soname -Wl,libfabric.so.1 -o src/.libs/libfabric.so.1.21.0 libtool: link: (cd "src/.libs" && rm -f "libfabric.so.1" && ln -s "libfabric.so.1.21.0" "libfabric.so.1") libtool: link: (cd "src/.libs" && rm -f "libfabric.so" && ln -s "libfabric.so.1.21.0" "libfabric.so") libtool: link: ( cd "src/.libs" && rm -f "libfabric.la" && ln -s "../libfabric.la" "libfabric.la" ) make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=link gcc -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -o util/fi_strerror util/strerror.o src/libfabric.la -latomic -lrt -lpthread -ldl libtool: link: gcc -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -Wl,-z -Wl,relro -Wl,-z -Wl,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -o util/.libs/fi_strerror util/strerror.o src/.libs/libfabric.so -lrdmacm -libverbs -lnl-3 -lnl-route-3 -latomic -lrt -lpthread -ldl make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=link gcc -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -o util/fi_info util/info.o src/libfabric.la -latomic -lrt -lpthread -ldl libtool: link: gcc -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -Wl,-z -Wl,relro -Wl,-z -Wl,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -o util/.libs/fi_info util/info.o src/.libs/libfabric.so -lrdmacm -libverbs -lnl-3 -lnl-route-3 -latomic -lrt -lpthread -ldl make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /bin/sh ./libtool --tag=CC --mode=link gcc -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -o util/fi_pingpong util/pingpong.o src/libfabric.la -latomic -lrt -lpthread -ldl libtool: link: gcc -Wall -O2 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=x86-64 -mtune=generic -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -Wl,-z -Wl,relro -Wl,-z -Wl,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -o util/.libs/fi_pingpong util/pingpong.o src/.libs/libfabric.so -lrdmacm -libverbs -lnl-3 -lnl-route-3 -latomic -lrt -lpthread -ldl make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' + exit 0 Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.rvcOhx + umask 022 + cd /builddir/build/BUILD + '[' /builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386 '!=' / ']' + rm -rf /builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386 ++ dirname /builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386 + mkdir -p /builddir/build/BUILDROOT + mkdir /builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386 + cd libfabric-1.18.0 + /usr/bin/make install DESTDIR=/builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386 'INSTALL=/usr/bin/install -p' /usr/bin/make install-am make[1]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' make[2]: Entering directory '/builddir/build/BUILD/libfabric-1.18.0' /usr/bin/mkdir -p '/builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/lib' /bin/sh ./libtool --mode=install /usr/bin/install -p src/libfabric.la '/builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/lib' libtool: install: /usr/bin/install -p src/.libs/libfabric.so.1.21.0 /builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/lib/libfabric.so.1.21.0 libtool: install: (cd /builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/lib && { ln -s -f libfabric.so.1.21.0 libfabric.so.1 || { rm -f libfabric.so.1 && ln -s libfabric.so.1.21.0 libfabric.so.1; }; }) libtool: install: (cd /builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/lib && { ln -s -f libfabric.so.1.21.0 libfabric.so || { rm -f libfabric.so && ln -s libfabric.so.1.21.0 libfabric.so; }; }) libtool: install: /usr/bin/install -p src/.libs/libfabric.lai /builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/lib/libfabric.la libtool: warning: remember to run 'libtool --finish /usr/lib' /usr/bin/mkdir -p '/builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/bin' /bin/sh ./libtool --mode=install /usr/bin/install -p util/fi_info util/fi_strerror util/fi_pingpong '/builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/bin' libtool: warning: 'src/libfabric.la' has not been installed in '/usr/lib' libtool: install: /usr/bin/install -p util/.libs/fi_info /builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/bin/fi_info libtool: warning: 'src/libfabric.la' has not been installed in '/usr/lib' libtool: install: /usr/bin/install -p util/.libs/fi_strerror /builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/bin/fi_strerror libtool: warning: 'src/libfabric.la' has not been installed in '/usr/lib' libtool: install: /usr/bin/install -p util/.libs/fi_pingpong /builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/bin/fi_pingpong /usr/bin/mkdir -p '/builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/share/man/man1' /usr/bin/install -p -m 644 man/man1/fi_info.1 man/man1/fi_pingpong.1 man/man1/fi_strerror.1 '/builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/share/man/man1' /usr/bin/mkdir -p '/builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/share/man/man3' /usr/bin/install -p -m 644 man/man3/fi_atomic.3 man/man3/fi_av.3 man/man3/fi_av_set.3 man/man3/fi_cm.3 man/man3/fi_cntr.3 man/man3/fi_collective.3 man/man3/fi_control.3 man/man3/fi_cq.3 man/man3/fi_domain.3 man/man3/fi_endpoint.3 man/man3/fi_errno.3 man/man3/fi_eq.3 man/man3/fi_fabric.3 man/man3/fi_peer.3 man/man3/fi_provider.3 man/man3/fi_getinfo.3 man/man3/fi_mr.3 man/man3/fi_msg.3 man/man3/fi_nic.3 man/man3/fi_poll.3 man/man3/fi_rma.3 man/man3/fi_tagged.3 man/man3/fi_trigger.3 man/man3/fi_version.3 man/man3/fi_accept.3 man/man3/fi_alias.3 man/man3/fi_allgather.3 man/man3/fi_allreduce.3 man/man3/fi_alltoall.3 man/man3/fi_atomic_valid.3 man/man3/fi_atomicmsg.3 man/man3/fi_atomicv.3 man/man3/fi_av_bind.3 man/man3/fi_av_insert.3 man/man3/fi_av_insertsvc.3 man/man3/fi_av_lookup.3 man/man3/fi_av_open.3 man/man3/fi_av_remove.3 man/man3/fi_av_set_diff.3 man/man3/fi_av_set_insert.3 '/builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/share/man/man3' /usr/bin/install -p -m 644 man/man3/fi_av_set_intersect.3 man/man3/fi_av_set_remove.3 man/man3/fi_av_set_union.3 man/man3/fi_av_straddr.3 man/man3/fi_barrier.3 man/man3/fi_broadcast.3 man/man3/fi_cancel.3 man/man3/fi_close.3 man/man3/fi_cntr_add.3 man/man3/fi_cntr_open.3 man/man3/fi_cntr_read.3 man/man3/fi_cntr_set.3 man/man3/fi_cntr_wait.3 man/man3/fi_compare_atomic.3 man/man3/fi_compare_atomic_valid.3 man/man3/fi_compare_atomicmsg.3 man/man3/fi_compare_atomicv.3 man/man3/fi_connect.3 man/man3/fi_cq_open.3 man/man3/fi_cq_read.3 man/man3/fi_cq_readerr.3 man/man3/fi_cq_readfrom.3 man/man3/fi_cq_sread.3 man/man3/fi_cq_sreadfrom.3 man/man3/fi_cq_strerror.3 man/man3/fi_cq_signal.3 man/man3/fi_domain_bind.3 man/man3/fi_domain_query.3 man/man3/fi_dupinfo.3 man/man3/fi_enable.3 man/man3/fi_ep.3 man/man3/fi_ep_bind.3 man/man3/fi_eq_open.3 man/man3/fi_eq_read.3 man/man3/fi_eq_readerr.3 man/man3/fi_eq_sread.3 man/man3/fi_eq_strerror.3 man/man3/fi_eq_write.3 man/man3/fi_fetch_atomic.3 man/man3/fi_fetch_atomic_valid.3 '/builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/share/man/man3' /usr/bin/install -p -m 644 man/man3/fi_fetch_atomicmsg.3 man/man3/fi_fetch_atomicv.3 man/man3/fi_freeinfo.3 man/man3/fi_getname.3 man/man3/fi_getopt.3 man/man3/fi_getpeer.3 man/man3/fi_inject.3 man/man3/fi_injectdata.3 man/man3/fi_inject_atomic.3 man/man3/fi_inject_write.3 man/man3/fi_inject_writedata.3 man/man3/fi_join.3 man/man3/fi_join_collective.3 man/man3/fi_leave.3 man/man3/fi_listen.3 man/man3/fi_mr_bind.3 man/man3/fi_mr_desc.3 man/man3/fi_mr_key.3 man/man3/fi_mr_reg.3 man/man3/fi_mr_regattr.3 man/man3/fi_mr_regv.3 man/man3/fi_open.3 man/man3/fi_open_ops.3 man/man3/fi_passive_ep.3 man/man3/fi_pep_bind.3 man/man3/fi_poll_add.3 man/man3/fi_poll_del.3 man/man3/fi_poll_open.3 man/man3/fi_query_atomic.3 man/man3/fi_query_collective.3 man/man3/fi_read.3 man/man3/fi_readmsg.3 man/man3/fi_readv.3 man/man3/fi_recv.3 man/man3/fi_recvmsg.3 man/man3/fi_recvv.3 man/man3/fi_reduce_scatter.3 man/man3/fi_reject.3 man/man3/fi_rx_addr.3 man/man3/fi_rx_size_left.3 '/builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/share/man/man3' /usr/bin/install -p -m 644 man/man3/fi_scalable_ep_bind.3 man/man3/fi_send.3 man/man3/fi_senddata.3 man/man3/fi_sendmsg.3 man/man3/fi_sendv.3 man/man3/fi_setname.3 man/man3/fi_setopt.3 man/man3/fi_shutdown.3 man/man3/fi_strerror.3 man/man3/fi_tinject.3 man/man3/fi_tinjectdata.3 man/man3/fi_tostr.3 man/man3/fi_trecv.3 man/man3/fi_trecvmsg.3 man/man3/fi_trecvv.3 man/man3/fi_trywait.3 man/man3/fi_tsend.3 man/man3/fi_tsenddata.3 man/man3/fi_tsendmsg.3 man/man3/fi_tsendv.3 man/man3/fi_tx_size_left.3 man/man3/fi_wait.3 man/man3/fi_wait_open.3 man/man3/fi_write.3 man/man3/fi_writedata.3 man/man3/fi_writemsg.3 man/man3/fi_writev.3 '/builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/share/man/man3' /usr/bin/mkdir -p '/builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/share/man/man7' /usr/bin/install -p -m 644 man/man7/fabric.7 man/man7/fi_arch.7 man/man7/fi_direct.7 man/man7/fi_guide.7 man/man7/fi_hook.7 man/man7/fi_intro.7 man/man7/fi_provider.7 man/man7/fi_setup.7 man/man7/fi_sockets.7 man/man7/fi_udp.7 man/man7/fi_verbs.7 man/man7/fi_usnic.7 man/man7/fi_rxm.7 man/man7/fi_mrail.7 man/man7/fi_shm.7 man/man7/fi_tcp.7 man/man7/fi_rstream.7 '/builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/share/man/man7' /usr/bin/mkdir -p '/builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/lib/pkgconfig' /usr/bin/install -p -m 644 libfabric.pc '/builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/lib/pkgconfig' /usr/bin/mkdir -p '/builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/include/rdma/providers' /usr/bin/install -p -m 644 ./include/rdma/providers/fi_log.h ./include/rdma/providers/fi_peer.h ./include/rdma/providers/fi_prov.h '/builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/include/rdma/providers' /usr/bin/mkdir -p '/builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/include/rdma' /usr/bin/install -p -m 644 ./include/rdma/fabric.h ./include/rdma/fi_atomic.h ./include/rdma/fi_cm.h ./include/rdma/fi_collective.h ./include/rdma/fi_domain.h ./include/rdma/fi_eq.h ./include/rdma/fi_ext.h ./include/rdma/fi_rma.h ./include/rdma/fi_endpoint.h ./include/rdma/fi_errno.h ./include/rdma/fi_tagged.h ./include/rdma/fi_trigger.h prov/usnic/src/fi_ext_usnic.h '/builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/include/rdma' make[2]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' make[1]: Leaving directory '/builddir/build/BUILD/libfabric-1.18.0' + find /builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386 -name '*.la' -exec rm -f '{}' ';' + /usr/lib/rpm/find-debuginfo.sh -j16 --strict-build-id -m -i --build-id-seed 1.18.0-1.el8 --unique-debug-suffix -1.18.0-1.el8.i386 --unique-debug-src-base libfabric-1.18.0-1.el8.i386 --run-dwz --dwz-low-mem-die-limit 10000000 --dwz-max-die-limit 50000000 -S debugsourcefiles.list /builddir/build/BUILD/libfabric-1.18.0 extracting debug info from /builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/bin/fi_pingpong extracting debug info from /builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/bin/fi_info extracting debug info from /builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/lib/libfabric.so.1.21.0 extracting debug info from /builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/bin/fi_strerror /usr/lib/rpm/sepdebugcrcfix: Updated 4 CRC32s, 0 CRC32s did match. 8364 blocks + /usr/lib/rpm/check-buildroot + /usr/lib/rpm/redhat/brp-ldconfig /sbin/ldconfig: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf: No such file or directory + /usr/lib/rpm/brp-compress + /usr/lib/rpm/brp-strip-static-archive /usr/bin/strip + /usr/lib/rpm/brp-python-bytecompile '' 1 + /usr/lib/rpm/brp-python-hardlink + PYTHON3=/usr/libexec/platform-python + /usr/lib/rpm/redhat/brp-mangle-shebangs Processing files: libfabric-1.18.0-1.el8.i686 Executing(%license): /bin/sh -e /var/tmp/rpm-tmp.VJWKDA + umask 022 + cd /builddir/build/BUILD + cd libfabric-1.18.0 + LICENSEDIR=/builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/share/licenses/libfabric + export LC_ALL=C + LC_ALL=C + export LICENSEDIR + /usr/bin/mkdir -p /builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/share/licenses/libfabric + cp -pr COPYING /builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/share/licenses/libfabric + exit 0 Provides: libfabric = 1.18.0-1.el8 libfabric(x86-32) = 1.18.0-1.el8 libfabric.so.1 libfabric.so.1(FABRIC_1.0) libfabric.so.1(FABRIC_1.1) libfabric.so.1(FABRIC_1.2) libfabric.so.1(FABRIC_1.3) libfabric.so.1(FABRIC_1.4) libfabric.so.1(FABRIC_1.5) libfabric.so.1(FABRIC_1.6) Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 Requires: libatomic.so.1 libc.so.6 libc.so.6(GLIBC_2.0) libc.so.6(GLIBC_2.1) libc.so.6(GLIBC_2.1.3) libc.so.6(GLIBC_2.17) libc.so.6(GLIBC_2.2) libc.so.6(GLIBC_2.28) libc.so.6(GLIBC_2.3) libc.so.6(GLIBC_2.3.2) libc.so.6(GLIBC_2.3.4) libc.so.6(GLIBC_2.4) libc.so.6(GLIBC_2.7) libc.so.6(GLIBC_2.8) libdl.so.2 libdl.so.2(GLIBC_2.0) libdl.so.2(GLIBC_2.1) libfabric.so.1 libfabric.so.1(FABRIC_1.0) libfabric.so.1(FABRIC_1.1) libfabric.so.1(FABRIC_1.3) libfabric.so.1(FABRIC_1.4) libibverbs.so.1 libibverbs.so.1(IBVERBS_1.0) libibverbs.so.1(IBVERBS_1.1) libibverbs.so.1(IBVERBS_1.12) libnl-3.so.200 libnl-3.so.200(libnl_3) libnl-route-3.so.200 libpthread.so.0 libpthread.so.0(GLIBC_2.0) libpthread.so.0(GLIBC_2.1) libpthread.so.0(GLIBC_2.2) libpthread.so.0(GLIBC_2.3.2) libpthread.so.0(GLIBC_2.3.4) librdmacm.so.1 librdmacm.so.1(RDMACM_1.0) librdmacm.so.1(RDMACM_1.2) librt.so.1 librt.so.1(GLIBC_2.2) rtld(GNU_HASH) Processing files: libfabric-devel-1.18.0-1.el8.i686 Executing(%doc): /bin/sh -e /var/tmp/rpm-tmp.7XQZ1k + umask 022 + cd /builddir/build/BUILD + cd libfabric-1.18.0 + DOCDIR=/builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/share/doc/libfabric-devel + export LC_ALL=C + LC_ALL=C + export DOCDIR + /usr/bin/mkdir -p /builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/share/doc/libfabric-devel + cp -pr AUTHORS /builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/share/doc/libfabric-devel + cp -pr README /builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/share/doc/libfabric-devel + exit 0 Executing(%license): /bin/sh -e /var/tmp/rpm-tmp.ECPof5 + umask 022 + cd /builddir/build/BUILD + cd libfabric-1.18.0 + LICENSEDIR=/builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/share/licenses/libfabric-devel + export LC_ALL=C + LC_ALL=C + export LICENSEDIR + /usr/bin/mkdir -p /builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/share/licenses/libfabric-devel + cp -pr COPYING /builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386/usr/share/licenses/libfabric-devel + exit 0 Provides: libfabric-devel = 1.18.0-1.el8 libfabric-devel(x86-32) = 1.18.0-1.el8 pkgconfig(libfabric) = 1.18.0 Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 Requires: /usr/bin/pkg-config libfabric.so.1 Processing files: libfabric-debugsource-1.18.0-1.el8.i686 Provides: libfabric-debugsource = 1.18.0-1.el8 libfabric-debugsource(x86-32) = 1.18.0-1.el8 Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 Processing files: libfabric-debuginfo-1.18.0-1.el8.i686 Provides: debuginfo(build-id) = 1839fbfb7d0169adf8efff17727a71799476f437 debuginfo(build-id) = 341e8f381e085b556563e008754d592603eb1c5e debuginfo(build-id) = c49e971ba527fda1a08fab8d94e3b8b5283b1a48 debuginfo(build-id) = e5b93872323e516218be5811843d799d63bae346 libfabric-debuginfo = 1.18.0-1.el8 libfabric-debuginfo(x86-32) = 1.18.0-1.el8 Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 Recommends: libfabric-debugsource(x86-32) = 1.18.0-1.el8 Checking for unpackaged file(s): /usr/lib/rpm/check-files /builddir/build/BUILDROOT/libfabric-1.18.0-1.el8.i386 Wrote: /builddir/build/RPMS/libfabric-1.18.0-1.el8.i686.rpm Wrote: /builddir/build/RPMS/libfabric-devel-1.18.0-1.el8.i686.rpm Wrote: /builddir/build/RPMS/libfabric-debugsource-1.18.0-1.el8.i686.rpm Wrote: /builddir/build/RPMS/libfabric-debuginfo-1.18.0-1.el8.i686.rpm Child return code was: 0