From owner-svn-src-head@FreeBSD.ORG Tue Dec 18 21:50:49 2012 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 71D10F9B; Tue, 18 Dec 2012 21:50:49 +0000 (UTC) (envelope-from jimharris@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 550D48FC24; Tue, 18 Dec 2012 21:50:49 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.5/8.14.5) with ESMTP id qBILonjP036260; Tue, 18 Dec 2012 21:50:49 GMT (envelope-from jimharris@svn.freebsd.org) Received: (from jimharris@localhost) by svn.freebsd.org (8.14.5/8.14.5/Submit) id qBILomNf036256; Tue, 18 Dec 2012 21:50:48 GMT (envelope-from jimharris@svn.freebsd.org) Message-Id: <201212182150.qBILomNf036256@svn.freebsd.org> From: Jim Harris Date: Tue, 18 Dec 2012 21:50:48 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r244410 - head/sys/dev/nvme X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 18 Dec 2012 21:50:49 -0000 Author: jimharris Date: Tue Dec 18 21:50:48 2012 New Revision: 244410 URL: http://svnweb.freebsd.org/changeset/base/244410 Log: Do not use taskqueue to defer completion work when using INTx. INTx now matches MSI-X behavior. Sponsored by: Intel Modified: head/sys/dev/nvme/nvme.c head/sys/dev/nvme/nvme_ctrlr.c head/sys/dev/nvme/nvme_private.h Modified: head/sys/dev/nvme/nvme.c ============================================================================== --- head/sys/dev/nvme/nvme.c Tue Dec 18 21:42:45 2012 (r244409) +++ head/sys/dev/nvme/nvme.c Tue Dec 18 21:50:48 2012 (r244410) @@ -298,11 +298,6 @@ nvme_detach (device_t dev) struct nvme_namespace *ns; int i; - if (ctrlr->taskqueue) { - taskqueue_drain(ctrlr->taskqueue, &ctrlr->task); - taskqueue_free(ctrlr->taskqueue); - } - for (i = 0; i < NVME_MAX_NAMESPACES; i++) { ns = &ctrlr->ns[i]; if (ns->cdev) Modified: head/sys/dev/nvme/nvme_ctrlr.c ============================================================================== --- head/sys/dev/nvme/nvme_ctrlr.c Tue Dec 18 21:42:45 2012 (r244409) +++ head/sys/dev/nvme/nvme_ctrlr.c Tue Dec 18 21:50:48 2012 (r244410) @@ -619,10 +619,12 @@ err: } static void -nvme_ctrlr_intx_task(void *arg, int pending) +nvme_ctrlr_intx_handler(void *arg) { struct nvme_controller *ctrlr = arg; + nvme_mmio_write_4(ctrlr, intms, 1); + nvme_qpair_process_completions(&ctrlr->adminq); if (ctrlr->ioq[0].cpl) @@ -631,15 +633,6 @@ nvme_ctrlr_intx_task(void *arg, int pend nvme_mmio_write_4(ctrlr, intmc, 1); } -static void -nvme_ctrlr_intx_handler(void *arg) -{ - struct nvme_controller *ctrlr = arg; - - nvme_mmio_write_4(ctrlr, intms, 1); - taskqueue_enqueue_fast(ctrlr->taskqueue, &ctrlr->task); -} - static int nvme_ctrlr_configure_intx(struct nvme_controller *ctrlr) { @@ -665,12 +658,6 @@ nvme_ctrlr_configure_intx(struct nvme_co return (ENOMEM); } - TASK_INIT(&ctrlr->task, 0, nvme_ctrlr_intx_task, ctrlr); - ctrlr->taskqueue = taskqueue_create_fast("nvme_taskq", M_NOWAIT, - taskqueue_thread_enqueue, &ctrlr->taskqueue); - taskqueue_start_threads(&ctrlr->taskqueue, 1, PI_NET, - "%s intx taskq", device_get_nameunit(ctrlr->dev)); - return (0); } Modified: head/sys/dev/nvme/nvme_private.h ============================================================================== --- head/sys/dev/nvme/nvme_private.h Tue Dec 18 21:42:45 2012 (r244409) +++ head/sys/dev/nvme/nvme_private.h Tue Dec 18 21:50:48 2012 (r244410) @@ -36,7 +36,6 @@ #include #include #include -#include #include @@ -222,8 +221,6 @@ struct nvme_controller { int rid; struct resource *res; void *tag; - struct task task; - struct taskqueue *taskqueue; bus_dma_tag_t hw_desc_tag; bus_dmamap_t hw_desc_map;