libibnetdisc: Convert to a multi-smp algorithm
PATCH 1/2 libibnetdisc: Convert to a multi-smp algorithm
From: Ira Weiny <[email protected]>
Date: Fri, 22 Jan 2010 17:33:30 -0800
Subject: [PATCH] libibnetdisc: Convert to a multi-smp algorithm
Allow for multiple SMP's to be on the wire at a single time. This algorithm splits the processing of SMP's to a small smp engine which may be useful to split out in the future.
Signed-off-by Ira Weiny <[email protected]>
--- infiniband-diags/libibnetdisc/Makefile.am | 2 +- infiniband-diags/libibnetdisc/src/ibnetdisc.c | 626 ++++++++++--------------- infiniband-diags/libibnetdisc/src/internal.h | 39 ++- infiniband-diags/libibnetdisc/src/query_smp.c | 249 ++++++++++ 4 files changed, 535 insertions(+), 381 deletions(-) create mode 100644 infiniband-diags/libibnetdisc/src/query_smp.c
infiniband-diags/libibnetdisc/Makefile.am +1 -1
@@ -23,7 +23,7 @@ libibnetdisc_version_script = endif libibnetdisc_la_SOURCES = src/ibnetdisc.c src/ibnetdisc_cache.c src/chassis.c \ - src/chassis.h src/internal.h + src/chassis.h src/internal.h src/query_smp.c libibnetdisc_la_CFLAGS = -Wall $(DBGFLAGS) libibnetdisc_la_LDFLAGS = -version-info $(ibnetdisc_api_version) \ -export-dynamic $(libibnetdisc_version_script) \
infiniband-diags/libibnetdisc/src/ibnetdisc.c +251 -375
717 lines not on this page · raw message
infiniband-diags/libibnetdisc/src/internal.h +34 -5
@@ -39,6 +39,7 @@#define _INTERNAL_H_#include <infiniband/ibnetdisc.h> +#include <complib/cl_qmap.h> #define IBND_DEBUG (fmt, ...) \ if (ibdebug) { \
@@ -52,16 +53,44 @@#define MAXHOPS 63 -typedef struct ibnd_node_scan { -ibnd_node_t *node; -struct ibnd_node_scan *dnext;/* nodesdist next */ -}ibnd_node_scan_t ; +#define DEFAULT_MAX_SMP_ON_WIRE 4typedef struct ibnd_scan { -ibnd_node_scan_t *nodesdist[MAXHOPS +1 ];ib_portid_t selfportid; +ibnd_fabric_t *fabric; }ibnd_scan_t ; + +typedef struct ibnd_smp ibnd_smp_t ; +typedef struct smp_engine smp_engine_t ; +typedef int (*smp_comp_cb_t )(smp_engine_t *engine,ibnd_smp_t * smp, +uint8_t *mad_resp,void *cb_data); +struct ibnd_smp { +cl_map_item_t on_wire; +struct ibnd_smp * qnext; +smp_comp_cb_t cb; +void * cb_data; +ib_portid_t path; +ib_rpc_t rpc; +}; +struct smp_engine { +struct ibmad_port *ibmad_port; +ibnd_smp_t *smp_queue_head; +ibnd_smp_t *smp_queue_tail; +void * user_data; +cl_qmap_t smps_on_wire; +int num_smps_outstanding; +int max_smps_on_wire; +}; + +void smp_engine_init (smp_engine_t * engine,struct ibmad_port *ibmad_port, +void * user_data,int max_smps_on_wire); +int issue_smp (smp_engine_t *engine,ib_portid_t * portid, +unsigned attrid,unsigned mod, +smp_comp_cb_t cb,void * cb_data); +int process_mads (smp_engine_t *engine); +void smp_engine_destroy (smp_engine_t *engine); +void add_to_nodeguid_hash (ibnd_node_t * node,ibnd_node_t * hash[]);void add_to_portguid_hash (ibnd_port_t * port,ibnd_port_t * hash[]);
infiniband-diags/libibnetdisc/src/query_smp.c new file +249 -0
249 lines not on this page · raw message
Signature · 6 lines
1.5.4.5 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html