From patchwork Wed Nov 7 10:18:13 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wanlong Gao X-Patchwork-Id: 1709841 Return-Path: X-Original-To: patchwork-kvm@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork1.kernel.org (Postfix) with ESMTP id 7149E3FC8F for ; Wed, 7 Nov 2012 10:49:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754656Ab2KGKsz (ORCPT ); Wed, 7 Nov 2012 05:48:55 -0500 Received: from cn.fujitsu.com ([222.73.24.84]:37857 "EHLO song.cn.fujitsu.com" rhost-flags-OK-FAIL-OK-OK) by vger.kernel.org with ESMTP id S1754500Ab2KGKsx (ORCPT ); Wed, 7 Nov 2012 05:48:53 -0500 X-IronPort-AV: E=Sophos;i="4.80,729,1344182400"; d="scan'208";a="6154931" Received: from unknown (HELO tang.cn.fujitsu.com) ([10.167.250.3]) by song.cn.fujitsu.com with ESMTP; 07 Nov 2012 18:47:09 +0800 Received: from fnstmail02.fnst.cn.fujitsu.com (tang.cn.fujitsu.com [127.0.0.1]) by tang.cn.fujitsu.com (8.14.3/8.13.1) with ESMTP id qA7AImjS023557; Wed, 7 Nov 2012 18:18:51 +0800 Received: from gaowanlong.fnst.cn.fujitsu.com ([10.167.225.197]) by fnstmail02.fnst.cn.fujitsu.com (Lotus Domino Release 8.5.3) with ESMTP id 2012110718175462-1001400 ; Wed, 7 Nov 2012 18:17:54 +0800 From: Wanlong Gao To: linux-kernel@vger.kernel.org Cc: "James E.J. Bottomley" , Paolo Bonzini , Rusty Russell , linux-scsi@vger.kernel.org, kvm@vger.kernel.org, Wanlong Gao Subject: [PATCH 4/5] virtio-scsi: create a separate work queue for virtio-scsi Date: Wed, 7 Nov 2012 18:18:13 +0800 Message-Id: <1352283494-31200-5-git-send-email-gaowanlong@cn.fujitsu.com> X-Mailer: git-send-email 1.8.0 In-Reply-To: <1352283494-31200-1-git-send-email-gaowanlong@cn.fujitsu.com> References: <1352283494-31200-1-git-send-email-gaowanlong@cn.fujitsu.com> X-MIMETrack: Itemize by SMTP Server on mailserver/fnst(Release 8.5.3|September 15, 2011) at 2012/11/07 18:17:54, Serialize by Router on mailserver/fnst(Release 8.5.3|September 15, 2011) at 2012/11/07 18:17:58, Serialize complete at 2012/11/07 18:17:58 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Create a separate work queue for virtio-scsi to improve the performance. Cc: James E.J. Bottomley Cc: Paolo Bonzini Cc: Rusty Russell Cc: linux-scsi@vger.kernel.org Cc: kvm@vger.kernel.org Signed-off-by: Wanlong Gao --- drivers/scsi/virtio_scsi.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/scsi/virtio_scsi.c b/drivers/scsi/virtio_scsi.c index 765138a..fc05240 100644 --- a/drivers/scsi/virtio_scsi.c +++ b/drivers/scsi/virtio_scsi.c @@ -27,6 +27,8 @@ #define VIRTIO_SCSI_MEMPOOL_SZ 64 #define VIRTIO_SCSI_EVENT_LEN 8 +struct workqueue_struct *virtscsi_wq; + /* Command queue element */ struct virtio_scsi_cmd { struct scsi_cmnd *sc; @@ -337,7 +339,7 @@ static void virtscsi_complete_event(void *buf) struct virtio_scsi_event_node *event_node = buf; INIT_WORK(&event_node->work, virtscsi_handle_event); - schedule_work(&event_node->work); + queue_work(virtscsi_wq, &event_node->work); } static void virtscsi_event_done(struct virtqueue *vq) @@ -788,6 +790,12 @@ static int __init init(void) { int ret = -ENOMEM; + virtscsi_wq = alloc_workqueue("virtio-scsi", 0, 0); + if (!virtscsi_wq) { + pr_err("alloc_workqueue() for virtscsi_wq failed\n"); + goto error; + } + virtscsi_cmd_cache = KMEM_CACHE(virtio_scsi_cmd, 0); if (!virtscsi_cmd_cache) { pr_err("kmem_cache_create() for virtscsi_cmd_cache failed\n"); @@ -817,6 +825,10 @@ error: kmem_cache_destroy(virtscsi_cmd_cache); virtscsi_cmd_cache = NULL; } + if (virtscsi_wq) { + destroy_workqueue(virtscsi_wq); + virtscsi_wq = NULL; + } return ret; } @@ -825,6 +837,7 @@ static void __exit fini(void) unregister_virtio_driver(&virtio_scsi_driver); mempool_destroy(virtscsi_cmd_pool); kmem_cache_destroy(virtscsi_cmd_cache); + destroy_workqueue(virtscsi_wq); } module_init(init); module_exit(fini);