From patchwork Wed Aug 23 22:04:58 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Madhani, Himanshu" X-Patchwork-Id: 9918483 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 0C139600C5 for ; Wed, 23 Aug 2017 22:05:40 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id F013228A6F for ; Wed, 23 Aug 2017 22:05:39 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E487128A81; Wed, 23 Aug 2017 22:05:39 +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.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI 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 616EA28A6F for ; Wed, 23 Aug 2017 22:05:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751104AbdHWWFi (ORCPT ); Wed, 23 Aug 2017 18:05:38 -0400 Received: from mail-sn1nam02on0076.outbound.protection.outlook.com ([104.47.36.76]:48394 "EHLO NAM02-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751093AbdHWWFf (ORCPT ); Wed, 23 Aug 2017 18:05:35 -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=Gp+PuCx+WCOeijpjdYbnQYjccXZGvfguNyIFor/xuXs=; b=ZNVWbT9i3gBhA341Eov3SzNUX/zvBp3pq+7kh220GApJX5AhaMFYSHqrr0vOCn6M9ea52wm04eVSUl8ulU32n0Pf1EnZR6H9kY7B7kEpDXo8V9Y1aE26/A7W4Nb/INDCY7us3c0D1afL94uPE8l8OsllprGrp1ngS7qTsWdc6R8= Received: from DM5PR07CA0031.namprd07.prod.outlook.com (10.168.109.17) by CY1PR0701MB1948.namprd07.prod.outlook.com (10.163.141.157) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.1.1362.18; Wed, 23 Aug 2017 22:05:33 +0000 Received: from BL2FFO11FD037.protection.gbl (2a01:111:f400:7c09::155) by DM5PR07CA0031.outlook.office365.com (2603:10b6:3:16::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.1.1385.9 via Frontend Transport; Wed, 23 Aug 2017 22:05:33 +0000 Authentication-Results: spf=none (sender IP is 50.232.66.26) smtp.mailfrom=cavium.com; vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=none action=none header.from=cavium.com; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) Received: from CAEXCH02.caveonetworks.com (50.232.66.26) by BL2FFO11FD037.mail.protection.outlook.com (10.173.161.133) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.1341.15 via Frontend Transport; Wed, 23 Aug 2017 22:05:32 +0000 Received: from dut1171.mv.qlogic.com (172.29.51.171) by CAEXCH02.caveonetworks.com (10.17.4.29) with Microsoft SMTP Server id 14.2.347.0; Wed, 23 Aug 2017 15:05:26 -0700 Received: from dut1171.mv.qlogic.com (localhost [127.0.0.1]) by dut1171.mv.qlogic.com (8.14.7/8.14.7) with ESMTP id v7NM5Qn2003166; Wed, 23 Aug 2017 15:05:26 -0700 Received: (from root@localhost) by dut1171.mv.qlogic.com (8.14.7/8.14.7/Submit) id v7NM5PGK003165; Wed, 23 Aug 2017 15:05:25 -0700 From: Himanshu Madhani To: , CC: , Subject: [PATCH 04/31] qla2xxx: Add command completion for error path Date: Wed, 23 Aug 2017 15:04:58 -0700 Message-ID: <20170823220525.3115-5-himanshu.madhani@cavium.com> X-Mailer: git-send-email 2.12.0 In-Reply-To: <20170823220525.3115-1-himanshu.madhani@cavium.com> References: <20170823220525.3115-1-himanshu.madhani@cavium.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:50.232.66.26; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(2980300002)(428002)(189002)(199003)(50466002)(5003940100001)(2906002)(5660300001)(47776003)(86362001)(575784001)(2950100002)(33646002)(81156014)(106466001)(8676002)(81166006)(8936002)(76176999)(69596002)(80596001)(54906002)(36756003)(50226002)(42186005)(48376002)(105586002)(1076002)(626005)(478600001)(87636003)(356003)(305945005)(101416001)(50986999)(72206003)(6666003)(4326008)(189998001); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR0701MB1948; H:CAEXCH02.caveonetworks.com; FPR:; SPF:None; PTR:50-232-66-26-static.hfc.comcastbusiness.net; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD037; 1:wlqFslE8Hm4Ug9D9M2SEyeL9kkajbFGHNQCe8QnuIIXjMbliwDaiYNZgRGXNS4mYYUrlKghwBqFlasq90/KGlwAd+hw7BVCuFYrkobkhZgq6xLizQ6/GkBLHY9xfUNgf X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2694d262-e526-4ba2-278a-08d4ea731341 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(300000503095)(300135400095)(2017052603190)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:CY1PR0701MB1948; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1948; 3:xppSHb75RFJXsutggudxROoaqGTftNSdPTeTSSYwo7VsPkxF8FAA17Z2Eg3XmgupfhjH88xBZxXcKneHpX11TZsupjQSR7evra45XVtgtuO3pRvanQaKYRe9abN9VjOpyWjPabaex5CYnAWqlNH2Qm8ga8CfoyCNNkndSXBV3UFR/AqDS77Zl++xuRHSLDvwPeXetJIh2yLB6zAUsZjL/UdpoRlHfB0izU6FDZZBx6htatM1wpPpgmtZ+QYOy9XDPx7ZuR68NWLxQ2Wlt+qfWlZMIAbpOMk0EtxdJN5LAN8GaflUbRA6SiDBNaTzqJJixgSc7VZdM8VUtiTkMRFezw==; 25:2MVWtjlbLt+edogbqJFORLoBiEKk5MEt8vAMRdNkGVewFz05K0aUJN3t5FhEOr7FVUWR4OWOgn60ThWXmg1HcxV++LoHoEVhl6aM+AoAuigbhedXBZPQdKXblzddNrFpcsxwVXx1hwT7r0XD2orNVJDLvCPtfvDND4NtO2qMj6a/Td1TZNqDmVPxVVjxgob2PAXYrZ/Vg7sq0emZxp8K60y8ZS7gokOM0rj/RpZQmARH3XHYAcQ5htG517NeqeiFsjB2oQq7g3gw73wwV9wZMYYi+gFYSBWy5PzlLiHZmhEmph1cgzYtpgrfZCgG4nUxW+KcHnzwOoPIIekoc+mLOQ==; 31:N6Zdeb4SywGyx5kYUVhxnTeW5rWushJ5vQ5gmjYci50kLVEfWLbOSJHvidHzubUsfO6ONF5eicCwFAY2M/Ze+/zDsSx+dYB/LK+Xmx+i+NWvGoYWBz2B45LJqIZlsqzXmkVslffR60eiFeC0bLy/Pt1V8xkPNLIksJJUq3fJLKxXJ8vu+WQBDvenK7RQNFJnG0CLP9vXUy+DsvW6iye3FTE5FbtvvS1WMu7Lr7K8PkY= X-MS-TrafficTypeDiagnostic: CY1PR0701MB1948: X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1948; 20:O5YCFOttxS4NfVqOxFyG6mizdLGklzZH5bPsceY6trhCI8LsdJ8DtDsVu6WB6XIrxxIrI+zVdzZ34cWimUMVyXhcDiiJbh6uloAlRlu9eqlB2viaoeXE7UjjMadA4/ThuY2l9jxtGQH3sCOkJdiNCvGou0lk6LZdGgllx7mtOgx2MKe98yMt6hvUDO584RuemPU4vQrNWsCDSvhzM69m4TtuYS9QrQTEVM1YKGiujvsKLgAj25GwBPmyXEZRstnxGfujYH2YRWhLhL0p/eKNlZuaEdJEMJeeRSOOgU7Cbj5njFCUib+gy7P0Qy1GNPvN+VoEvw2hPMIo3Ji0zqE+oPBhL8rWvEB6aWlxeMr/vBC0DLBPtjkbJ5Xox9z3Zr01GyvsY450JSXXpCc3XtiTAHysVivbEkHXr8eDXKtvsr2Vm1wnnTf6kdFmV0cn9nidwucCHL65jCtmGB14RtGNygM0ndQHQH+h4gXvLKq/jOCRswRPUc1awrcr1Xy+lVg3; 4:mf7aH+CfeSuTrWoDNnovvAldkAShGdutp7AUHgiRHE00Dm+SzGlzJNzgYEYGTg8HjJd/ZLQqT3MqXkSjL+w+UdRNd3fxpkcZWkWgzdeppt/CNZ4OXu4jzy9xK4TMIoIW6RsM2fhykcbF2HscjjpvaG7LQzfMg1laT4QSGoqoajEAjCIO7q/ucVWm9q319yVPP0bvWWjZxHNnUOKPqiO/WcPDAl/HEqJ7kkzIcEUZu7mvxOUXl0rgI+Uh33krhMn4 X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(13018025)(13016025)(3002001)(100000703101)(100105400095)(93006095)(93001095)(10201501046)(6041248)(20161123564025)(20161123555025)(20161123562025)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:CY1PR0701MB1948; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:CY1PR0701MB1948; X-Forefront-PRVS: 040866B734 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR0701MB1948; 23:LQhi5Bgam5UJePaXHUEBKlm1LjKqblcxxqBtspw?= =?us-ascii?Q?SrowVF6HKPyUUvr+Y07KxxXXl/HtfCaRrYUrpllL5QlVxJcc6Ic+Biw7lfWh?= =?us-ascii?Q?voyz3elOiUWYAkUwshVKFUN3rEuTOZorkE4AzSU+LeFcHR2fEzNLQyuOSFKl?= =?us-ascii?Q?zewkfj052dMbSGvp/eZlBRQO/byzFqmjemmWvHsNr6tCosrl+gRD6wFMD3Ib?= =?us-ascii?Q?WRG6fl4dB5zp0Kq7giHX2cFNERhIyAABBLiDmIMbUBZt3GlwSmC4vKfruUTu?= =?us-ascii?Q?pwlpIp0NDoTHU4ZAMCfhp7dwxYwYUI6/FR0XtnF0HgNDyU/BHEWShg0IYRKH?= =?us-ascii?Q?DJX+JlmdMl1jzygtRcsN6KfizyAbbxCj/+4VcAxzBI2DuBf3+uygTPxZ9BW7?= =?us-ascii?Q?FCP/dyjXxodbFHUMyAViwVekx1wIvTOSIhR1WefkK0jCdY5lNsVIZRs2P5Qn?= =?us-ascii?Q?XzAtX/CqFKgjZ+uviQPacYjPvBaoVJ8hzUBzdnxMwfp671mhApSYUbkBaNMW?= =?us-ascii?Q?Bex/hQS+dQw86ik4JDs5s8OuEc0PASPDbvgQRIfbYt7n0MujjtfDyS9AIA9y?= =?us-ascii?Q?oBQEx33jlh2WGP4lg1stRA0IjZQqPJKtiVA765+lN+evSW2YAbafYnh3mX3L?= =?us-ascii?Q?rvLYVyIpPP48+JW1mTfx3DW4EbzEU98fvukQdeX/cFu3uhlyXnOBuxyHLm7R?= =?us-ascii?Q?uAlAbewRgmJpkkzEkxm9CiQNaO30ebtsvpw2njQPhJpCiN1CXB3O7qQ3fBe6?= =?us-ascii?Q?kg7D4gULutQEiB3RZDRsY6n37Pc1nvH2YTOfgNVxvosWVaBW4ZBptSU9FtbV?= =?us-ascii?Q?I4reLxwqaFM2N/SIO/YTIEmkuudkVVGSe3KsCrVLNF9IhNRcmisqEMNTsCTJ?= =?us-ascii?Q?ke1npVEIr61TMuZT0++JhzuI+2xTZK5Sp7QbWI3q+z7enLCdH2wKboHGXJex?= =?us-ascii?Q?dmBXgQDPKOCEHM3J5NwuxyAxSUfLM0QxGPxD0jFyIgl3Z4R/48Ue/Z16VGdy?= =?us-ascii?Q?I9BU=3D?= X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1948; 6:r1eTIJIEk0oQtxjuRTRnBw3XJSm8PIDiKQlFt1WtBJ3kzMLbiBncpLjtVtRci90W5z7lRWEvq++o2AjoBCT15VlQ9DCD9ibeDwT+hwrvcW9Lsvg2xVzFVy8uCaOvauylzjF6znGAU15n3mORkT01s74B0fdd7uqOMzkZNc0C9YeByMKWAG3HNLJY5FeRfLce8H7RIspQFbqkEeXXbdeavlUsogGm6oJ1n0MlyTNeYSbydv3UU6h8gPLi/v4s3gOgBXn3NVvGjJfcH0DEL8xOHBMjGCnDnmdjtdjcBmFL80EWGoqlYBydDY8tenxquSvXR1nUawCI/vd5co+LVbe95g==; 5:6+Y9b3rMMu9kxpVjXUolybneHaBPC4kxLJJNhxBjzWZ5bA5aOGfa4M7mhLNIBQKn4GWRa48TPoALU30whJCqFDWjgAEl/btTyi9uWGgJfvF5J7N5X403GbGJSoYhagn8+sKr+BtjshroNzHs4Yvb1w==; 24:H2eq1bwE/j7w2Nj/dgBPOmLAjDWwghHGIFI9J5POj9Rvx8GCi1AOob3GFcy6Efi6Osm2jYuemSniNqVKftPSkzl5ZX5WrY2Ifr4gPX8LXCE=; 7:TkYMOrAQqRl8KK6W7cMSY5XxkkuEgUDQc/p4JHZ7sav4qjGljzb4PY7Y3BN+TgeDmAHMlWOvczVSTmaZOdmgXN+A+TDxIZCEojLEN481zuqvfz6Np9qw4Oh8rgq4wIxPtowKWsuFv1jpeSpgs/54tCpVtnGEg5dpyWjKZJ0D3iwDeRU4Fp6SISdHE3PEyrlj70ngh4Ocn7kUoK2P6adfr2XRexi6jiC24S1JhBui/tU= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Aug 2017 22:05:32.7826 (UTC) X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=711e4ccf-2e9b-4bcf-a551-4094005b6194; Ip=[50.232.66.26]; Helo=[CAEXCH02.caveonetworks.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0701MB1948 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: Duane Grigsby The driver held spinlocks during callbacks for NVME errors which resulted in a deadlock because recovery LS cmds needed the same lock. Signed-off-by: Duane Grigsby Signed-off-by: Himanshu Madhani --- drivers/scsi/qla2xxx/qla_def.h | 2 ++ drivers/scsi/qla2xxx/qla_gbl.h | 2 ++ drivers/scsi/qla2xxx/qla_init.c | 1 + drivers/scsi/qla2xxx/qla_mid.c | 7 +++++++ drivers/scsi/qla2xxx/qla_nvme.c | 13 ++++++++++++- drivers/scsi/qla2xxx/qla_os.c | 1 + 6 files changed, 25 insertions(+), 1 deletion(-) diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index b3e3982a9db0..e3b225cc83f2 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h @@ -427,6 +427,7 @@ struct srb_iocb { enum nvmefc_fcp_datadir dir; uint32_t dl; uint32_t timeout_sec; + struct list_head entry; } nvme; } u; @@ -3338,6 +3339,7 @@ struct qla_qpair { struct work_struct q_work; struct list_head qp_list_elem; /* vha->qp_list */ struct list_head hints_list; + struct list_head nvme_done_list; uint16_t cpuid; struct qla_tgt_counters tgt_counters; }; diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h index 97dcabc790c9..f614c37efc9c 100644 --- a/drivers/scsi/qla2xxx/qla_gbl.h +++ b/drivers/scsi/qla2xxx/qla_gbl.h @@ -865,4 +865,6 @@ void qlt_update_host_map(struct scsi_qla_host *, port_id_t); void qlt_remove_target_resources(struct qla_hw_data *); void qlt_clr_qp_table(struct scsi_qla_host *vha); +void qla_nvme_cmpl_io(struct srb_iocb *); + #endif /* _QLA_GBL_H */ diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index 8f83571afc7b..988fb5d0f9e7 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c @@ -7806,6 +7806,7 @@ struct qla_qpair *qla2xxx_create_qpair(struct scsi_qla_host *vha, int qos, qpair->vp_idx = vp_idx; qpair->fw_started = ha->flags.fw_started; INIT_LIST_HEAD(&qpair->hints_list); + INIT_LIST_HEAD(&qpair->nvme_done_list); qpair->chip_reset = ha->base_qpair->chip_reset; qpair->enable_class_2 = ha->base_qpair->enable_class_2; qpair->enable_explicit_conf = diff --git a/drivers/scsi/qla2xxx/qla_mid.c b/drivers/scsi/qla2xxx/qla_mid.c index 3089094b48fa..608d1aeb97be 100644 --- a/drivers/scsi/qla2xxx/qla_mid.c +++ b/drivers/scsi/qla2xxx/qla_mid.c @@ -759,11 +759,18 @@ static void qla_do_work(struct work_struct *work) struct qla_qpair *qpair = container_of(work, struct qla_qpair, q_work); struct scsi_qla_host *vha; struct qla_hw_data *ha = qpair->hw; + struct srb_iocb *nvme, *nxt_nvme; spin_lock_irqsave(&qpair->qp_lock, flags); vha = pci_get_drvdata(ha->pdev); qla24xx_process_response_queue(vha, qpair->rsp); spin_unlock_irqrestore(&qpair->qp_lock, flags); + + list_for_each_entry_safe(nvme, nxt_nvme, &qpair->nvme_done_list, + u.nvme.entry) { + list_del_init(&nvme->u.nvme.entry); + qla_nvme_cmpl_io(nvme); + } } /* create response queue */ diff --git a/drivers/scsi/qla2xxx/qla_nvme.c b/drivers/scsi/qla2xxx/qla_nvme.c index 97a7b222b549..5692ae128655 100644 --- a/drivers/scsi/qla2xxx/qla_nvme.c +++ b/drivers/scsi/qla2xxx/qla_nvme.c @@ -154,6 +154,16 @@ static void qla_nvme_sp_ls_done(void *ptr, int res) qla2x00_rel_sp(sp); } +void qla_nvme_cmpl_io(struct srb_iocb *nvme) +{ + srb_t *sp; + struct nvmefc_fcp_req *fd = nvme->u.nvme.desc; + + sp = container_of(nvme, srb_t, u.iocb_cmd); + fd->done(fd); + qla2xxx_rel_qpair_sp(sp->qpair, sp); +} + static void qla_nvme_sp_done(void *ptr, int res) { srb_t *sp = ptr; @@ -175,7 +185,8 @@ static void qla_nvme_sp_done(void *ptr, int res) fd->status = 0; fd->rcv_rsplen = nvme->u.nvme.rsp_pyld_len; - fd->done(fd); + list_add_tail(&nvme->u.nvme.entry, &sp->qpair->nvme_done_list); + return; rel: qla2xxx_rel_qpair_sp(sp->qpair, sp); } diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index d9a115577dc8..b43520ca6645 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -379,6 +379,7 @@ static void qla_init_base_qpair(struct scsi_qla_host *vha, struct req_que *req, ha->base_qpair->use_shadow_reg = IS_SHADOW_REG_CAPABLE(ha) ? 1 : 0; ha->base_qpair->msix = &ha->msix_entries[QLA_MSIX_RSP_Q]; INIT_LIST_HEAD(&ha->base_qpair->hints_list); + INIT_LIST_HEAD(&ha->base_qpair->nvme_done_list); ha->base_qpair->enable_class_2 = ql2xenableclass2; /* init qpair to this cpu. Will adjust at run time. */ qla_cpu_update(rsp->qpair, smp_processor_id());