From owner-svn-src-projects@FreeBSD.ORG Wed Nov 23 20:01:35 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7EA8C106564A; Wed, 23 Nov 2011 20:01:35 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 6E9478FC14; Wed, 23 Nov 2011 20:01:35 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pANK1ZBe060856; Wed, 23 Nov 2011 20:01:35 GMT (envelope-from delphij@svn.freebsd.org) Received: (from delphij@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id pANK1Za3060854; Wed, 23 Nov 2011 20:01:35 GMT (envelope-from delphij@svn.freebsd.org) Message-Id: <201111232001.pANK1Za3060854@svn.freebsd.org> From: Xin LI Date: Wed, 23 Nov 2011 20:01:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r227905 - projects/head_mfi/sys/dev/mfi X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 23 Nov 2011 20:01:35 -0000 Author: delphij Date: Wed Nov 23 20:01:35 2011 New Revision: 227905 URL: http://svn.freebsd.org/changeset/base/227905 Log: Apply a different approach for the timeout from Scott Long. Instead of doing the (expensive) dummy read and do nothing with the result, move it to the end of the interrupt handler, and restart the interrupt handler if we see more pending job to do. Modified: projects/head_mfi/sys/dev/mfi/mfi.c Modified: projects/head_mfi/sys/dev/mfi/mfi.c ============================================================================== --- projects/head_mfi/sys/dev/mfi/mfi.c Wed Nov 23 19:38:32 2011 (r227904) +++ projects/head_mfi/sys/dev/mfi/mfi.c Wed Nov 23 20:01:35 2011 (r227905) @@ -1230,12 +1230,7 @@ mfi_intr(void *arg) if (sc->mfi_check_clear_intr(sc)) return; - /* - * Do a dummy read to flush the interrupt ACK that we just performed, - * ensuring that everything is really, truly consistent. - */ - (void)sc->mfi_read_fw_status(sc); - +restart: pi = sc->mfi_comms->hw_pi; ci = sc->mfi_comms->hw_ci; mtx_lock(&sc->mfi_io_lock); @@ -1260,6 +1255,14 @@ mfi_intr(void *arg) mfi_startio(sc); mtx_unlock(&sc->mfi_io_lock); + /* + * Dummy read to flush the bus; this ensures that the indexes are up + * to date. Restart processing if more commands have come it. + */ + (void)sc->mfi_read_fw_status(sc); + if (pi != sc->mfi_comms->hw_pi) + goto restart; + return; }