From patchwork Fri Nov 4 16:33:33 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Madhani, Himanshu" X-Patchwork-Id: 9413125 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id E00AA6022E for ; Fri, 4 Nov 2016 19:07:04 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D2FCB2B192 for ; Fri, 4 Nov 2016 19:07:04 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C7B9C2B1D6; Fri, 4 Nov 2016 19:07:04 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1B7572B192 for ; Fri, 4 Nov 2016 19:07:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935781AbcKDTHD (ORCPT ); Fri, 4 Nov 2016 15:07:03 -0400 Received: from mail-bl2nam02on0041.outbound.protection.outlook.com ([104.47.38.41]:65334 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S935119AbcKDTHB (ORCPT ); Fri, 4 Nov 2016 15:07:01 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=qJEytPWW2QJUf1oRoiGci4jOiqNDNy7Jwi3dPPa1XRg=; b=bB73v46UWZjloN2hrd4W1a7UVxoWdSV/gD8VItis2/If0zyX5it7co2fAZgh37LsTg1yekuf2CMf+4PjFgKPgKX02klj0wZ79HXVWfFCGXUmh2Vd9miIJO8PwpjMP0mvrpHmvkpqzVwsj8ha7WfTxGua6m+JpFIvUmu24DdeIBw= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Himanshu.Madhani@cavium.com; Received: from cavium.com (173.186.134.106) by CY1PR0701MB1835.namprd07.prod.outlook.com (10.163.42.156) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.707.6; Fri, 4 Nov 2016 16:33:43 +0000 From: To: CC: , Subject: [PATCH 4/4] qla2xxx: Fix Target stack handling with Multi-queue changes Date: Fri, 4 Nov 2016 09:33:33 -0700 Message-ID: <1478277213-3848-5-git-send-email-himanshu.madhani@cavium.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1478277213-3848-1-git-send-email-himanshu.madhani@cavium.com> References: <1478277213-3848-1-git-send-email-himanshu.madhani@cavium.com> MIME-Version: 1.0 X-Originating-IP: [173.186.134.106] X-ClientProxiedBy: BY1PR13CA0031.namprd13.prod.outlook.com (10.162.107.169) To CY1PR0701MB1835.namprd07.prod.outlook.com (10.163.42.156) X-MS-Office365-Filtering-Correlation-Id: d13fc869-96fb-4148-53ca-08d404d0576b X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1835; 2:AUib1grbPZvPSY4sU2JMzmw705bCJvcch9psDcKWEQ87Yh93ln/AywBxjjd0A/Fno1hEk19u14xETUF0YIGipSi9d0YU3M9Z4P4wj3G5jko2KzefArgR1lbx1aUyyyZH0L+xR44ZaPv+YPzpifcN4gn1g4eyaPwkY3np+ZYFzoD1pODRSaki0Zi+72rmk67jUKqkuJge2vCGks9YaeLLKA==; 3:5Cu6+n8KJV7RoH1zcdfJqfnFfwiLfoeXw9/ZnxAk2mJfZZkfW47o9jFjjeSV3CcU0h6ug9ZtPTuxbNQBn98aVa/9coiXPuA8dxPDNcGag8/e2HVaQC/n0Ql6yuZdbuJXRyPbYF53SeeTyszUvc2rJg==; 25:4PzpQ1I6Gp2Vvt4xHh7SNi4URUbXWOzA0H9e2OopZWeLn43fdajJKTCbwRNcMCVSpfE6AmR2F6oR3wGC6aKN6a+jZyIiW8NBULo+n8GzXkD06kC3jO4ltaqYRo7X3mYDTJ4++XrO8Vvjqe5WDNiDQnJZgz4IJ638JDVvI2+npc+PjKXp64yC5eplWRnqgMkkTkHhNsJxOivSHyUDjT1vHcR9GwkWM5P31vvD/XoVuc1wAHT9tP5JZ1kMmw1+W96YrA1gUtNL7Ih/cAr39lUJpFUcy83UHCmZSclZ/A08G9ro7Qkh7yRQecgpM8RskTr1dfs/0g5lyUmMveWK7SqjnkGJtmvxwfo4gOKrv8DRbSp/I4XHGH0TMm9Pm+J1GwrXa15YLSxZYxlj9YAd0SrgiM7latpEwvBFkaAIGEZ8T9hfFk0ZLLarmUTz8YQWwkmM X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0701MB1835; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1835; 31:x/z48MMlTE+rSxE6X+Bov4B5RKjC9hxdBVCaL7qUUDWWN961gr4j9+sykxewUv6t/yTfSF8xDdM9Sg1e1bmSoH+nsKnb2Io6rXpqN07N6pCODR0NQ0Yyjiv0Crb0BPiJ9NdbPv918RGOO88ZpYqFgEc7KnVce8U350cJnEoFbr159nN2+Hba41CTw+AzJ0EbKONyNftpSmwa4cIiq5PSRc8yf9bhSpUGAFzMR9AkMz2mQ3T0EBmL9MFC4iEmWugZ; 20:vVJveDpNZ60XGRbIYPCN9HauPm03DWZByJBOku+aumSOO4RhZkwRUjqx57BWBBtQVX4CrZr1MsI0/27XlObXu9yrABUvsUR9oWUVTReeznYqPATAxI907RNAO00OABj0eP6GNdfXyw1j9w2Ty73D5GRNmHoP7QLrKTcoCIkkAykW6IlKGNVTZRCuo1CykFmN3c0ohf5zGnDvf+WusYxbTVmSTXlYqOIMDfDQ5E5tJkfzGIccQv4WZHxSqrpUJxYqbuWU7ceijk6RZsbEo2NasIVxqLWCkSc9psuSgk13v7Wq5CzSQzcnY0IYv9UXJr09phxGo64j3xJIpizkRlekC4dZJLr2WKlL/Qc0y9SYvrUQdFuilUSyj3xje2WzINjVzIjqyWbCThKBplku5xJtXy/R+Dyc4Xo7rNAFWJVziE85BuDmGA0vcH8bF/9HDrst0+ObDUvJJGLKds4BQONnGtKYyP2YpdMb99VekPutgPdKrp6lFrdlqh7Mgr1VJIX3 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040176)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046); SRVR:CY1PR0701MB1835; BCL:0; PCL:0; RULEID:; SRVR:CY1PR0701MB1835; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1835; 4:1jCTiru2RnyKi7QYZYupNDd7PrSA6gb+kjwyLjfWRh5VmwXZIpZw8YQd3pESpvF9/Oy1i7jusBi2VYKog120OtTu6rpVdJLuXhyKx5ggzaTvhpgjOjUvO+sLatOaxsJB0eaBaDlRsFMXE0WNbliZmyHUPWVK+Yj5WyM2Ru+fiIiYGUIQTQQ0JgrDMWM11tAzdlwBfZ61xGq9C6SNJq9/HzguOYtD3ZX0rdhGELEOdKuH+aZHymrPo/ZPS8wP9hFOPUQ2jTGlE63alI1IAwaK6ryVVyD0eXGRz9eBW8JORHtVmvyFh7d7e55XQMAv1bMOLwMRC+wVlrazeTdFSmHQbUc+DRLtE32o79eACrrAB7oINEzhx1cKoPuiNMDzVkb4ZTTh5xw8aFWWZqaS+r6QJA== X-Forefront-PRVS: 01165471DB X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(7916002)(189002)(199003)(47776003)(50226002)(2876002)(575784001)(86362001)(106356001)(2351001)(229853001)(4326007)(105586002)(48376002)(86152002)(77096005)(50466002)(97736004)(110136003)(21086003)(92566002)(19580405001)(5660300001)(6116002)(69596002)(19580395003)(50986999)(5003940100001)(7846002)(7736002)(101416001)(36756003)(8676002)(81156014)(33646002)(42186005)(4720700003)(81166006)(586003)(189998001)(68736007)(6916009)(2906002)(3846002)(305945005)(76176999)(66066001)(2950100002)(6666003); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR0701MB1835; H:cavium.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR0701MB1835; 23:bYABq36BE6Ax3HJK7LZNPDEVvU6JO0NCpwpHnYb?= =?us-ascii?Q?W37WK6Ig3hB+hl9OJRvU/at2YKWnOc1SFzjb8+7lI7DL4L26vvygeRIlIcyT?= =?us-ascii?Q?XzwIuFKipU3Ls2opnEfLXo3GyeJriw82m8avHvs37Qkrgq88EDbVT/jP2hVt?= =?us-ascii?Q?HH2J/ZQ1mA68S64DQkHrUUn7+yjYJns65t87Ncr2xnHlmNgIi3g30calQa+1?= =?us-ascii?Q?81uHIIx89ZTYA3xu13H3cp+G+dRKDSTlhC2gF73Ljh2VEEojQibz6+FiZ8k+?= =?us-ascii?Q?3QkDDFyphSb03Je7nBbnO4bnNBckXWFQF1KFsBoxSsnc2P2AgzvuXe36VscO?= =?us-ascii?Q?E7pjNNASHgq9EHQ5QmYJIUgLf6hZxh6P4gBKllRz79h2pqUGVgMAROD2B/GK?= =?us-ascii?Q?y/ZQbOJR9F7Y6WU0+dNXNdSRwvQrw3rIk4oAD48Mx/098aA0E2r4eNvb1C9K?= =?us-ascii?Q?ez1CCrBUVSADz1nunZYSN2HJGIFt/gM2e7GvrwqqCkAVLHJSiIw8q95253GS?= =?us-ascii?Q?2itS7+MrqWlYvd+mnxLR/bAV9C07GJxXELLgqQDxa+9KM5Bw/J0emyOTBPzd?= =?us-ascii?Q?9iR2mZlGZAfCv05BcQTPqVNHPvohPPaqPtMyG1VOyLtdtAKEE51IcuiYqyTv?= =?us-ascii?Q?XAg6F8dqt1Kfohcm5sJHAJZ6Kr16nQ6MSyP7NQ7ERP4BD/7VpkvyVizPTIbR?= =?us-ascii?Q?V7KbsyEh7j6zN2uAQ/61mOVHWe4cMmRPb+EHBmeAalijToH8tpUZSvm+fljg?= =?us-ascii?Q?jmiVUNIyrQ+fnkjIUVXth1HBPNB/OzyVpPh70MPNmweHD17B3pOhux99EbnB?= =?us-ascii?Q?wR/6sdiN/K7TUMIqOFN0+TEnMzFR9gLgXC96SvKlH4dqU70X8rtczExvfyx/?= =?us-ascii?Q?FsQ1w2m1cU1/HT6Aans3XpajYQ6aTlmtxFqg/qk9E94euwK8kEJ1Fp2witP0?= =?us-ascii?Q?hWtm2cM5qWj5lz97gxayrzhgiTrr6rP8vE9qSUDwwu13r8R0FjnQJ7s8D4lJ?= =?us-ascii?Q?nxG+Fjsrga8BytwE+BVOBvjAUjzIC/IhE9Jxmxeqdqe6aflVI1A8BYqL8XbW?= =?us-ascii?Q?go60H0Q5uF1VFSRQto/STkkS6PJrrBjGRm0z9IlFPGgQu33eU+A2Tlv3Hyan?= =?us-ascii?Q?hMokF1JPLjGKUupbjXrFXL+yNZAOMpk/USvzp4WQgeX3m+mIoy3UvGunFcJO?= =?us-ascii?Q?BWk1us68+56gNyVd5t3hbIqJsNv8wMk14Q8fUYZdVUdK8nTEDqIxiQuD2euh?= =?us-ascii?Q?v/3ApeQnXDT/4zaGZBhz4MAta83Rl/sLqqPfkJJ72?= X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1835; 6:MWAchRcyGFr9abMcM0iqHozO/HnSp+PoVfiJKHZRYzDRP18fvdUzDKNVlDKgG01f5khaZVRCJgOv9jrpL70bFlUPT8BvHOHp5NKUOfL70h8sMSgNnt95iBzUR7OOLoyeo+4MKuEALZKieH/C6S+b6XbYjxuS9vjKK8nR9pbXqUVMfPJPb+n4V6mhH0XSjc9r55hB2uEWuRse4exGmY5wgWXGDdcFw688thPoKTZfb8ka+fjhRx3TdrEl+D3XM4F4tyvqIAVC8lhrKMaadd+Y0acMSxt4+zzt/wdDGUmmJh05QPSz0j6CKtBkY7hP3p74; 5:MOotNYjWi5di4af7Npt06ECHEZk5gyCEjGsUtwVm3D6lBUKx165n0Qk8Bjlm4e4Zgpp5UTJ5ZFe+Re9RpGNTmhxYteXpDL7ir8HKsLY2yOOWnMMYiXoGkYBgyGHeAQxrSttIGzM0c3+0cCUCOm3iXQ==; 24:cdhXYsPwFrgEielaDwU6HbaU0NOR4VB7x8snCfqQZDYT0hXmHxLQt+uD5S+dVQMT0Y3zf2ZVriAqPnpuUgtAz3XjdQL0YcYj0kvR2aB349s= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1835; 7:4B/s0zLD35PYlRhVRiQbNHReWeCxgL6SxXHl5QLmml78ApwH+snnvD5d5FBEn7hEJhS1ekerNPH2FiKXC3PJQYh40Rb4v3sWzkUVA0dM+G+NVTx5/t5BEmRuVac6XF6PJBBWg+SsbEuDnQ2ys9e9hinEpv5OhegZyaiRoXqPuotN4TPQWU8J8+6fN2OxvVMfjr2k8ibskWux5XVTlA36Agn66GmiETRw7rfaixIeN9zphIkEmi1hq3CFcfDI7WUjszFgKuy3bxKEHjPSWrU96VrP0+0vmif7+G2S90BQ6epX4lEr0MQmkMjKLt4be52hxkagLkdI8KNT1xRLtguGGQ9deaUIFSRDacn7mFfeV+E= X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2016 16:33:43.0681 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0701MB1835 Sender: linux-scsi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Quinn Tran - Fix race condition betweeen dpc_thread accessing MQ resources and qla2x00_remove_one thread trying to free resource. - Fix MQ resources out of order free. MQ interrupts needs a workqueue. Interrupt needed to stop before the wq can be destroy. Signed-off-by: Quinn Tran Signed-off-by: Himanshu Madhani --- drivers/scsi/qla2xxx/qla_def.h | 3 ++- drivers/scsi/qla2xxx/qla_isr.c | 20 +++++++---------- drivers/scsi/qla2xxx/qla_mq.c | 2 +- drivers/scsi/qla2xxx/qla_os.c | 51 +++++++++++++++++++++++++++++++----------- 4 files changed, 49 insertions(+), 27 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index 573b95d..1621059 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h @@ -2734,7 +2734,8 @@ struct isp_operations { #define QLA_MSIX_DEFAULT 0x00 #define QLA_MSIX_RSP_Q 0x01 -#define QLA_MSIX_QPAIR_MULTIQ_RSP_Q 0x02 +#define QLA_ATIO_VECTOR 0x02 +#define QLA_MSIX_QPAIR_MULTIQ_RSP_Q 0x03 #define QLA_MIDX_DEFAULT 0 #define QLA_MIDX_RSP_Q 1 diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index a185b5f9..3fe9501 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c @@ -2968,6 +2968,7 @@ struct qla_init_msix_entry { static struct qla_init_msix_entry msix_entries[] = { { "qla2xxx (default)", qla24xx_msix_default }, { "qla2xxx (rsp_q)", qla24xx_msix_rsp_q }, + { "qla2xxx (atio_q)", qla83xx_msix_atio_q }, { "qla2xxx (qpair_multiq)", qla2xxx_msix_rsp_q }, }; @@ -2976,12 +2977,6 @@ struct qla_init_msix_entry { { "qla2xxx (rsp_q)", qla82xx_msix_rsp_q }, }; -static struct qla_init_msix_entry qla83xx_msix_entries[] = { - { "qla2xxx (default)", qla24xx_msix_default }, - { "qla2xxx (rsp_q)", qla24xx_msix_rsp_q }, - { "qla2xxx (atio_q)", qla83xx_msix_atio_q }, -}; - static void qla24xx_disable_msix(struct qla_hw_data *ha) { @@ -3009,7 +3004,6 @@ struct qla_init_msix_entry { qla24xx_enable_msix(struct qla_hw_data *ha, struct rsp_que *rsp) { #define MIN_MSIX_COUNT 2 -#define ATIO_VECTOR 2 int i, ret; struct msix_entry *entries; struct qla_msix_entry *qentry; @@ -3065,7 +3059,7 @@ struct qla_init_msix_entry { } /* Enable MSI-X vectors for the base queue */ - for (i = 0; i < 2; i++) { + for (i = 0; i < (QLA_MSIX_RSP_Q + 1); i++) { qentry = &ha->msix_entries[i]; qentry->handle = rsp; rsp->msix = qentry; @@ -3082,6 +3076,7 @@ struct qla_init_msix_entry { if (ret) goto msix_register_fail; qentry->have_irq = 1; + qentry->in_use = 1; /* Register for CPU affinity notification. */ irq_set_affinity_notifier(qentry->vector, &qentry->irq_notify); @@ -3101,14 +3096,15 @@ struct qla_init_msix_entry { * queue. */ if (QLA_TGT_MODE_ENABLED() && IS_ATIO_MSIX_CAPABLE(ha)) { - qentry = &ha->msix_entries[ATIO_VECTOR]; + qentry = &ha->msix_entries[QLA_ATIO_VECTOR]; rsp->msix = qentry; qentry->handle = rsp; scnprintf(qentry->name, sizeof(qentry->name), - qla83xx_msix_entries[ATIO_VECTOR].name); + msix_entries[QLA_ATIO_VECTOR].name); + qentry->in_use = 1; ret = request_irq(qentry->vector, - qla83xx_msix_entries[ATIO_VECTOR].handler, - 0, qla83xx_msix_entries[ATIO_VECTOR].name, rsp); + msix_entries[QLA_ATIO_VECTOR].handler, + 0, msix_entries[QLA_ATIO_VECTOR].name, rsp); qentry->have_irq = 1; } diff --git a/drivers/scsi/qla2xxx/qla_mq.c b/drivers/scsi/qla2xxx/qla_mq.c index 8eb8ae1..3799853 100644 --- a/drivers/scsi/qla2xxx/qla_mq.c +++ b/drivers/scsi/qla2xxx/qla_mq.c @@ -131,7 +131,7 @@ struct qla_qpair *qla2xxx_create_qpair(struct scsi_qla_host *vha, cpumask_var_t qpair->vp_idx = vp_idx; for (i = 0; i < ha->msix_count; i++) { - msix = &ha->msix_entries[i + 2]; + msix = &ha->msix_entries[i]; if (msix->in_use) continue; qpair->msix = msix; diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 1cb0a59..fa9e99a 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -434,24 +434,41 @@ static void qla2x00_free_queues(struct qla_hw_data *ha) struct req_que *req; struct rsp_que *rsp; int cnt; + unsigned long flags; + spin_lock_irqsave(&ha->hardware_lock, flags); for (cnt = 0; cnt < ha->max_req_queues; cnt++) { if (!test_bit(cnt, ha->req_qid_map)) continue; req = ha->req_q_map[cnt]; + clear_bit(cnt, ha->req_qid_map); + ha->req_q_map[cnt] = NULL; + + spin_unlock_irqrestore(&ha->hardware_lock, flags); qla2x00_free_req_que(ha, req); + spin_lock_irqsave(&ha->hardware_lock, flags); } + spin_unlock_irqrestore(&ha->hardware_lock, flags); + kfree(ha->req_q_map); ha->req_q_map = NULL; + + spin_lock_irqsave(&ha->hardware_lock, flags); for (cnt = 0; cnt < ha->max_rsp_queues; cnt++) { if (!test_bit(cnt, ha->rsp_qid_map)) continue; rsp = ha->rsp_q_map[cnt]; + clear_bit(cnt, ha->req_qid_map); + ha->rsp_q_map[cnt] = NULL; + spin_unlock_irqrestore(&ha->hardware_lock, flags); qla2x00_free_rsp_que(ha, rsp); + spin_lock_irqsave(&ha->hardware_lock, flags); } + spin_unlock_irqrestore(&ha->hardware_lock, flags); + kfree(ha->rsp_q_map); ha->rsp_q_map = NULL; } @@ -1715,19 +1732,24 @@ uint32_t qla2x00_isp_reg_stat(struct qla_hw_data *ha) pci_read_config_word(ha->pdev, QLA_83XX_PCI_MSIX_CONTROL, &msix); ha->msix_count = msix + 1; - /* Max queues are bounded by available msix vectors */ - /* queue 0 uses two msix vectors */ + /* + * By default, driver uses at least two msix vectors + * (default & rspq) + */ if (ql2xmqsupport) { cpus = num_online_cpus(); /* MB interrupt uses 1 vector */ ha->max_req_queues = (ha->msix_count - 1 > cpus) ? (cpus + 1) : (ha->msix_count - 1); ha->max_rsp_queues = ha->max_req_queues; + + /* ATIOQ needs 1 vector. That's 1 less QPair */ + if (QLA_TGT_MODE_ENABLED()) + ha->max_req_queues--; + /* Queue pairs is the max value minus * the base queue pair */ ha->max_qpairs = ha->max_req_queues - 1; - ql_dbg_pci(ql_dbg_multiq, ha->pdev, 0xc010, - "Max no of queues pairs:%d.\n", ha->max_qpairs); ql_dbg_pci(ql_dbg_init, ha->pdev, 0x0190, "Max no of queues pairs:%d.\n", ha->max_qpairs); } @@ -1739,6 +1761,8 @@ uint32_t qla2x00_isp_reg_stat(struct qla_hw_data *ha) mqiobase_exit: ha->msix_count = ha->max_rsp_queues + 1; + if (QLA_TGT_MODE_ENABLED()) + ha->msix_count++; qlt_83xx_iospace_config(ha); @@ -3116,13 +3140,6 @@ static void qla2x00_destroy_mbx_wq(struct qla_hw_data *ha) static void qla2x00_destroy_deferred_work(struct qla_hw_data *ha) { - /* Flush the work queue and remove it */ - if (ha->wq) { - flush_workqueue(ha->wq); - destroy_workqueue(ha->wq); - ha->wq = NULL; - } - /* Cancel all work and destroy DPC workqueues */ if (ha->dpc_lp_wq) { cancel_work_sync(&ha->idc_aen); @@ -3318,9 +3335,17 @@ static void qla2x00_destroy_mbx_wq(struct qla_hw_data *ha) ha->isp_ops->disable_intrs(ha); } + qla2x00_free_fcports(vha); + qla2x00_free_irqs(vha); - qla2x00_free_fcports(vha); + /* Flush the work queue and remove it */ + if (ha->wq) { + flush_workqueue(ha->wq); + destroy_workqueue(ha->wq); + ha->wq = NULL; + } + qla2x00_mem_free(ha); @@ -5042,8 +5067,8 @@ void qla2x00_relogin(struct scsi_qla_host *vha) base_vha->flags.init_done = 0; qla25xx_delete_queues(base_vha); - qla2x00_free_irqs(base_vha); qla2x00_free_fcports(base_vha); + qla2x00_free_irqs(base_vha); qla2x00_mem_free(ha); qla82xx_md_free(base_vha); qla2x00_free_queues(ha);