components/open-fabrics/libibumad/patches/base.patch
author boris.chiu@oracle.com
Fri, 23 Jan 2015 08:29:14 -0800
branchs11-update
changeset 3679 c058dce9610f
parent 900 63d3bf696d85
child 4395 94cac541ae13
permissions -rw-r--r--
18117487 saquery -m -t 50000 failed with multiple VFs created 18247164 SUNBT7167127 Some OFED tools print errors with a connect-x VPI card (userland) 18368329 Should use snprintf to convert numeric link_layer to string for ibstat to work 19187537 iberror() of open-fabrics dumps core because of buffer overrun 19195181 wrong handling of getaddrinfo() retval in open-fabrics dumps core 19448949 libibverbs cleanup incomplete
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3679
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 900
diff changeset
     1
# This patch was developed in-house. Since it is Solaris-specific,
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 900
diff changeset
     2
# it is not suitable for upstream.
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 900
diff changeset
     3
#
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
     4
diff -r -u /tmp/libibumad-1.3.7/Makefile.in libibumad-1.3.7/Makefile.in
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
     5
--- /tmp/libibumad-1.3.7/Makefile.in	Mon Feb 14 06:18:00 2011
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
     6
+++ libibumad-1.3.7/Makefile.in	Fri Feb 25 03:11:40 2011
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
     7
@@ -367,8 +367,8 @@
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
     8
 	  else :; fi; \
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
     9
 	done; \
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    10
 	test -z "$$list2" || { \
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    11
-	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    12
-	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    13
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) -m 755 $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    14
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) -m 755 $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    15
 	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    16
 
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    17
 uninstall-libLTLIBRARIES:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    18
diff -r -u /tmp/libibumad-1.3.7/include/infiniband/umad.h libibumad-1.3.7/include/infiniband/umad.h
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    19
--- /tmp/libibumad-1.3.7/include/infiniband/umad.h	Mon Feb 14 01:08:29 2011
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    20
+++ libibumad-1.3.7/include/infiniband/umad.h	Fri May 13 04:28:12 2011
3679
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 900
diff changeset
    21
@@ -45,7 +45,15 @@
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 900
diff changeset
    22
 #endif				/* __cplusplus */
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    23
 
3679
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 900
diff changeset
    24
 BEGIN_C_DECLS
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 900
diff changeset
    25
-#define UMAD_MAX_DEVICES 32
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 900
diff changeset
    26
+/* To accomodate max. of 16 PCIe slots and 63 VFs per HCA, */
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 900
diff changeset
    27
+/* we define	MAX_HCAS = (63VFs + 1PF) * 16HCAs */
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 900
diff changeset
    28
+/* 		MAX_PORTS = MAX_HCAS * 2ports per HCA */
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 900
diff changeset
    29
+#define MAX_HCAS	(64*16)
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 900
diff changeset
    30
+#define MAX_PORTS	(MAX_HCAS*2)
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 900
diff changeset
    31
+#define UMAD_MAX_DEVICES MAX_HCAS
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 900
diff changeset
    32
+#define	UMAD_MAX_HCAS	MAX_HCAS
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 900
diff changeset
    33
+#define	UMAD_MAX_PORTS	MAX_PORTS
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 900
diff changeset
    34
+
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 900
diff changeset
    35
 #define UMAD_ANY_PORT	0
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 900
diff changeset
    36
 typedef struct ib_mad_addr {
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 900
diff changeset
    37
 	uint32_t qpn;
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 900
diff changeset
    38
@@ -94,9 +102,13 @@
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 900
diff changeset
    39
 #define SYS_IB_MAD_PORT		"port"
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 900
diff changeset
    40
 #define SYS_IB_MAD_DEV		"ibdev"
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 900
diff changeset
    41
 
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 900
diff changeset
    42
-#define UMAD_MAX_PORTS		64
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 900
diff changeset
    43
+#define UMAD_MAX_PORTS		MAX_PORTS
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    44
 
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    45
+#if defined(__SVR4) && defined(__sun)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    46
+#define	UMAD_DEV_DIR		"/dev/infiniband/ofs"
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    47
+#else
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    48
 #define UMAD_DEV_DIR		"/dev/infiniband"
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    49
+#endif
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    50
 
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    51
 #define SYS_CA_PORTS_DIR	"ports"
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    52
 
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    53
diff -r -u /tmp/libibumad-1.3.7/configure libibumad-1.3.7/configure
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    54
--- /tmp/libibumad-1.3.7/configure	Mon Feb 14 06:18:01 2011
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    55
+++ libibumad-1.3.7/configure	Thu Feb 24 11:27:18 2011
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    56
@@ -8713,6 +8713,7 @@
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    57
 	;;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    58
       esac
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    59
       link_all_deplibs=yes
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    60
+      hardcode_libdir_flag_spec=
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    61
       ;;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    62
 
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    63
     sunos4*)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    64
diff -r -u /tmp/libibumad-1.3.7/src/sysfs.c libibumad-1.3.7/src/sysfs.c
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    65
--- /tmp/libibumad-1.3.7/src/sysfs.c	Mon Feb 14 01:08:29 2011
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    66
+++ libibumad-1.3.7/src/sysfs.c	Thu Feb 24 11:27:30 2011
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    67
@@ -46,9 +46,14 @@
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    68
 #include <sys/types.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    69
 #include <sys/stat.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    70
 #include <fcntl.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    71
+#if !(defined(__SVR4) && defined(__sun))
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    72
 #include <endian.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    73
 #include <byteswap.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    74
+#endif
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    75
 #include <netinet/in.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    76
+#if defined(__SVR4) && defined(__sun)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    77
+#include <infiniband/driver.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    78
+#endif
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    79
 
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    80
 #if __BYTE_ORDER == __LITTLE_ENDIAN
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    81
 #define htonll(x) bswap_64(x)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    82
@@ -70,6 +75,16 @@
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    83
 	char path[256], *s;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    84
 	int fd, r;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    85
 
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    86
+#if defined(__SVR4) && defined(__sun)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    87
+	if ((r = ibv_read_sysfs_file(dir_name, file_name, str, max_len)) < 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    88
+		return -EINVAL;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    89
+	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    90
+
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    91
+	str[(r < max_len) ? r : max_len - 1] = 0;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    92
+
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    93
+	if ((s = strrchr(str, '\n')))
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    94
+		*s = 0;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    95
+#else
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    96
 	snprintf(path, sizeof(path), "%s/%s", dir_name, file_name);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    97
 
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    98
 	if ((fd = open(path, O_RDONLY)) < 0)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    99
@@ -88,6 +103,7 @@
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   100
 		*s = 0;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   101
 
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   102
 	close(fd);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   103
+#endif
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   104
 	return 0;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   105
 }
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   106
 
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   107
diff -r -u /tmp/libibumad-1.3.7/src/umad.c libibumad-1.3.7/src/umad.c
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   108
--- /tmp/libibumad-1.3.7/src/umad.c	Mon Feb 14 01:08:29 2011
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   109
+++ libibumad-1.3.7/src/umad.c	Fri May  6 05:18:47 2011
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   110
@@ -50,6 +50,10 @@
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   111
 
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   112
 #include "umad.h"
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   113
 
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   114
+#if defined(__SVR4) && defined(__sun)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   115
+#include <infiniband/verbs.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   116
+#endif
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   117
+
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   118
 #define IB_OPENIB_OUI                 (0x001405)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   119
 
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   120
 #ifdef HAVE_VALGRIND_MEMCHECK_H
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   121
@@ -82,7 +86,7 @@
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   122
 extern int sys_read_uint64(char *dir_name, char *file_name, uint64_t * u);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   123
 extern int sys_read_uint(char *dir_name, char *file_name, unsigned *u);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   124
 
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   125
-#define IBWARN(fmt, args...) fprintf(stderr, "ibwarn: [%d] %s: " fmt "\n", getpid(), __func__, ## args)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   126
+#define IBWARN(fmt, args...) fprintf(stderr, "ibwarn: [%d] %s: " fmt "\n", (int)getpid(), __func__, ## args)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   127
 
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   128
 #define TRACE	if (umaddebug)	IBWARN
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   129
 #define DEBUG	if (umaddebug)	IBWARN
900
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   130
@@ -126,7 +130,12 @@
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   131
 	return *p ? 0 : 1;
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   132
 }
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   133
 
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   134
+#if defined(__SVR4) && defined(__sun)
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   135
+static int get_port(char *ca_name, char *dir, int portnum,
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   136
+    struct ibv_context *ctx, umad_port_t * port)
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   137
+#else
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   138
 static int get_port(char *ca_name, char *dir, int portnum, umad_port_t * port)
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   139
+#endif
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   140
 {
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   141
 	char port_dir[256];
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   142
 	uint8_t gid[16];
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   143
@@ -172,6 +181,39 @@
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   144
 	memcpy(&port->port_guid, gid + 8, sizeof port->port_guid);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   145
 
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   146
 	snprintf(port_dir + len, sizeof(port_dir) - len, "/pkeys");
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   147
+
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   148
+#if defined(__SVR4) && defined(__sun)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   149
+	{
900
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   150
+		struct ibv_port_attr	port_attr;
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   151
+
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   152
+		if (ibv_query_port(ctx, portnum, &port_attr)) {
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   153
+			IBWARN("Could not query \"%s\" port %d", ca_name,
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   154
+			       portnum);
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   155
+			goto clean;
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   156
+		}
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   157
+
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   158
+		port->pkeys =
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   159
+		    malloc(sizeof (uint16_t) * port_attr.pkey_tbl_len);
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   160
+
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   161
+		if (!port->pkeys) {
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   162
+			IBWARN("Could not retrieve pkeys for \"%s\"", ca_name);
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   163
+			goto clean;
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   164
+		}
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   165
+
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   166
+		/*
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   167
+		 * set high bit of port_num, and try get all pkeys in one go.
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   168
+		 */
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   169
+		portnum |= 0x80;
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   170
+		num_pkeys = ibv_query_pkey(ctx, portnum, port_attr.pkey_tbl_len,
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   171
+		    port->pkeys);
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   172
+		if (num_pkeys != 0) {
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   173
+			IBWARN("get_port: ibv_query_pkey() failed for \"%s\"",
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   174
+			    ca_name);
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   175
+			goto clean;
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   176
+		}
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   177
+		port->pkeys_size = port_attr.pkey_tbl_len;
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   178
+	}
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   179
+#else
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   180
 	num_pkeys = scandir(port_dir, &namelist, check_for_digit_name, NULL);
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   181
 	if (num_pkeys <= 0) {
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   182
 		IBWARN("no pkeys found for %s:%u (at dir %s)...",
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   183
@@ -193,6 +235,8 @@
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   184
 	port->pkeys_size = num_pkeys;
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   185
 	free(namelist);
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   186
 	namelist = NULL;
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   187
+#endif
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   188
+
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   189
 	port_dir[len] = '\0';
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   190
 
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   191
 	/* FIXME: handle gids */
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   192
@@ -384,6 +428,7 @@
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   193
 	snprintf(dir_name, sizeof(dir_name), "%s/%s/%s",
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   194
 		 SYS_INFINIBAND, ca->ca_name, SYS_CA_PORTS_DIR);
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   195
 
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   196
+#if !(defined(__SVR4) && defined(__sun))
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   197
 	if (!(dir = opendir(dir_name)))
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   198
 		return -ENOENT;
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   199
 
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   200
@@ -425,15 +470,91 @@
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   201
 	free(namelist);
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   202
 
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   203
 	closedir(dir);
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   204
+#else
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   205
+	{
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   206
+		struct ibv_device	**root_dev_list, **dev_list = NULL;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   207
+		struct ibv_context	*ctx = NULL;
900
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   208
+		struct ibv_device_attr  dev_attr;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   209
+		int			num_dev;
900
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   210
+		int                     ret;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   211
+
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   212
+		root_dev_list = dev_list = ibv_get_device_list(&num_dev);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   213
+		if (!dev_list) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   214
+			IBWARN("No HCA devices found");
900
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   215
+			return -EIO;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   216
+		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   217
+
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   218
+		for (i = 0; i < num_dev; i++, dev_list++) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   219
+			if (strcmp(ibv_get_device_name(*dev_list), ca_name)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   220
+			    == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   221
+				break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   222
+			}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   223
+		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   224
+
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   225
+		if (i == num_dev) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   226
+			IBWARN("Could not find \"%s\"", ca_name);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   227
+			ibv_free_device_list(root_dev_list);
900
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   228
+			ret = -EIO;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   229
+			goto clean;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   230
+		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   231
+
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   232
+		if (!(ctx = ibv_open_device(*dev_list))) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   233
+			IBWARN("failed to open device \"%s\"", ca_name);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   234
+			ibv_free_device_list(root_dev_list);
900
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   235
+			ret = -EIO;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   236
+			goto clean;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   237
+		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   238
+
900
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   239
+		/* Get port count */
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   240
+		memset(&dev_attr, 0, sizeof (struct ibv_device_attr));
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   241
+		if (ibv_query_device(ctx, &dev_attr) != 0) {
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   242
+			IBWARN("failed to query device \"%s\"", ca_name);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   243
+			ibv_close_device(ctx);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   244
+			ibv_free_device_list(root_dev_list);
900
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   245
+			ret = -EIO;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   246
+			goto clean;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   247
+		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   248
+
900
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   249
+		ca->numports = 0;
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   250
+		memset(ca->ports, 0, sizeof ca->ports);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   251
+
900
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   252
+		for (portnum = 1; portnum <= dev_attr.phys_port_cnt; portnum++) {
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   253
+
900
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   254
+		        if (!(ca->ports[portnum] = calloc(1,
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   255
+			    sizeof(*ca->ports[portnum])))) {
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   256
+			        ret = -ENOMEM;
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   257
+				ibv_close_device(ctx);
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   258
+				ibv_free_device_list(root_dev_list);
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   259
+				goto clean;
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   260
+			}
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   261
+			if (get_port(ca_name, dir_name, portnum, ctx,
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   262
+			    ca->ports[portnum]) < 0) {
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   263
+			        free(ca->ports[portnum]);
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   264
+				ca->ports[portnum] = NULL;
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   265
+				ret = -EIO;
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   266
+				ibv_close_device(ctx);
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   267
+				ibv_free_device_list(root_dev_list);
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   268
+				goto clean;
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   269
+			}
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   270
+			if (ca->numports < portnum)
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   271
+			        ca->numports = portnum;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   272
+		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   273
+	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   274
+#endif
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   275
+
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   276
 	put_ca(ca);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   277
 	return 0;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   278
 
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   279
 clean:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   280
+#if !(defined(__SVR4) && defined(__sun))
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   281
 	for (i = 0; i < r; i++)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   282
 		free(namelist[i]);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   283
 	free(namelist);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   284
+#endif
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   285
 error:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   286
+#if !(defined(__SVR4) && defined(__sun))
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   287
 	closedir(dir);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   288
+#endif
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   289
 	release_ca(ca);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   290
 
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   291
 	return ret;
900
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   292
@@ -484,6 +605,11 @@
636
da28b1dc61e7 PSARC 2011/291 EOL Tavor IB HCA driver
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 369
diff changeset
   293
 int umad_init(void)
da28b1dc61e7 PSARC 2011/291 EOL Tavor IB HCA driver
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 369
diff changeset
   294
 {
da28b1dc61e7 PSARC 2011/291 EOL Tavor IB HCA driver
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 369
diff changeset
   295
 	TRACE("umad_init");
da28b1dc61e7 PSARC 2011/291 EOL Tavor IB HCA driver
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 369
diff changeset
   296
+	struct ibv_device **devlist = ibv_get_device_list(NULL);
da28b1dc61e7 PSARC 2011/291 EOL Tavor IB HCA driver
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 369
diff changeset
   297
+	if (devlist == NULL) {
da28b1dc61e7 PSARC 2011/291 EOL Tavor IB HCA driver
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 369
diff changeset
   298
+		IBWARN("No IB devices found");
da28b1dc61e7 PSARC 2011/291 EOL Tavor IB HCA driver
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 369
diff changeset
   299
+		return -1;
da28b1dc61e7 PSARC 2011/291 EOL Tavor IB HCA driver
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 369
diff changeset
   300
+	}
da28b1dc61e7 PSARC 2011/291 EOL Tavor IB HCA driver
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 369
diff changeset
   301
 	if (sys_read_uint(IB_UMAD_ABI_DIR, IB_UMAD_ABI_FILE, &abi_version) < 0) {
da28b1dc61e7 PSARC 2011/291 EOL Tavor IB HCA driver
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 369
diff changeset
   302
 		IBWARN
da28b1dc61e7 PSARC 2011/291 EOL Tavor IB HCA driver
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 369
diff changeset
   303
 		    ("can't read ABI version from %s/%s (%m): is ib_umad module loaded?",
900
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   304
@@ -522,6 +648,28 @@
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   305
 
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   306
 int umad_get_cas_names(char cas[][UMAD_CA_NAME_LEN], int max)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   307
 {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   308
+#if defined(__SVR4) && defined(__sun)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   309
+	struct ibv_device **devlist = ibv_get_device_list(NULL);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   310
+	int j = 0;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   311
+
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   312
+	TRACE("max %d", max);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   313
+
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   314
+	if (devlist) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   315
+		while (devlist[j] && j < max) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   316
+			strncpy(cas[j], ibv_get_device_name(devlist[j]),
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   317
+						UMAD_CA_NAME_LEN);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   318
+			j++;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   319
+		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   320
+		ibv_free_device_list(devlist);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   321
+		DEBUG("return %d cas", j);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   322
+	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   323
+	if (j == 0 && max > 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   324
+		/* Is this still needed ? */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   325
+		strncpy((char *)cas, def_ca_name, UMAD_CA_NAME_LEN);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   326
+		DEBUG("return 1 ca");
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   327
+		j = 1;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   328
+	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   329
+#else
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   330
 	struct dirent **namelist;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   331
 	int n, i, j = 0;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   332
 
900
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   333
@@ -547,6 +695,7 @@
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   334
 	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   335
 	if (n >= 0)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   336
 		free(namelist);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   337
+#endif
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   338
 	return j;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   339
 }
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   340
 
900
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   341
@@ -673,7 +822,46 @@
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   342
 	snprintf(dir_name, sizeof(dir_name), "%s/%s/%s",
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   343
 		 SYS_INFINIBAND, ca_name, SYS_CA_PORTS_DIR);
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   344
 
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   345
+#if defined(__SVR4) && defined(__sun)
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   346
+	{
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   347
+		struct ibv_device	**root_dev_list, **dev_list = NULL;
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   348
+		struct ibv_context	*ctx = NULL;
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   349
+		int			num_dev, ret, i;
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   350
+
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   351
+		root_dev_list = dev_list = ibv_get_device_list(&num_dev);
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   352
+		if (!dev_list) {
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   353
+			IBWARN("No HCA devices found");
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   354
+			return -EIO;
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   355
+		}
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   356
+
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   357
+		for (i = 0; i < num_dev; i++, dev_list++) {
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   358
+			if (strcmp(ibv_get_device_name(*dev_list), ca_name)
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   359
+			    == 0) {
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   360
+				break;
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   361
+			}
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   362
+		}
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   363
+
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   364
+		if (i == num_dev) {
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   365
+			IBWARN("Could not find \"%s\"", ca_name);
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   366
+			ibv_free_device_list(root_dev_list);
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   367
+			return -EIO;
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   368
+		}
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   369
+
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   370
+		if (!(ctx = ibv_open_device(*dev_list))) {
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   371
+			IBWARN("failed to open device \"%s\"", ca_name);
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   372
+			ibv_free_device_list(root_dev_list);
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   373
+			return -EIO;
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   374
+		}
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   375
+
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   376
+		if ((ret = get_port(ca_name, dir_name, portnum, ctx, port)) != 0) {
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   377
+		        ibv_close_device(ctx);
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   378
+		        ibv_free_device_list(root_dev_list);
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   379
+		}
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   380
+		return ret;
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   381
+	}
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   382
+#else
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   383
 	return get_port(ca_name, dir_name, portnum, port);
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   384
+#endif
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   385
 }
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   386
 
63d3bf696d85 7178014 Some OFED tools print errors with a single port HCA
Sharath M Srinivasan <sharath.srinivasan@oracle.com>
parents: 715
diff changeset
   387
 int umad_release_port(umad_port_t * port)