From: Ira Weiny <wei...@llnl.gov>
Date: Thu, 6 Aug 2009 15:27:30 -0700
Subject: [PATCH] libibmad: make accessors function for retry values used in 
libibmad

        In addition use this function to determine the retries used throughout 
the library.

Signed-off-by: Ira Weiny <wei...@llnl.gov>
---
 libibmad/include/infiniband/mad.h |    1 +
 libibmad/src/libibmad.map         |    1 +
 libibmad/src/mad.c                |    5 +++++
 libibmad/src/mad_internal.h       |    1 +
 libibmad/src/rpc.c                |   12 +++---------
 5 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/libibmad/include/infiniband/mad.h 
b/libibmad/include/infiniband/mad.h
index c5d73d5..0d0dcf1 100644
--- a/libibmad/include/infiniband/mad.h
+++ b/libibmad/include/infiniband/mad.h
@@ -804,6 +804,7 @@ MAD_EXPORT void mad_rpc_set_timeout(struct ibmad_port 
*port, int timeout);
 MAD_EXPORT int mad_rpc_class_agent(struct ibmad_port *srcport, int cls);
 
 MAD_EXPORT int mad_get_timeout(struct ibmad_port *srcport, int override_ms);
+MAD_EXPORT int mad_get_retries(struct ibmad_port *srcport);
 
 
 /* register.c */
diff --git a/libibmad/src/libibmad.map b/libibmad/src/libibmad.map
index a8605b5..b9a890c 100644
--- a/libibmad/src/libibmad.map
+++ b/libibmad/src/libibmad.map
@@ -71,6 +71,7 @@ IBMAD_1.3 {
                mad_rpc_set_retries;
                mad_rpc_set_timeout;
                mad_get_timeout;
+               mad_get_retries;
                madrpc;
                madrpc_def_timeout;
                madrpc_init;
diff --git a/libibmad/src/mad.c b/libibmad/src/mad.c
index bc64a0f..7192dd6 100644
--- a/libibmad/src/mad.c
+++ b/libibmad/src/mad.c
@@ -70,6 +70,11 @@ int mad_get_timeout(struct ibmad_port *srcport, int 
override_ms)
            srcport->timeout ? srcport->timeout : madrpc_timeout);
 }
 
+int mad_get_retries(struct ibmad_port *srcport)
+{
+       return (srcport->retries ? srcport->retries : madrpc_retries);
+}
+
 void *mad_encode(void *buf, ib_rpc_t * rpc, ib_dr_path_t * drpath, void *data)
 {
        int is_resp = rpc->method & IB_MAD_RESPONSE;
diff --git a/libibmad/src/mad_internal.h b/libibmad/src/mad_internal.h
index 7a16a46..475adfc 100644
--- a/libibmad/src/mad_internal.h
+++ b/libibmad/src/mad_internal.h
@@ -44,5 +44,6 @@ struct ibmad_port {
 
 extern struct ibmad_port *ibmp;
 extern int madrpc_timeout;
+extern int madrpc_retries;
 
 #endif /* _MAD_INTERNAL_H_ */
diff --git a/libibmad/src/rpc.c b/libibmad/src/rpc.c
index bb83114..b5e4441 100644
--- a/libibmad/src/rpc.c
+++ b/libibmad/src/rpc.c
@@ -53,9 +53,9 @@ struct ibmad_port *ibmp = &mad_port;
 
 static int iberrs;
 
+int madrpc_retries = MAD_DEF_RETRIES;
 int madrpc_timeout = MAD_DEF_TIMEOUT_MS;
 
-static int madrpc_retries = MAD_DEF_RETRIES;
 static void *save_mad;
 static int save_mad_len = 256;
 
@@ -211,7 +211,6 @@ void *mad_rpc(const struct ibmad_port *port, ib_rpc_t * rpc,
 {
        int status, len;
        uint8_t sndbuf[1024], rcvbuf[1024], *mad;
-       int retries;
        int redirect = 1;
 
        while (redirect) {
@@ -221,12 +220,10 @@ void *mad_rpc(const struct ibmad_port *port, ib_rpc_t * 
rpc,
                if ((len = mad_build_pkt(sndbuf, rpc, dport, 0, payload)) < 0)
                        return NULL;
 
-               retries = port->retries ? port->retries : madrpc_retries;
-
                if ((len = _do_madrpc(port->port_id, sndbuf, rcvbuf,
                                      port->class_agents[rpc->mgtclass],
                                      len, mad_get_timeout(port, rpc->timeout),
-                                     retries)) < 0) {
+                                     mad_get_retries(port))) < 0) {
                        IBWARN("_do_madrpc failed; dport (%s)", 
portid2str(dport));
                        return NULL;
                }
@@ -267,7 +264,6 @@ void *mad_rpc_rmpp(const struct ibmad_port *port, ib_rpc_t 
* rpc,
 {
        int status, len;
        uint8_t sndbuf[1024], rcvbuf[1024], *mad;
-       int retries;
 
        memset(sndbuf, 0, umad_size() + IB_MAD_SIZE);
 
@@ -276,12 +272,10 @@ void *mad_rpc_rmpp(const struct ibmad_port *port, 
ib_rpc_t * rpc,
        if ((len = mad_build_pkt(sndbuf, rpc, dport, rmpp, data)) < 0)
                return NULL;
 
-       retries = port->retries ? port->retries : madrpc_retries;
-
        if ((len = _do_madrpc(port->port_id, sndbuf, rcvbuf,
                              port->class_agents[rpc->mgtclass],
                              len, mad_get_timeout(port, rpc->timeout),
-                             retries)) < 0) {
+                             mad_get_retries(port))) < 0) {
                IBWARN("_do_madrpc failed; dport (%s)", portid2str(dport));
                return NULL;
        }
-- 
1.5.4.5

_______________________________________________
general mailing list
general@lists.openfabrics.org
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to