components/open-fabrics/qperf/patches/base.patch
author Boris Chiu <Boris.Chiu@Sun.COM>
Tue, 05 Jul 2011 19:16:33 -0700
changeset 369 cc8c00719da9
child 715 eed3ed08f692
child 2291 b0bb4aa104b6
permissions -rw-r--r--
PSARC 2011/165 OFUV update of existing components 7012194 Need to upgrade OFUV libraries and utilities to OFED 1.5.latest 7012718 Solaris OFED libraries need to be Zone aware 6979775 libibverbs should be DR capable 7039238 ofuv library functions should return fail not exit if no IB hardware found. 7045481 some text in the man page of ibdiagnet is messed up

diff -r -u /tmp/730054/qperf-0.4.6/src/socket.c qperf-0.4.6/src/socket.c
--- /tmp/730054/qperf-0.4.6/src/socket.c	Mon Aug 31 00:00:40 2009
+++ qperf-0.4.6/src/socket.c	Mon Nov  8 11:10:20 2010
@@ -44,7 +44,9 @@
 /*
  * Parameters.
  */
+#if !(defined(__SVR4) && defined(__sun))
 #define AF_INET_SDP 27                  /* Family for SDP */
+#endif
 
 
 /*
@@ -707,10 +709,16 @@
     ailist = getaddrinfo_port(serverflag ? 0 : ServerName, port, &hints);
     for (aip = ailist; aip; aip = aip->ai_next) {
         if (kind == K_SDP) {
+#if (defined(__SVR4) && defined(__sun))
+		aip->ai_family = AF_INET;
+		aip->ai_socktype = SOCK_STREAM;
+		aip->ai_protocol = PROTO_SDP;
+#else
             if (aip->ai_family == AF_INET || aip->ai_family == AF_INET6)
                 aip->ai_family = AF_INET_SDP;
             else
                 aip->ai_family = 0;
+#endif
         } else if (kind == K_SCTP) {
             if (aip->ai_protocol == IPPROTO_TCP)
                 aip->ai_protocol = IPPROTO_SCTP;
diff -r -u /tmp/730054/qperf-0.4.6/src/qperf.c qperf-0.4.6/src/qperf.c
--- /tmp/730054/qperf-0.4.6/src/qperf.c	Mon Aug 31 00:00:40 2009
+++ qperf-0.4.6/src/qperf.c	Mon Nov  8 11:10:17 2010
@@ -53,7 +53,19 @@
 #include <sys/utsname.h>
 #include "qperf.h"
 
+#if (defined(__SVR4) && defined(__sun))
+#include <sys/filio.h>
+#include <limits.h>	/* times() */
+#include <kstat.h>	/* libkstat */
+#include <sys/types.h>
+#include <sys/processor.h>
+#include <sys/procset.h>
+#include <strings.h>
+#include <infiniband/ofa_solaris.h>
 
+static kstat_ctl_t	*kc = NULL;	/* libkstat cookie */
+#endif
+
 /*
  * Configurable parameters.  If your change makes this version of qperf
  * incompatible with previous versions (usually a change to the Req structure),
@@ -224,7 +236,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);
-static char     *skip_colon(char *s);
+#if !(defined(__SVR4) && defined(__sun))
+static char    *skip_colon(char *s);
+#endif
 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 +271,9 @@
 static STAT     IStat;
 static int      ListenFD;
 static LOOP    *Loops;
+#if !(defined(__SVR4) && defined(__sun))
 static int      ProcStatFD;
+#endif
 static STAT     RStat;
 static int      ShowIndex;
 static SHOW     ShowTable[256];
@@ -601,6 +617,9 @@
     initialize();
     set_signals();
     do_args(&argv[1]);
+#if (defined(__SVR4) && defined(__sun))
+    (void) kstat_close(kc);
+#endif
     return 0;
 }
 
@@ -617,14 +636,24 @@
     for (i = 0; i < P_N; ++i)
         if (ParInfo[i].index != i)
             error(BUG, "initialize: ParInfo: out of order: %d", i);
+#if (defined(__SVR4) && defined(__sun))
+    while ((kc = kstat_open()) == NULL) {
+	if (errno == EAGAIN)
+	    (void) poll(NULL, 0, 200);
+	else
+	    error(SYS, "cannot open /dev/kstat");
+    }
+#else
     ProcStatFD = open("/proc/stat", 0);
     if (ProcStatFD < 0)
         error(SYS, "cannot open /proc/stat");
+#endif
     IStat.no_cpus = sysconf(_SC_NPROCESSORS_ONLN);
     IStat.no_ticks = sysconf(_SC_CLK_TCK);
 }
 
 
+#if !(defined(__SVR4) && defined(__sun))
 /*
  * Look for a colon and skip past it and any spaces.
  */
@@ -643,6 +672,7 @@
         s++;
     return s;
 }
+#endif
 
 
 /*
@@ -1667,13 +1697,18 @@
 {
     char count[STRSIZE];
     char speed[STRSIZE];
-    char buf[BUFSIZE];
     char cpu[BUFSIZE];
-    char mhz[BUFSIZE];
     int cpus = 0;
+#if !(defined(__SVR4) && defined(__sun))
+    char buf[BUFSIZE];
+    char mhz[BUFSIZE];
     int mixed = 0;
     FILE *fp = fopen("/proc/cpuinfo", "r");
+#else
+   sol_cpu_info_t	info;
+#endif
 
+#if !(defined(__SVR4) && defined(__sun))
     if (!fp)
         error(0, "cannot open /proc/cpuinfo");
     cpu[0] = '\0';
@@ -1732,6 +1767,7 @@
 
     /* CPU speed */
     speed[0] = '\0';
+
     if (!mixed) {
         int n = strlen(cpu);
         if (n < 3 || cpu[n-2] != 'H' || cpu[n-1] != 'z') {
@@ -1745,7 +1781,23 @@
             }
         }
     }
+#else
+    cpu[0] = '\0';
+    speed[0] = '\0';
 
+    if (!sol_get_cpu_info(&info)) {
+	(void) strcpy(cpu, info.cpu_name);
+	cpus = info.cpu_num;
+
+	if (info.cpu_mhz < 1000)
+		snprintf(speed, sizeof(speed), " %dMHz", info.cpu_mhz);
+	else
+		snprintf(speed, sizeof(speed), " %.1fGHz", info.cpu_mhz/1000.0);
+    } else {
+	return;
+    }
+#endif
+
     /* Number of CPUs */
     if (cpus == 1)
         count[0] = '\0';
@@ -2615,14 +2667,22 @@
 static void
 set_affinity(void)
 {
+#if !(defined(__SVR4) && defined(__sun))
     cpu_set_t set;
+#endif
     int a = Req.affinity;
 
     if (!a)
         return;
+
+#if defined(__SVR4) && defined(__sun)
+    if (processor_bind(P_LWPID, P_MYID, a-1, NULL) != 0)
+#else
+
     CPU_ZERO(&set);
     CPU_SET(a-1, &set);
     if (sched_setaffinity(0, sizeof(set), &set) < 0)
+#endif
         error(SYS, "cannot set processor affinity (cpu %d)", a-1);
 }
 
@@ -2771,9 +2831,74 @@
 /*
  * Get various temporal parameters.
  */
+#if (defined(__SVR4) && defined(__sun))
+
+#define	NSEC_TO_TICK(v)		(v * sysconf(_SC_CLK_TCK)/1000000000)
+
 static void
 get_times(CLOCK timex[T_N])
 {
+	struct tms tms;
+	size_t	i, nr_cpus;
+	kstat_t	*ksp;
+	kstat_named_t	*knp;
+	uint64_t	t_user = 0, t_kernel = 0, t_idle = 0;
+	uint64_t	t_irq = 0, t_iowait = 0;
+
+	timex[T_REAL] = times(&tms);
+
+	nr_cpus = sysconf(_SC_NPROCESSORS_ONLN);
+
+	/* Aggregate the value of all CPUs */
+	for (i = 0; i < nr_cpus; i++) {
+		ksp = kstat_lookup(kc, "cpu", i, "sys");
+		if (ksp == NULL)
+	        	return;
+
+		if (kstat_read(kc, ksp, NULL) == -1)
+	        	return;
+
+		knp = (kstat_named_t *)kstat_data_lookup(ksp, "cpu_ticks_user");
+		if (knp == NULL)
+			return;
+		t_user += knp->value.ui64;
+
+		knp = (kstat_named_t *)kstat_data_lookup(ksp,
+		    "cpu_ticks_kernel");
+		if (knp == NULL)
+			return;
+		t_kernel += knp->value.ui64;
+
+		knp = (kstat_named_t *)kstat_data_lookup(ksp, "cpu_ticks_idle");
+		if (knp == NULL)
+			return;
+		t_idle += knp->value.ui64;
+
+		knp = (kstat_named_t *)kstat_data_lookup(ksp, "cpu_ticks_wait");
+		if (knp == NULL)
+			return;
+		t_iowait += knp->value.ui64;
+
+		knp = (kstat_named_t *)kstat_data_lookup(ksp, "cpu_nsec_intr");
+		if (knp == NULL)
+			return;
+		t_irq += knp->value.ui64;	/* This is in NSEC */
+	}
+	timex[T_USER] = t_user;
+	timex[T_NICE] = 0;
+	timex[T_KERNEL] = t_kernel;
+	timex[T_IDLE] = t_idle;
+	timex[T_IOWAIT] = t_iowait;
+	timex[T_IRQ] = NSEC_TO_TICK(t_irq);	 /* NSEC_TO_TICK */
+	timex[T_SOFTIRQ] = 0;
+	timex[T_STEAL] = 0;
+}
+
+#else
+
+static void
+get_times(CLOCK timex[T_N])
+{
     int n;
     char *p;
     char buf[BUFSIZE];
@@ -2802,6 +2927,7 @@
     while (n < T_N)
         timex[n++] = 0;
 }
+#endif
 
 
 /*
diff -r -u /tmp/730054/qperf-0.4.6/src/rdma.c qperf-0.4.6/src/rdma.c
--- /tmp/730054/qperf-0.4.6/src/rdma.c	Mon Aug 31 00:00:40 2009
+++ qperf-0.4.6/src/rdma.c	Mon Nov  8 11:10:19 2010
@@ -37,7 +37,11 @@
 #include <errno.h>
 #include <stdio.h>
 #include <stdlib.h>
+#if (defined(__SVR4) && defined(__sun))
+#include <strings.h>
+#else
 #include <string.h>
+#endif
 #include <unistd.h>
 #include <netinet/in.h>
 #include <rdma/rdma_cma.h>
@@ -566,11 +570,15 @@
 void
 run_client_uc_bi_bw(void)
 {
+#if (defined(__SVR4) && defined(__sun))
+    error(RET, "UC Not Supported");
+#else
     par_use(L_ACCESS_RECV);
     par_use(R_ACCESS_RECV);
     rd_params(IBV_QPT_UC, K64, 1, 0);
     rd_bi_bw(IBV_QPT_UC);
     show_results(BANDWIDTH_SR);
+#endif
 }
 
 
@@ -580,7 +588,11 @@
 void
 run_server_uc_bi_bw(void)
 {
+#if (defined(__SVR4) && defined(__sun))
+    error(RET, "UC Not Supported");
+#else
     rd_bi_bw(IBV_QPT_UC);
+#endif
 }
 
 
@@ -590,6 +602,9 @@
 void
 run_client_uc_bw(void)
 {
+#if (defined(__SVR4) && defined(__sun))
+    error(RET, "UC Not Supported");
+#else
     par_use(L_ACCESS_RECV);
     par_use(R_ACCESS_RECV);
     par_use(L_NO_MSGS);
@@ -597,6 +612,7 @@
     rd_params(IBV_QPT_UC, K64, 1, 0);
     rd_client_bw(IBV_QPT_UC);
     show_results(BANDWIDTH_SR);
+#endif
 }
 
 
@@ -606,7 +622,11 @@
 void
 run_server_uc_bw(void)
 {
+#if (defined(__SVR4) && defined(__sun))
+    error(RET, "UC Not Supported");
+#else
     rd_server_def(IBV_QPT_UC);
+#endif
 }
 
 
@@ -616,8 +636,12 @@
 void
 run_client_uc_lat(void)
 {
+#if (defined(__SVR4) && defined(__sun))
+    error(RET, "UC Not Supported");
+#else
     rd_params(IBV_QPT_UC, 1, 1, 0);
     rd_pp_lat(IBV_QPT_UC, IO_SR);
+#endif
 }
 
 
@@ -627,7 +651,11 @@
 void
 run_server_uc_lat(void)
 {
+#if (defined(__SVR4) && defined(__sun))
+    error(RET, "UC Not Supported");
+#else
     rd_pp_lat(IBV_QPT_UC, IO_SR);
+#endif
 }
 
 
@@ -637,9 +665,13 @@
 void
 run_client_uc_rdma_write_bw(void)
 {
+#if (defined(__SVR4) && defined(__sun))
+    error(RET, "UC Not Supported");
+#else
     rd_params(IBV_QPT_UC, K64, 1, 0);
     rd_client_rdma_bw(IBV_QPT_UC, IBV_WR_RDMA_WRITE_WITH_IMM);
     show_results(BANDWIDTH_SR);
+#endif
 }
 
 
@@ -649,7 +681,11 @@
 void
 run_server_uc_rdma_write_bw(void)
 {
+#if (defined(__SVR4) && defined(__sun))
+    error(RET, "UC Not Supported");
+#else
     rd_server_def(IBV_QPT_UC);
+#endif
 }
 
 
@@ -659,8 +695,12 @@
 void
 run_client_uc_rdma_write_lat(void)
 {
+#if (defined(__SVR4) && defined(__sun))
+    error(RET, "UC Not Supported");
+#else
     rd_params(IBV_QPT_UC, 1, 1, 0);
     rd_pp_lat(IBV_QPT_UC, IO_RDMA);
+#endif
 }
 
 
@@ -670,7 +710,11 @@
 void
 run_server_uc_rdma_write_lat(void)
 {
+#if (defined(__SVR4) && defined(__sun))
+    error(RET, "UC Not Supported");
+#else
     rd_pp_lat(IBV_QPT_UC, IO_RDMA);
+#endif
 }
 
 
@@ -680,9 +724,13 @@
 void
 run_client_uc_rdma_write_poll_lat(void)
 {
+#if (defined(__SVR4) && defined(__sun))
+    error(RET, "UC Not Supported");
+#else
     rd_params(IBV_QPT_UC, 1, 1, 0);
     rd_rdma_write_poll_lat(IBV_QPT_UC);
     show_results(LATENCY);
+#endif
 }
 
 
@@ -692,7 +740,11 @@
 void
 run_server_uc_rdma_write_poll_lat(void)
 {
+#if (defined(__SVR4) && defined(__sun))
+    error(RET, "UC Not Supported");
+#else
     rd_rdma_write_poll_lat(IBV_QPT_UC);
+#endif
 }
 
 
diff -r -u /tmp/730054/qperf-0.4.6/src/rds.c qperf-0.4.6/src/rds.c
--- /tmp/730054/qperf-0.4.6/src/rds.c	Mon Aug 31 00:00:40 2009
+++ qperf-0.4.6/src/rds.c	Mon Nov  8 11:10:19 2010
@@ -44,6 +44,9 @@
 #include <netinet/in.h>
 #include "qperf.h"
 
+#if (defined(__SVR4) && defined(__sun))
+#include <sys/rds.h>
+#else
 
 /*
  * Parameters.
@@ -50,6 +53,7 @@
  */
 #define AF_INET_RDS 28                  /* Family for RDS */
 
+#endif
 
 /*
  * Function prototypes.
@@ -352,7 +356,11 @@
     SS sockaddr;
     socklen_t socklen;
 
+#if (defined(__SVR4) && defined(__sun))
+    sockfd = socket(PF_RDS, SOCK_SEQPACKET, 0);
+#else
     sockfd = socket(AF_INET_RDS, SOCK_SEQPACKET, 0);
+#endif
     if (sockfd < 0)
         error(SYS, "socket failed");
     setsockopt_one(sockfd, SO_REUSEADDR);
@@ -373,7 +381,11 @@
     struct sockaddr_in *sap = (struct sockaddr_in *)addr;
 
     memset(sap, 0, sizeof(*sap));
+#if (defined(__SVR4) && defined(__sun))
+    sap->sin_family = AF_INET_OFFLOAD;
+#else
     sap->sin_family = AF_INET;
+#endif
     inet_pton(AF_INET, host, &sap->sin_addr.s_addr);
     sap->sin_port = htons(port);
     *len = sizeof(struct sockaddr_in);
@@ -431,6 +443,14 @@
 
     if (getsockname(fd, (SA *)&sa, &salen) < 0)
         error(SYS, "getsockname failed");
+#if (defined(__SVR4) && defined(__sun))
+    /*
+     * getnameinfo() does not support AF_INET_OFFLOAD, so 
+     * use ss_family as AF_INET to get port info.
+     */ 
+    if (sa.ss_family == AF_INET_OFFLOAD)
+	sa.ss_family = AF_INET;
+#endif
     qgetnameinfo((SA *)&sa, salen, 0, 0, p, sizeof(p), NI_NUMERICSERV);
     port = atoi(p);
     if (!port)