1Introduction 2============ 3 4libmlx4 is a userspace driver for Mellanox ConnectX InfiniBand HCAs. 5It is a plug-in module for libibverbs that allows programs to use 6Mellanox hardware directly from userspace. See the libibverbs package 7for more information. 8 9Using libmlx4 10============== 11 12libmlx4 will be loaded and used automatically by programs linked with 13libibverbs. The mlx4_ib kernel module must be loaded for HCA devices 14to be detected and used. 15 16Supported Hardware 17================== 18 19libmlx4 currently supports HCAs based on the following Mellanox chip: 20 21 MT25408 ConnectX (PCI Express) 22 23These HCAs use the mlx4_ib kernel driver. Support for other Mellanox 24HCAs, which use the ib_mthca kernel driver, is provided by the 25libmthca userspace driver. 26 27Valgrind Support 28================ 29 30When running applications that use libibverbs under the Valgrind 31memory-checking debugger, Valgrind will falsely report "read from 32uninitialized" for memory that was initialized by the kernel drivers 33or HCA hardware. Specifically, Valgrind cannot see when kernel 34drivers or HCA hardware write to userspace memory, so when the process 35reads from that memory, Valgrind incorrectly assumes that the memory 36contents are uninitialized, and therefore raises a warning. 37 38libmlx4 can be built with specific support for the Valgrind 39memory-checking debugger by specifying the --with-valgrind command 40line argument to configure. This flag enables code in libibverbs to 41tell Valgrind "this memory may look uninitialized, but it's really 42OK," which therefore suppresses the incorrect "read from 43uninitialized" warnings. This code adds trivial overhead to the 44critical performance path, so it is disabled by default. The intent 45is that production users can use a "normal" build of libmlx4 and 46developers can use the "valgrind debug" build by simply switching 47their OPENIB_DRIVER_PATH environment variables. 48 49Libmlx4 needs some header files from Valgrind in order to compile this 50support; it is important to use the header files from the same version 51of Valgrind that will be used at run time. You may need to specify 52the directory where Valgrind's header files are installed as an 53argument to --with-valgrind. For example 54 55 ./configure --with-valgrind=/opt/valgrind 56 57will make the libmlx4 build look for valgrind headers in 58/opt/valgrind/include 59