libibmad : submitting six patches on behalf of Oracle IB development
Hi Ira,
We (Oracle IB development) are submitting six patches against
libibmad
Please review our submission of changes.
Many thanks,
Boris
From 02fc55c756819cee8bdcfe6c192780bcbdbbfe5d Mon Sep 17 00:00:00 2001
From: Brendan Doyle <[email protected]>
Date: Fri, 1 Mar 2013 12:08:33 -0800
Subject: [PATCH] libibmad: Conversion specifier; %m is not supported on Solaris
--- src/rpc.c | 4 ++-- src/serv.c | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-)
src/rpc.c +2 -2
@@ -153,7 +153,7 @@ _do_madrpc(int port_id, void *sndbuf, void *rcvbuf, int agentid, int len, length = len;if (umad_send (port_id, agentid, sndbuf, length, timeout,0 ) <0 ) { -IBWARN ("send failed; %m" ); +IBWARN ("send failed; %s" ,strerror (errno));return -1 ; }
@@ -162,7 +162,7 @@ _do_madrpc(int port_id, void *sndbuf, void *rcvbuf, int agentid, int len, do { length = len; if (umad_recv(port_id, rcvbuf, &length, timeout) < 0) { - IBWARN("recv failed: %m"); + IBWARN("recv failed: %s", strerror(errno)); return -1; }
src/serv.c +4 -3
@@ -38,6 +38,7 @@#include <stdio.h> #include <stdlib.h> #include <string.h> +#include <errno.h> #include <infiniband/umad.h> #include <infiniband/mad.h>
@@ -75,7 +76,7 @@ int mad_send_via(ib_rpc_t * rpc, ib_portid_t * dport, ib_rmpp_hdr_t * rmpp,if (umad_send (srcport->port_id, srcport->class_agents[rpc->mgtclass &0xff ], umad,IB_MAD_SIZE ,mad_get_timeout (srcport, rpc->timeout),0 ) <0 ) { -IBWARN ("send failed; %m" ); +IBWARN ("send failed; %s" ,strerror (errno));return -1 ; }
@@ -157,7 +158,7 @@ int mad_respond_via(void *umad, ib_portid_t * portid, uint32_t rstatus,if (umad_send (srcport->port_id, srcport->class_agents[rpc.mgtclass], umad,IB_MAD_SIZE ,mad_get_timeout (srcport, rpc.timeout),0 ) <0 ) { -DEBUG ("send failed; %m" ); +DEBUG ("send failed; %s" ,strerror (errno));return -1 ; }
@@ -179,7 +180,7 @@ void *mad_receive_via(void *umad, int timeout, struct ibmad_port *srcport) mad_get_timeout(srcport, timeout))) < 0) {if (!umad)umad_free (mad); -DEBUG ("recv failed: %m" ); +DEBUG ("recv failed: %s" ,strerror (errno));return 0 ; }
Signature · 1 line
1.7.1
From a049380678565212ffa6519e80c187820cb0db08 Mon Sep 17 00:00:00 2001
From: Brendan Doyle <[email protected]>
Date: Fri, 1 Mar 2013 11:56:38 -0800
Subject: [PATCH] libibmad: Fixes for failures when not all ports of HCA are connected
--- src/resolve.c | 22 ++++++++++++++++++---- src/rpc.c | 1 + src/sa.c | 2 ++ 3 files changed, 21 insertions(+), 4 deletions(-)
src/resolve.c +18 -4
@@ -40,6 +40,7 @@#include <stdlib.h> #include <string.h> #include <arpa/inet.h> +#include <errno.h> #include <infiniband/umad.h> #include <infiniband/mad.h>
@@ -57,10 +58,18 @@ int ib_resolve_smlid_via(ib_portid_t * sm_id, int timeout,memset (sm_id,0 ,sizeof (*sm_id)); -if (!smp_query_via (portinfo, &self,IB_ATTR_PORT_INFO ,0 ,0 , srcport)) +if (!smp_query_via (portinfo, &self,IB_ATTR_PORT_INFO ,0 ,0 , srcport)) { +if (!errno) + errno =EIO ;return -1 ; + }mad_decode_field (portinfo,IB_PORT_SMLID_F , &lid); +if (lid ==0 ) { +if (!errno) + errno =EIO ; +return -1 ; + }mad_decode_field (portinfo,IB_PORT_SMSL_F , &sm_id->sl);return ib_portid_set (sm_id, lid,0 ,0 );
@@ -95,21 +104,26 @@ int ib_resolve_guid_via(ib_portid_t * portid, uint64_t * guid, ib_portid_t * sm_id, int timeout, const struct ibmad_port *srcport) { - ib_portid_t sm_portid; + ib_portid_t sm_portid = { 0 };uint8_t buf[IB_SA_DATA_SIZE ] = {0 };ib_portid_t self = {0 };uint64_t selfguid, prefix;ibmad_gid_t selfgid;uint8_t nodeinfo[64 ]; -if (!sm_id) { +if (!sm_id) sm_id = &sm_portid; + +if (!sm_id->lid) {if (ib_resolve_smlid_via (sm_id, timeout, srcport) <0 )return -1 ; } -if (!smp_query_via (nodeinfo, &self,IB_ATTR_NODE_INFO ,0 ,0 , srcport)) +if (!smp_query_via (nodeinfo, &self,IB_ATTR_NODE_INFO ,0 ,0 , srcport)) { +if (!errno) + errno =EIO ;return -1 ; + }mad_decode_field (nodeinfo,IB_NODE_PORT_GUID_F , &selfguid);mad_set_field64 (selfgid,0 ,IB_GID_PREFIX_F ,IB_DEFAULT_SUBN_PREFIX );mad_set_field64 (selfgid,0 ,IB_GID_GUID_F , selfguid);
src/rpc.c +1 -0
@@ -178,6 +178,7 @@ _do_madrpc(int port_id, void *sndbuf, void *rcvbuf, int agentid, int len, IB_MAD_TRID_F) != trid); status =umad_status (rcvbuf); + errno = status;if (!status)return length;/* done */ if (status ==ENOMEM )
src/sa.c +2 -0
@@ -38,6 +38,7 @@#include <stdio.h> #include <stdlib.h> #include <string.h> +#include <errno.h> #include <infiniband/mad.h> #include "mad_internal.h"
@@ -56,6 +57,7 @@ uint8_t *sa_rpc_call(const struct ibmad_port *ibmad_port, void *rcvbuf,if (portid->lid <=0 ) {IBWARN ("only lid routes are supported" ); + errno =EIO ;return NULL ; }
Signature · 1 line
1.7.1
From 10777e75ff9f01f70ed2537667a4797c3b30cc1d Mon Sep 17 00:00:00 2001
From: Brendan Doyle <[email protected]>
Date: Fri, 1 Mar 2013 11:32:45 -0800
Subject: [PATCH] libibmad: To fix big endian problem for both 32-bit & 64-bit SPARC
--- src/dump.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 57 insertions(+), 9 deletions(-)
src/dump.c +57 -9
108 lines not on this page · raw message
Signature · 1 line
1.7.1
From 752534aab51380d72d77bcab6f38673ab01dda20 Mon Sep 17 00:00:00 2001
From: Brendan Doyle <[email protected]>
Date: Fri, 1 Mar 2013 12:18:45 -0800
Subject: [PATCH] libibmad: To fix compilation warning: need typecasts
--- include/infiniband/mad.h | 12 ++++++++---- src/fields.c | 8 ++++---- 2 files changed, 12 insertions(+), 8 deletions(-)
include/infiniband/mad.h +8 -4
@@ -1655,14 +1655,18 @@ static inline uint64_t htonll(uint64_t x)#define ALIGN (l, size) (((l) + ((size) - 1)) / (size) * (size))/** printf style warning MACRO, includes name of function and pid */ -#define IBWARN (fmt, ...) fprintf(stderr, "ibwarn: [%d] %s: " fmt "\n", getpid(), __func__, ## __VA_ARGS__) +#define IBWARN (fmt, ...) fprintf(stderr, "ibwarn: [%d] %s: " fmt "\n", \ +(int)getpid(), __func__, ## __VA_ARGS__) -#define IBDEBUG (fmt, ...) fprintf(stdout, "ibdebug: [%d] %s: " fmt "\n", getpid(), __func__, ## __VA_ARGS__) +#define IBDEBUG (fmt, ...) fprintf(stdout, "ibdebug: [%d] %s: " fmt "\n", \ +(int)getpid(), __func__, ## __VA_ARGS__) -#define IBVERBOSE (fmt, ...) fprintf(stdout, "[%d] %s: " fmt "\n", getpid(), __func__, ## __VA_ARGS__) +#define IBVERBOSE (fmt, ...) fprintf(stdout, "[%d] %s: " fmt "\n", \ +(int)getpid(), __func__, ## __VA_ARGS__)#define IBPANIC (fmt, ...) do { \ - fprintf(stderr, "ibpanic: [%d] %s: " fmt ": %m\n", getpid(), __func__, ## __VA_ARGS__); \ + fprintf(stderr, "ibpanic: [%d] %s: " fmt ": %m\n", \ + (int)getpid(), __func__, ## __VA_ARGS__); \ exit(-1); \ } while(0)
src/fields.c +4 -4
@@ -959,15 +959,15 @@ static void _set_field64(void *buf, int base_offs, const ib_field_t * f,uint64_t nval; nval =htonll (val); -memcpy ((char *)buf + base_offs + f->bitoffs /8 , &nval, -sizeof (uint64_t )); +memcpy (((void *)(char *)buf + base_offs + f->bitoffs /8 ), + (void *)&nval,sizeof (uint64_t )); }static uint64_t _get_field64 (void *buf,int base_offs,const ib_field_t * f) {uint64_t val; -memcpy (&val, ((char *)buf + base_offs + f->bitoffs /8 ), -sizeof (uint64_t )); +memcpy ((void *)&val, (void *)((char *)buf + base_offs + f->bitoffs /8 ), +sizeof (uint64_t ));return ntohll (val); }
Signature · 1 line
1.7.1
From 6d84f42e0865bca646060d23ba0f3c70295d2a7e Mon Sep 17 00:00:00 2001
From: Brendan Doyle <[email protected]>
Date: Fri, 1 Mar 2013 12:12:43 -0800
Subject: [PATCH] libibmad: To handle null dev_name in madrpc_init
--- src/rpc.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-)
src/rpc.c +2 -1
@@ -360,7 +360,8 @@ madrpc_init(char *dev_name, int dev_port, int *mgmt_classes, int num_classes)IBPANIC ("can't init UMAD library" );if ((fd =umad_open_port (dev_name, dev_port)) <0 ) -IBPANIC ("can't open UMAD port (%s:%d)" , dev_name, dev_port); +IBPANIC ("can't open UMAD port (%s:%d)" , + dev_name ? dev_name :"(nil)" , dev_port);if (num_classes >=MAX_CLASS )IBPANIC ("too many classes %d requested" , num_classes);
Signature · 1 line
1.7.1
From 42b18c6c33e774b399753504a447b0022f0315df Mon Sep 17 00:00:00 2001
From: Brendan Doyle <[email protected]>
Date: Fri, 1 Mar 2013 12:16:09 -0800
Subject: [PATCH] libibmad: To reserve upper 8 bits of tid used by solaris SRIOV driver
--- src/mad.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-)
src/mad.c +3 -0
@@ -62,6 +62,9 @@ uint64_t mad_trid(void) trid =random (); } next = ++trid | (base <<32 ); +#if defined(__SVR4) && defined(__sun) + next &=0x00ffffffffffffff ; +#endif return next; }
Signature · 1 line
1.7.1