# HG changeset patch # User boris.chiu@oracle.com # Date 1437160288 25200 # Node ID 353f8a998732da9ea8cebad4b3d0f805f35641bf # Parent 0cca05cde8698dc1ccbad12043c084cd811a5d43 PSARC 2015/310 IBTF and OFUV updates 20735273 libibverbs must support AH interfaces for PSIF 21055860 ib_write_bw/ib_send_bw not sending inline data for non-hermon hcas 20889536 remove some compiler warnings in libibverbs 21351609 Some sol_uverbs <-> libibverbs cmd/resp API structs not 64 bit aligned 20888202 remove Mellanox specific code from libibverbs 20449637 Open Fabrics tools/utilities should be LP64 only 20549008 open-fabrics should move from gcc3 to gcc4 21218536 qperf randomly cores when compiled with gcc 4.8.2 diff -r 0cca05cde869 -r 353f8a998732 components/open-fabrics/ibutils/Makefile --- a/components/open-fabrics/ibutils/Makefile Thu Jul 16 15:20:48 2015 -0700 +++ b/components/open-fabrics/ibutils/Makefile Fri Jul 17 12:11:28 2015 -0700 @@ -22,7 +22,7 @@ # # OFED only builds with GCC -COMPILER=gcc3 +COMPILER=gcc include ../../../make-rules/shared-macros.mk @@ -40,12 +40,16 @@ LIBS += -lsocket -lnsl -lopensm -losmvendor -losmcomp -libumad -libmad +LDFLAGS.64 += -L $(PROTO_DIR)/usr/lib/$(MACH64) + # we want to use the libcheck here DISABLE_LIBCHECK= CONFIGURE_ENV += INSTALL_DATA="$(INSTALL) -m 644" +CONFIGURE_OPTIONS += CXXFLAGS="$(CXXFLAGS)" CONFIGURE_OPTIONS += --with-osm=$(PROTO_DIR)/usr +CONFIGURE_OPTIONS += --bindir=$(USRSBINDIR) PROTOMAN = $(PROTO_DIR)/$(CONFIGURE_MANDIR) @@ -98,11 +102,11 @@ $(RM) -r $(CLEANUP_DIRS) # common targets -configure: $(CONFIGURE_32) +configure: $(CONFIGURE_32_and_64) -build: $(BUILD_32) +build: $(BUILD_32_and_64) -install: $(INSTALL_32) +install: $(INSTALL_32_and_64) test: $(NO_TESTS) diff -r 0cca05cde869 -r 353f8a998732 components/open-fabrics/ibutils/patches/base.patch --- a/components/open-fabrics/ibutils/patches/base.patch Thu Jul 16 15:20:48 2015 -0700 +++ b/components/open-fabrics/ibutils/patches/base.patch Fri Jul 17 12:11:28 2015 -0700 @@ -305,60 +305,15 @@ install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) -@@ -96,7 +96,7 @@ - am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' --am__installdirs = "$(DESTDIR)$(bindir)" -+am__installdirs = "$(DESTDIR)$(sbindir)" - SCRIPTS = $(bin_SCRIPTS) - SOURCES = - DIST_SOURCES = -@@ -224,8 +224,8 @@ - $(am__aclocal_m4_deps): - install-binSCRIPTS: $(bin_SCRIPTS) - @$(NORMAL_INSTALL) -- test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" -- @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ -+ test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)" -+ @list='$(bin_SCRIPTS)'; test -n "$(sbindir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ -@@ -243,19 +243,19 @@ - while read type dir files; do \ +@@ -244,7 +244,7 @@ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ -- echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ - $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ -+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ -+ $(INSTALL_SCRIPT) -m 755 $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ ++ $(INSTALL_SCRIPT) -m 755 $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done - uninstall-binSCRIPTS: - @$(NORMAL_UNINSTALL) -- @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ -+ @list='$(bin_SCRIPTS)'; test -n "$(sbindir)" || exit 0; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 's,.*/,,;$(transform)'`; \ - test -n "$$list" || exit 0; \ -- echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ -- cd "$(DESTDIR)$(bindir)" && rm -f $$files -+ echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \ -+ cd "$(DESTDIR)$(sbindir)" && rm -f $$files - tags: TAGS - TAGS: - -@@ -297,7 +297,7 @@ - check: check-am - all-am: Makefile $(SCRIPTS) - installdirs: -- for dir in "$(DESTDIR)$(bindir)"; do \ -+ for dir in "$(DESTDIR)$(sbindir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done - install: install-am @@ -426,6 +426,7 @@ sed -e 's=%ibdiag_libdir%='$(DESTDIR)$(libdir)'=' \ -e 's=%with_ibdm_lib%='$(with_ibdm_lib)'=' \ @@ -491,61 +446,6 @@ install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) -@@ -105,7 +105,7 @@ - am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' --am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \ -+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(sbindir)" \ - "$(DESTDIR)$(pkgincludedir)" - LTLIBRARIES = $(lib_LTLIBRARIES) - libibsysapi_la_DEPENDENCIES = -@@ -369,8 +369,8 @@ - $(libibsysapi_la_LINK) -rpath $(libdir) $(libibsysapi_la_OBJECTS) $(libibsysapi_la_LIBADD) $(LIBS) - install-binPROGRAMS: $(bin_PROGRAMS) - @$(NORMAL_INSTALL) -- test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" -- @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ -+ test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)" -+ @list='$(bin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ - for p in $$list; do echo "$$p $$p"; done | \ - sed 's/$(EXEEXT)$$//' | \ - while read p p1; do if test -f $$p || test -f $$p1; \ -@@ -387,20 +387,20 @@ - while read type dir files; do \ - if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ - test -z "$$files" || { \ -- echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ -- $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ -+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ -+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ - } \ - ; done - - uninstall-binPROGRAMS: - @$(NORMAL_UNINSTALL) -- @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ -+ @list='$(bin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ - -e 's/$$/$(EXEEXT)/' `; \ - test -n "$$list" || exit 0; \ -- echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ -- cd "$(DESTDIR)$(bindir)" && rm -f $$files -+ echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \ -+ cd "$(DESTDIR)$(sbindir)" && rm -f $$files - - clean-binPROGRAMS: - @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ -@@ -573,7 +573,7 @@ - install-binPROGRAMS: install-libLTLIBRARIES - - installdirs: -- for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgincludedir)"; do \ -+ for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(pkgincludedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done - install: install-am diff -r -u /tmp/ibutils-1.5.7/ibdm/Makefile.in ibutils-1.5.7/ibdm/Makefile.in --- /tmp/ibutils-1.5.7/ibdm/Makefile.in Tue Mar 8 03:09:42 2011 +++ ibutils-1.5.7/ibdm/Makefile.in Thu Feb 24 16:51:16 2011 @@ -558,16 +458,6 @@ install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) -diff -r -u /tmp/ibutils-1.5.7/ibdm/scripts/Makefile.am ibutils-1.5.7/ibdm/scripts/Makefile.am ---- /tmp/ibutils-1.5.7/ibdm/scripts/Makefile.am Mon Nov 1 16:03:44 2010 -+++ ibutils-1.5.7/ibdm/scripts/Makefile.am Thu Feb 24 16:51:17 2011 -@@ -37,5 +37,5 @@ - EXTRA_DIST = $(pkgdata_DATA) - - install-data-am: -- for s in $(pkgdata_DATA); do cp $$s $(DESTDIR)$(bindir)/; done -+ for s in $(pkgdata_DATA); do cp $$s $(DESTDIR)$(sbindir)/; done - diff -r -u /tmp/ibutils-1.5.7/ibdm/scripts/Makefile.in ibutils-1.5.7/ibdm/scripts/Makefile.in --- /tmp/ibutils-1.5.7/ibdm/scripts/Makefile.in Tue Mar 8 03:09:41 2011 +++ ibutils-1.5.7/ibdm/scripts/Makefile.in Thu Feb 24 16:51:17 2011 @@ -580,15 +470,6 @@ install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) -@@ -447,7 +447,7 @@ - - - install-data-am: -- for s in $(pkgdata_DATA); do cp $$s $(DESTDIR)$(bindir)/; done -+ for s in $(pkgdata_DATA); do cp $$s $(DESTDIR)$(sbindir)/; done - - # Tell versions [3.59,3.63) of GNU make to not export all variables. - # Otherwise a system limit (for SysV at least) may be exceeded. diff -r -u /tmp/ibutils-1.5.7/ibdm/ibdm/Fabric.cpp ibutils-1.5.7/ibdm/ibdm/Fabric.cpp --- /tmp/ibutils-1.5.7/ibdm/ibdm/Fabric.cpp Thu Oct 7 07:29:56 2010 +++ ibutils-1.5.7/ibdm/ibdm/Fabric.cpp Mon Sep 19 12:03:07 2011 @@ -645,15 +526,6 @@ install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) -@@ -102,7 +102,7 @@ - am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' --am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \ -+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(sbindir)" \ - "$(DESTDIR)$(pkgincludedir)" - LTLIBRARIES = $(lib_LTLIBRARIES) - am__DEPENDENCIES_1 = @@ -316,7 +316,7 @@ AM_CFLAGS = $(DBG) $(IBNL_PATH) $(TCL_CFLAGS) lib_LTLIBRARIES = libibdmcom.la libibdm.la @@ -663,52 +535,6 @@ libibdmcom_la_LDFLAGS = -version-info $(LIB_VER_TRIPLET) libibdm_la_SOURCES = ibdm_wrap.cpp ibdm.i $(common_SOURCES) libibdm_la_LIBADD = $(TCL_LIBS) -@@ -402,8 +402,8 @@ - $(libibdmcom_la_LINK) -rpath $(libdir) $(libibdmcom_la_OBJECTS) $(libibdmcom_la_LIBADD) $(LIBS) - install-binPROGRAMS: $(bin_PROGRAMS) - @$(NORMAL_INSTALL) -- test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" -- @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ -+ test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)" -+ @list='$(bin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ - for p in $$list; do echo "$$p $$p"; done | \ - sed 's/$(EXEEXT)$$//' | \ - while read p p1; do if test -f $$p || test -f $$p1; \ -@@ -420,20 +420,20 @@ - while read type dir files; do \ - if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ - test -z "$$files" || { \ -- echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ -- $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ -+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ -+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ - } \ - ; done - - uninstall-binPROGRAMS: - @$(NORMAL_UNINSTALL) -- @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ -+ @list='$(bin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ - -e 's/$$/$(EXEEXT)/' `; \ - test -n "$$list" || exit 0; \ -- echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ -- cd "$(DESTDIR)$(bindir)" && rm -f $$files -+ echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \ -+ cd "$(DESTDIR)$(sbindir)" && rm -f $$files - - clean-binPROGRAMS: - @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ -@@ -628,7 +628,7 @@ - install-binPROGRAMS: install-libLTLIBRARIES - - installdirs: -- for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgincludedir)"; do \ -+ for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(pkgincludedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done - install: install-am diff -r -u /tmp/ibutils-1.5.7/ibdm/ibdm/ibdm_wrap.cpp ibutils-1.5.7/ibdm/ibdm/ibdm_wrap.cpp --- /tmp/ibutils-1.5.7/ibdm/ibdm/ibdm_wrap.cpp Thu Oct 7 07:28:58 2010 +++ ibutils-1.5.7/ibdm/ibdm/ibdm_wrap.cpp Thu Feb 24 16:51:17 2011 @@ -858,61 +684,6 @@ install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) -@@ -113,7 +113,7 @@ - am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' --am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" -+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(sbindir)" - LTLIBRARIES = $(lib_LTLIBRARIES) - libibis_la_LIBADD = - am_libibis_la_OBJECTS = ibis_wrap.lo ibbbm.lo ibcr.lo ibis.lo \ -@@ -420,8 +420,8 @@ - $(libibis_la_LINK) -rpath $(libdir) $(libibis_la_OBJECTS) $(libibis_la_LIBADD) $(LIBS) - install-binPROGRAMS: $(bin_PROGRAMS) - @$(NORMAL_INSTALL) -- test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" -- @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ -+ test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)" -+ @list='$(bin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ - for p in $$list; do echo "$$p $$p"; done | \ - sed 's/$(EXEEXT)$$//' | \ - while read p p1; do if test -f $$p || test -f $$p1; \ -@@ -438,20 +438,20 @@ - while read type dir files; do \ - if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ - test -z "$$files" || { \ -- echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ -- $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ -+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ -+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ - } \ - ; done - - uninstall-binPROGRAMS: - @$(NORMAL_UNINSTALL) -- @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ -+ @list='$(bin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ - -e 's/$$/$(EXEEXT)/' `; \ - test -n "$$list" || exit 0; \ -- echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ -- cd "$(DESTDIR)$(bindir)" && rm -f $$files -+ echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \ -+ cd "$(DESTDIR)$(sbindir)" && rm -f $$files - - clean-binPROGRAMS: - @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ -@@ -754,7 +754,7 @@ - install-binPROGRAMS: install-libLTLIBRARIES - - installdirs: -- for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)"; do \ -+ for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(sbindir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done - install: install-am diff -r -u /tmp/ibutils-1.5.7/ibis/src/ibbbm_base.h ibutils-1.5.7/ibis/src/ibbbm_base.h --- /tmp/ibutils-1.5.7/ibis/src/ibbbm_base.h Wed Feb 24 02:09:25 2010 +++ ibutils-1.5.7/ibis/src/ibbbm_base.h Thu Feb 24 16:51:18 2011 @@ -993,6 +764,117 @@ /* TODO - define a Vendor Specific CR Read/Write attributes to use VL15 */ +@@ -35180,7 +35180,18 @@ + } + return TCL_OK; + } ++#ifdef __sparcv9 ++#define _ibsm_node_info_sys_guid_set(_swigobj,_swigval) _ibsm_node_info_sys_guid_set_64(_swigobj, _swigval) ++static inline ib_net64_t * ++_ibsm_node_info_sys_guid_set_64(smNodeInfo *_swigobj, ib_net64_t *swigval) ++{ ++ *(ib_net32_t *)&(_swigobj->sys_guid) = *((ib_net32_t *)swigval); ++ *((ib_net32_t *)&(_swigobj->sys_guid) + 1) = *((ib_net32_t *)swigval +1); ++ return ((ib_net64_t *)swigval); ++} ++#else + #define _ibsm_node_info_sys_guid_set(_swigobj,_swigval) (_swigobj->sys_guid = *(_swigval),_swigval) ++#endif + static int _wrap_smNodeInfo_sys_guid_set(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { + + ib_net64_t * _result; +@@ -35238,7 +35249,17 @@ + } + return TCL_OK; + } ++#ifdef __sparcv9 ++#define _ibsm_node_info_sys_guid_get(_swigobj) _ibsm_node_info_sys_guid_get_64(_swigobj) ++static inline ib_net64_t * _ibsm_node_info_sys_guid_get_64(smNodeInfo *_swigobj){ ++ static uint32_t val[2]; ++ val[0] = *(ib_net32_t *)&(_swigobj->sys_guid); ++ val[1] = *((ib_net32_t *)&(_swigobj->sys_guid) + 1); ++ return ((ib_net64_t *)&val); ++} ++#else + #define _ibsm_node_info_sys_guid_get(_swigobj) (&_swigobj->sys_guid) ++#endif + static int _wrap_smNodeInfo_sys_guid_get(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { + + ib_net64_t * _result; +@@ -35290,7 +35311,18 @@ + } + return TCL_OK; + } ++#ifdef __sparcv9 ++#define _ibsm_node_info_node_guid_set(_swigobj,_swigval) _ibsm_node_info_node_guid_set_64(_swigobj, _swigval) ++static inline ib_net64_t * ++_ibsm_node_info_node_guid_set_64(smNodeInfo *_swigobj, ib_net64_t *swigval) ++{ ++ *(ib_net32_t *)&(_swigobj->node_guid) = *((ib_net32_t *)swigval); ++ *((ib_net32_t *)&(_swigobj->node_guid) + 1) = *((ib_net32_t *)swigval +1); ++ return ((ib_net64_t *)swigval); ++} ++#else + #define _ibsm_node_info_node_guid_set(_swigobj,_swigval) (_swigobj->node_guid = *(_swigval),_swigval) ++#endif + static int _wrap_smNodeInfo_node_guid_set(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { + + ib_net64_t * _result; +@@ -35348,7 +35380,17 @@ + } + return TCL_OK; + } ++#ifdef __sparcv9 ++#define _ibsm_node_info_node_guid_get(_swigobj) _ibsm_node_info_node_guid_get_64(_swigobj) ++static inline ib_net64_t * _ibsm_node_info_node_guid_get_64(smNodeInfo *_swigobj){ ++ static uint32_t val[2]; ++ val[0] = *(ib_net32_t *)&(_swigobj->node_guid); ++ val[1] = *((ib_net32_t *)&(_swigobj->node_guid) + 1); ++ return ((ib_net64_t *)&val); ++} ++#else + #define _ibsm_node_info_node_guid_get(_swigobj) (&_swigobj->node_guid) ++#endif + static int _wrap_smNodeInfo_node_guid_get(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { + + ib_net64_t * _result; +@@ -35400,7 +35442,18 @@ + } + return TCL_OK; + } ++#ifdef __sparcv9 ++#define _ibsm_node_info_port_guid_set(_swigobj,_swigval) _ibsm_node_info_port_guid_set_64(_swigobj, _swigval) ++static inline ib_net64_t * ++_ibsm_node_info_port_guid_set_64(smNodeInfo *_swigobj, ib_net64_t *swigval) ++{ ++ *(ib_net32_t *)&(_swigobj->port_guid) = *((ib_net32_t *)swigval); ++ *((ib_net32_t *)&(_swigobj->port_guid) + 1) = *((ib_net32_t *)swigval +1); ++ return ((ib_net64_t *)swigval); ++} ++#else + #define _ibsm_node_info_port_guid_set(_swigobj,_swigval) (_swigobj->port_guid = *(_swigval),_swigval) ++#endif + static int _wrap_smNodeInfo_port_guid_set(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { + + ib_net64_t * _result; +@@ -35458,7 +35511,17 @@ + } + return TCL_OK; + } ++#ifdef __sparcv9 ++#define _ibsm_node_info_port_guid_get(_swigobj) _ibsm_node_info_port_guid_get_64(_swigobj) ++static inline ib_net64_t * _ibsm_node_info_port_guid_get_64(smNodeInfo *_swigobj){ ++ static uint32_t val[2]; ++ val[0] = *(ib_net32_t *)&(_swigobj->port_guid); ++ val[1] = *((ib_net32_t *)&(_swigobj->port_guid) + 1); ++ return ((ib_net64_t *)&val); ++} ++#else + #define _ibsm_node_info_port_guid_get(_swigobj) (&_swigobj->port_guid) ++#endif + static int _wrap_smNodeInfo_port_guid_get(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { + + ib_net64_t * _result; diff -r -u /tmp/ibutils-1.5.7/ibis/src/ibpm_base.h ibutils-1.5.7/ibis/src/ibpm_base.h --- /tmp/ibutils-1.5.7/ibis/src/ibpm_base.h Wed Feb 24 02:09:25 2010 +++ ibutils-1.5.7/ibis/src/ibpm_base.h Thu Feb 24 16:51:18 2011 @@ -1094,6 +976,126 @@ /* TODO - define a Vendor Specific CR Read/Write attributes to use VL15 */ +@@ -35242,7 +35251,18 @@ + } + return TCL_OK; + } ++#ifdef __sparcv9 ++#define _ibsm_node_info_sys_guid_set(_swigobj,_swigval) _ibsm_node_info_sys_guid_set_64(_swigobj, _swigval) ++static inline ib_net64_t * ++_ibsm_node_info_sys_guid_set_64(smNodeInfo *_swigobj, ib_net64_t *swigval) ++{ ++ *(ib_net32_t *)&(_swigobj->sys_guid) = *((ib_net32_t *)swigval); ++ *((ib_net32_t *)&(_swigobj->sys_guid) + 1) = *((ib_net32_t *)swigval +1); ++ return ((ib_net64_t *)swigval); ++} ++#else + #define _ibsm_node_info_sys_guid_set(_swigobj,_swigval) (_swigobj->sys_guid = *(_swigval),_swigval) ++#endif + static int _wrap_smNodeInfo_sys_guid_set(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { + + ib_net64_t * _result; +@@ -35300,7 +35320,18 @@ + } + return TCL_OK; + } ++ ++#ifdef __sparcv9 ++#define _ibsm_node_info_sys_guid_get(_swigobj) _ibsm_node_info_sys_guid_get_64(_swigobj) ++static inline ib_net64_t * _ibsm_node_info_sys_guid_get_64(smNodeInfo *_swigobj){ ++ static uint32_t val[2]; ++ val[0] = *(ib_net32_t *)&(_swigobj->sys_guid); ++ val[1] = *((ib_net32_t *)&(_swigobj->sys_guid) + 1); ++ return ((ib_net64_t *)&val); ++} ++#else + #define _ibsm_node_info_sys_guid_get(_swigobj) (&_swigobj->sys_guid) ++#endif + static int _wrap_smNodeInfo_sys_guid_get(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { + + ib_net64_t * _result; +@@ -35340,6 +35371,7 @@ + ibis_tcl_error = 0; + _result = (ib_net64_t *)_ibsm_node_info_sys_guid_get(_arg0); + ; ++ + if (ibis_tcl_error) { + Tcl_SetStringObj(Tcl_GetObjResult(interp), ibis_tcl_error_msg, -1); + return TCL_ERROR; +@@ -35352,7 +35384,18 @@ + } + return TCL_OK; + } ++#ifdef __sparcv9 ++#define _ibsm_node_info_node_guid_set(_swigobj,_swigval) _ibsm_node_info_node_guid_set_64(_swigobj, _swigval) ++static inline ib_net64_t * ++_ibsm_node_info_node_guid_set_64(smNodeInfo *_swigobj, ib_net64_t *swigval) ++{ ++ *(ib_net32_t *)&(_swigobj->node_guid) = *((ib_net32_t *)swigval); ++ *((ib_net32_t *)&(_swigobj->node_guid) + 1) = *((ib_net32_t *)swigval +1); ++ return ((ib_net64_t *)swigval); ++} ++#else + #define _ibsm_node_info_node_guid_set(_swigobj,_swigval) (_swigobj->node_guid = *(_swigval),_swigval) ++#endif + static int _wrap_smNodeInfo_node_guid_set(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { + + ib_net64_t * _result; +@@ -35410,7 +35453,17 @@ + } + return TCL_OK; + } ++#ifdef __sparcv9 ++#define _ibsm_node_info_node_guid_get(_swigobj) _ibsm_node_info_node_guid_get_64(_swigobj) ++static inline ib_net64_t * _ibsm_node_info_node_guid_get_64(smNodeInfo *_swigobj){ ++ static uint32_t val[2]; ++ val[0] = *(ib_net32_t *)&(_swigobj->node_guid); ++ val[1] = *((ib_net32_t *)&(_swigobj->node_guid) + 1); ++ return ((ib_net64_t *)&val); ++} ++#else + #define _ibsm_node_info_node_guid_get(_swigobj) (&_swigobj->node_guid) ++#endif + static int _wrap_smNodeInfo_node_guid_get(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { + + ib_net64_t * _result; +@@ -35462,7 +35515,18 @@ + } + return TCL_OK; + } ++#ifdef __sparcv9 ++#define _ibsm_node_info_port_guid_set(_swigobj,_swigval) _ibsm_node_info_port_guid_set_64(_swigobj, _swigval) ++static inline ib_net64_t * ++_ibsm_node_info_port_guid_set_64(smNodeInfo *_swigobj, ib_net64_t *swigval) ++{ ++ *(ib_net32_t *)&(_swigobj->port_guid) = *((ib_net32_t *)swigval); ++ *((ib_net32_t *)&(_swigobj->port_guid) + 1) = *((ib_net32_t *)swigval +1); ++ return ((ib_net64_t *)swigval); ++} ++#else + #define _ibsm_node_info_port_guid_set(_swigobj,_swigval) (_swigobj->port_guid = *(_swigval),_swigval) ++#endif + static int _wrap_smNodeInfo_port_guid_set(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { + + ib_net64_t * _result; +@@ -35520,7 +35584,17 @@ + } + return TCL_OK; + } ++#ifdef __sparcv9 ++#define _ibsm_node_info_port_guid_get(_swigobj) _ibsm_node_info_port_guid_get_64(_swigobj) ++static inline ib_net64_t * _ibsm_node_info_port_guid_get_64(smNodeInfo *_swigobj){ ++ static uint32_t val[2]; ++ val[0] = *(ib_net32_t *)&(_swigobj->port_guid); ++ val[1] = *((ib_net32_t *)&(_swigobj->port_guid) + 1); ++ return ((ib_net64_t *)&val); ++} ++#else + #define _ibsm_node_info_port_guid_get(_swigobj) (&_swigobj->port_guid) ++#endif + static int _wrap_smNodeInfo_port_guid_get(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { + + ib_net64_t * _result; diff -r -u /tmp/ibutils-1.5.7/ibis/tests/Makefile.in ibutils-1.5.7/ibis/tests/Makefile.in --- /tmp/ibutils-1.5.7/ibis/tests/Makefile.in Tue Mar 8 03:09:51 2011 +++ ibutils-1.5.7/ibis/tests/Makefile.in Thu Feb 24 16:51:18 2011 @@ -1210,52 +1212,6 @@ install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) -@@ -103,7 +103,7 @@ - am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' --am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \ -+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(sbindir)" \ - "$(DESTDIR)$(pkgincludedir)" - LTLIBRARIES = $(lib_LTLIBRARIES) - libibmscli_la_LIBADD = -@@ -430,8 +430,8 @@ - $(libibmscli_la_LINK) -rpath $(libdir) $(libibmscli_la_OBJECTS) $(libibmscli_la_LIBADD) $(LIBS) - install-binPROGRAMS: $(bin_PROGRAMS) - @$(NORMAL_INSTALL) -- test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" -- @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ -+ test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)" -+ @list='$(bin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ - for p in $$list; do echo "$$p $$p"; done | \ - sed 's/$(EXEEXT)$$//' | \ - while read p p1; do if test -f $$p || test -f $$p1; \ -@@ -455,13 +455,13 @@ - - uninstall-binPROGRAMS: - @$(NORMAL_UNINSTALL) -- @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ -+ @list='$(bin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ - -e 's/$$/$(EXEEXT)/' `; \ - test -n "$$list" || exit 0; \ -- echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ -- cd "$(DESTDIR)$(bindir)" && rm -f $$files -+ echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \ -+ cd "$(DESTDIR)$(sbindir)" && rm -f $$files - - clean-binPROGRAMS: - @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ -@@ -693,7 +693,7 @@ - install-binPROGRAMS: install-libLTLIBRARIES - - installdirs: -- for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgincludedir)"; do \ -+ for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(pkgincludedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done - install: install-am diff -r -u /tmp/ibutils-1.5.7/ibmgtsim/tests/Makefile.in ibutils-1.5.7/ibmgtsim/tests/Makefile.in --- /tmp/ibutils-1.5.7/ibmgtsim/tests/Makefile.in Tue Mar 8 03:10:01 2011 +++ ibutils-1.5.7/ibmgtsim/tests/Makefile.in Thu Feb 24 16:51:19 2011 @@ -1280,60 +1236,6 @@ install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) -@@ -99,7 +99,7 @@ - am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' --am__installdirs = "$(DESTDIR)$(bindir)" -+am__installdirs = "$(DESTDIR)$(sbindir)" - SCRIPTS = $(bin_SCRIPTS) - SOURCES = - DIST_SOURCES = -@@ -275,8 +275,8 @@ - $(am__aclocal_m4_deps): - install-binSCRIPTS: $(bin_SCRIPTS) - @$(NORMAL_INSTALL) -- test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" -- @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ -+ test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)" -+ @list='$(bin_SCRIPTS)'; test -n "$(sbindir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ -@@ -294,19 +294,19 @@ - while read type dir files; do \ - if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ - test -z "$$files" || { \ -- echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ -- $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ -+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ -+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ - } \ - ; done - - uninstall-binSCRIPTS: - @$(NORMAL_UNINSTALL) -- @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ -+ @list='$(bin_SCRIPTS)'; test -n "$(sbindir)" || exit 0; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 's,.*/,,;$(transform)'`; \ - test -n "$$list" || exit 0; \ -- echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ -- cd "$(DESTDIR)$(bindir)" && rm -f $$files -+ echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \ -+ cd "$(DESTDIR)$(sbindir)" && rm -f $$files - - mostlyclean-libtool: - -rm -f *.lo -@@ -354,7 +354,7 @@ - check: check-am - all-am: Makefile $(SCRIPTS) - installdirs: -- for dir in "$(DESTDIR)$(bindir)"; do \ -+ for dir in "$(DESTDIR)$(sbindir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done - install: install-am diff -r -u /tmp/ibutils-1.5.7/ibmgtsim/Makefile.in ibutils-1.5.7/ibmgtsim/Makefile.in --- /tmp/ibutils-1.5.7/ibmgtsim/Makefile.in Tue Mar 8 03:10:02 2011 +++ ibutils-1.5.7/ibmgtsim/Makefile.in Thu Feb 24 16:51:18 2011 @@ -1390,7 +1292,7 @@ INSTALL_HEADER = $(INSTALL_DATA) diff -r -u /tmp/ibutils-1.5.7/configure ibutils-1.5.7/configure --- /tmp/ibutils-1.5.7/configure Tue Mar 8 03:09:29 2011 -+++ ibutils-1.5.7/configure Thu Mar 10 18:33:24 2011 ++++ ibutils-1.5.7/configure Wed Apr 1 01:47:48 2015 @@ -1824,7 +1824,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' diff -r 0cca05cde869 -r 353f8a998732 components/open-fabrics/infiniband-diags/Makefile --- a/components/open-fabrics/infiniband-diags/Makefile Thu Jul 16 15:20:48 2015 -0700 +++ b/components/open-fabrics/infiniband-diags/Makefile Fri Jul 17 12:11:28 2015 -0700 @@ -22,7 +22,7 @@ # # OFED only builds with GCC -COMPILER=gcc3 +COMPILER=gcc include ../../../make-rules/shared-macros.mk @@ -50,6 +50,8 @@ CONFIGURE_ENV += PERL=$(PERL) +CONFIGURE_OPTIONS += --sbindir=$(USRSBINDIR) + # it apears that configure is broken COMPONENT_BUILD_ARGS += LIBS="$(LIBS)" @@ -81,11 +83,11 @@ $(INSTALL) -m 644 manpages/set_nodedesc.sh.1m $(PROTOMAN)/man1m # common targets -configure: $(CONFIGURE_32) +configure: $(CONFIGURE_32_and_64) -build: $(BUILD_32) +build: $(BUILD_32_and_64) -install: $(INSTALL_32) #$(PROTOMAN1MFILES) +install: $(INSTALL_32_and_64) #$(PROTOMAN1MFILES) test: $(NO_TESTS) diff -r 0cca05cde869 -r 353f8a998732 components/open-fabrics/libibmad/Makefile --- a/components/open-fabrics/libibmad/Makefile Thu Jul 16 15:20:48 2015 -0700 +++ b/components/open-fabrics/libibmad/Makefile Fri Jul 17 12:11:28 2015 -0700 @@ -22,7 +22,7 @@ # # OFED only builds with GCC -COMPILER=gcc3 +COMPILER=gcc include ../../../make-rules/shared-macros.mk diff -r 0cca05cde869 -r 353f8a998732 components/open-fabrics/libibumad/Makefile --- a/components/open-fabrics/libibumad/Makefile Thu Jul 16 15:20:48 2015 -0700 +++ b/components/open-fabrics/libibumad/Makefile Fri Jul 17 12:11:28 2015 -0700 @@ -22,7 +22,7 @@ # # OFED only builds with GCC -COMPILER=gcc3 +COMPILER=gcc include ../../../make-rules/shared-macros.mk diff -r 0cca05cde869 -r 353f8a998732 components/open-fabrics/libibverbs/Makefile --- a/components/open-fabrics/libibverbs/Makefile Thu Jul 16 15:20:48 2015 -0700 +++ b/components/open-fabrics/libibverbs/Makefile Fri Jul 17 12:11:28 2015 -0700 @@ -22,7 +22,7 @@ # # OFED only builds with GCC -COMPILER=gcc3 +COMPILER=gcc include ../../../make-rules/shared-macros.mk @@ -52,6 +52,8 @@ LIBS += -lsocket -lnsl -lkstat +CONFIGURE_OPTIONS += --bindir=$(USRBINDIR) + # --disable-libcheck is not a supported option for this component DISABLE_LIBCHECK= @@ -63,14 +65,7 @@ COMPONENT_POST_INSTALL_ACTION = \ $(RM) $(PROTO_DIR)/$(CONFIGURE_BINDIR.$(BITS))/ibv_uc_pingpong; \ - $(RM) $(PROTO_DIR)/$(CONFIGURE_BINDIR.64)/ibv_devices \ - $(PROTO_DIR)/$(CONFIGURE_BINDIR.64)/ibv_devinfo \ - $(PROTO_DIR)/$(CONFIGURE_BINDIR.64)/ibv_asyncwatch \ - $(PROTO_DIR)/$(CONFIGURE_BINDIR.64)/ibv_rc_pingpong \ - $(PROTO_DIR)/$(CONFIGURE_BINDIR.64)/ibv_uc_pingpong \ - $(PROTO_DIR)/$(CONFIGURE_BINDIR.64)/ibv_ud_pingpong \ - $(PROTO_DIR)/$(CONFIGURE_BINDIR.64)/ibv_srq_pingpong \ - $(PROTO_DIR)/$(CONFIGURE_MANDIR)/man1/ibv_uc_pingpong.1 \ + $(RM) $(PROTO_DIR)/$(CONFIGURE_MANDIR)/man1/ibv_uc_pingpong.1 \ $(PROTO_DIR)/$(CONFIGURE_MANDIR)/man3/ibv_reg_xrc_rcv_qp.3 \ $(PROTO_DIR)/$(CONFIGURE_MANDIR)/man3/ibv_create_xrc_srq.3 \ $(PROTO_DIR)/$(CONFIGURE_MANDIR)/man3/ibv_open_xrc_domain.3 \ diff -r 0cca05cde869 -r 353f8a998732 components/open-fabrics/libibverbs/ofa_solaris.h --- a/components/open-fabrics/libibverbs/ofa_solaris.h Thu Jul 16 15:20:48 2015 -0700 +++ b/components/open-fabrics/libibverbs/ofa_solaris.h Fri Jul 17 12:11:28 2015 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. * * This software is available to you under a choice of one of two * licenses. You may choose to be licensed under the terms of the GNU @@ -45,6 +45,7 @@ #include #include #include +#include #ifdef __cplusplus extern "C" { diff -r 0cca05cde869 -r 353f8a998732 components/open-fabrics/libibverbs/patches/base.patch --- a/components/open-fabrics/libibverbs/patches/base.patch Thu Jul 16 15:20:48 2015 -0700 +++ b/components/open-fabrics/libibverbs/patches/base.patch Fri Jul 17 12:11:28 2015 -0700 @@ -1,5 +1,5 @@ -# This patch was developed in-house. Since it is Solaris-specific, -# it is not suitable for upstream. +#This patch was developed in-house. We plan to submit it upstream, but do +# not yet have a target date for doing so # diff -r -u /tmp/846623/libibverbs-1.1.4/Makefile.am libibverbs-1.1.4/Makefile.am --- /tmp/846623/libibverbs-1.1.4/Makefile.am Thu Feb 3 01:53:17 2011 @@ -1092,7 +1092,7 @@ t = malloc(sizeof *t); if (!t) -@@ -67,12 +96,36 @@ +@@ -67,12 +96,45 @@ IBV_INIT_CMD_RESP(cmd, cmd_size, GET_CONTEXT, resp, resp_size); cmd->cq_fd_tab = (uintptr_t) &cq_fd; @@ -1103,8 +1103,17 @@ + if (fstat(event_fd, &fstat_buf)) + return (errno); + resp->async_fd = minor(fstat_buf.st_rdev); + ++ /* ++ * Open the underlying kernel hardware driver that will ++ * provide the mmap function for this context. ++ */ ++ context->mmap_fd = ibv_open_mmap_driver(context->device->dev_name); ++ if (context->mmap_fd < 0) { ++ fprintf(stderr, PFX "ibv_cmd_get_context: Mmap open failed\n"); ++ } +#endif - ++ if (write(context->cmd_fd, cmd, cmd_size) != cmd_size) return errno; +#if defined(__SVR4) && defined(__sun) @@ -1129,7 +1138,7 @@ context->async_fd = resp->async_fd; context->num_comp_vectors = 1; t->channel.context = context; -@@ -87,19 +140,53 @@ +@@ -87,19 +149,50 @@ size_t cmd_size, struct ibv_get_context_resp *resp, size_t resp_size) { @@ -1148,8 +1157,16 @@ + if (fstat(event_fd, &fstat_buf)) + return (errno); + resp->async_fd = minor(fstat_buf.st_rdev); + ++ /* ++ * Open the underlying kernel hardware driver that will ++ * provide the mmap function for this context. ++ */ ++ context->mmap_fd = ibv_open_mmap_driver(context->device->dev_name); ++ if (context->mmap_fd < 0) { ++ fprintf(stderr, PFX "ibv_cmd_get_context: Mmap open failed\n"); ++ } +#endif - if (write(context->cmd_fd, cmd, cmd_size) != cmd_size) return errno; +#if defined(__SVR4) && defined(__sun) @@ -1169,21 +1186,11 @@ + context->async_fd = resp->async_fd; context->num_comp_vectors = resp->num_comp_vectors; - -+#if defined(__SVR4) && defined(__sun) -+ /* -+ * Open the underlying kernel hardware driver that will -+ * provide the mmap function for this context. -+ */ -+ context->mmap_fd = ibv_open_mmap_driver(context->device->dev_name); -+ if (context->mmap_fd < 0) { -+ fprintf(stderr, PFX "ibv_cmd_get_context: Mmap open failed\n"); -+ } -+#endif +- return 0; } -@@ -120,6 +207,7 @@ +@@ -120,6 +213,7 @@ memset(device_attr->fw_ver, 0, sizeof device_attr->fw_ver); *raw_fw_ver = resp.fw_ver; device_attr->node_guid = resp.node_guid; @@ -1191,7 +1198,7 @@ device_attr->sys_image_guid = resp.sys_image_guid; device_attr->max_mr_size = resp.max_mr_size; device_attr->page_size_cap = resp.page_size_cap; -@@ -207,6 +295,8 @@ +@@ -207,6 +301,8 @@ { IBV_INIT_CMD_RESP(cmd, cmd_size, ALLOC_PD, resp, resp_size); @@ -1200,7 +1207,7 @@ if (write(context->cmd_fd, cmd, cmd_size) != cmd_size) return errno; -@@ -218,6 +308,47 @@ +@@ -218,6 +314,47 @@ return 0; } @@ -1248,7 +1255,7 @@ int ibv_cmd_dealloc_pd(struct ibv_pd *pd) { struct ibv_dealloc_pd cmd; -@@ -224,6 +355,7 @@ +@@ -224,6 +361,7 @@ IBV_INIT_CMD(&cmd, sizeof cmd, DEALLOC_PD); cmd.pd_handle = pd->handle; @@ -1256,7 +1263,7 @@ if (write(pd->context->cmd_fd, &cmd, sizeof cmd) != sizeof cmd) return errno; -@@ -244,6 +376,7 @@ +@@ -244,6 +382,7 @@ cmd->length = length; cmd->hca_va = hca_va; cmd->pd_handle = pd->handle; @@ -1264,7 +1271,7 @@ cmd->access_flags = access; if (write(pd->context->cmd_fd, cmd, cmd_size) != cmd_size) -@@ -259,6 +392,35 @@ +@@ -259,6 +398,35 @@ return 0; } @@ -1300,7 +1307,7 @@ int ibv_cmd_dereg_mr(struct ibv_mr *mr) { struct ibv_dereg_mr cmd; -@@ -265,6 +427,7 @@ +@@ -265,6 +433,7 @@ IBV_INIT_CMD(&cmd, sizeof cmd, DEREG_MR); cmd.mr_handle = mr->handle; @@ -1308,7 +1315,7 @@ if (write(mr->context->cmd_fd, &cmd, sizeof cmd) != sizeof cmd) return errno; -@@ -272,6 +435,34 @@ +@@ -272,6 +441,34 @@ return 0; } @@ -1343,7 +1350,7 @@ static int ibv_cmd_create_cq_v2(struct ibv_context *context, int cqe, struct ibv_cq *cq, struct ibv_create_cq *new_cmd, size_t new_cmd_size, -@@ -315,7 +506,19 @@ +@@ -315,7 +512,19 @@ cmd->user_handle = (uintptr_t) cq; cmd->cqe = cqe; cmd->comp_vector = comp_vector; @@ -1363,7 +1370,7 @@ cmd->reserved = 0; if (write(context->cmd_fd, cmd, cmd_size) != cmd_size) -@@ -346,6 +549,7 @@ +@@ -346,6 +555,7 @@ IBV_INIT_CMD_RESP(&cmd, sizeof cmd, POLL_CQ, resp, rsize); cmd.cq_handle = ibcq->handle; cmd.ne = ne; @@ -1371,7 +1378,7 @@ if (write(ibcq->context->cmd_fd, &cmd, sizeof cmd) != sizeof cmd) { ret = -1; -@@ -384,6 +588,7 @@ +@@ -384,6 +594,7 @@ IBV_INIT_CMD(&cmd, sizeof cmd, REQ_NOTIFY_CQ); cmd.cq_handle = ibcq->handle; cmd.solicited = !!solicited_only; @@ -1379,7 +1386,7 @@ if (write(ibcq->context->cmd_fd, &cmd, sizeof cmd) != sizeof cmd) return errno; -@@ -399,6 +604,7 @@ +@@ -399,6 +610,7 @@ IBV_INIT_CMD_RESP(cmd, cmd_size, RESIZE_CQ, resp, resp_size); cmd->cq_handle = cq->handle; cmd->cqe = cqe; @@ -1387,7 +1394,7 @@ if (write(cq->context->cmd_fd, cmd, cmd_size) != cmd_size) return errno; -@@ -434,6 +640,7 @@ +@@ -434,6 +646,7 @@ IBV_INIT_CMD_RESP(&cmd, sizeof cmd, DESTROY_CQ, &resp, sizeof resp); cmd.cq_handle = cq->handle; cmd.reserved = 0; @@ -1395,7 +1402,7 @@ if (write(cq->context->cmd_fd, &cmd, sizeof cmd) != sizeof cmd) return errno; -@@ -555,6 +762,7 @@ +@@ -555,6 +768,7 @@ cmd->attr_mask = srq_attr_mask; cmd->max_wr = srq_attr->max_wr; cmd->srq_limit = srq_attr->srq_limit; @@ -1403,7 +1410,7 @@ if (write(srq->context->cmd_fd, cmd, cmd_size) != cmd_size) return errno; -@@ -569,6 +777,7 @@ +@@ -569,6 +783,7 @@ IBV_INIT_CMD_RESP(cmd, cmd_size, QUERY_SRQ, &resp, sizeof resp); cmd->srq_handle = srq->handle; @@ -1411,7 +1418,7 @@ cmd->reserved = 0; if (write(srq->context->cmd_fd, cmd, cmd_size) != cmd_size) -@@ -606,6 +815,7 @@ +@@ -606,6 +821,7 @@ IBV_INIT_CMD_RESP(&cmd, sizeof cmd, DESTROY_SRQ, &resp, sizeof resp); cmd.srq_handle = srq->handle; @@ -1419,7 +1426,7 @@ cmd.reserved = 0; if (write(srq->context->cmd_fd, &cmd, sizeof cmd) != sizeof cmd) -@@ -637,7 +847,20 @@ +@@ -637,7 +853,20 @@ cmd->max_send_sge = attr->cap.max_send_sge; cmd->max_recv_sge = attr->cap.max_recv_sge; cmd->max_inline_data = attr->cap.max_inline_data; @@ -1440,7 +1447,7 @@ cmd->qp_type = attr->qp_type; cmd->is_srq = !!attr->srq; cmd->srq_handle = attr->qp_type == IBV_QPT_XRC ? -@@ -691,6 +914,7 @@ +@@ -691,6 +920,7 @@ IBV_INIT_CMD_RESP(cmd, cmd_size, QUERY_QP, &resp, sizeof resp); cmd->qp_handle = qp->handle; cmd->attr_mask = attr_mask; @@ -1448,7 +1455,7 @@ if (write(qp->context->cmd_fd, cmd, cmd_size) != cmd_size) return errno; -@@ -772,6 +996,7 @@ +@@ -772,6 +1002,7 @@ IBV_INIT_CMD(cmd, cmd_size, MODIFY_QP); cmd->qp_handle = qp->handle; @@ -1456,7 +1463,85 @@ cmd->attr_mask = attr_mask; cmd->qkey = attr->qkey; cmd->rq_psn = attr->rq_psn; -@@ -1292,6 +1517,7 @@ +@@ -1236,38 +1467,47 @@ + return ret; + } + +-int ibv_cmd_create_ah(struct ibv_pd *pd, struct ibv_ah *ah, +- struct ibv_ah_attr *attr) ++int ibv_cmd_create_ah_ex(struct ibv_pd *pd, struct ibv_ah *ah, struct ibv_ah_attr *attr, ++ struct ibv_create_ah *cmd, size_t cmd_size, ++ struct ibv_create_ah_resp *resp, size_t resp_size) + { +- struct ibv_create_ah cmd; +- struct ibv_create_ah_resp resp; ++ IBV_INIT_CMD_RESP(cmd, cmd_size, CREATE_AH, resp, resp_size); ++ cmd->user_handle = (uintptr_t) ah; ++ cmd->pd_handle = pd->handle; ++ cmd->reserved = 0; ++ cmd->attr.dlid = attr->dlid; ++ cmd->attr.sl = attr->sl; ++ cmd->attr.src_path_bits = attr->src_path_bits; ++ cmd->attr.static_rate = attr->static_rate; ++ cmd->attr.is_global = attr->is_global; ++ cmd->attr.port_num = attr->port_num; ++ cmd->attr.grh.flow_label = attr->grh.flow_label; ++ cmd->attr.grh.sgid_index = attr->grh.sgid_index; ++ cmd->attr.grh.hop_limit = attr->grh.hop_limit; ++ cmd->attr.grh.traffic_class = attr->grh.traffic_class; ++ cmd->attr.grh.reserved = 0; ++ cmd->attr.reserved = 0; ++ memcpy(cmd->attr.grh.dgid, attr->grh.dgid.raw, 16); + +- IBV_INIT_CMD_RESP(&cmd, sizeof cmd, CREATE_AH, &resp, sizeof resp); +- cmd.user_handle = (uintptr_t) ah; +- cmd.pd_handle = pd->handle; +- cmd.attr.dlid = attr->dlid; +- cmd.attr.sl = attr->sl; +- cmd.attr.src_path_bits = attr->src_path_bits; +- cmd.attr.static_rate = attr->static_rate; +- cmd.attr.is_global = attr->is_global; +- cmd.attr.port_num = attr->port_num; +- cmd.attr.grh.flow_label = attr->grh.flow_label; +- cmd.attr.grh.sgid_index = attr->grh.sgid_index; +- cmd.attr.grh.hop_limit = attr->grh.hop_limit; +- cmd.attr.grh.traffic_class = attr->grh.traffic_class; +- memcpy(cmd.attr.grh.dgid, attr->grh.dgid.raw, 16); +- +- if (write(pd->context->cmd_fd, &cmd, sizeof cmd) != sizeof cmd) ++ if (write(pd->context->cmd_fd, cmd, cmd_size) != cmd_size) + return errno; + +- VALGRIND_MAKE_MEM_DEFINED(&resp, sizeof resp); ++ VALGRIND_MAKE_MEM_DEFINED(resp, resp_size); + +- ah->handle = resp.handle; ++ ah->handle = resp->handle; + ah->context = pd->context; + + return 0; + } + ++int ibv_cmd_create_ah(struct ibv_pd *pd, struct ibv_ah *ah, ++ struct ibv_ah_attr *attr) ++{ ++ struct ibv_create_ah cmd; ++ struct ibv_create_ah_resp resp; ++ return ibv_cmd_create_ah_ex(pd, ah, attr, &cmd, sizeof(cmd), &resp, sizeof(resp)); ++} ++ + int ibv_cmd_destroy_ah(struct ibv_ah *ah) + { + struct ibv_destroy_ah cmd; +@@ -1274,6 +1514,7 @@ + + IBV_INIT_CMD(&cmd, sizeof cmd, DESTROY_AH); + cmd.ah_handle = ah->handle; ++ cmd.user_handle = (uintptr_t) ah; + + if (write(ah->context->cmd_fd, &cmd, sizeof cmd) != sizeof cmd) + return errno; +@@ -1292,6 +1533,7 @@ IBV_INIT_CMD_RESP(&cmd, sizeof cmd, DESTROY_QP, &resp, sizeof resp); cmd.qp_handle = qp->handle; cmd.reserved = 0; @@ -1464,7 +1549,7 @@ if (write(qp->context->cmd_fd, &cmd, sizeof cmd) != sizeof cmd) return errno; -@@ -1313,6 +1539,7 @@ +@@ -1313,6 +1555,7 @@ IBV_INIT_CMD(&cmd, sizeof cmd, ATTACH_MCAST); memcpy(cmd.gid, gid->raw, sizeof cmd.gid); cmd.qp_handle = qp->handle; @@ -1472,7 +1557,7 @@ cmd.mlid = lid; cmd.reserved = 0; -@@ -1329,6 +1556,7 @@ +@@ -1329,6 +1572,7 @@ IBV_INIT_CMD(&cmd, sizeof cmd, DETACH_MCAST); memcpy(cmd.gid, gid->raw, sizeof cmd.gid); cmd.qp_handle = qp->handle; @@ -1480,7 +1565,7 @@ cmd.mlid = lid; cmd.reserved = 0; -@@ -1406,4 +1634,3 @@ +@@ -1406,4 +1650,3 @@ return errno; return 0; } @@ -1809,7 +1894,7 @@ __u64 sys_image_guid; __u64 max_mr_size; __u64 page_size_cap; -@@ -235,23 +250,103 @@ +@@ -235,23 +250,89 @@ __u8 reserved[2]; }; @@ -1850,24 +1935,10 @@ __u64 driver_data[0]; }; -+#if defined(__SVR4) && defined(__sun) -+/* -+ * PD responses may pass opaque data to userspace drivers, we choose a value -+ * larger than what any HCA requires. -+ */ -+#define SOL_UVERBS_PD_DATA_OUT_SIZE 24 -+typedef __u64 ofuv_pd_drv_data_out_t[SOL_UVERBS_PD_DATA_OUT_SIZE]; -+ struct ibv_alloc_pd_resp { -+ __u32 pd_handle; -+ __u32 reserved; -+ ofuv_pd_drv_data_out_t drv_out; -+}; -+#else -+struct ibv_alloc_pd_resp { __u32 pd_handle; ++ __u32 reserved; }; -+#endif +struct ibv_alloc_shpd { + __u32 command; @@ -1883,6 +1954,7 @@ + +struct ibv_alloc_shpd_resp { + __u32 shpd_handle; ++ __u32 reserved; +}; + +struct ibv_share_pd { @@ -1900,7 +1972,6 @@ +struct ibv_share_pd_resp { + __u32 pd_handle; + __u32 reserved; -+ ofuv_pd_drv_data_out_t drv_out; +}; + struct ibv_dealloc_pd { @@ -1913,7 +1984,7 @@ }; struct ibv_reg_mr { -@@ -264,6 +359,7 @@ +@@ -264,6 +345,7 @@ __u64 hca_va; __u32 pd_handle; __u32 access_flags; @@ -1921,7 +1992,15 @@ __u64 driver_data[0]; }; -@@ -278,8 +374,19 @@ +@@ -271,6 +353,7 @@ + __u32 mr_handle; + __u32 lkey; + __u32 rkey; ++ __u32 reserved; + }; + + struct ibv_dereg_mr { +@@ -278,8 +361,19 @@ __u16 in_words; __u16 out_words; __u32 mr_handle; @@ -1941,33 +2020,15 @@ struct ibv_create_comp_channel { __u32 command; __u16 in_words; -@@ -304,10 +411,25 @@ - __u64 driver_data[0]; +@@ -289,6 +383,7 @@ + + struct ibv_create_comp_channel_resp { + __u32 fd; ++ __u32 reserved; }; -+#if defined(__SVR4) && defined(__sun) -+/* -+ * CQ responses pass opaque data to userspace drivers, we choose a value -+ * larger than what any HCA requires. -+ */ -+#define SOL_UVERBS_CQ_DATA_OUT_SIZE 24 -+typedef __u64 ofuv_cq_drv_data_out_t[SOL_UVERBS_CQ_DATA_OUT_SIZE]; -+ - struct ibv_create_cq_resp { - __u32 cq_handle; - __u32 cqe; -+ ofuv_cq_drv_data_out_t drv_out; - }; -+#else -+struct ibv_create_cq_resp { -+ __u32 cq_handle; -+ __u32 cqe; -+}; -+#endif - - struct ibv_kern_wc { - __u64 wr_id; -@@ -334,6 +456,7 @@ + struct ibv_create_cq { +@@ -334,6 +429,7 @@ __u64 response; __u32 cq_handle; __u32 ne; @@ -1975,7 +2036,7 @@ }; struct ibv_poll_cq_resp { -@@ -348,6 +471,7 @@ +@@ -348,6 +444,7 @@ __u16 out_words; __u32 cq_handle; __u32 solicited; @@ -1983,7 +2044,7 @@ }; struct ibv_resize_cq { -@@ -357,6 +481,7 @@ +@@ -357,6 +454,7 @@ __u64 response; __u32 cq_handle; __u32 cqe; @@ -1991,19 +2052,7 @@ __u64 driver_data[0]; }; -@@ -363,7 +488,11 @@ - struct ibv_resize_cq_resp { - __u32 cqe; - __u32 reserved; -+#if defined(__SVR4) && defined(__sun) -+ ofuv_cq_drv_data_out_t drv_out; -+#else - __u64 driver_data[0]; -+#endif - }; - - struct ibv_destroy_cq { -@@ -373,6 +502,7 @@ +@@ -373,6 +471,7 @@ __u64 response; __u32 cq_handle; __u32 reserved; @@ -2011,43 +2060,7 @@ }; struct ibv_destroy_cq_resp { -@@ -460,6 +590,14 @@ - __u64 driver_data[0]; - }; - -+#if defined(__SVR4) && defined(__sun) -+/* -+ * QP responses pass opaque data to userspace drivers, we choose a value -+ * larger than what any HCA requires. -+ */ -+#define SOL_UVERBS_QP_DATA_OUT_SIZE 24 -+typedef __u64 ofuv_qp_drv_data_out_t[SOL_UVERBS_QP_DATA_OUT_SIZE]; -+ - struct ibv_create_qp_resp { - __u32 qp_handle; - __u32 qpn; -@@ -469,7 +607,20 @@ - __u32 max_recv_sge; - __u32 max_inline_data; - __u32 reserved; -+ ofuv_qp_drv_data_out_t drv_out; - }; -+#else -+struct ibv_create_qp_resp { -+ __u32 qp_handle; -+ __u32 qpn; -+ __u32 max_send_wr; -+ __u32 max_recv_wr; -+ __u32 max_send_sge; -+ __u32 max_recv_sge; -+ __u32 max_inline_data; -+ __u32 reserved; -+}; -+#endif - - struct ibv_qp_dest { - __u8 dgid[16]; -@@ -493,6 +644,7 @@ +@@ -493,6 +592,7 @@ __u64 response; __u32 qp_handle; __u32 attr_mask; @@ -2055,7 +2068,7 @@ __u64 driver_data[0]; }; -@@ -560,6 +712,7 @@ +@@ -560,6 +660,7 @@ __u8 alt_port_num; __u8 alt_timeout; __u8 reserved[2]; @@ -2063,7 +2076,7 @@ __u64 driver_data[0]; }; -@@ -570,6 +723,7 @@ +@@ -570,10 +671,12 @@ __u64 response; __u32 qp_handle; __u32 reserved; @@ -2071,15 +2084,53 @@ }; struct ibv_destroy_qp_resp { -@@ -775,6 +929,7 @@ - __u32 qp_handle; - __u16 mlid; - __u16 reserved; -+ __u64 user_handle; - __u64 driver_data[0]; + __u32 events_reported; ++ __u32 reserved; + }; + + struct ibv_create_xrc_rcv_qp { +@@ -705,6 +808,7 @@ + + struct ibv_post_send_resp { + __u32 bad_wr; ++ __u32 reserved; + }; + + struct ibv_kern_recv_wr { +@@ -727,6 +831,7 @@ + + struct ibv_post_recv_resp { + __u32 bad_wr; ++ __u32 reserved; }; -@@ -786,6 +941,7 @@ + struct ibv_post_srq_recv { +@@ -743,6 +848,7 @@ + + struct ibv_post_srq_recv_resp { + __u32 bad_wr; ++ __u32 reserved; + }; + + struct ibv_create_ah { +@@ -758,6 +864,7 @@ + + struct ibv_create_ah_resp { + __u32 handle; ++ __u32 reserved; + }; + + struct ibv_destroy_ah { +@@ -765,6 +872,8 @@ + __u16 in_words; + __u16 out_words; + __u32 ah_handle; ++ __u32 reserved; ++ __u64 user_handle; + }; + + struct ibv_attach_mcast { +@@ -775,6 +884,7 @@ __u32 qp_handle; __u16 mlid; __u16 reserved; @@ -2087,37 +2138,15 @@ __u64 driver_data[0]; }; -@@ -817,12 +973,29 @@ +@@ -786,6 +896,7 @@ + __u32 qp_handle; + __u16 mlid; + __u16 reserved; ++ __u64 user_handle; __u64 driver_data[0]; }; -+#if defined(__SVR4) && defined(__sun) -+/* -+ * QP responses pass opaque data to userspace drivers, we choose a value -+ * larger than what any HCA requires. -+ */ -+#define SOL_UVERBS_SRQ_DATA_OUT_SIZE 24 -+typedef __u64 ofuv_srq_drv_data_out_t[SOL_UVERBS_SRQ_DATA_OUT_SIZE]; -+ - struct ibv_create_srq_resp { - __u32 srq_handle; - __u32 max_wr; - __u32 max_sge; - __u32 reserved; -+ ofuv_srq_drv_data_out_t drv_out; - }; -+#else -+struct ibv_create_srq_resp { -+ __u32 srq_handle; -+ __u32 max_wr; -+ __u32 max_sge; -+ __u32 reserved; -+}; -+#endif - - struct ibv_modify_srq { - __u32 command; -@@ -832,6 +1005,7 @@ +@@ -832,6 +943,7 @@ __u32 attr_mask; __u32 max_wr; __u32 srq_limit; @@ -2125,7 +2154,7 @@ __u64 driver_data[0]; }; -@@ -842,6 +1016,7 @@ +@@ -842,6 +954,7 @@ __u64 response; __u32 srq_handle; __u32 reserved; @@ -2133,7 +2162,7 @@ __u64 driver_data[0]; }; -@@ -859,6 +1034,7 @@ +@@ -859,10 +972,12 @@ __u64 response; __u32 srq_handle; __u32 reserved; @@ -2141,7 +2170,20 @@ }; struct ibv_destroy_srq_resp { -@@ -946,6 +1122,14 @@ + __u32 events_reported; ++ __u32 reserved; + }; + + struct ibv_open_xrc_domain { +@@ -877,6 +992,7 @@ + + struct ibv_open_xrc_domain_resp { + __u32 xrcd_handle; ++ __u32 reserved; + }; + + struct ibv_close_xrc_domain { +@@ -946,6 +1062,14 @@ IB_USER_VERBS_CMD_QUERY_XRC_RCV_QP_V2 = -1, IB_USER_VERBS_CMD_REG_XRC_RCV_QP_V2 = -1, IB_USER_VERBS_CMD_UNREG_XRC_RCV_QP_V2 = -1, @@ -2190,7 +2232,18 @@ int ibv_cmd_create_cq(struct ibv_context *context, int cqe, struct ibv_comp_channel *channel, int comp_vector, struct ibv_cq *cq, -@@ -164,8 +180,8 @@ +@@ -133,6 +149,10 @@ + struct ibv_recv_wr **bad_wr); + int ibv_cmd_create_ah(struct ibv_pd *pd, struct ibv_ah *ah, + struct ibv_ah_attr *attr); ++int ibv_cmd_create_ah_ex(struct ibv_pd *pd, struct ibv_ah *ah, ++ struct ibv_ah_attr *attr, ++ struct ibv_create_ah *cmd, size_t cmd_size, ++ struct ibv_create_ah_resp *resp, size_t resp_size); + int ibv_cmd_destroy_ah(struct ibv_ah *ah); + int ibv_cmd_attach_mcast(struct ibv_qp *qp, const union ibv_gid *gid, uint16_t lid); + int ibv_cmd_detach_mcast(struct ibv_qp *qp, const union ibv_gid *gid, uint16_t lid); +@@ -164,8 +184,8 @@ int ibv_read_sysfs_file(const char *dir, const char *file, char *buf, size_t size); diff -r 0cca05cde869 -r 353f8a998732 components/open-fabrics/libibverbs/solaris_compatibility.c --- a/components/open-fabrics/libibverbs/solaris_compatibility.c Thu Jul 16 15:20:48 2015 -0700 +++ b/components/open-fabrics/libibverbs/solaris_compatibility.c Fri Jul 17 12:11:28 2015 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. * * This software is available to you under a choice of one of two * licenses. You may choose to be licensed under the terms of the GNU @@ -47,12 +47,8 @@ #include #include #include -#include -#include #include #include -#include - #include #include "../include/infiniband/arch.h" #include "../include/infiniband/verbs.h" @@ -64,58 +60,23 @@ #define min(a, b) ((a) < (b) ? (a) : (b)) - -/* - * The followings will be removed when changes in hermon_ioctl.h - * are delivered through ON. - */ -#ifndef HERMON_GET_HWINFO_IOCTL_SUP -#define HERMON_IOCTL_GET_HWINFO (('t' << 8) | 0x32) -#pragma pack(1) - -/* Structure used for getting HW info */ -typedef struct hermon_hw_info_ioctl_s { - uint32_t af_hw_info_version; - uint32_t af_padding1; /* Padding for af_hwpn to be on */ - /* 64 byte boundary */ - char af_hwpn[64]; - uint16_t af_pn_len; - uint64_t af_padding2:48; /* Padding for af_psid to be on */ - /* 64 byte boundary */ - char af_psid[16]; - uint16_t af_psid_len; - uint32_t af_padding3; /* Padding for reserved to be on */ - /* 64 byte boundary */ - uint8_t reserved[64]; -} hermon_hw_info_ioctl_t; -#pragma pack() -#endif - - /* * duplicate ABI definitions for HCAs as the HCA abi headers are not * installed in proto. */ -#define MLX4_UVERBS_MAX_ABI_VERSION 3 /* mlx4-abi.h */ #define RDMA_USER_CM_MIN_ABI_VERSION 3 /* rdma_cma_abi.h */ #define RDMA_USER_CM_MAX_ABI_VERSION 4 /* rdma_cma_abi.h */ -#define MLX4 0 +/* + * Some useful definitions. + */ #define HW_DRIVER_MAX_NAME_LEN 20 #define UVERBS_KERNEL_SYSFS_NAME_BASE "uverbs" #define UMAD_KERNEL_SYSFS_NAME_BASE "umad" #define IB_HCA_DEVPATH_PREFIX "/dev/infiniband/hca" #define IB_OFS_DEVPATH_PREFIX "/dev/infiniband/ofs" -#define CONNECTX_NAME "mlx4_" - -#define MELLANOX_VENDOR_ID 0x15b3 -#define PCI_DEVICE_ID_MELLANOX_HERMON_SDR 0x6340 -#define PCI_DEVICE_ID_MELLANOX_HERMON_DDR 0x634a -#define PCI_DEVICE_ID_MELLANOX_HERMON_QDR 0x6354 -#define PCI_DEVICE_ID_MELLANOX_HERMON_DDR_PCIE2 0x6732 -#define PCI_DEVICE_ID_MELLANOX_HERMON_QDR_PCIE2 0x673c -#define INFINIHOST_DEVICE_ID_2 0x5a45 -#define INFINIHOST_DEVICE_ID_4 0x6279 +#define IB_HCA_DEVPATH_SZ 64 +#define MAX_OFS_DEVPATH_LEN 64 #define MAX_HCAS (64*16) #define MAX_PORTS (MAX_HCAS*2) @@ -133,6 +94,71 @@ static int sol_uverbs_minor_dev = -1; /* + * Ugly, evil and rest of the names that qualify for it. + * This is a side definition for the uverbs hca_info till the + * new header file can appear in the userland build environment once that + * happens this code will go. + */ +#if (IB_USER_VERBS_SOLARIS_ABI_VERSION == 2) +#undef IB_USER_VERBS_SOLARIS_ABI_VERSION +#define IB_USER_VERBS_SOLARIS_ABI_VERSION 3 +#define __VERBS_COMPAT_MODE 1 + +/* + * Some useful definitions. + */ +#define PSID_STR_SZ 40 +#define IBDEV_NAME_SZ 64 +#define HCA_DRIVER_NAME_SZ 40 +#define DEVID_STR_SZ 40 + +/* + * These are duplicate definitions to help the build complete on userland + * build machines till the header files are populated with the new versions. + * Once the new header file is available in the build system this code will + * be removed. + */ +typedef struct sol_uverbs_hca_infov3_s { + char uverbs_hca_psid_string[PSID_STR_SZ]; + char uverbs_hca_ibdev_name[IBDEV_NAME_SZ]; + char uverbs_hca_driver_name[HCA_DRIVER_NAME_SZ]; + uint32_t uverbs_hca_driver_instance; + uint32_t uverbs_hca_vendorid; + uint16_t uverbs_hca_deviceid; + uint16_t uverbs_hca_devidx; + int32_t uverbs_hca_abi_version; + uint64_t uverbs_hca_fw_ver; + uint64_t uverbs_hca_node_guid; + uint64_t uverbs_hca_node_external_guid; + uint64_t uverbs_hca_sys_image_guid; + uint32_t uverbs_hca_hw_version; + uint8_t uverbs_hca_pad1[4]; + char uverbs_hca_devid_string[DEVID_STR_SZ]; +} sol_uverbs_hca_infov3_t; + +typedef struct sol_uverbs_info_v3_s { + int32_t uverbs_abi_version; + int32_t uverbs_solaris_abi_version; + int16_t uverbs_hca_cnt; + int8_t uverbs_pad1[6]; /* Padding for alignment */ + sol_uverbs_hca_infov3_t uverbs_hca_info[]; +} sol_uverbs_infov3_t; + +#define SIZEOF_UVERBS_INFO (sizeof (sol_uverbs_infov3_t)) +#define SIZEOF_HCA_INFO (sizeof (sol_uverbs_hca_infov3_t)) +#define UVERBS_INFO(x) ((sol_uverbs_infov3_t *)x) +#define HCA_INFO(x) ((sol_uverbs_hca_infov3_t *)x) + +#else /* (IB_USER_VERBS_SOLARIS_ABI_VERSION == 3) */ + +#define SIZEOF_UVERBS_INFO (sizeof (sol_uverbs_info_t)) +#define SIZEOF_HCA_INFO (sizeof (sol_uverbs_hca_info_t)) +#define UVERBS_INFO(x) ((sol_uverbs_info_t *)x) +#define HCA_INFO(x) ((sol_uverbs_hca_info_t *)x) + +#endif /* END */ + +/* * check_path() prefixs */ typedef enum cp_prefix_e { @@ -141,17 +167,16 @@ CP_D = 3, CP_GIDS = 4, CP_PKEYS = 5, - CP_MLX4 = 6, - CP_PORTS = 7, - CP_UMAD = 8, - CP_SLASH = 9, - CP_SYS = 10, - CP_CLASS = 11, - CP_INFINIBAND_VERBS = 12, - CP_INFINIBAND = 13, - CP_INFINIBAND_MAD = 14, - CP_MISC = 15, - CP_RDMA_CM = 16 + CP_PORTS = 6, + CP_UMAD = 7, + CP_SLASH = 8, + CP_SYS = 9, + CP_CLASS = 10, + CP_INFINIBAND_VERBS = 11, + CP_INFINIBAND = 12, + CP_INFINIBAND_MAD = 13, + CP_MISC = 14, + CP_RDMA_CM = 15 } cp_prefix_t; /* @@ -159,30 +184,23 @@ * work. This will speed up the sysfs emulation. */ typedef struct ibdev_cache_info_s { - uint_t ibd_valid; - uint_t ibd_hw_rev; - char ibd_node_guid_str[20]; - char ibd_node_guid_external_str[20]; - char ibd_sys_image_guid[20]; - char ibd_fw_ver[16]; - char ibd_name[16]; - int ibd_boardid_index; - uint_t ibd_device_id; + boolean_t ibd_valid; + uint_t ibd_hw_rev; + uint_t ibd_abi_version; + uint_t ibd_vendor_id; + uint_t ibd_device_id; + char ibd_hca_path[IB_HCA_DEVPATH_SZ]; + char ibd_node_guid_str[20]; + char ibd_node_guid_external_str[20]; + char ibd_sys_image_guid[20]; + char ibd_fw_ver[16]; + char ibd_name[IBDEV_NAME_SZ]; + char ibd_boardid_string[PSID_STR_SZ]; + char ibd_devid_string[DEVID_STR_SZ]; } ibdev_cache_info_t; -/* hermon - hence 2 */ -static ibdev_cache_info_t ibdev_cache[2][MAX_HCAS]; - -typedef struct uverbs_cache_info_s { - uint_t uvc_valid; - uint_t uvc_ibdev_abi_version; - uint_t uvc_vendor_id; - uint_t uvc_device_id; - int uvc_hca_instance; - char uvc_ibdev_name[16]; - char uvc_ibdev_hca_path[MAXPATHLEN]; -} uverbs_cache_info_t; -static uverbs_cache_info_t uverbs_dev_cache[MAX_HCAS]; +/* IB device info cache */ +static ibdev_cache_info_t ibdev_cache[MAX_HCAS]; static int uverbs_abi_version = -1; typedef struct umad_cache_info_s { @@ -195,15 +213,11 @@ pthread_once_t oneTimeInit = PTHREAD_ONCE_INIT; static int umad_cache_cnt = 0; -static int ibdev_cache_cnt = 0; -static int uverbs_cache_cnt = 0; static boolean_t initialized = B_FALSE; static boolean_t umad_cache_initialized = B_FALSE; static boolean_t ibdev_cache_initialized = B_FALSE; -static boolean_t uverbs_cache_initialized = B_FALSE; static pthread_mutex_t umad_cache_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t ibdev_cache_mutex = PTHREAD_MUTEX_INITIALIZER; -static pthread_mutex_t uverbs_cache_mutex = PTHREAD_MUTEX_INITIALIZER; int sol_ibv_query_gid(struct ibv_context *, uint8_t, int, union ibv_gid *); int sol_ibv_query_pkey(struct ibv_context *, uint8_t, int, uint16_t *); @@ -215,7 +229,6 @@ int sol_ibv_query_port(struct ibv_context *, uint8_t, struct ibv_port_attr *); - void solaris_init(void) { @@ -234,6 +247,218 @@ (void) kstat_close(kc); } +#define isdigit(c) ((c) >= '0' && (c) <= '9') + +/* + * Given a device name of the form , + * get the device number. Device name is of the form + * for example:- mlx4_0, mlx4_2 etc. Function will return the device instance + * extracted from the name. + * for example:- mlx4_0 will return 0 and mlx4_2 will return 2. + */ +static int +get_device_num(const char *device_name) +{ + const char *temp; + const char *end; + const char *start = device_name; + int len; + int devnum; + + if (!start) + return (-1); + + len = strlen(device_name); + end = &device_name[len - 1]; + + for (temp = end; temp >= start && isdigit(*temp); temp--) + /* Null body */; + + /* + * Check if the device number is invalid. + */ + if (temp == end || temp < start) + return (-1); + + devnum = atoi(temp + 1); + if (devnum < 0 || devnum >= MAX_HCAS) + return (-1); + + return (devnum); +} + +/* + * For usages where ibdev cache needs to be read based on the IB device + * name instead of uverbs device name a simple compare against the cache + * entries is used to retrieve the corresponding ibdev cache entry. + */ +static ibdev_cache_info_t * +ibdev_cache_read_by_devname(const char *devname) +{ + int idx; + ibdev_cache_info_t *cache = NULL; + + if (!devname) + return (NULL); + + for (idx = 0; idx < MAX_HCAS; idx++) { + cache = &ibdev_cache[idx]; + if (strcmp(cache->ibd_name, devname) == 0) + break; + } + + /* + * If we failed to find an entry return NULL. + */ + if (idx == MAX_HCAS) + cache = NULL; + + return (cache); +} + +/* + * Helper function to update the ibdev cache entries with the values obtained + * from the uverbs HCA info ioctl. + */ +static int +ibdev_cache_init() +{ + ibdev_cache_info_t *info; + int fd, i, hca_cnt; + char uverbs_devpath[MAX_OFS_DEVPATH_LEN]; +#ifdef __VERBS_COMPAT_MODE + sol_uverbs_infov3_t *uverbs_infop; + sol_uverbs_hca_infov3_t *hca_infop; +#else + sol_uverbs_info_t *uverbs_infop; + sol_uverbs_hca_info_t *hca_infop; +#endif /* END __VERBS_COMPAT_MODE */ + char *buf; + size_t bufsize; + uint16_t major, minor, sub_minor; + uint64_t raw_fw_ver; + uint64_t guid; + + snprintf(uverbs_devpath, MAX_OFS_DEVPATH_LEN, "%s/%s%d", + IB_OFS_DEVPATH_PREFIX, UVERBS_KERNEL_SYSFS_NAME_BASE, + sol_uverbs_minor_dev); + + /* + * using the first sol_uverbs minor node that can be opened to get + * all the HCA information + */ + if ((fd = open(uverbs_devpath, O_RDWR)) < 0) { + fprintf(stderr, "sol_uverbs failed to open: %s\n", + strerror(errno)); + return (-1); + } + + bufsize = SIZEOF_UVERBS_INFO + (MAX_HCAS * SIZEOF_HCA_INFO); + buf = malloc(bufsize); + if (!buf) { + fprintf(stderr, "ibdev_cache_update() failed to alloc\n"); + close(fd); + return (-1); + } + memset(buf, 0, bufsize); + + uverbs_infop = UVERBS_INFO(buf); + uverbs_infop->uverbs_hca_cnt = MAX_HCAS; + + if (ioctl(fd, UVERBS_IOCTL_GET_HCA_INFO, uverbs_infop) != 0) { + fprintf(stderr, "sol_uverbs ioctl failed: %s\n", + strerror(errno)); + + goto error_exit1; + } + + if (uverbs_infop->uverbs_solaris_abi_version != + IB_USER_VERBS_SOLARIS_ABI_VERSION) { + fprintf(stderr, "sol_uverbs solaris_abi_version !=" + "IB_USER_VERBS_SOLARIS_ABI_VERSION : %d\n", + uverbs_infop->uverbs_solaris_abi_version); + goto error_exit1; + } + + hca_cnt = uverbs_infop->uverbs_hca_cnt; /* hca count returned */ + hca_infop = uverbs_infop->uverbs_hca_info; + + if (hca_cnt > MAX_HCAS) { + fprintf(stderr, "Number of HCAs returned exceeds max\n"); + goto error_exit1; + } + + if (uverbs_abi_version == -1) + uverbs_abi_version = uverbs_infop->uverbs_abi_version; + + for (i = 0; i < hca_cnt; i++, hca_infop++) { + + /* + * Update the cache. + */ + info = &ibdev_cache[hca_infop->uverbs_hca_devidx]; + + (void) strncpy(info->ibd_name, + hca_infop->uverbs_hca_ibdev_name, IBDEV_NAME_SZ); + + guid = hca_infop->uverbs_hca_node_guid; + sprintf(info->ibd_node_guid_str, "%04x:%04x:%04x:%04x", + (unsigned)(guid >> 48) & 0xffff, + (unsigned)(guid >> 32) & 0xffff, + (unsigned)(guid >> 16) & 0xffff, + (unsigned)(guid >> 0) & 0xffff); + + guid = hca_infop->uverbs_hca_node_external_guid; + sprintf(info->ibd_node_guid_external_str, "%04x:%04x:%04x:%04x", + (unsigned)(guid >> 48) & 0xffff, + (unsigned)(guid >> 32) & 0xffff, + (unsigned)(guid >> 16) & 0xffff, + (unsigned)(guid >> 0) & 0xffff); + + guid = hca_infop->uverbs_hca_sys_image_guid; + sprintf(info->ibd_sys_image_guid, "%04x:%04x:%04x:%04x", + (unsigned)(guid >> 48) & 0xffff, + (unsigned)(guid >> 32) & 0xffff, + (unsigned)(guid >> 16) & 0xffff, + (unsigned)(guid >> 0) & 0xffff); + + raw_fw_ver = hca_infop->uverbs_hca_fw_ver; + major = (raw_fw_ver >> 32) & 0xffff; + minor = (raw_fw_ver >> 16) & 0xffff; + sub_minor = raw_fw_ver & 0xffff; + + snprintf(info->ibd_fw_ver, sizeof (info->ibd_fw_ver), + "%d.%d.%03d", major, minor, sub_minor); + + info->ibd_hw_rev = hca_infop->uverbs_hca_hw_version; + info->ibd_vendor_id = hca_infop->uverbs_hca_vendorid; + info->ibd_device_id = hca_infop->uverbs_hca_deviceid; + info->ibd_abi_version = hca_infop->uverbs_hca_abi_version; + + snprintf(info->ibd_hca_path, sizeof (info->ibd_hca_path), + "%s/%s%d", IB_HCA_DEVPATH_PREFIX, + hca_infop->uverbs_hca_driver_name, + hca_infop->uverbs_hca_driver_instance); + + strncpy(info->ibd_boardid_string, + hca_infop->uverbs_hca_psid_string, PSID_STR_SZ); + + strncpy(info->ibd_devid_string, + hca_infop->uverbs_hca_devid_string, DEVID_STR_SZ); + + info->ibd_valid = B_TRUE; + } + + free(buf); + close(fd); + return (0); + +error_exit1: + free(buf); + close(fd); + return (-1); +} + static int umad_cache_add(uint_t dev_num, int port, char *ibdev) { @@ -250,228 +475,17 @@ } static int -ibdev_cache_add(uint_t dev_num, ibdev_cache_info_t *info_p) -{ - if ((dev_num >= MAX_HCAS) || (ibdev_cache_cnt >= (MAX_HCAS * 2))) { - fprintf(stderr, "dev %d: exceeds hca cache size\n", dev_num); - return (1); - } - - if (!(strncmp(info_p->ibd_name, "mlx4", 4))) { - memcpy(&(ibdev_cache[MLX4][dev_num]), info_p, - sizeof (ibdev_cache_info_t)); - ibdev_cache[MLX4][dev_num].ibd_valid = 1; - } else { - fprintf(stderr, "dev %d: has no proper ibdev name\n", dev_num); - return (1); - } - - ibdev_cache_cnt++; - return (0); -} - -static int -uverbs_cache_add(uint_t dev_num, uverbs_cache_info_t *info_p) -{ - if ((dev_num >= MAX_HCAS) || (uverbs_cache_cnt >= MAX_HCAS)) { - fprintf(stderr, "dev %d: exceeds uverbs cache size\n", dev_num); - return (1); - } - - memcpy(&(uverbs_dev_cache[dev_num]), info_p, - sizeof (uverbs_cache_info_t)); - - uverbs_dev_cache[dev_num].uvc_valid = 1; - uverbs_cache_cnt++; - return (0); -} - -static int -ibdev_cache_init() -{ - ibdev_cache_info_t info; - struct ibv_device **root_dev_list, **dev_list = NULL; - struct ibv_device_attr device_attr; - int i, num_dev, dev_num, ret = 1; - uint64_t guid; - const char *p, *ibdev; - - - root_dev_list = dev_list = ibv_get_device_list(&num_dev); - if (!dev_list) { - fprintf(stderr, "No HCA devices found"); - goto error_exit1; - } - - for (i = 0; i < num_dev; i++, dev_list++) { - - if (sol_ibv_query_device(*dev_list, &device_attr)) { - fprintf(stderr, "failed to query device %p\n", - *dev_list); - goto error_exit2; - } - - guid = ntohll(device_attr.node_guid); - sprintf(info.ibd_node_guid_str, "%04x:%04x:%04x:%04x", - (unsigned)(guid >> 48) & 0xffff, - (unsigned)(guid >> 32) & 0xffff, - (unsigned)(guid >> 16) & 0xffff, - (unsigned)(guid >> 0) & 0xffff); - - guid = ntohll(device_attr.node_guid_external); - sprintf(info.ibd_node_guid_external_str, "%04x:%04x:%04x:%04x", - (unsigned)(guid >> 48) & 0xffff, - (unsigned)(guid >> 32) & 0xffff, - (unsigned)(guid >> 16) & 0xffff, - (unsigned)(guid >> 0) & 0xffff); - - guid = ntohll(device_attr.sys_image_guid); - sprintf(info.ibd_sys_image_guid, "%04x:%04x:%04x:%04x", - (unsigned)(guid >> 48) & 0xffff, - (unsigned)(guid >> 32) & 0xffff, - (unsigned)(guid >> 16) & 0xffff, - (unsigned)(guid >> 0) & 0xffff); - - (void) strcpy(info.ibd_fw_ver, device_attr.fw_ver); - info.ibd_hw_rev = device_attr.hw_ver; - info.ibd_device_id = device_attr.vendor_part_id; - - ibdev = ibv_get_device_name(*dev_list); - if (strncmp(ibdev, "mlx4_", 5) == 0) { - p = ibdev + (strlen("mlx4_")); - } else { - fprintf(stderr, "Invalid device %s\n", ibdev); - goto error_exit2; - } - dev_num = atoi(p); - (void) strcpy(info.ibd_name, ibdev); - - info.ibd_boardid_index = -1; - - if (ibdev_cache_add(dev_num, &info)) { - fprintf(stderr, "failed to add dev %d to ibdev cache\n", - dev_num); - goto error_exit2; - } - } - - ret = 0; - - /* clean up and Return */ -error_exit2: - if (root_dev_list) - ibv_free_device_list(root_dev_list); -error_exit1: - return (ret); -} - -static int -uverbs_cache_init() -{ - uverbs_cache_info_t info; - int dev_num, fd, i, bufsize, hca_cnt; - char uverbs_devpath[MAXPATHLEN]; - sol_uverbs_info_t *uverbs_infop; - sol_uverbs_hca_info_t *hca_infop; - char *buf; - - snprintf(uverbs_devpath, MAXPATHLEN, "%s/%s%d", - IB_OFS_DEVPATH_PREFIX, UVERBS_KERNEL_SYSFS_NAME_BASE, - sol_uverbs_minor_dev); - - /* - * using the first sol_uverbs minor node that can be opened to get - * all the HCA information - */ - if ((fd = open(uverbs_devpath, O_RDWR)) < 0) { - fprintf(stderr, "sol_uverbs failed to open: %s\n", - strerror(errno)); - goto error_exit1; - } - - bufsize = sizeof (sol_uverbs_info_t) + sizeof (sol_uverbs_hca_info_t) * - MAX_HCAS; - buf = malloc(bufsize); - memset(buf, 0, bufsize); - uverbs_infop = (sol_uverbs_info_t *)buf; - uverbs_infop->uverbs_hca_cnt = MAX_HCAS; - - if (ioctl(fd, UVERBS_IOCTL_GET_HCA_INFO, uverbs_infop) != 0) { - fprintf(stderr, "sol_uverbs ioctl failed: %s\n", - strerror(errno)); - - goto error_exit2; - } - - if (uverbs_infop->uverbs_solaris_abi_version != - IB_USER_VERBS_SOLARIS_ABI_VERSION) { - fprintf(stderr, "sol_uverbs solaris_abi_version !=" - "IB_USER_VERBS_SOLARIS_ABI_VERSION : %d\n", - uverbs_infop->uverbs_solaris_abi_version); - goto error_exit2; - } - - hca_cnt = uverbs_infop->uverbs_hca_cnt; /* hca count returned */ - hca_infop = uverbs_infop->uverbs_hca_info; - - if (uverbs_abi_version == -1) - uverbs_abi_version = uverbs_infop->uverbs_abi_version; - - for (i = 0; i < hca_cnt; i++, hca_infop++) { - info.uvc_vendor_id = hca_infop->uverbs_hca_vendorid; - info.uvc_device_id = hca_infop->uverbs_hca_deviceid; - info.uvc_hca_instance = - hca_infop->uverbs_hca_driver_instance; - - snprintf(info.uvc_ibdev_hca_path, - sizeof (info.uvc_ibdev_hca_path), - "%s/%s%d", IB_HCA_DEVPATH_PREFIX, - hca_infop->uverbs_hca_driver_name, - hca_infop->uverbs_hca_driver_instance); - - if (strncmp(hca_infop->uverbs_hca_ibdev_name, "mlx4_", 5) == 0) - info.uvc_ibdev_abi_version = - MLX4_UVERBS_MAX_ABI_VERSION; - else { - fprintf(stderr, "libibverbs: sol_uverbs unsupported " - "device: %s\n", hca_infop->uverbs_hca_ibdev_name); - goto error_exit2; - } - - strcpy(info.uvc_ibdev_name, hca_infop->uverbs_hca_ibdev_name); - - dev_num = hca_infop->uverbs_hca_devidx; - if (uverbs_cache_add(dev_num, &info)) { - fprintf(stderr, "failed to add dev %d to uverbs " - "cache\n", dev_num); - goto error_exit2; - } - } - - free(buf); - close(fd); - return (1); - -error_exit2: - free(buf); - close(fd); - -error_exit1: - return (0); -} - -static int umad_cache_init() { int i, fd, minor; int save_errno = 0; int port_cnt, bufsize; - char umad_devpath[MAXPATHLEN], *buf; + char umad_devpath[MAX_OFS_DEVPATH_LEN], *buf; sol_umad_ioctl_info_t *umad_infop; sol_umad_ioctl_port_info_t *port_infop; for (minor = 0; minor < MAX_PORTS; minor++) { - snprintf(umad_devpath, MAXPATHLEN, "%s/%s%d", + snprintf(umad_devpath, MAX_OFS_DEVPATH_LEN, "%s/%s%d", IB_OFS_DEVPATH_PREFIX, UMAD_KERNEL_SYSFS_NAME_BASE, minor); @@ -487,7 +501,7 @@ save_errno = errno; fprintf(stderr, "failed to open sol_umad: %s\n", strerror(save_errno)); - return (0); + return (-1); } bufsize = sizeof (sol_umad_ioctl_info_t) + @@ -534,26 +548,26 @@ free(buf); close(fd); - return (1); + return (0); error_exit: free(buf); close(fd); - return (0); + return (-1); } void initialize(void) { int fd, minor; - char uverbs_devpath[MAXPATHLEN]; + char uverbs_devpath[MAX_OFS_DEVPATH_LEN]; /* * find the first sol_uverbs minor node that can be opened successfully * and set sol_uverbs_mino_dev to that minor no. */ for (minor = 0; minor < MAX_HCAS; minor++) { - snprintf(uverbs_devpath, MAXPATHLEN, "%s/%s%d", + snprintf(uverbs_devpath, MAX_OFS_DEVPATH_LEN, "%s/%s%d", IB_OFS_DEVPATH_PREFIX, UVERBS_KERNEL_SYSFS_NAME_BASE, minor); @@ -576,8 +590,7 @@ return; } - memset(&uverbs_dev_cache, 0, (sizeof (uverbs_cache_info_t) * MAX_HCAS)); - memset(&ibdev_cache, 0, (sizeof (ibdev_cache_info_t) * MAX_HCAS * 2)); + memset(&ibdev_cache, 0, (sizeof (ibdev_cache_info_t) * MAX_HCAS)); memset(&umad_dev_cache, 0, (sizeof (umad_cache_info_t) * MAX_PORTS)); @@ -588,6 +601,37 @@ * Some sysfs emulation software */ +/* + * Extract the HCA dev name from the path and remove it from the path. + * Given a path extract the HCA dev name of the form + * During parsing the device instance number is validated to make sure it is + * within MAX_HCAS limit, the routine also skips over the duplicate slashes. + */ +static int +check_path_for_hca(char *path, char *device_name) +{ + int pos = 0; + int len; + + while ((path[pos] != '/') || (path[pos] == '\0')) + pos++; + + if (path[pos] != '/') + return (0); + + strncpy(device_name, path, (pos + 1)); + device_name[pos] = '\0'; + + if (get_device_num(device_name) < 0) + return (0); + + while (path[pos] == '/') + pos++; + + len = strlen(path); + memmove(path, &path[pos], (len - pos) + 1); + return (1); +} /* * Check whether a path starts with prefix, and if it does, remove it @@ -615,9 +659,6 @@ case CP_PKEYS: ret = sscanf(path, "pkeys%n/", &pos); break; - case CP_MLX4: - ret = sscanf(path, "mlx4_%d%n/", arg, &pos); - break; case CP_PORTS: ret = sscanf(path, "ports%n/", &pos); break; @@ -669,8 +710,6 @@ get_device_info(const char *devname) { ibdev_cache_info_t *info = NULL; - const char *p = devname; - int dev_num; if (pthread_mutex_lock(&ibdev_cache_mutex) != 0) { fprintf(stderr, "failed: to acquire ibdev_cache_mutex %s\n", @@ -678,41 +717,17 @@ return (NULL); } - if (!ibdev_cache_initialized) { - if (ibdev_cache_init()) { + if (ibdev_cache_initialized == B_FALSE) { + if (ibdev_cache_init() != 0) { (void) pthread_mutex_unlock(&ibdev_cache_mutex); fprintf(stderr, "failed to init ibdev_cache\n"); return (NULL); - } else { - ibdev_cache_initialized = B_TRUE; } + ibdev_cache_initialized = B_TRUE; } (void) pthread_mutex_unlock(&ibdev_cache_mutex); - if (strncmp(p, "mlx4_", 5) == 0) { - p = p+(strlen("mlx4_")); - } else { - fprintf(stderr, "libibverbs: sol_uverbs unsupported " - "device: %s\n", p); - return (NULL); - } - dev_num = atoi(p); - - if (dev_num >= MAX_HCAS) { - fprintf(stderr, "Invalid device %s\n", devname); - return (NULL); - } - - if (strncmp(devname, "mlx4", 4) == 0) { - if (ibdev_cache[MLX4][dev_num].ibd_valid) - info = &(ibdev_cache[MLX4][dev_num]); - else - info = NULL; - } else { - fprintf(stderr, "libibverbs: sol_uverbs unsupported " - "device: %s\n", devname); - info = NULL; - } + info = ibdev_cache_read_by_devname(devname); return (info); } @@ -736,7 +751,7 @@ union ibv_gid *gids = NULL; uint16_t *pkeys = NULL; int i, num_dev, rv, ret = 1; - char uverbs_devpath[MAXPATHLEN]; + char uverbs_devpath[MAX_OFS_DEVPATH_LEN]; root_dev_list = dev_list = ibv_get_device_list(&num_dev); if (!dev_list) { @@ -755,8 +770,8 @@ goto error_exit2; } - snprintf(uverbs_devpath, MAXPATHLEN, "%s/%s", IB_OFS_DEVPATH_PREFIX, - (*dev_list)->dev_name); + snprintf(uverbs_devpath, MAX_OFS_DEVPATH_LEN, "%s/%s", + IB_OFS_DEVPATH_PREFIX, (*dev_list)->dev_name); ctx.device = *dev_list; @@ -839,25 +854,26 @@ #ifndef _LP64 int tmpfd; #endif - int uverbs_indx; + int indx; /* * Map the user verbs device (uverbs) to the associated - * hca device. + * hca device. ibdev_cache is indexed by uverbs device minor number + * so extracting the index here to refer to the ibdev_cache value, */ - uverbs_indx = strtol(dev_name + strlen(UVERBS_KERNEL_SYSFS_NAME_BASE), + indx = strtol(dev_name + strlen(UVERBS_KERNEL_SYSFS_NAME_BASE), NULL, 0); - if (uverbs_indx >= MAX_HCAS) { + if (indx >= MAX_HCAS) { fprintf(stderr, "Invalid device %s\n", dev_name); goto err_dev; } - if (!uverbs_dev_cache[uverbs_indx].uvc_valid) { + if (!ibdev_cache[indx].ibd_valid) { fprintf(stderr, "Invalid Device %s\n", dev_name); goto err_dev; } - fd = open(uverbs_dev_cache[uverbs_indx].uvc_ibdev_hca_path, O_RDWR); + fd = open(ibdev_cache[indx].ibd_hca_path, O_RDWR); if (fd < 0) { goto err_dev; } @@ -892,27 +908,27 @@ { unsigned int device_num; int len = -1; - uverbs_cache_info_t *info_p; + ibdev_cache_info_t *info_p; - if (pthread_mutex_lock(&uverbs_cache_mutex) != 0) { - fprintf(stderr, "failed: to acquire uverbs_cache_mutex %s\n", + if (pthread_mutex_lock(&ibdev_cache_mutex) != 0) { + fprintf(stderr, "failed: to acquire ibdev_cache_mutex %s\n", strerror(errno)); goto exit; } - if (!uverbs_cache_initialized) { - if (uverbs_cache_init()) - uverbs_cache_initialized = B_TRUE; + if (ibdev_cache_initialized == B_FALSE) { + if (ibdev_cache_init() == 0) + ibdev_cache_initialized = B_TRUE; else { - (void) pthread_mutex_unlock(&uverbs_cache_mutex); + (void) pthread_mutex_unlock(&ibdev_cache_mutex); #ifdef DEBUG - fprintf(stderr, "failed: to init uverbs cache %s\n", + fprintf(stderr, "failed: to init ibdev cache %s\n", strerror(errno)); #endif goto exit; } } - (void) pthread_mutex_unlock(&uverbs_cache_mutex); + (void) pthread_mutex_unlock(&ibdev_cache_mutex); if (check_path(path, CP_SOL_UVERBS, &device_num)) { @@ -921,11 +937,10 @@ goto exit; } - if (!uverbs_dev_cache[device_num].uvc_valid) { + if (!ibdev_cache[device_num].ibd_valid) goto exit; - } - info_p = &uverbs_dev_cache[device_num]; + info_p = &ibdev_cache[device_num]; if (check_path(path, CP_DEVICE, NULL)) { /* @@ -934,17 +949,15 @@ */ if (strcmp(path, "vendor") == 0) { len = 1 + sprintf(buf, "0x%x", - info_p->uvc_vendor_id); + info_p->ibd_vendor_id); } else if (strcmp(path, "device") == 0) { len = 1 + sprintf(buf, "0x%x", - info_p->uvc_device_id); + info_p->ibd_device_id); } } else if (strcmp(path, "ibdev") == 0) { - len = 1 + sprintf(buf, "%s", - info_p->uvc_ibdev_name); + len = 1 + sprintf(buf, "%s", info_p->ibd_name); } else if (strcmp(path, "abi_version") == 0) { - len = 1 + sprintf(buf, "%d", - info_p->uvc_ibdev_abi_version); + len = 1 + sprintf(buf, "%d", info_p->ibd_abi_version); } } else if (strcmp(path, "abi_version") == 0) { @@ -1151,181 +1164,17 @@ return (len); } -/* - * This function passes the HW PSID / HWPN string obtained from - * driver HERMON_IOCTL_GET_HWINFO IOCTL. The memory for "hca_hwpsid" - * & "hca_hwpn" argument has to be passed by the caller and has to - * be at least 16 bytes & 64 bytes in size. - */ -static int -get_hca_psid_pn(char *ibd_name, int fd, char *hca_hwpsid, - char *hca_hwpn) -{ - hermon_hw_info_ioctl_t hermon_hw_info; - int rc; - - if (strncmp(ibd_name, "mlx4_", 5) == 0) { - if ((rc = ioctl(fd, HERMON_IOCTL_GET_HWINFO, - &hermon_hw_info)) != 0) - return (rc); - - strncpy(hca_hwpsid, hermon_hw_info.af_psid, 16); - strncpy(hca_hwpn, hermon_hw_info.af_hwpn, 64); - } else { - fprintf(stderr, "libibverbs: sol_uverbs unsupported " - "device: %s\n", ibd_name); - return (1); - } - return (0); -} - -/* - * This function passes the HW Part number string obtained from driver - * IOCTL. The memory for "hca_hwpn" argument has to be passed by the - * caller and has to be at least 64 bytes in size. - */ -static int -get_hca_hwpn_str(char *ibd_name, int fd, char *hca_hwpn) -{ - hermon_flash_init_ioctl_t hermon_flash_info; - int rc; - - if (strncmp(ibd_name, "mlx4_", 5) == 0) { - if ((rc = ioctl(fd, HERMON_IOCTL_FLASH_INIT, - &hermon_flash_info)) != 0) - return (rc); - strncpy(hca_hwpn, hermon_flash_info.af_hwpn, 64); - } else { - fprintf(stderr, "libibverbs: sol_uverbs unsupported " - "device: %s\n", ibd_name); - return (1); - } - return (0); -} - -static void -init_boardid_index(ibdev_cache_info_t *ibd_info) -{ - int i; - int fd; - char hca_hwpsid[16]; - char hca_hwpn[64]; - char *pn_psidp; - boolean_t psid_valid, pn_valid; - - if (pthread_mutex_lock(&uverbs_cache_mutex) != 0) { - fprintf(stderr, "failed: to acquire " - "uverbs_cache_mutex %s\n", - strerror(errno)); - goto boardid_err; - } - if (!uverbs_cache_initialized) { - if (uverbs_cache_init()) - uverbs_cache_initialized = B_TRUE; - else { - (void) pthread_mutex_unlock(&uverbs_cache_mutex); -#ifdef DEBUG - fprintf(stderr, "failed: to init uverbs cache %s\n", - strerror(errno)); -#endif - goto boardid_err; - } - } - (void) pthread_mutex_unlock(&uverbs_cache_mutex); - - for (i = 0; i < MAX_HCAS; i++) { - if (uverbs_dev_cache[i].uvc_valid && - strcmp(uverbs_dev_cache[i].uvc_ibdev_name, - ibd_info->ibd_name) == 0) { - break; - } - } - - if (i == MAX_HCAS) { - fprintf(stderr, "failed to find uverbs_dev for %s\n", - ibd_info->ibd_name); - goto boardid_err; - } - - fd = open(uverbs_dev_cache[i].uvc_ibdev_hca_path, O_RDWR); - if (fd < 0) { - goto boardid_err; - } - - psid_valid = pn_valid = B_FALSE; - if (get_hca_psid_pn(ibd_info->ibd_name, fd, - hca_hwpsid, hca_hwpn)) { - if (get_hca_hwpn_str(ibd_info->ibd_name, fd, hca_hwpn)) { - close(fd); - goto boardid_err; - } else { - if (hca_hwpn[0]) { - if ((pn_psidp = strchr( - hca_hwpn, ' ')) != NULL) - *pn_psidp = '\0'; - pn_valid = B_TRUE; - } - } - } else { - if (hca_hwpsid[0]) { - if ((pn_psidp = strchr( - hca_hwpsid, ' ')) != NULL) - *pn_psidp = '\0'; - psid_valid = B_TRUE; - } else if (hca_hwpn[0]) { - if ((pn_psidp = strchr( - hca_hwpn, ' ')) != NULL) - *pn_psidp = '\0'; - pn_valid = B_TRUE; - } - } - close(fd); - - if (pn_valid == B_FALSE && psid_valid == B_FALSE) - goto boardid_err; - - for (i = 0; i < MLX_MAX_ID; i++) { - /* - * Find PSID number, set the boardid_index, - * Skip index 0, as it is for failure "unknown" - * case - */ - if ((psid_valid == B_TRUE && - strncmp(mlx_mdr[i].mlx_psid, - (const char *)hca_hwpsid, - min(strlen(hca_hwpsid), - strlen(mlx_mdr[i].mlx_psid))) == 0) || - (pn_valid == B_TRUE && - strncmp(mlx_mdr[i].mlx_pn, - (const char *)hca_hwpn, - min(strlen(hca_hwpn), - strlen(mlx_mdr[i].mlx_pn))) == 0)) { - /* Set boardid_index */ - ibd_info->ibd_boardid_index = i; - return; - } - } - -boardid_err: - /* Failure case, default to "unknown" */ - ibd_info->ibd_boardid_index = -2; -} - static int infiniband(char *path, char *buf, size_t size) { int len = -1; - unsigned int device_num; - char dev_name[10]; + char dev_name[MAXNAMELEN]; ibdev_cache_info_t *info; - memset(dev_name, 0, 10); + memset(dev_name, 0, MAXNAMELEN); - if (check_path(path, CP_MLX4, &device_num)) { - sprintf(dev_name, "mlx4_%d", device_num); - } else { + if (!check_path_for_hca(path, dev_name)) goto exit; - } if (check_path(path, CP_PORTS, NULL)) { len = infiniband_ports(path, buf, size, dev_name); @@ -1347,22 +1196,9 @@ } else if (strcmp(path, "hw_rev") == 0) { len = 1 + sprintf(buf, "%d", info->ibd_hw_rev); } else if (strcmp(path, "hca_type") == 0) { - if (!(strncmp(info->ibd_name, "mlx4", 4))) - len = 1 + sprintf(buf, "MT%d", - info->ibd_device_id); - else - len = 1 + sprintf(buf, "unavailable"); + len = 1 + sprintf(buf, "%s", info->ibd_devid_string); } else if (strcmp(path, "board_id") == 0) { - if (info->ibd_boardid_index == -1) - init_boardid_index(info); - - if (info->ibd_boardid_index >= 0) { - len = 1 + sprintf(buf, "%s", - mlx_mdr[info->ibd_boardid_index].mlx_psid); - } else { - len = 1 + sprintf(buf, "%s", - "unknown"); - } + len = 1 + sprintf(buf, "%s", info->ibd_boardid_string); } } exit: @@ -1380,8 +1216,8 @@ strerror(errno)); goto exit; } - if (!umad_cache_initialized) { - if (umad_cache_init()) + if (umad_cache_initialized == B_FALSE) { + if (umad_cache_init() == 0) umad_cache_initialized = B_TRUE; else { (void) pthread_mutex_unlock(&umad_cache_mutex); @@ -1539,7 +1375,7 @@ kstat_t *ksp; kstat_named_t *knp; - memset(stats, 0, sizeof (stats)); + memset(stats, 0, sizeof (sol_cpu_stats_t)); nr_cpus = sysconf(_SC_NPROCESSORS_ONLN); /* Aggregate the value of all CPUs */ @@ -1735,8 +1571,8 @@ { struct ibv_query_device cmd; struct ibv_context context; - char uverbs_devpath[MAXPATHLEN]; - int uverbs_fd, ret; + char uverbs_devpath[MAX_OFS_DEVPATH_LEN]; + int ret; uint64_t raw_fw_ver; unsigned major, minor, sub_minor; @@ -1745,8 +1581,8 @@ if (!device || !attr) return (-1); - snprintf(uverbs_devpath, MAXPATHLEN, "%s/%s", IB_OFS_DEVPATH_PREFIX, - device->dev_name); + snprintf(uverbs_devpath, MAX_OFS_DEVPATH_LEN, "%s/%s", + IB_OFS_DEVPATH_PREFIX, device->dev_name); if ((context.cmd_fd = open(uverbs_devpath, O_RDWR)) < 0) return (-1); diff -r 0cca05cde869 -r 353f8a998732 components/open-fabrics/libmlx4/Makefile --- a/components/open-fabrics/libmlx4/Makefile Thu Jul 16 15:20:48 2015 -0700 +++ b/components/open-fabrics/libmlx4/Makefile Fri Jul 17 12:11:28 2015 -0700 @@ -22,7 +22,7 @@ # # OFED only builds with GCC -COMPILER=gcc3 +COMPILER=gcc include ../../../make-rules/shared-macros.mk @@ -54,6 +54,7 @@ else \ cp mlx4.driver.sparc $(@D)/mlx4.driver; \ fi; \ + cp mlnx_umap.h $(@D)/src ; \ cd $(@D) ; \ aclocal-1.11 --force ; \ libtoolize --copy --force --ltdl ; \ diff -r 0cca05cde869 -r 353f8a998732 components/open-fabrics/libmlx4/mlnx_umap.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/components/open-fabrics/libmlx4/mlnx_umap.h Fri Jul 17 12:11:28 2015 -0700 @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved. + */ + +#ifndef _SYS_IB_ADAPTERS_MLNX_UMAP_H +#define _SYS_IB_ADAPTERS_MLNX_UMAP_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * mlnx_umap.h + * Contains all of the definions necessary for communicating the data + * needed for direct userland access to resources on Mellanox HCAs. + */ + +/* + * Note: The structs in this file are used in the interface(s) + * between kernel service drivers, e.g. daplt, and the libraries + * on top of them, e.g. udapl_tavor.so.1. When any of the + * structs in this file change, any version control between the + * kernel service driver and the library will need to change. + * + * There is a version control on the structs defined here. The library + * (consumer of structs from ibt_ci_data_out()) must verify a version + * field to correctly read the data provided by the kernel driver + * (tavor, arbel, and hermon). + */ + +#define MLNX_UMAP_IF_VERSION 3 + +/* + * The following defines are used in the database type field for each database + * entry. They specify the type of object (UAR pages, PIDs, CQ, QP, and MR + * umemcookie) that corresponds to the database key value. On database queries, + * this type value must match the search criterion. + */ +#define MLNX_UMAP_UARPG_RSRC 0x11 +#define MLNX_UMAP_BLUEFLAMEPG_RSRC 0x12 +#define MLNX_UMAP_PID_RSRC 0x22 +#define MLNX_UMAP_CQMEM_RSRC 0x33 +#define MLNX_UMAP_QPMEM_RSRC 0x44 +#define MLNX_UMAP_MRMEM_RSRC 0x55 +#define MLNX_UMAP_SRQMEM_RSRC 0x66 +#define MLNX_UMAP_DBRMEM_RSRC 0x77 +#define MLNX_UMAP_MRMEM_MAHDL 0x88 +#define MLNX_UMAP_RSRC_TYPE_MASK 0xFF +#define MLNX_UMAP_RSRC_TYPE_SHIFT 8 + +/* umap structures */ + +typedef struct mlnx_umap_cq_data_out_s { + uint32_t mcq_rev; + uint32_t mcq_cqnum; + uint64_t mcq_mapoffset; + uint64_t mcq_maplen; + uint32_t mcq_numcqe; + uint32_t mcq_cqesz; + + /* Arbel/Hermon doorbell records */ + uint64_t mcq_armdbr_mapoffset; + uint64_t mcq_armdbr_maplen; + uint64_t mcq_polldbr_mapoffset; + uint64_t mcq_polldbr_maplen; + uint32_t mcq_armdbr_offset; + uint32_t mcq_polldbr_offset; +} mlnx_umap_cq_data_out_t; + +typedef struct mlnx_umap_qp_data_out_s { + uint32_t mqp_rev; + uint32_t mqp_qpnum; + uint64_t mqp_mapoffset; + uint64_t mqp_maplen; + + uint32_t mqp_rq_off; + uint32_t mqp_rq_desc_addr; + uint32_t mqp_rq_numwqe; + uint32_t mqp_rq_wqesz; + + uint32_t mqp_sq_off; + uint32_t mqp_sq_desc_addr; + uint32_t mqp_sq_numwqe; + uint32_t mqp_sq_wqesz; + + /* Arbel/Hermon doorbell records */ + uint64_t mqp_sdbr_mapoffset; + uint64_t mqp_sdbr_maplen; + uint64_t mqp_rdbr_mapoffset; + uint64_t mqp_rdbr_maplen; + uint32_t mqp_sdbr_offset; + uint32_t mqp_rdbr_offset; + + /* Hermon send queue headroom, in units of wqes */ + uint32_t mqp_sq_headroomwqes; + uint32_t mqp_reserved; +} mlnx_umap_qp_data_out_t; + +typedef struct mlnx_umap_srq_data_out_s { + uint32_t msrq_rev; + uint32_t msrq_srqnum; + uint64_t msrq_mapoffset; + uint64_t msrq_maplen; + uint32_t msrq_desc_addr; + uint32_t msrq_numwqe; + uint32_t msrq_wqesz; + uint32_t msrq_pad1; /* reserved */ + + /* Arbel/Hermon doorbell records */ + uint64_t msrq_rdbr_mapoffset; + uint64_t msrq_rdbr_maplen; + uint32_t msrq_rdbr_offset; + uint32_t msrq_reserved; +} mlnx_umap_srq_data_out_t; + +typedef struct mlnx_umap_pd_data_out_s { + uint32_t mpd_pdnum; + uint32_t mpd_rev; +} mlnx_umap_pd_data_out_t; + +/* + * The following structure is used currently to pass data back to + * libmlx4 on user allocation context. + */ +typedef struct mlnx_umap_ucontext_data_out_s { + uint32_t muc_qp_tab_size; + uint16_t muc_bf_reg_size; + uint16_t muc_bf_regs_per_page; + uint32_t muc_rev; + uint32_t muc_reserved; +} mlnx_umap_ucontext_data_out_t; + +/* + * Information for ibt_ci_data_in() for memory regions. + * + * MLNX_UMAP_MMR_DATA_IN_IF_VERSION is the value used in the mmr_rev member. + * mmr_func is the callback handler. mmr_arg1 and mmr_arg2 are its arguments. + */ +#define MLNX_UMAP_MMR_DATA_IN_IF_VERSION 1 +typedef struct mlnx_umap_mr_data_in_s { + uint32_t mmr_rev; + uint32_t mmr_reserved; + void (*mmr_func)(void *, void *); + void *mmr_arg1; + void *mmr_arg2; +} mlnx_umap_mr_data_in_t; + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_IB_ADAPTERS_MLNX_UMAP_H */ diff -r 0cca05cde869 -r 353f8a998732 components/open-fabrics/libmlx4/patches/base.patch --- a/components/open-fabrics/libmlx4/patches/base.patch Thu Jul 16 15:20:48 2015 -0700 +++ b/components/open-fabrics/libmlx4/patches/base.patch Fri Jul 17 12:11:28 2015 -0700 @@ -1,5 +1,5 @@ -# -# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. +#This patch was developed in-house. We plan to submit it upstream, but do +# not yet have a target date for doing so # diff -r -u /tmp/839450/libmlx4-1.0.1/Makefile.am libmlx4-1.0.1/Makefile.am --- /tmp/839450/libmlx4-1.0.1/Makefile.am Tue Sep 8 06:40:35 2009 @@ -16,30 +16,121 @@ diff -r -u /tmp/839450/libmlx4-1.0.1/src/mlx4-abi.h libmlx4-1.0.1/src/mlx4-abi.h --- /tmp/839450/libmlx4-1.0.1/src/mlx4-abi.h Thu Mar 10 04:48:34 2011 +++ libmlx4-1.0.1/src/mlx4-abi.h Fri Feb 11 03:49:51 2011 -@@ -35,6 +35,10 @@ +@@ -35,6 +35,14 @@ #include +#if defined(__SVR4) && defined(__sun) -+#include /* Opaque CI data out definitions */ ++/* Restore once build systems are in sync ++ See 21170572 - libmlx4 should be built with the system mlnx_umap.h ++#include / * Opaque CI data out definitions * / ++*/ ++#include "mlnx_umap.h" /* Opaque CI data out definitions */ +#endif + #define MLX4_UVERBS_MIN_ABI_VERSION 2 #define MLX4_UVERBS_MAX_ABI_VERSION 3 -@@ -49,6 +53,12 @@ - struct ibv_alloc_pd_resp ibv_resp; - __u32 pdn; +@@ -43,6 +51,10 @@ + __u32 qp_tab_size; + __u16 bf_reg_size; + __u16 bf_regs_per_page; ++#if defined(__SVR4) && defined(__sun) ++ uint32_t muc_rev; ++ uint32_t muc_reserved; ++#endif + }; + + struct mlx4_alloc_pd_resp { +@@ -51,23 +63,45 @@ __u32 reserved; -+}; -+ + }; + +struct mlx4_share_pd_resp { + struct ibv_share_pd_resp ibv_resp; + __u32 pdn; + __u32 reserved; ++}; ++ + struct mlx4_create_cq { + struct ibv_create_cq ibv_cmd; ++#if !(defined(__SVR4) && defined(__sun)) + __u64 buf_addr; + __u64 db_addr; ++#endif + }; + + struct mlx4_create_cq_resp { + struct ibv_create_cq_resp ibv_resp; ++#if !(defined(__SVR4) && defined(__sun)) + __u32 cqn; + __u32 reserved; ++#else ++ mlnx_umap_cq_data_out_t mdd; ++#endif + }; + + struct mlx4_resize_cq { + struct ibv_resize_cq ibv_cmd; ++#if !(defined(__SVR4) && defined(__sun)) + __u64 buf_addr; ++#endif }; - struct mlx4_create_cq { ++#if defined(__SVR4) && defined(__sun) ++struct mlx4_resize_cq_resp { ++ struct ibv_resize_cq_resp ibv_resp; ++ mlnx_umap_cq_data_out_t mdd; ++}; ++#endif ++ ++ + #ifdef HAVE_IBV_XRC_OPS + struct mlx4_create_xrc_srq { + struct ibv_create_xrc_srq ibv_cmd; +@@ -78,18 +112,25 @@ + + struct mlx4_create_srq { + struct ibv_create_srq ibv_cmd; ++#if !(defined(__SVR4) && defined(__sun)) + __u64 buf_addr; + __u64 db_addr; ++#endif + }; + + struct mlx4_create_srq_resp { + struct ibv_create_srq_resp ibv_resp; ++#if !(defined(__SVR4) && defined(__sun)) + __u32 srqn; + __u32 reserved; ++#else ++ mlnx_umap_srq_data_out_t mdd; ++#endif + }; + + struct mlx4_create_qp { + struct ibv_create_qp ibv_cmd; ++#if !(defined(__SVR4) && defined(__sun)) + __u64 buf_addr; + __u64 db_addr; + __u8 log_sq_bb_count; +@@ -96,8 +137,16 @@ + __u8 log_sq_stride; + __u8 sq_no_prefetch; /* was reserved in ABI 2 */ + __u8 reserved[5]; ++#endif + }; + ++#if defined(__SVR4) && defined(__sun) ++struct mlx4_create_qp_resp { ++ struct ibv_create_qp_resp ibv_resp; ++ mlnx_umap_qp_data_out_t mdd; ++}; ++#endif ++ + #ifdef HAVE_IBV_XRC_OPS + struct mlx4_open_xrc_domain_resp { + struct ibv_open_xrc_domain_resp ibv_resp; diff -r -u /tmp/839450/libmlx4-1.0.1/src/verbs.c libmlx4-1.0.1/src/verbs.c --- /tmp/839450/libmlx4-1.0.1/src/verbs.c Thu Mar 10 04:48:34 2011 +++ libmlx4-1.0.1/src/verbs.c Fri Mar 11 14:40:18 2011 @@ -58,31 +149,7 @@ major = (raw_fw_ver >> 32) & 0xffff; minor = (raw_fw_ver >> 16) & 0xffff; sub_minor = raw_fw_ver & 0xffff; -@@ -79,6 +87,9 @@ - struct ibv_alloc_pd cmd; - struct mlx4_alloc_pd_resp resp; - struct mlx4_pd *pd; -+#if defined(__SVR4) && defined(__sun) -+ mlnx_umap_pd_data_out_t *mdd; -+#endif - - pd = malloc(sizeof *pd); - if (!pd) -@@ -90,11 +101,67 @@ - return NULL; - } - -+#if defined(__SVR4) && defined(__sun) -+ /* -+ * kernel driver passes back the PD table index as opaque data. This -+ * is required for specifying the PD in user space address vectors. -+ */ -+ mdd = (mlnx_umap_pd_data_out_t *) &resp.ibv_resp.drv_out; -+ pd->pdn = mdd->mpd_pdnum; -+#else - pd->pdn = resp.pdn; -+#endif - +@@ -95,6 +103,39 @@ return &pd->ibv_pd; } @@ -105,9 +172,6 @@ + struct ibv_share_pd cmd; + struct mlx4_share_pd_resp resp; + struct mlx4_pd *pd; -+#if defined(__SVR4) && defined(__sun) -+ mlnx_umap_pd_data_out_t *mdd; -+#endif + + pd = malloc(sizeof *pd); + if (!pd) @@ -118,25 +182,14 @@ + free(pd); + return NULL; + } -+ -+#if defined(__SVR4) && defined(__sun) -+ /* -+ * kernel driver passes back the PD table index as opaque data. This -+ * is required for specifying the PD in user space address vectors. -+ */ -+ mdd = (mlnx_umap_pd_data_out_t *) &resp.ibv_resp.drv_out; -+ pd->pdn = mdd->mpd_pdnum; -+#else + pd->pdn = resp.pdn; -+#endif -+ + return &pd->ibv_pd; +} + int mlx4_free_pd(struct ibv_pd *pd) { int ret; -@@ -138,6 +205,37 @@ +@@ -138,6 +179,37 @@ return mr; } @@ -174,7 +227,7 @@ int mlx4_dereg_mr(struct ibv_mr *mr) { int ret; -@@ -150,6 +248,29 @@ +@@ -150,6 +222,29 @@ return 0; } @@ -204,18 +257,17 @@ static int align_queue_size(int req) { int nent; -@@ -168,6 +289,10 @@ +@@ -168,6 +263,9 @@ struct mlx4_create_cq_resp resp; struct mlx4_cq *cq; int ret; +#if defined(__SVR4) && defined(__sun) + void *cqbuf; -+ mlnx_umap_cq_data_out_t *mdd; +#endif /* Sanity check CQ size before proceeding */ if (cqe > 0x3fffff) -@@ -184,7 +309,8 @@ +@@ -184,7 +282,8 @@ cqe = align_queue_size(cqe + 1); @@ -225,7 +277,7 @@ goto err; cq->set_ci_db = mlx4_alloc_db(to_mctx(context), MLX4_DB_TYPE_CQ); -@@ -198,15 +324,78 @@ +@@ -198,15 +297,73 @@ cmd.buf_addr = (uintptr_t) cq->buf.buf; cmd.db_addr = (uintptr_t) cq->set_ci_db; @@ -239,30 +291,26 @@ ret = ibv_cmd_create_cq(context, cqe - 1, channel, comp_vector, &cq->ibv_cq, &cmd.ibv_cmd, sizeof cmd, &resp.ibv_resp, sizeof resp); -+#if defined(__SVR4) && defined(__sun) if (ret) -+ goto err; -+#else -+ if (ret) ++#if !(defined(__SVR4) && defined(__sun)) goto err_db; -+#endif - +- cq->cqn = resp.cqn; ++#else ++ goto err; -+#if defined(__SVR4) && defined(__sun) + /* + * For Solaris the kernel driver passes back mmap information for + * mapping the CQ memory it allocated. + */ -+ mdd = (mlnx_umap_cq_data_out_t *) &resp.ibv_resp.drv_out; -+ if (mdd->mcq_rev < MLNX_UMAP_IF_VERSION) { ++ if (resp.mdd.mcq_rev < MLNX_UMAP_IF_VERSION) { + fprintf(stderr, PFX "libmlx4_create_cq: libmlx4/hermon umap " -+ "rev mismatch (kernel rev=%d)\n", mdd->mcq_rev); ++ "rev mismatch (kernel rev=%d)\n", resp.mdd.mcq_rev); + goto err_destroy; + } + -+ cqbuf = mmap64((void *)0, mdd->mcq_maplen, (PROT_READ | PROT_WRITE), -+ MAP_SHARED, context->mmap_fd, mdd->mcq_mapoffset); ++ cqbuf = mmap64((void *)0, resp.mdd.mcq_maplen, (PROT_READ | PROT_WRITE), ++ MAP_SHARED, context->mmap_fd, resp.mdd.mcq_mapoffset); + + if (cqbuf == MAP_FAILED) + goto err_destroy; @@ -271,29 +319,29 @@ + * Extract hardware driver values for the number of CQEs and the + * hardware CQ number to use (needed for user space doorbells). + */ -+ cqe = mdd->mcq_numcqe; -+ cq->cqn = mdd->mcq_cqnum; ++ cqe = resp.mdd.mcq_numcqe; ++ cq->cqn = resp.mdd.mcq_cqnum; + cq->buf.buf = cqbuf; -+ cq->buf.length = mdd->mcq_maplen; ++ cq->buf.length = resp.mdd.mcq_maplen; + cq->ibv_cq.cqe = cqe-1; + + /* + * We map both poll and arm as seperate doorbells (OFED assumes 1 word -+ * offset and just bumpts the address) since Solaris provides a ++ * offset and just bumps the address) since Solaris provides a + * separate offst. This will amount to the same thing (a second + * reference to the first doorbell is added) but is more flexible. + */ + cq->set_ci_db = mlx4_alloc_db(to_mctx(context), -+ mdd->mcq_polldbr_mapoffset, -+ mdd->mcq_polldbr_maplen, -+ mdd->mcq_polldbr_offset); ++ resp.mdd.mcq_polldbr_mapoffset, resp.mdd.mcq_polldbr_maplen, ++ resp.mdd.mcq_polldbr_offset); ++ + if (cq->set_ci_db == NULL) + goto err_buf; + + cq->arm_db = mlx4_alloc_db(to_mctx(context), -+ mdd->mcq_armdbr_mapoffset, -+ mdd->mcq_armdbr_maplen, -+ mdd->mcq_armdbr_offset); ++ resp.mdd.mcq_armdbr_mapoffset, resp.mdd.mcq_armdbr_maplen, ++ resp.mdd.mcq_armdbr_offset); ++ + if (cq->arm_db == NULL) + goto err_db; + @@ -304,7 +352,7 @@ return &cq->ibv_cq; err_db: -@@ -215,6 +404,21 @@ +@@ -215,6 +372,21 @@ err_buf: mlx4_free_buf(&cq->buf); @@ -326,17 +374,16 @@ err: free(cq); -@@ -225,12 +429,16 @@ - { - struct mlx4_cq *cq = to_mcq(ibcq); +@@ -227,10 +399,15 @@ struct mlx4_resize_cq cmd; -+ struct ibv_resize_cq_resp resp; struct mlx4_buf buf; int old_cqe, outst_cqe, ret; - -+#if defined(__SVR4) && defined(__sun) -+ void *cqbuf; -+ mlnx_umap_cq_data_out_t *mdd; ++#if !(defined(__SVR4) && defined(__sun)) ++ struct ibv_resize_cq_resp resp; ++#else ++ struct mlx4_resize_cq_resp resp; ++ void *cqbuf; +#endif /* Sanity check CQ size before proceeding */ if (cqe > 0x3fffff) @@ -345,7 +392,7 @@ pthread_spin_lock(&cq->lock); -@@ -247,32 +455,76 @@ +@@ -247,32 +424,79 @@ goto out; } @@ -364,9 +411,13 @@ - struct ibv_resize_cq_resp resp; - ret = ibv_cmd_resize_cq(ibcq, cqe - 1, &cmd.ibv_cmd, sizeof cmd, + ret = ibv_cmd_resize_cq(ibcq, cqe - 1, &cmd.ibv_cmd, sizeof cmd, ++#if !(defined(__SVR4) && defined(__sun)) &resp, sizeof resp); - } #else ++ &resp.ibv_resp, sizeof resp); ++#endif ++#else ret = ibv_cmd_resize_cq(ibcq, cqe - 1, &cmd.ibv_cmd, sizeof cmd); #endif - if (ret) { @@ -406,16 +457,15 @@ + * For Solaris the kernel driver passes back mmap information for + * mapping the CQ memory it allocated. + */ -+ mdd = (mlnx_umap_cq_data_out_t *) &resp.drv_out; -+ if (mdd->mcq_rev < MLNX_UMAP_IF_VERSION) { ++ if (resp.mdd.mcq_rev < MLNX_UMAP_IF_VERSION) { + fprintf(stderr, PFX "libmlx4_resize_cq: libmlx4/hermon umap " -+ "rev mismatch (kernel rev=%d)\n", mdd->mcq_rev); ++ "rev mismatch (kernel rev=%d)\n", resp.mdd.mcq_rev); + ret = EINVAL; + goto out; + } -+ cqbuf = mmap64((void *)0, mdd->mcq_maplen, (PROT_READ | PROT_WRITE), -+ MAP_SHARED, ibcq->context->mmap_fd, mdd->mcq_mapoffset); ++ cqbuf = mmap64((void *)0, resp.mdd.mcq_maplen, (PROT_READ | PROT_WRITE), ++ MAP_SHARED, ibcq->context->mmap_fd, resp.mdd.mcq_mapoffset); + + if (cqbuf == MAP_FAILED) { + ret = EINVAL; @@ -425,15 +475,15 @@ + cq->buf.length = buf.length; + mlx4_cq_resize_copy_cqes(cq, cqbuf, old_cqe); + cq->buf.buf = cqbuf; -+ cq->buf.length = mdd->mcq_maplen; ++ cq->buf.length = resp.mdd.mcq_maplen; + free(buf.buf); -+ cq->ibv_cq.cqe = mdd->mcq_numcqe - 1; -+ cq->cqn = mdd->mcq_cqnum; ++ cq->ibv_cq.cqe = resp.mdd.mcq_numcqe - 1; ++ cq->cqn = resp.mdd.mcq_cqnum; +#endif out: pthread_spin_unlock(&cq->lock); return ret; -@@ -287,6 +539,9 @@ +@@ -287,6 +511,9 @@ return ret; mlx4_free_db(to_mctx(cq->context), MLX4_DB_TYPE_CQ, to_mcq(cq)->set_ci_db); @@ -443,18 +493,17 @@ mlx4_free_buf(&to_mcq(cq)->buf); free(to_mcq(cq)); -@@ -300,6 +555,10 @@ +@@ -300,6 +527,9 @@ struct mlx4_create_srq_resp resp; struct mlx4_srq *srq; int ret; +#if defined(__SVR4) && defined(__sun) -+ mlnx_umap_srq_data_out_t *mdd; + void *srqbuf; +#endif /* Sanity check SRQ size before proceeding */ if (attr->attr.max_wr > 1 << 16 || attr->attr.max_sge > 64) -@@ -312,6 +571,7 @@ +@@ -312,6 +542,7 @@ if (pthread_spin_init(&srq->lock, PTHREAD_PROCESS_PRIVATE)) goto err; @@ -462,10 +511,10 @@ srq->max = align_queue_size(attr->attr.max_wr + 1); srq->max_gs = attr->attr.max_sge; srq->counter = 0; -@@ -324,7 +584,23 @@ - goto err_free; +@@ -327,23 +558,118 @@ - *srq->db = 0; + cmd.buf_addr = (uintptr_t) srq->buf.buf; + cmd.db_addr = (uintptr_t) srq->db; +#else + /* + * Solaris SRQ WQE memory is supplied by the kernel; we'll update @@ -483,10 +532,7 @@ + */ + attr->attr.max_wr += 1; +#endif - cmd.buf_addr = (uintptr_t) srq->buf.buf; - cmd.db_addr = (uintptr_t) srq->db; - -@@ -331,19 +607,97 @@ ++ ret = ibv_cmd_create_srq(pd, &srq->ibv_srq, attr, &cmd.ibv_cmd, sizeof cmd, &resp.ibv_resp, sizeof resp); @@ -500,31 +546,30 @@ + * SRQ work queue memory it allocated and the doorbell for + * for posting. + */ -+ mdd = (mlnx_umap_srq_data_out_t *) &resp.ibv_resp.drv_out; -+ if (mdd->msrq_rev < 1) { ++ if (resp.mdd.msrq_rev < 1) { + fprintf(stderr, PFX "libmlx4_create_srq libmlx4/hermon umap " -+ "rev mismatch (kernel rev=%d)\n", mdd->msrq_rev); ++ "rev mismatch (kernel rev=%d)\n", resp.mdd.msrq_rev); + goto err_destroy; + } + -+ srqbuf = mmap64((void *)0, mdd->msrq_maplen, (PROT_READ | PROT_WRITE), -+ MAP_SHARED, pd->context->mmap_fd, mdd->msrq_mapoffset); ++ srqbuf = mmap64((void *)0, resp.mdd.msrq_maplen, ++ (PROT_READ | PROT_WRITE), MAP_SHARED, pd->context->mmap_fd, ++ resp.mdd.msrq_mapoffset); + + if (srqbuf == MAP_FAILED) { + goto err_destroy; + } + + srq->buf.buf = srqbuf; -+ srq->buf.length = mdd->msrq_maplen; ++ srq->buf.length = resp.mdd.msrq_maplen; + srq->max = resp.ibv_resp.max_wr; + srq->max_gs = resp.ibv_resp.max_sge; -+ srq->srqn = mdd->msrq_srqnum; ++ srq->srqn = resp.mdd.msrq_srqnum; + srq->counter = 0; + + srq->db = mlx4_alloc_db(to_mctx(pd->context), -+ mdd->msrq_rdbr_mapoffset, -+ mdd->msrq_rdbr_maplen, -+ mdd->msrq_rdbr_offset); ++ resp.mdd.msrq_rdbr_mapoffset, resp.mdd.msrq_rdbr_maplen, ++ resp.mdd.msrq_rdbr_offset); + if (srq->db == NULL) { + goto err_unmap; + } @@ -534,7 +579,8 @@ + * it utilizes the memory allocated by the kernel. + * It also allocates the srq->wrid memory. + */ -+ if (mlx4_set_srq_buf(pd, srq, mdd->msrq_wqesz, mdd->msrq_numwqe)) { ++ if (mlx4_set_srq_buf(pd, srq, resp.mdd.msrq_wqesz, ++ resp.mdd.msrq_numwqe)) { + goto err_db; + } + @@ -584,7 +630,7 @@ err: free(srq); -@@ -357,7 +711,16 @@ +@@ -357,7 +683,16 @@ { struct ibv_modify_srq cmd; @@ -601,7 +647,7 @@ } int mlx4_query_srq(struct ibv_srq *srq, -@@ -365,7 +728,17 @@ +@@ -365,7 +700,17 @@ { struct ibv_query_srq cmd; @@ -619,18 +665,26 @@ } int mlx4_destroy_srq(struct ibv_srq *ibsrq) -@@ -447,6 +820,10 @@ +@@ -443,12 +788,16 @@ + struct ibv_qp *mlx4_create_qp(struct ibv_pd *pd, struct ibv_qp_init_attr *attr) + { + struct mlx4_create_qp cmd; +- struct ibv_create_qp_resp resp; struct mlx4_qp *qp; int ret; struct mlx4_context *context = to_mctx(pd->context); -+#if defined(__SVR4) && defined(__sun) -+ mlnx_umap_qp_data_out_t *mdd; -+ void *qpbuf; ++#if !(defined(__SVR4) && defined(__sun)) ++ struct ibv_create_qp_resp resp; ++#else ++ struct mlx4_create_qp_resp resp; ++ void *qpbuf; +#endif - +- /* Sanity check QP size before proceeding */ -@@ -457,6 +834,7 @@ + if (verify_sizes(attr, context)) + return NULL; +@@ -457,6 +806,7 @@ if (!qp) return NULL; @@ -638,7 +692,7 @@ mlx4_calc_sq_wqe_size(&attr->cap, attr->qp_type, qp); /* -@@ -466,6 +844,7 @@ +@@ -466,6 +816,7 @@ qp->sq_spare_wqes = (2048 >> qp->sq.wqe_shift) + 1; qp->sq.wqe_cnt = align_queue_size(attr->cap.max_send_wr + qp->sq_spare_wqes); qp->rq.wqe_cnt = align_queue_size(attr->cap.max_recv_wr); @@ -646,7 +700,7 @@ if (attr->srq || attr->qp_type == IBV_QPT_XRC) attr->cap.max_recv_wr = qp->rq.wqe_cnt = 0; -@@ -476,6 +855,22 @@ +@@ -476,6 +827,22 @@ attr->cap.max_recv_wr = 1; } @@ -669,7 +723,7 @@ if (mlx4_alloc_qp_buf(pd, &attr->cap, attr->qp_type, qp)) goto err; -@@ -505,17 +900,84 @@ +@@ -505,10 +872,12 @@ ; /* nothing */ cmd.sq_no_prefetch = 0; /* OK for ABI 2: just a reserved field */ memset(cmd.reserved, 0, sizeof cmd.reserved); @@ -678,23 +732,30 @@ pthread_mutex_lock(&to_mctx(pd->context)->qp_table_mutex); ret = ibv_cmd_create_qp(pd, &qp->ibv_qp, attr, &cmd.ibv_cmd, sizeof cmd, ++#if !(defined(__SVR4) && defined(__sun)) &resp, sizeof resp); -+#if defined(__SVR4) && defined(__sun) + if (ret) + goto err_rq_db; +@@ -516,6 +885,70 @@ + ret = mlx4_store_qp(to_mctx(pd->context), qp->ibv_qp.qp_num, qp); if (ret) + goto err_destroy; ++#else ++ &resp.ibv_resp, sizeof resp); ++ if (ret) + goto err_free; + + /* + * The kernel driver passes back mmap information for mapping the + * QP work queue memory it allocated back into user space. + */ -+ mdd = (mlnx_umap_qp_data_out_t *) &resp.drv_out; -+ if (mdd->mqp_rev < 2) { ++ if (resp.mdd.mqp_rev < 2) { + fprintf(stderr, PFX "libmlx4_create_qp: libmlx4/hermon umap " -+ "rev mismatch (kernel rev=%d)\n", mdd->mqp_rev); ++ "rev mismatch (kernel rev=%d)\n", resp.mdd.mqp_rev); + goto err_destroy; + } -+ qpbuf = mmap64((void *)0, mdd->mqp_maplen, (PROT_READ | PROT_WRITE), -+ MAP_SHARED, pd->context->mmap_fd, mdd->mqp_mapoffset); ++ qpbuf = mmap64((void *)0, resp.mdd.mqp_maplen, (PROT_READ | PROT_WRITE), ++ MAP_SHARED, pd->context->mmap_fd, resp.mdd.mqp_mapoffset); + + if (qpbuf == MAP_FAILED) + goto err_destroy; @@ -704,13 +765,12 @@ + * we'll call mlx4_free_buf() to umap. + */ + qp->buf.buf = qpbuf; -+ qp->buf.length = mdd->mqp_maplen; ++ qp->buf.length = resp.mdd.mqp_maplen; + + if (!attr->srq && attr->qp_type != IBV_QPT_XRC) { + qp->db = mlx4_alloc_db(to_mctx(pd->context), -+ mdd->mqp_rdbr_mapoffset, -+ mdd->mqp_rdbr_maplen, -+ mdd->mqp_rdbr_offset); ++ resp.mdd.mqp_rdbr_mapoffset, resp.mdd.mqp_rdbr_maplen, ++ resp.mdd.mqp_rdbr_offset); + if (qp->db == NULL) + goto err_buf; + @@ -725,36 +785,29 @@ + * wqe.cnt also includes headroom wqes, the verbs count + * should reflect the wqe count that is usable. + */ -+ qp->sq_spare_wqes = mdd->mqp_sq_headroomwqes; -+ qp->sq.wqe_cnt = mdd->mqp_sq_numwqe; ++ qp->sq_spare_wqes = resp.mdd.mqp_sq_headroomwqes; ++ qp->sq.wqe_cnt = resp.mdd.mqp_sq_numwqe; + + if (attr->srq) + qp->rq.wqe_cnt = 0; + else -+ qp->rq.wqe_cnt = mdd->mqp_rq_numwqe; ++ qp->rq.wqe_cnt = resp.mdd.mqp_rq_numwqe; + -+ if (mlx4_set_qp_buf(pd, qp, qpbuf, mdd->mqp_maplen, -+ mdd->mqp_rq_wqesz, mdd->mqp_rq_off, -+ mdd->mqp_sq_wqesz, mdd->mqp_sq_off)) - goto err_rq_db; - ++ if (mlx4_set_qp_buf(pd, qp, qpbuf, resp.mdd.mqp_maplen, ++ resp.mdd.mqp_rq_wqesz, resp.mdd.mqp_rq_off, ++ resp.mdd.mqp_sq_wqesz, resp.mdd.mqp_sq_off)) ++ goto err_rq_db; ++ + mlx4_init_qp_indices(qp); + - ret = mlx4_store_qp(to_mctx(pd->context), qp->ibv_qp.qp_num, qp); - if (ret) -+ goto err_rq_db; -+#else -+ if (ret) -+ goto err_rq_db; -+ + ret = mlx4_store_qp(to_mctx(pd->context), qp->ibv_qp.qp_num, qp); + if (ret) - goto err_destroy; ++ goto err_rq_db; +#endif pthread_mutex_unlock(&to_mctx(pd->context)->qp_table_mutex); qp->rq.wqe_cnt = attr->cap.max_recv_wr; -@@ -536,9 +998,38 @@ +@@ -536,9 +969,38 @@ return &qp->ibv_qp; @@ -793,7 +846,7 @@ err_rq_db: pthread_mutex_unlock(&to_mctx(pd->context)->qp_table_mutex); if (!attr->srq && attr->qp_type != IBV_QPT_XRC) -@@ -552,6 +1043,7 @@ +@@ -552,6 +1014,7 @@ err: free(qp); @@ -801,7 +854,7 @@ return NULL; } -@@ -745,6 +1237,13 @@ +@@ -745,6 +1208,13 @@ struct ibv_cq *xrc_cq, struct ibv_srq_init_attr *attr) { @@ -815,7 +868,7 @@ struct mlx4_create_xrc_srq cmd; struct mlx4_create_srq_resp resp; struct mlx4_srq *srq; -@@ -807,6 +1306,7 @@ +@@ -807,6 +1277,7 @@ free(srq); return NULL; @@ -836,14 +889,14 @@ ctrl->owner_opcode |= htonl((qp->sq.head & 0xffff) << 8); *(uint32_t *) (&ctrl->vlan_tag) |= qp->doorbell_qpn; /* -@@ -589,6 +590,58 @@ +@@ -589,6 +590,59 @@ ; /* nothing */ } +#if defined(__SVR4) && defined(__sun) +int mlx4_set_qp_buf(struct ibv_pd *pd, struct mlx4_qp *qp, void *qpbuf, -+ uint64_t buflen, uint32_t rq_wqesz, uint32_t rq_off, -+ uint32_t sq_wqesz, uint32_t sq_off) ++ uint64_t buflen, uint32_t rq_wqesz, uint32_t rq_off, ++ uint32_t sq_wqesz, uint32_t sq_off) +{ + qp->buf.buf = qpbuf; + qp->buf.length = buflen; @@ -881,11 +934,12 @@ + } + + if ((long int)qp->buf.length < (long int)qp->buf_size) { -+ fprintf(stderr, PFX "QP kernel buffer size %d < user buf size %d\n", -+ qp->buf.length, qp->buf_size); ++ fprintf(stderr, PFX "QP kernel buffer size %lu < user buf " ++ "size %d\n", (unsigned long)qp->buf.length, qp->buf_size); + } + if ((!rq_off && qp->rq.offset) || (!sq_off && qp->sq.offset)) { -+ fprintf(stderr, PFX "QP kernel and user out of sync on buffer order\n"); ++ fprintf(stderr, PFX "QP kernel and user out of sync on " ++ "buffer order\n"); + } + + memset(qp->buf.buf, 0, qp->buf_size); @@ -1235,14 +1289,14 @@ context = calloc(1, sizeof *context); if (!context) -@@ -150,11 +160,30 @@ +@@ -150,11 +160,29 @@ return NULL; context->ibv_ctx.cmd_fd = cmd_fd; +- +#if defined(__SVR4) && defined(__sun) + context->ibv_ctx.device = ibdev; +#endif - if (ibv_cmd_get_context(&context->ibv_ctx, &cmd, sizeof cmd, &resp.ibv_resp, sizeof resp)) goto err_free; @@ -1266,7 +1320,7 @@ context->num_qps = resp.qp_tab_size; context->qp_table_shift = ffs(context->num_qps) - 1 - MLX4_QP_TABLE_BITS; context->qp_table_mask = (1 << context->qp_table_shift) - 1; -@@ -172,20 +201,44 @@ +@@ -172,20 +200,45 @@ for (i = 0; i < MLX4_XRC_SRQ_TABLE_SIZE; ++i) context->xrc_srq_table[i].refcnt = 0; @@ -1298,11 +1352,12 @@ + * If kernel driver is supporting Blue Flame feature, map + * the Blue Flame user access region as well. + */ -+ uarpg_offset = (((off64_t) cur_pid << MLNX_UMAP_RSRC_TYPE_SHIFT) | -+ MLNX_UMAP_BLUEFLAMEPG_RSRC) * to_mdev(ibdev)->page_size; ++ uarpg_offset = (((off64_t) cur_pid << MLNX_UMAP_RSRC_TYPE_SHIFT) ++ | MLNX_UMAP_BLUEFLAMEPG_RSRC) * to_mdev(ibdev)->page_size; ++ + context->bf_page = mmap64((void *)0, to_mdev(ibdev)->page_size, -+ PROT_WRITE, MAP_SHARED, context->ibv_ctx.mmap_fd, -+ uarpg_offset); ++ PROT_WRITE, MAP_SHARED, context->ibv_ctx.mmap_fd, ++ uarpg_offset); +#else context->bf_page = mmap(NULL, to_mdev(ibdev)->page_size, PROT_WRITE, MAP_SHARED, cmd_fd, diff -r 0cca05cde869 -r 353f8a998732 components/open-fabrics/librdmacm/Makefile --- a/components/open-fabrics/librdmacm/Makefile Thu Jul 16 15:20:48 2015 -0700 +++ b/components/open-fabrics/librdmacm/Makefile Fri Jul 17 12:11:28 2015 -0700 @@ -22,7 +22,7 @@ # # OFED only builds with GCC -COMPILER=gcc3 +COMPILER=gcc include ../../../make-rules/shared-macros.mk @@ -47,10 +47,6 @@ $(PROTOUSRBINDIR)/rdma_client\ $(PROTOUSRBINDIR)/$(MACH64)/rdma_server\ $(PROTOUSRBINDIR)/$(MACH64)/rdma_client\ - $(PROTOUSRBINDIR)/$(MACH64)/mckey\ - $(PROTOUSRBINDIR)/$(MACH64)/rping\ - $(PROTOUSRBINDIR)/$(MACH64)/udaddy\ - $(PROTOUSRBINDIR)/$(MACH64)/ucmatose\ $(PROTOUSRINCDIR)/infiniband/ib.h\ $(PROTOUSRINCDIR)/rdma/rdma_cma_abi.h\ $(PROTO_DIR)/$(CONFIGURE_LIBDIR.32)/$(COMPONENT_NAME).la\ @@ -59,6 +55,8 @@ COMPONENT_PREP_ACTION = \ $(TOUCH) $(COMPONENT_SRC)/Makefile.in +CONFIGURE_OPTIONS += --bindir=$(USRBINDIR) + COMPONENT_POST_INSTALL_ACTION = \ $(RM) $(CLEANUP_FILES); diff -r 0cca05cde869 -r 353f8a998732 components/open-fabrics/libsdp/Makefile --- a/components/open-fabrics/libsdp/Makefile Thu Jul 16 15:20:48 2015 -0700 +++ b/components/open-fabrics/libsdp/Makefile Fri Jul 17 12:11:28 2015 -0700 @@ -22,7 +22,7 @@ # # OFED only builds with GCC -COMPILER=gcc3 +COMPILER=gcc include ../../../make-rules/shared-macros.mk diff -r 0cca05cde869 -r 353f8a998732 components/open-fabrics/ofed.mk --- a/components/open-fabrics/ofed.mk Thu Jul 16 15:20:48 2015 -0700 +++ b/components/open-fabrics/ofed.mk Fri Jul 17 12:11:28 2015 -0700 @@ -26,9 +26,9 @@ # so we override PROTO_DIR PROTO_DIR = $(WS_COMPONENTS)/open-fabrics/prototype/$(MACH) -PATH=$(GCC3_ROOT)/bin:/usr/bin:/usr/gnu/bin +PATH=$(GCC_ROOT)/bin:/usr/bin:/usr/gnu/bin ifeq ($(strip $(PARFAIT_BUILD)),yes) -PATH=$(PARFAIT_TOOLS_GCC3):$(GCC3_ROOT)/bin:/usr/bin +PATH=$(PARFAIT_TOOLS):$(GCC_ROOT)/bin:/usr/bin endif diff -r 0cca05cde869 -r 353f8a998732 components/open-fabrics/open-fabrics.p5m --- a/components/open-fabrics/open-fabrics.p5m Thu Jul 16 15:20:48 2015 -0700 +++ b/components/open-fabrics/open-fabrics.p5m Fri Jul 17 12:11:28 2015 -0700 @@ -48,20 +48,22 @@ set name=org.opensolaris.consolidation value=$(CONSOLIDATION) set name=variant.opensolaris.zone value=global value=nonglobal file path=etc/libsdp.conf mode=0644 preserve=renameold -file path=usr/bin/$(MACH64)/ib_clock_test -file path=usr/bin/$(MACH64)/ib_read_bw -file path=usr/bin/$(MACH64)/ib_read_lat -file path=usr/bin/$(MACH64)/ib_send_bw -file path=usr/bin/$(MACH64)/ib_send_lat -file path=usr/bin/$(MACH64)/ib_write_bw -file path=usr/bin/$(MACH64)/ib_write_bw_postlist -file path=usr/bin/$(MACH64)/ib_write_lat -file path=usr/bin/$(MACH64)/qperf -file path=usr/bin/$(MACH64)/rdma_bw -file path=usr/bin/$(MACH64)/rdma_lat -file path=usr/bin/$(MACH64)/rds-info -file path=usr/bin/$(MACH64)/rds-ping -file path=usr/bin/$(MACH64)/rds-stress +dir path=usr/bin +dir path=usr/bin/$(MACH64) +link path=usr/bin/$(MACH64)/ib_clock_test target=../ib_clock_test +link path=usr/bin/$(MACH64)/ib_read_bw target=../ib_read_bw +link path=usr/bin/$(MACH64)/ib_read_lat target=../ib_read_lat +link path=usr/bin/$(MACH64)/ib_send_bw target=../ib_send_bw +link path=usr/bin/$(MACH64)/ib_send_lat target=../ib_send_lat +link path=usr/bin/$(MACH64)/ib_write_bw target=../ib_write_bw +link path=usr/bin/$(MACH64)/ib_write_bw_postlist target=../ib_write_bw_postlist +link path=usr/bin/$(MACH64)/ib_write_lat target=../ib_write_lat +link path=usr/bin/$(MACH64)/qperf target=../qperf +link path=usr/bin/$(MACH64)/rdma_bw target=../rdma_bw +link path=usr/bin/$(MACH64)/rdma_lat target=../rdma_lat +link path=usr/bin/$(MACH64)/rds-info target=../rds-info +link path=usr/bin/$(MACH64)/rds-ping target=../rds-ping +link path=usr/bin/$(MACH64)/rds-stress target=../rds-stress file path=usr/bin/ib_clock_test file path=usr/bin/ib_read_bw file path=usr/bin/ib_read_lat @@ -86,6 +88,8 @@ file path=usr/bin/rping file path=usr/bin/ucmatose file path=usr/bin/udaddy +dir path=usr/include +dir path=usr/include/infiniband file path=usr/include/infiniband/arch.h file path=usr/include/infiniband/driver.h file path=usr/include/infiniband/kern-abi.h @@ -95,11 +99,62 @@ file path=usr/include/infiniband/sa.h file path=usr/include/infiniband/umad.h file path=usr/include/infiniband/verbs.h +dir path=usr/include/rdma file path=usr/include/rdma/rdma_cma.h file path=usr/include/rdma/rdma_verbs.h +dir path=usr/lib +dir path=usr/lib/$(MACH64) +dir path=usr/lib/$(MACH64)/ibdiagnet1.5.7 +file path=usr/lib/$(MACH64)/ibdiagnet1.5.7/git_version.tcl +file path=usr/lib/$(MACH64)/ibdiagnet1.5.7/ibdebug.tcl +file path=usr/lib/$(MACH64)/ibdiagnet1.5.7/ibdebug_if.tcl +file path=usr/lib/$(MACH64)/ibdiagnet1.5.7/ibdiagnet.tcl +file path=usr/lib/$(MACH64)/ibdiagnet1.5.7/pkgIndex.tcl +dir path=usr/lib/$(MACH64)/ibdm1.5.7 +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/Buffalo.ibnl +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/Buffalo8.topo +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/Cheetah.ibnl +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/Cougar.ibnl +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/Eagle.ibnl +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/FullGnu.topo +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/Gazelle.ibnl +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/Gnu.ibnl +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/IS4_NATIVE.ibnl +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/IS5100.ibnl +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/IS5200.ibnl +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/IS5300.ibnl +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/Lion.ibnl +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/LionMini.ibnl +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/MIS5600.ibnl +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/MTS14400-48.ibnl +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/MTS14400-DDR.ibnl +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/MTS14400-IntraDDR.ibnl +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/MTS14400.ibnl +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/MTS2400-12T4.ibnl +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/MTS2400-24.ibnl +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/MTS3600.ibnl +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/MTS3610.ibnl +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/PartialGazelle.topo +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/RhinoBased512.lst +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/RhinoBased512.no_sp2-3.lst +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/RhinoBased512.topo +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/SUNBQNEM48.ibnl +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/SUNDCS36QDR.ibnl +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/SUNDCS648QDR.ibnl +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/SUNDCS72QDR.ibnl +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/SingleGazelle.topo +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/SingleRhino.topo +file path=usr/lib/$(MACH64)/ibdm1.5.7/ibnl/subnet.lst +file path=usr/lib/$(MACH64)/ibdm1.5.7/libibdm.so.1.5.7 +file path=usr/lib/$(MACH64)/ibdm1.5.7/pkgIndex.tcl +dir path=usr/lib/$(MACH64)/ibis1.5.7 +file path=usr/lib/$(MACH64)/ibis1.5.7/libibis.so.1.5.7 +file path=usr/lib/$(MACH64)/ibis1.5.7/pkgIndex.tcl link path=usr/lib/$(MACH64)/libibmad.so target=libibmad.so.5.1.2 link path=usr/lib/$(MACH64)/libibmad.so.5 target=libibmad.so.5.1.2 file path=usr/lib/$(MACH64)/libibmad.so.5.1.2 +link path=usr/lib/$(MACH64)/libibnetdisc.so.5 target=libibnetdisc.so.5.0.1 +file path=usr/lib/$(MACH64)/libibnetdisc.so.5.0.1 link path=usr/lib/$(MACH64)/libibumad.so target=libibumad.so.3.0.2 link path=usr/lib/$(MACH64)/libibumad.so.3 target=libibumad.so.3.0.2 file path=usr/lib/$(MACH64)/libibumad.so.3.0.2 @@ -117,81 +172,21 @@ link path=usr/lib/$(MACH64)/librdmacm.so target=librdmacm.so.1.0.0 link path=usr/lib/$(MACH64)/librdmacm.so.1 target=librdmacm.so.1.0.0 file path=usr/lib/$(MACH64)/librdmacm.so.1.0.0 -file path=usr/lib/ibdiagnet1.5.7/git_version.tcl -file path=usr/lib/ibdiagnet1.5.7/ibdebug.tcl -file path=usr/lib/ibdiagnet1.5.7/ibdebug_if.tcl -file path=usr/lib/ibdiagnet1.5.7/ibdiagnet.tcl -file path=usr/lib/ibdiagnet1.5.7/pkgIndex.tcl -file path=usr/lib/ibdm1.5.7/ibnl/Buffalo.ibnl -file path=usr/lib/ibdm1.5.7/ibnl/Buffalo8.topo -file path=usr/lib/ibdm1.5.7/ibnl/Cheetah.ibnl -file path=usr/lib/ibdm1.5.7/ibnl/Cougar.ibnl -file path=usr/lib/ibdm1.5.7/ibnl/Eagle.ibnl -file path=usr/lib/ibdm1.5.7/ibnl/FullGnu.topo -file path=usr/lib/ibdm1.5.7/ibnl/Gazelle.ibnl -file path=usr/lib/ibdm1.5.7/ibnl/Gnu.ibnl -file path=usr/lib/ibdm1.5.7/ibnl/IS4_NATIVE.ibnl -file path=usr/lib/ibdm1.5.7/ibnl/IS5100.ibnl -file path=usr/lib/ibdm1.5.7/ibnl/IS5200.ibnl -file path=usr/lib/ibdm1.5.7/ibnl/IS5300.ibnl -file path=usr/lib/ibdm1.5.7/ibnl/Lion.ibnl -file path=usr/lib/ibdm1.5.7/ibnl/LionMini.ibnl -file path=usr/lib/ibdm1.5.7/ibnl/MIS5600.ibnl -file path=usr/lib/ibdm1.5.7/ibnl/MTS14400-48.ibnl -file path=usr/lib/ibdm1.5.7/ibnl/MTS14400-DDR.ibnl -file path=usr/lib/ibdm1.5.7/ibnl/MTS14400-IntraDDR.ibnl -file path=usr/lib/ibdm1.5.7/ibnl/MTS14400.ibnl -file path=usr/lib/ibdm1.5.7/ibnl/MTS2400-12T4.ibnl -file path=usr/lib/ibdm1.5.7/ibnl/MTS2400-24.ibnl -file path=usr/lib/ibdm1.5.7/ibnl/MTS3600.ibnl -file path=usr/lib/ibdm1.5.7/ibnl/MTS3610.ibnl -file path=usr/lib/ibdm1.5.7/ibnl/PartialGazelle.topo -file path=usr/lib/ibdm1.5.7/ibnl/RhinoBased512.lst -file path=usr/lib/ibdm1.5.7/ibnl/RhinoBased512.no_sp2-3.lst -file path=usr/lib/ibdm1.5.7/ibnl/RhinoBased512.topo -file path=usr/lib/ibdm1.5.7/ibnl/SUNBQNEM48.ibnl -file path=usr/lib/ibdm1.5.7/ibnl/SUNDCS36QDR.ibnl -file path=usr/lib/ibdm1.5.7/ibnl/SUNDCS648QDR.ibnl -file path=usr/lib/ibdm1.5.7/ibnl/SUNDCS72QDR.ibnl -file path=usr/lib/ibdm1.5.7/ibnl/SingleGazelle.topo -file path=usr/lib/ibdm1.5.7/ibnl/SingleRhino.topo -file path=usr/lib/ibdm1.5.7/ibnl/subnet.lst -file path=usr/lib/ibdm1.5.7/libibdm.so.1.5.7 -file path=usr/lib/ibdm1.5.7/pkgIndex.tcl -file path=usr/lib/ibis1.5.7/libibis.so.1.5.7 -file path=usr/lib/ibis1.5.7/pkgIndex.tcl -link path=usr/lib/libibmad.so target=libibmad.so.5.1.2 -link path=usr/lib/libibmad.so.5 target=libibmad.so.5.1.2 -file path=usr/lib/libibmad.so.5.1.2 -link path=usr/lib/libibnetdisc.so.5 target=libibnetdisc.so.5.0.1 -file path=usr/lib/libibnetdisc.so.5.0.1 -link path=usr/lib/libibumad.so target=libibumad.so.3.0.2 -link path=usr/lib/libibumad.so.3 target=libibumad.so.3.0.2 -file path=usr/lib/libibumad.so.3.0.2 -link path=usr/lib/libibverbs.so target=libibverbs.so.1.0.0 -link path=usr/lib/libibverbs.so.1 target=libibverbs.so.1.0.0 -file path=usr/lib/libibverbs.so.1.0.0 -file path=usr/lib/libmlx4-rdmav2.so -link path=usr/lib/libmlx4.so target=libmlx4-rdmav2.so -link path=usr/lib/libopensm.so.4 target=libopensm.so.4.0.2 -file path=usr/lib/libopensm.so.4.0.2 -link path=usr/lib/libosmcomp.so.3 target=libosmcomp.so.3.0.4 -file path=usr/lib/libosmcomp.so.3.0.4 -link path=usr/lib/libosmvendor.so.3 target=libosmvendor.so.3.0.5 -file path=usr/lib/libosmvendor.so.3.0.5 -link path=usr/lib/librdmacm.so target=librdmacm.so.1.0.0 -link path=usr/lib/librdmacm.so.1 target=librdmacm.so.1.0.0 -file path=usr/lib/librdmacm.so.1.0.0 +dir path=usr/lib/secure +dir path=usr/lib/secure/$(MACH64) link path=usr/lib/secure/$(MACH64)/libsdp.so target=libsdp.so.1.0.0 link path=usr/lib/secure/$(MACH64)/libsdp.so.1 target=libsdp.so.1.0.0 file path=usr/lib/secure/$(MACH64)/libsdp.so.1.0.0 link path=usr/lib/secure/libsdp.so target=libsdp.so.1.0.0 link path=usr/lib/secure/libsdp.so.1 target=libsdp.so.1.0.0 file path=usr/lib/secure/libsdp.so.1.0.0 +dir path=usr/perl5/site_perl/5.12/i86pc-solaris-64int variant.arch=i386 file path=usr/perl5/site_perl/5.12/i86pc-solaris-64int/IBswcountlimits.pm \ group=root mode=0444 variant.arch=i386 +dir path=usr/perl5/site_perl/5.12/sun4-solaris-64int variant.arch=sparc file path=usr/perl5/site_perl/5.12/sun4-solaris-64int/IBswcountlimits.pm \ group=root mode=0444 variant.arch=sparc +dir path=usr/sbin file path=usr/sbin/dump2psl.pl file path=usr/sbin/dump2slvl.pl file path=usr/sbin/ibaddr @@ -238,7 +233,10 @@ file path=usr/sbin/smpdump file path=usr/sbin/smpquery file path=usr/sbin/solaris_set_nodedesc variant.opensolaris.zone=global +dir path=usr/share/libibverbs.d file path=usr/share/libibverbs.d/mlx4.driver +dir path=usr/share/man +dir path=usr/share/man/man1 file path=usr/share/man/man1/ib_clock_test.1 file path=usr/share/man/man1/ib_read_bw.1 link path=usr/share/man/man1/ib_read_lat.1 target=ib_read_bw.1 @@ -265,6 +263,7 @@ file path=usr/share/man/man1/rping.1 file path=usr/share/man/man1/ucmatose.1 file path=usr/share/man/man1/udaddy.1 +dir path=usr/share/man/man1m file path=usr/share/man/man1m/ibaddr.1m file path=usr/share/man/man1m/ibcheckerrors.1m file path=usr/share/man/man1m/ibcheckerrs.1m @@ -304,6 +303,7 @@ file path=usr/share/man/man1m/sminfo.1m file path=usr/share/man/man1m/smpdump.1m file path=usr/share/man/man1m/smpquery.1m +dir path=usr/share/man/man3 link path=usr/share/man/man3/ibv_ack_async_event.3 target=ibv_get_async_event.3 link path=usr/share/man/man3/ibv_ack_cq_events.3 target=ibv_get_cq_event.3 file path=usr/share/man/man3/ibv_alloc_pd.3 @@ -389,8 +389,11 @@ file path=usr/share/man/man3/rdma_resolve_addr.3 file path=usr/share/man/man3/rdma_resolve_route.3 file path=usr/share/man/man3/rdma_set_option.3 +dir path=usr/share/man/man3lib file path=usr/share/man/man3lib/libsdp.3lib +dir path=usr/share/man/man4 file path=usr/share/man/man4/libsdp.conf.4 +dir path=usr/share/man/man7 file path=usr/share/man/man7/rdma_cm.7 file path=usr/share/man/man7/verbs.7 diff -r 0cca05cde869 -r 353f8a998732 components/open-fabrics/opensm/Makefile --- a/components/open-fabrics/opensm/Makefile Thu Jul 16 15:20:48 2015 -0700 +++ b/components/open-fabrics/opensm/Makefile Fri Jul 17 12:11:28 2015 -0700 @@ -22,7 +22,7 @@ # # OFED only builds with GCC -COMPILER=gcc3 +COMPILER=gcc include ../../../make-rules/shared-macros.mk diff -r 0cca05cde869 -r 353f8a998732 components/open-fabrics/perftest/Makefile --- a/components/open-fabrics/perftest/Makefile Thu Jul 16 15:20:48 2015 -0700 +++ b/components/open-fabrics/perftest/Makefile Fri Jul 17 12:11:28 2015 -0700 @@ -22,7 +22,7 @@ # # OFED only builds with GCC -COMPILER=gcc3 +COMPILER=gcc include ../../../make-rules/shared-macros.mk @@ -34,11 +34,6 @@ sha256:164d32753ab87ba3152c84f69bf16bb592d77b922e66e753bd9ad0e229675793 COMPONENT_ARCHIVE_URL= http://www.openfabrics.org/downloads/perftest/$(COMPONENT_ARCHIVE) -$(BUILD_32): BITS=32 -$(BUILD_64): BITS=64 -$(INSTALL_32): BITS=32 -$(INSTALL_64): BITS=64 - include $(WS_MAKE_RULES)/prep.mk include $(WS_MAKE_RULES)/configure.mk include ../ofed.mk @@ -56,11 +51,13 @@ LDFLAGS += -L$(PROTO_DIR)/$(CONFIGURE_LIBDIR.$(BITS)) CFLAGS += $(SHARED_INCLUDES) +CONFIGURE_OPTIONS += --bindir=$(USRBINDIR) + COMMON_ARGS += CC="$(CC)" COMMON_ARGS += CFLAGS="$(CFLAGS)" COMMON_ARGS += LDFLAGS="$(LDFLAGS) $(LIBS)" COMMON_ARGS += INSTALL=$(INSTALL) -COMMON_ARGS += BINDIR=$(CONFIGURE_BINDIR.$(BITS)) +COMMON_ARGS += BINDIR=$(CONFIGURE_BINDIR)/usr/bin COMPONENT_BUILD_ARGS += $(COMMON_ARGS) COMPONENT_INSTALL_ARGS += $(COMMON_ARGS) @@ -76,11 +73,11 @@ COMPONENT_PRE_CONFIGURE_ACTION = ($(CLONEY) $(SOURCE_DIR) $(@D)) # common targets -configure: $(CONFIGURE_32_and_64) +configure: $(CONFIGURE_64) -build: $(BUILD_32_and_64) +build: $(BUILD_64) -install: $(INSTALL_32_and_64) $(PROTOMAN1FILES) +install: $(INSTALL_64) $(PROTOMAN1FILES) test: $(NO_TESTS) diff -r 0cca05cde869 -r 353f8a998732 components/open-fabrics/perftest/patches/base.patch --- a/components/open-fabrics/perftest/patches/base.patch Thu Jul 16 15:20:48 2015 -0700 +++ b/components/open-fabrics/perftest/patches/base.patch Fri Jul 17 12:11:28 2015 -0700 @@ -1441,13 +1441,16 @@ // Client. if (params->machine == CLIENT) { if (ctx_write_keys(my_dest,params)) { -@@ -904,6 +921,18 @@ +@@ -904,6 +921,21 @@ return -1; } } -+ // We could have tavor at one end and hermon at the other. -+ // To avoid a modify QP error set max_rd_atomic to lowest -+ // on either side of connection. ++ ++ /* ++ * If we have different HCA's at either end of the connection with ++ * different RDMA attributes, then to avoid a modify QP error set ++ * max_rd_atomic to lowest on either side of connection. ++ */ + if (rem_dest->out_reads > my_dest->out_reads) + temp_reads = my_dest->out_reads; + @@ -1604,16 +1607,17 @@ diff -r -u /tmp/perftest-1.3.0/send_bw.c perftest-1.3.0/send_bw.c --- /tmp/perftest-1.3.0/send_bw.c Thu Jan 20 07:37:18 2011 +++ perftest-1.3.0/send_bw.c Fri Feb 11 04:12:47 2011 -@@ -320,7 +320,7 @@ +@@ -320,9 +320,6 @@ user_parm->size = MTU_SIZE(user_parm->curr_mtu); } - if (is_dev_hermon(ctx->context) != NOT_HERMON && user_parm->inline_size != 0) -+ if (is_dev_hermon(ctx->context) == NOT_HERMON && user_parm->inline_size != 0) - user_parm->inline_size = 0; +- user_parm->inline_size = 0; +- + printf(" Inline data is used up to %d bytes message\n", user_parm->inline_size); - printf(" Inline data is used up to %d bytes message\n", user_parm->inline_size); -@@ -649,7 +649,11 @@ + ctx->size = user_parm->size; +@@ -649,7 +646,11 @@ } } @@ -1768,16 +1772,17 @@ #include #include -@@ -224,7 +225,7 @@ +@@ -224,9 +225,6 @@ return NULL; } - if (is_dev_hermon(ctx->context) != NOT_HERMON && user_parm->inline_size != 0) -+ if (is_dev_hermon(ctx->context) == NOT_HERMON && user_parm->inline_size != 0) - user_parm->inline_size = 0; +- user_parm->inline_size = 0; +- + printf(" Inline data is used up to %d bytes message\n", user_parm->inline_size); - printf(" Inline data is used up to %d bytes message\n", user_parm->inline_size); -@@ -368,7 +369,6 @@ + ctx->pd = ibv_alloc_pd(ctx->context); +@@ -368,7 +366,6 @@ cycles_t t; int iters = user_param->iters; @@ -1785,7 +1790,7 @@ opt_delta = tcompleted[opt_posted] - tposted[opt_completed]; if (user_param->noPeak == OFF) { -@@ -384,7 +384,11 @@ +@@ -384,7 +381,11 @@ } } diff -r 0cca05cde869 -r 353f8a998732 components/open-fabrics/qperf/Makefile --- a/components/open-fabrics/qperf/Makefile Thu Jul 16 15:20:48 2015 -0700 +++ b/components/open-fabrics/qperf/Makefile Fri Jul 17 12:11:28 2015 -0700 @@ -22,7 +22,7 @@ # # OFED only builds with GCC -COMPILER=gcc3 +COMPILER=gcc include ../../../make-rules/shared-macros.mk @@ -40,6 +40,8 @@ LIBS += -lsocket -lnsl -lkstat -lrdmacm -libverbs +CONFIGURE_OPTIONS += --bindir=$(USRBINDIR) + COMPONENT_INSTALL_ENV += INSTALL="$(INSTALL) -m 755" COMPONENT_PRE_CONFIGURE_ACTION = \ @@ -47,11 +49,11 @@ ln -s $(SOURCE_DIR)/src/mkhelp ; ln -s $(SOURCE_DIR)/src/mkman) # common targets -configure: $(CONFIGURE_32_and_64) +configure: $(CONFIGURE_64) -build: $(BUILD_32_and_64) +build: $(BUILD_64) -install: $(INSTALL_32_and_64) +install: $(INSTALL_64) test: $(NO_TESTS) diff -r 0cca05cde869 -r 353f8a998732 components/open-fabrics/qperf/patches/base.patch --- a/components/open-fabrics/qperf/patches/base.patch Thu Jul 16 15:20:48 2015 -0700 +++ b/components/open-fabrics/qperf/patches/base.patch Fri Jul 17 12:11:28 2015 -0700 @@ -47,7 +47,28 @@ /* * Configurable parameters. If your change makes this version of qperf * incompatible with previous versions (usually a change to the Req structure), -@@ -224,7 +234,9 @@ +@@ -165,6 +175,10 @@ + char qperf[STRSIZE]; /* Qperf version */ + } CONF; + ++char *t_bits[] ={ "bits/sec", "Kb/sec", "Mb/sec", "Gb/sec", "Tb/sec" }; ++int s_bits = cardof(t_bits); ++char *t_bytes[] ={ "bytes/sec", "KB/sec", "MB/sec", "GB/sec", "TB/sec" }; ++int s_bytes = cardof(t_bytes); + + /* + * Function prototypes. +@@ -177,7 +191,9 @@ + static void calc_node(RESN *resn, STAT *stat); + static void calc_results(void); + static void client(TEST *test); ++#if !(defined(__SVR4) && defined(__sun)) + static int cmpsub(char *s2, char *s1); ++#endif + static char *commify(char *data); + static void dec_req_data(REQ *host); + static void dec_req_version(REQ *host); +@@ -224,7 +240,9 @@ static void sig_alrm(int signo, siginfo_t *siginfo, void *ucontext); static void sig_quit(int signo, siginfo_t *siginfo, void *ucontext); static void sig_urg(int signo, siginfo_t *siginfo, void *ucontext); @@ -58,7 +79,7 @@ static void start_test_timer(int seconds); static long str_size(char *arg, char *str); static void strncopy(char *d, char *s, int n); -@@ -257,7 +269,9 @@ +@@ -257,9 +275,11 @@ static STAT IStat; static int ListenFD; static LOOP *Loops; @@ -66,9 +87,21 @@ static int ProcStatFD; +#endif static STAT RStat; - static int ShowIndex; +-static int ShowIndex; ++volatile static int ShowIndex = 0; static SHOW ShowTable[256]; -@@ -601,6 +615,9 @@ + static int UnifyUnits; + static int UnifyNodes; +@@ -281,7 +301,7 @@ + int ServerAddrLen; + int RemoteFD; + int Debug; +-volatile int Finished; ++volatile int Finished = 0; + + + /* +@@ -601,6 +621,9 @@ initialize(); set_signals(); do_args(&argv[1]); @@ -78,7 +111,7 @@ return 0; } -@@ -617,14 +634,19 @@ +@@ -617,14 +640,19 @@ for (i = 0; i < P_N; ++i) if (ParInfo[i].index != i) error(BUG, "initialize: ParInfo: out of order: %d", i); @@ -98,7 +131,7 @@ /* * Look for a colon and skip past it and any spaces. */ -@@ -643,6 +665,7 @@ +@@ -643,6 +671,7 @@ s++; return s; } @@ -106,7 +139,23 @@ /* -@@ -1667,13 +1690,18 @@ +@@ -649,6 +678,7 @@ + * A case insensitive string compare. s2 must at least contain all of s1 but + * can be longer. + */ ++#if !(defined(__SVR4) && defined(__sun)) + static int + cmpsub(char *s2, char *s1) + { +@@ -664,6 +694,7 @@ + return 0; + } + } ++#endif + + + /* +@@ -1667,13 +1698,18 @@ { char count[STRSIZE]; char speed[STRSIZE]; @@ -127,7 +176,7 @@ if (!fp) error(0, "cannot open /proc/cpuinfo"); cpu[0] = '\0'; -@@ -1732,6 +1760,7 @@ +@@ -1732,6 +1768,7 @@ /* CPU speed */ speed[0] = '\0'; @@ -135,7 +184,7 @@ if (!mixed) { int n = strlen(cpu); if (n < 3 || cpu[n-2] != 'H' || cpu[n-1] != 'z') { -@@ -1745,7 +1774,24 @@ +@@ -1745,7 +1782,24 @@ } } } @@ -160,7 +209,80 @@ /* Number of CPUs */ if (cpus == 1) count[0] = '\0'; -@@ -2615,14 +2661,20 @@ +@@ -1776,11 +1830,10 @@ + static void + run_server_quit(void) + { +- int z; + char buf[1]; + + sync_test(); +- z = read(RemoteFD, buf, sizeof(buf)); ++ (void)read(RemoteFD, buf, sizeof(buf)); + kill(getppid(), SIGQUIT); + exit(0); + } +@@ -2296,6 +2349,7 @@ + char *tab[] ={ "ns/GB", "us/GB", "ms/GB", "sec/GB" }; + + value *= 1E9; ++ + if (!verbose(type, value)) + return; + if (!UnifyUnits) { +@@ -2371,21 +2425,20 @@ + view_band(int type, char *pref, char *name, double value) + { + int n, s; +- char **tab; +- ++ char **tab, **t; ++ n = s = 0; + if (!verbose(type, value)) + return; + if (UseBitsPerSec) { +- char *t[] ={ "bits/sec", "Kb/sec", "Mb/sec", "Gb/sec", "Tb/sec" }; +- s = cardof(t); ++ t=&t_bits[0]; ++ s = s_bits; + tab = t; + value *= 8; + } else { +- char *t[] ={ "bytes/sec", "KB/sec", "MB/sec", "GB/sec", "TB/sec" }; +- s = cardof(t); ++ t=&t_bytes[0]; ++ s = s_bytes; + tab = t; + } +- + n = 0; + if (!UnifyUnits) { + while (value >= 1000 && n < s-1) { +@@ -2515,10 +2568,13 @@ + static void + place_val(char *pref, char *name, char *unit, double value) + { +- char *data = qasprintf("%.0f", value); +- char *p = data; ++ char *data; ++ char *p; + int n = Precision; + ++ ++ data = qasprintf("%.0f", value); ++ p = data; + if (*p == '-') + ++p; + while (isdigit(*p++)) +@@ -2570,6 +2626,7 @@ + for (i = 0; i < ShowIndex; ++i) { + int n; + SHOW *show = &ShowTable[i]; ++ + n = (show->pref ? strlen(show->pref) : 0) + strlen(show->name); + if (n > nameLen) + nameLen = n; +@@ -2615,14 +2672,20 @@ static void set_affinity(void) { @@ -181,7 +303,7 @@ error(SYS, "cannot set processor affinity (cpu %d)", a-1); } -@@ -2771,9 +2823,36 @@ +@@ -2771,9 +2834,36 @@ /* * Get various temporal parameters. */ @@ -218,7 +340,7 @@ int n; char *p; char buf[BUFSIZE]; -@@ -2802,6 +2881,7 @@ +@@ -2802,6 +2892,7 @@ while (n < T_N) timex[n++] = 0; } @@ -522,3 +644,87 @@ CLOCK time_s[T_N]; /* Start times */ CLOCK time_e[T_N]; /* End times */ USTAT s; /* Send statistics */ +diff -r -u /tmp/730054/qperf-0.4.6/src/support.c qperf-0.4.6/src/support.c +--- /tmp/730054/qperf-0.4.6/src/support.c Mon Aug 31 00:00:40 2009 ++++ qperf-0.4.6/src/support.c Mon Jun 8 15:01:41 2015 +@@ -212,18 +212,17 @@ + void + touch_data(void *p, int n) + { +- uint64_t a; + volatile uint64_t *p64 = p; + + while (n >= sizeof(*p64)) { +- a = *p64++; + n -= sizeof(*p64); ++ *p64++; + } + if (n) { + volatile uint8_t *p8 = (uint8_t *)p64; + while (n >= sizeof(*p8)) { +- a = *p8++; + n -= sizeof(*p8); ++ *p8++; + } + } + } +@@ -419,7 +418,6 @@ + void + urgent(void) + { +- int z; + char *p, *q; + char buffer[256]; + +@@ -471,7 +469,7 @@ + remote_failure_error(); + if (s) + break; +- z = read(RemoteFD, p, q-p); ++ (void)read(RemoteFD, p, q-p); + } + + while (p < q) { +@@ -484,7 +482,7 @@ + timeout_end(); + + buf_end(&p, q); +- z = write(2, buffer, p+1-buffer); ++ (void)write(2, buffer, p+1-buffer); + die(); + } + +@@ -505,7 +503,6 @@ + static void + remote_failure_error(void) + { +- int z; + char buffer[256]; + char *p = buffer; + char *q = p + sizeof(buffer); +@@ -513,7 +510,7 @@ + buf_app(&p, q, remote_name()); + buf_app(&p, q, " failure"); + buf_end(&p, q); +- z = write(2, buffer, p+1-buffer); ++ (void)write(2, buffer, p+1-buffer); + die(); + } + +@@ -539,7 +536,6 @@ + int + error(int actions, char *fmt, ...) + { +- int z; + va_list alist; + char buffer[256]; + char *p = buffer; +@@ -561,7 +557,7 @@ + + if (RemoteFD >= 0) { + send(RemoteFD, "?", 1, MSG_OOB); +- z = write(RemoteFD, buffer, p-buffer); ++ (void)write(RemoteFD, buffer, p-buffer); + shutdown(RemoteFD, SHUT_WR); + timeout_set(ERROR_TIMEOUT, sig_alrm_die); + while (read(RemoteFD, buffer, sizeof(buffer)) > 0) diff -r 0cca05cde869 -r 353f8a998732 components/open-fabrics/rds-tools/Makefile --- a/components/open-fabrics/rds-tools/Makefile Thu Jul 16 15:20:48 2015 -0700 +++ b/components/open-fabrics/rds-tools/Makefile Fri Jul 17 12:11:28 2015 -0700 @@ -22,7 +22,7 @@ # # OFED only builds with GCC -COMPILER=gcc3 +COMPILER=gcc include ../../../make-rules/shared-macros.mk @@ -43,6 +43,8 @@ LIBS += -lsocket -lnsl -llgrp -lkstat -libverbs +CONFIGURE_OPTIONS += --bindir=$(USRBINDIR) + COMPONENT_PREP_ACTION = \ cp rds-vendor.c $(@D)/ @@ -62,11 +64,11 @@ COMPONENT_PRE_CONFIGURE_ACTION = ($(CLONEY) $(SOURCE_DIR) $(@D)) # common targets -configure: $(CONFIGURE_32_and_64) +configure: $(CONFIGURE_64) -build: $(BUILD_32_and_64) +build: $(BUILD_64) -install: $(INSTALL_32_and_64) +install: $(INSTALL_64) test: $(NO_TESTS)