@@ -113,6 +113,8 @@ static void vl15_poller(IN void *p_ptr)
osm_madw_t *p_madw;
osm_vl15_t *p_vl = p_ptr;
cl_qlist_t *p_fifo;
+ int32_t max_smps = p_vl->max_wire_smps;
+ int32_t max_wire_smps2 = 2 * max_smps; /* FIXME: make configurable */
OSM_LOG_ENTER(p_vl->p_log);
@@ -156,16 +158,21 @@ static void vl15_poller(IN void *p_ptr)
EVENT_NO_TIMEOUT, TRUE);
while (p_vl->p_stats->qp0_mads_outstanding_on_wire >=
- (int32_t) p_vl->max_wire_smps &&
+ max_smps &&
p_vl->thread_state == OSM_THREAD_STATE_RUN) {
status = cl_event_wait_on(&p_vl->signal,
EVENT_NO_TIMEOUT, TRUE);
- if (status != CL_SUCCESS) {
+ if (status == CL_TIMEOUT &&
+ max_smps < max_wire_smps2) {
+ max_smps++;
+ break;
+ } else if (status != CL_SUCCESS) {
OSM_LOG(p_vl->p_log, OSM_LOG_ERROR, "ERR 3E02: "
"Event wait failed (%s)\n",
CL_STATUS_MSG(status));
break;
}
+ max_smps = p_vl->max_wire_smps;
}
}