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
--- 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)
--- 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}'
--- 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)
--- 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
--- 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
--- 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 \
--- 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 <stdio.h>
#include <inttypes.h>
#include <alloca.h>
+#include <string.h>
#ifdef __cplusplus
extern "C" {
--- 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);
--- 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 <stdlib.h>
#include <strings.h>
#include <sys/param.h>
-#include <sys/ib/adapters/hermon/hermon_ioctl.h>
-#include <sys/ib/adapters/tavor/tavor_ioctl.h>
#include <sys/ib/clients/of/sol_uverbs/sol_uverbs_ioctl.h>
#include <sys/ib/clients/of/sol_umad/sol_umad_ioctl.h>
-#include <sys/ib/adapters/MELLANOX.h>
-
#include <alloca.h>
#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 <driver-prefix><instance>,
+ * 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 <dev-prefix><dev-instance>
+ * 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);
--- 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 ; \
--- /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 */
--- 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 <infiniband/kern-abi.h>
+#if defined(__SVR4) && defined(__sun)
-+#include <sys/ib/adapters/mlnx_umap.h> /* 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 <sys/ib/adapters/mlnx_umap.h> / * 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,
--- 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);
--- 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
--- 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
--- 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
--- 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
--- 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)
--- 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 <time.h>
#include <infiniband/verbs.h>
-@@ -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 @@
}
}
--- 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)
--- 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)
--- 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)