Received: by 10.223.176.5 with SMTP id f5csp2372708wra; Sun, 28 Jan 2018 19:09:26 -0800 (PST) X-Google-Smtp-Source: AH8x225YBg2CQzUVA4psO48JsVu1kVm79l2HjTgA8d7GayensdXgpVfl3fQ/0A0eDCHfAZma/S0b X-Received: by 2002:a17:902:4101:: with SMTP id e1-v6mr20559478pld.332.1517195366882; Sun, 28 Jan 2018 19:09:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1517195366; cv=none; d=google.com; s=arc-20160816; b=Vz4AyhZrkU7C/2aq3riCODr2Vne6lZwdfOaGya5XhjPkRWUVtuwaU7Ob7xE9egpsrQ Gw1MqnBQ9AJoePYqRt54KG3/BoDY+BhmpceV31BhdZXU8YEg3uwSFEkMbIm/hBLUhDz2 c4HRdnCvOo5jIlgPMj5kxoFDgj6IuibHQVjDsO2PbosqOdCtH8UE/9qKRujdZoAyRHvq alBgF227g7hiVwqUPr/Vg79isI7kxC8cL8fNCsbzR+DBPK09NuoVCJEB3fjNqkYu98wQ svqS3+emAH5ifjemrUOm9ALpsycRii7tLFTMVCdlCAjMAR8+VjkzQM7rqA7mfwnp8Ds0 0lhQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=MKP9Ri5JvXVYG9cKiH8wp4b/8bqt2wzJMMj8O1cLUs0=; b=Ut7z4dFch0ZbqEMWn6cadCP4x3YC29BY47l1+0Iz3yRV1+sm+1NUWeOy5rtiBIs1Ux hHIMbO+IB4wDKJJBARwYMj/aYppM0IfytqPOhumCUm1leheneZFyCqbCYCpBCNMfMspt siIdTh99rVwF4S0pCEyh3dhgAXpixpe4z+BB1GE8Mz1mh7byEez35RGvsK7Kgs5WUAAS rwu05JKEkNkqUM+q5H85m44vI1v8P+TyCl2UfJUIzt+ecZ07MrAuvV3cTNcBqtulDR3Q lTXxNImGBETSkldMxF4tvS4C4PeLxwSlyWvLKq5hu+6IyDejYziYJ+bwCz7eOnRl4OEL tc7w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@oracle.com header.s=corp-2017-10-26 header.b=q1lvqXsZ; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=oracle.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id bd7-v6si2069262plb.321.2018.01.28.19.09.12; Sun, 28 Jan 2018 19:09:26 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@oracle.com header.s=corp-2017-10-26 header.b=q1lvqXsZ; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=oracle.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751330AbeA2DIL (ORCPT + 99 others); Sun, 28 Jan 2018 22:08:11 -0500 Received: from aserp2120.oracle.com ([141.146.126.78]:38360 "EHLO aserp2120.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751249AbeA2DIK (ORCPT ); Sun, 28 Jan 2018 22:08:10 -0500 Received: from pps.filterd (aserp2120.oracle.com [127.0.0.1]) by aserp2120.oracle.com (8.16.0.22/8.16.0.22) with SMTP id w0T37ebI132250; Mon, 29 Jan 2018 03:07:40 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id; s=corp-2017-10-26; bh=MKP9Ri5JvXVYG9cKiH8wp4b/8bqt2wzJMMj8O1cLUs0=; b=q1lvqXsZKnUS5rHqFDhcdhTs+X7JiZuLUt2zo0N26uV4YpcwQGkwLHS6QW0J7ljJfjlD SWVZi09vYSoLP8p2ASoF+gnHxltK+C6+oodnDTgM7TCIqKYOhqmBknDQgU0Zp7uwiKg7 Vwsg1YIr2rVMGEhLLxw8XpnS3Q7+5RtJPnXqKVcsWaqHjgHLjcKJtuT5t52Ukfq2ceQq 134r+OnOeGOkN2LSmTFmYfz0fbPfZ5/BBdVqPGgGZPPmGYeRQiidAdfLcV2MwV5dZL9d zGnSZjIEAMlAdf8rlaB+xaune+G5nnjqZFV/FNAePSti35nRh2hMwzMRQnle9/RsRykv Ew== Received: from userv0022.oracle.com (userv0022.oracle.com [156.151.31.74]) by aserp2120.oracle.com with ESMTP id 2fsryhr9rj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 29 Jan 2018 03:07:40 +0000 Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by userv0022.oracle.com (8.14.4/8.14.4) with ESMTP id w0T37dJm007604 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 29 Jan 2018 03:07:39 GMT Received: from abhmp0018.oracle.com (abhmp0018.oracle.com [141.146.116.24]) by userv0122.oracle.com (8.14.4/8.14.4) with ESMTP id w0T37c7H003564; Mon, 29 Jan 2018 03:07:39 GMT Received: from will-ThinkCentre-M910s.cn.oracle.com (/10.182.70.254) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Sun, 28 Jan 2018 19:07:38 -0800 From: Jianchao Wang To: keith.busch@intel.com, axboe@fb.com, hch@lst.de, sagi@grimberg.me Cc: linux-nvme@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH] nvme-pci: use NOWAIT flag for nvme_set_host_mem Date: Mon, 29 Jan 2018 11:07:35 +0800 Message-Id: <1517195255-21832-1-git-send-email-jianchao.w.wang@oracle.com> X-Mailer: git-send-email 2.7.4 X-Proofpoint-Virus-Version: vendor=nai engine=5900 definitions=8788 signatures=668655 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=2 malwarescore=0 phishscore=0 bulkscore=0 spamscore=0 mlxscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1711220000 definitions=main-1801290041 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org nvme_set_host_mem will invoke nvme_alloc_request without NOWAIT flag, it is unsafe for nvme_dev_disable. The adminq driver tags may have been used up when the previous outstanding adminq requests cannot be completed due to some hardware error. We have to depend on the timeout path to complete the previous outstanding adminq requests and free the tags. However, nvme_timeout will invoke nvme_dev_disable and try to get the shutdown_lock which is held by another context who is sleeping to wait for the tags to be freed by timeout path. A deadlock comes up. To fix it, let nvme_set_host_mem use NOWAIT flag. Signed-off-by: Jianchao Wang --- drivers/nvme/host/pci.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c index 6fe7af0..9532529 100644 --- a/drivers/nvme/host/pci.c +++ b/drivers/nvme/host/pci.c @@ -1736,7 +1736,8 @@ static int nvme_set_host_mem(struct nvme_dev *dev, u32 bits) c.features.dword14 = cpu_to_le32(upper_32_bits(dma_addr)); c.features.dword15 = cpu_to_le32(dev->nr_host_mem_descs); - ret = nvme_submit_sync_cmd(dev->ctrl.admin_q, &c, NULL, 0); + ret = __nvme_submit_sync_cmd(dev->ctrl.admin_q, &c, NULL, NULL, 0, 0, + NVME_QID_ANY, 0, BLK_MQ_REQ_NOWAIT); if (ret) { dev_warn(dev->ctrl.device, "failed to set host mem (err %d, flags %#x).\n", -- 2.7.4