From patchwork Wed Mar 10 18:06:53 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jim Schutt X-Patchwork-Id: 84661 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter.kernel.org (8.14.3/8.14.3) with ESMTP id o2AI7eZW024931 for ; Wed, 10 Mar 2010 18:07:48 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932631Ab0CJSHr (ORCPT ); Wed, 10 Mar 2010 13:07:47 -0500 Received: from sentry-three.sandia.gov ([132.175.109.17]:52257 "EHLO sentry-three.sandia.gov" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932602Ab0CJSHm (ORCPT ); Wed, 10 Mar 2010 13:07:42 -0500 X-WSS-ID: 0KZ2VOP-0C-MML-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 1C69C4D567D; Wed, 10 Mar 2010 11:07:36 -0700 (MST) Received: from [132.175.109.1] by sentry.sandia.gov with ESMTP (SMTP Relay 01 (Email Firewall v6.3.2)); Wed, 10 Mar 2010 11:07:31 -0700 X-Server-Uuid: AF72F651-81B1-4134-BA8C-A8E1A4E620FF Received: from localhost.localdomain (jast01.sandia.gov [134.253.4.112]) by mailgate.sandia.gov (8.14.1/8.14.1) with ESMTP id o2AI7OpM016900; Wed, 10 Mar 2010 11:07:30 -0700 From: "Jim Schutt" To: linux-rdma@vger.kernel.org cc: sashak@voltaire.com, eitan@mellanox.co.il, jaschut@sandia.gov Subject: [PATCH v2 12/15] opensm: Make it possible to configure no fallback routing engine. Date: Wed, 10 Mar 2010 11:06:53 -0700 Message-ID: <1268244416-20351-12-git-send-email-jaschut@sandia.gov> X-Mailer: git-send-email 1.6.6.1 In-Reply-To: <1268244416-20351-1-git-send-email-jaschut@sandia.gov> References: <1268244416-20351-1-git-send-email-jaschut@sandia.gov> X-PMX-Version: 5.5.9.388399, Antispam-Engine: 2.7.2.376379, Antispam-Data: 2010.3.10.175422 X-PerlMx-Spam: Gauge=IIIIIIII, Probability=8%, Report=' BODY_SIZE_4000_4999 0, BODY_SIZE_5000_LESS 0, BODY_SIZE_7000_LESS 0, TO_NO_NAME 0, __HAS_MSGID 0, __HAS_X_MAILER 0, __MIME_TEXT_ONLY 0, __SANE_MSGID 0, __TO_MALFORMED_2 0, __URI_NO_PATH 0, __URI_NO_WWW 0, __URI_NS ' X-TMWD-Spam-Summary: TS=20100310180732; ID=1; SEV=2.3.1; DFV=B2010031017; IFV=NA; AIF=B2010031017; RPD=5.03.0010; ENG=NA; RPDID=7374723D303030312E30413031303230332E34423937444645342E303038323A534346535441543838363133332C73733D312C6667733D30; CAT=NONE; CON=NONE; SIG=AAAAAAAAAAAAAAAAAAAAAAAAfQ== X-MMS-Spam-Filter-ID: B2010031017_5.03.0010 MIME-Version: 1.0 X-WSS-ID: 678900690JG908659-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 (demeter.kernel.org [140.211.167.41]); Wed, 10 Mar 2010 18:07:48 +0000 (UTC) diff --git a/opensm/include/opensm/osm_subnet.h b/opensm/include/opensm/osm_subnet.h index d2d9661..bd5b6f5 100644 --- a/opensm/include/opensm/osm_subnet.h +++ b/opensm/include/opensm/osm_subnet.h @@ -216,6 +216,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 10d3af5..4b2b971 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 d78531b..8a26008 100644 --- a/opensm/opensm/osm_qos.c +++ b/opensm/opensm/osm_qos.c @@ -211,6 +211,12 @@ static int qos_extports_setup(osm_sm_t * sm, osm_node_t *node, int ret = 0; unsigned i, j; + /* + * Do nothing unless the most recent routing attempt was successful. + */ + if (!re) + return ret; + for (i = 1; i < num_ports; i++) { p = osm_node_get_physp_ptr(node, i); 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 dd6568f..d7a4a8c 100644 --- a/opensm/opensm/osm_ucast_mgr.c +++ b/opensm/opensm/osm_ucast_mgr.c @@ -977,7 +977,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; @@ -987,14 +988,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);