From patchwork Fri Sep 3 16:43:11 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jim Schutt X-Patchwork-Id: 154611 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id o83Ghm0e023398 for ; Fri, 3 Sep 2010 16:43:59 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756421Ab0ICQnp (ORCPT ); Fri, 3 Sep 2010 12:43:45 -0400 Received: from sentry-three.sandia.gov ([132.175.109.17]:46356 "EHLO sentry-three.sandia.gov" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756422Ab0ICQnl (ORCPT ); Fri, 3 Sep 2010 12:43:41 -0400 X-WSS-ID: 0L86JSQ-0C-40T-02 X-M-MSG: Received: from sentry.sandia.gov (sentry.sandia.gov [132.175.109.21]) by sentry-three.sandia.gov (Postfix) with ESMTP id 1C2FE529C08; Fri, 3 Sep 2010 10:43:37 -0600 (MDT) Received: from [132.175.109.1] by sentry.sandia.gov with ESMTP (SMTP Relay 01 (Email Firewall v6.3.2)); Fri, 03 Sep 2010 10:43:31 -0600 X-Server-Uuid: 6BFC7783-7E22-49B4-B610-66D6BE496C0E Received: from localhost.localdomain (sale659.sandia.gov [134.253.4.20]) by mailgate.sandia.gov (8.14.4/8.14.4) with ESMTP id o83Gh6aj008533; Fri, 3 Sep 2010 10:43:22 -0600 From: "Jim Schutt" To: linux-rdma@vger.kernel.org cc: sashak@voltaire.com, "Jim Schutt" Subject: [PATCH v4 15/18] opensm: Make it possible to configure no fallback routing engine. Date: Fri, 3 Sep 2010 10:43:11 -0600 Message-ID: <1283532194-27112-16-git-send-email-jaschut@sandia.gov> X-Mailer: git-send-email 1.6.2.2 In-Reply-To: <1283532194-27112-1-git-send-email-jaschut@sandia.gov> References: <1283532194-27112-1-git-send-email-jaschut@sandia.gov> X-PMX-Version: 5.6.0.2009776, Antispam-Engine: 2.7.2.376379, Antispam-Data: 2010.9.3.163016 X-PMX-Spam: Gauge=IIIIIIII, Probability=8%, Report=' BODY_SIZE_4000_4999 0, BODY_SIZE_5000_LESS 0, BODY_SIZE_7000_LESS 0, DATE_TZ_NA 0, __HAS_MSGID 0, __HAS_X_MAILER 0, __MIME_TEXT_ONLY 0, __SANE_MSGID 0, __TO_MALFORMED_2 0, __TO_NO_NAME 0, __URI_NO_PATH 0, __URI_NO_WWW 0, __URI_NS ' X-TMWD-Spam-Summary: TS=20100903164334; ID=1; SEV=2.3.1; DFV=B2010090317; IFV=NA; AIF=B2010090317; RPD=5.03.0010; ENG=NA; RPDID=7374723D303030312E30413031303230332E34433831323542352E303144413A534346535441543838363133332C73733D312C6667733D30; CAT=NONE; CON=NONE; SIG=AAAAAAAAAAAAAAAAAAAAAAAAfQ== X-MMS-Spam-Filter-ID: B2010090317_5.03.0010 MIME-Version: 1.0 X-WSS-ID: 609FFA392JS1816532-01-01 Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter1.kernel.org [140.211.167.41]); Fri, 03 Sep 2010 16:43:59 +0000 (UTC) diff --git a/opensm/include/opensm/osm_subnet.h b/opensm/include/opensm/osm_subnet.h index fa3e46e..42ae416 100644 --- a/opensm/include/opensm/osm_subnet.h +++ b/opensm/include/opensm/osm_subnet.h @@ -219,6 +219,7 @@ typedef struct osm_subn_opt { osm_qos_options_t qos_rtr_options; boolean_t enable_quirks; boolean_t no_clients_rereg; + boolean_t no_fallback_routing_engine; #ifdef ENABLE_OSM_PERF_MGR boolean_t perfmgr; boolean_t perfmgr_redir; diff --git a/opensm/opensm/osm_opensm.c b/opensm/opensm/osm_opensm.c index a69b7bb..82aa987 100644 --- a/opensm/opensm/osm_opensm.c +++ b/opensm/opensm/osm_opensm.c @@ -159,6 +159,11 @@ static struct osm_routing_engine *setup_routing_engine(osm_opensm_t *osm, struct osm_routing_engine *re; const struct routing_engine_module *m; + if (!strcmp(name, "no_fallback")) { + osm->subn.opt.no_fallback_routing_engine = TRUE; + return NULL; + } + for (m = routing_modules; m->name && *m->name; m++) { if (!strcmp(m->name, name)) { re = malloc(sizeof(struct osm_routing_engine)); diff --git a/opensm/opensm/osm_qos.c b/opensm/opensm/osm_qos.c index 204c69c..ab55918 100644 --- a/opensm/opensm/osm_qos.c +++ b/opensm/opensm/osm_qos.c @@ -212,6 +212,12 @@ static int qos_extports_setup(osm_sm_t * sm, osm_node_t *node, unsigned in, out; uint8_t op_vl1; + /* + * Do nothing unless the most recent routing attempt was successful. + */ + if (!re) + return ret; + for (out = 1; out < num_ports; out++) { p = osm_node_get_physp_ptr(node, out); force_update = p->need_update || sm->p_subn->need_update; diff --git a/opensm/opensm/osm_ucast_mgr.c b/opensm/opensm/osm_ucast_mgr.c index 10629cb..d1c485f 100644 --- a/opensm/opensm/osm_ucast_mgr.c +++ b/opensm/opensm/osm_ucast_mgr.c @@ -1091,7 +1091,8 @@ int osm_ucast_mgr_process(IN osm_ucast_mgr_t * p_mgr) p_routing_eng = p_routing_eng->next; } - if (!p_osm->routing_engine_used) { + if (!p_osm->routing_engine_used && + p_osm->subn.opt.no_fallback_routing_engine != TRUE) { /* If configured routing algorithm failed, use default MinHop */ struct osm_routing_engine *r = p_osm->default_routing_engine; @@ -1101,14 +1102,20 @@ int osm_ucast_mgr_process(IN osm_ucast_mgr_t * p_mgr) osm_ucast_mgr_set_fwd_tables(p_mgr); } - OSM_LOG(p_mgr->p_log, OSM_LOG_INFO, - "%s tables configured on all switches\n", - osm_routing_engine_type_str(p_osm-> - routing_engine_used->type)); - - if (p_mgr->p_subn->opt.use_ucast_cache) - p_mgr->cache_valid = TRUE; + if (p_osm->routing_engine_used) { + OSM_LOG(p_mgr->p_log, OSM_LOG_INFO, + "%s tables configured on all switches\n", + osm_routing_engine_type_str(p_osm-> + routing_engine_used->type)); + if (p_mgr->p_subn->opt.use_ucast_cache) + p_mgr->cache_valid = TRUE; + } else { + p_mgr->p_subn->subnet_initialization_error = TRUE; + OSM_LOG(p_mgr->p_log, OSM_LOG_ERROR, + "No routing engine able to successfully configure " + " switch tables on current fabric\n"); + } Exit: CL_PLOCK_RELEASE(p_mgr->p_lock); OSM_LOG_EXIT(p_mgr->p_log);