From patchwork Tue Oct 20 13:41:17 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hal Rosenstock X-Patchwork-Id: 54953 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n9KDgfdP017352 for ; Tue, 20 Oct 2009 13:42:41 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751351AbZJTNmg (ORCPT ); Tue, 20 Oct 2009 09:42:36 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751933AbZJTNmf (ORCPT ); Tue, 20 Oct 2009 09:42:35 -0400 Received: from qmta09.westchester.pa.mail.comcast.net ([76.96.62.96]:38141 "EHLO QMTA09.westchester.pa.mail.comcast.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751351AbZJTNmf (ORCPT ); Tue, 20 Oct 2009 09:42:35 -0400 Received: from OMTA09.westchester.pa.mail.comcast.net ([76.96.62.20]) by QMTA09.westchester.pa.mail.comcast.net with comcast id v0Rl1c0020SCNGk591igoe; Tue, 20 Oct 2009 13:42:40 +0000 Received: from hal.comcast.net ([75.69.247.31]) by OMTA09.westchester.pa.mail.comcast.net with comcast id v1if1c00C0hNrtn3V1ifkr; Tue, 20 Oct 2009 13:42:40 +0000 Received: from hal.comcast.net (localhost.localdomain [127.0.0.1]) by hal.comcast.net (8.14.3/8.14.3) with ESMTP id n9KDfYO6005487; Tue, 20 Oct 2009 09:41:39 -0400 Received: (from hnrose@localhost) by hal.comcast.net (8.14.3/8.14.3/Submit) id n9KDfHwv005456; Tue, 20 Oct 2009 09:41:17 -0400 Date: Tue, 20 Oct 2009 09:41:17 -0400 From: Hal Rosenstock To: sashak@voltaire.com Cc: linux-rdma@vger.kernel.org Subject: [PATCH] opensm/osm_vl15intf.c: In vl15_poller, drain unicast even if max_wire_smps are outstanding Message-ID: <20091020134117.GB5440@comcast.net> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.19 (2009-01-05) Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org diff --git a/opensm/opensm/osm_vl15intf.c b/opensm/opensm/osm_vl15intf.c index 9e43a9c..07a2336 100644 --- a/opensm/opensm/osm_vl15intf.c +++ b/opensm/opensm/osm_vl15intf.c @@ -2,6 +2,7 @@ * Copyright (c) 2004-2008 Voltaire, Inc. All rights reserved. * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved. * Copyright (c) 1996-2003 Intel Corporation. All rights reserved. + * Copyright (c) 2009 HNR Consulting. All rights reserved. * * This software is available to you under a choice of one of two * licenses. You may choose to be licensed under the terms of the GNU @@ -115,6 +116,7 @@ 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; + uint32_t ufifo_count = 0; OSM_LOG_ENTER(p_vl->p_log); @@ -132,10 +134,15 @@ static void vl15_poller(IN void *p_ptr) */ cl_spinlock_acquire(&p_vl->lock); - if (cl_qlist_count(&p_vl->ufifo) != 0) + if (ufifo_count) p_fifo = &p_vl->ufifo; - else - p_fifo = &p_vl->rfifo; + else { + ufifo_count = cl_qlist_count(&p_vl->ufifo); + if (ufifo_count != 0) + p_fifo = &p_vl->ufifo; + else + p_fifo = &p_vl->rfifo; + } p_madw = (osm_madw_t *) cl_qlist_remove_head(p_fifo); @@ -157,7 +164,14 @@ static void vl15_poller(IN void *p_ptr) status = cl_event_wait_on(&p_vl->signal, EVENT_NO_TIMEOUT, TRUE); - while (p_vl->p_stats->qp0_mads_outstanding_on_wire >= + if (ufifo_count) { + cl_spinlock_acquire(&p_vl->lock); + ufifo_count = cl_qlist_count(&p_vl->ufifo); + cl_spinlock_release(&p_vl->lock); + } + + while (!ufifo_count && + p_vl->p_stats->qp0_mads_outstanding_on_wire >= (int32_t) p_vl->max_wire_smps && p_vl->thread_state == OSM_THREAD_STATE_RUN) { status = cl_event_wait_on(&p_vl->signal,