Received: by 10.223.176.5 with SMTP id f5csp2293750wra; Mon, 5 Feb 2018 01:23:00 -0800 (PST) X-Google-Smtp-Source: AH8x2263MEdqN7DQ4TMYL4K6WKweT3eiEsheXff+pmAW3Kk1Nm9avW15ATz4oZAGGhDriTjZ5mC8 X-Received: by 10.98.25.207 with SMTP id 198mr1877696pfz.83.1517822580593; Mon, 05 Feb 2018 01:23:00 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1517822580; cv=none; d=google.com; s=arc-20160816; b=COOpf/ZEIxMPwkecCQnxxrFfC6AT+orN2AsDxysynNt2kAIuPNiJt4WIooygkvkYkD 8VBbQs/WFkmS1DQIitQNKnrbeu3dToRflOjGPamB78Q6REMFGANMOgnnpRDUDuP45WFw Ys8qeBB4DsyZndDawO9FmpRILNDHg8KZzwA2z2KO14sD3YUnGRzHmWAvjXn0fscpuTcT BPnmP75GkrVB5VGlSqhLnGuzlTH4Wz2LgDyrY72gMrU9aACBSsdPns5IBG/B4WmTUbEH ERMMUkCU7CDBzpZwf96Z8vNOdVZcrxWoHIL4tnog41Q35f/S8HYlQT9LbKh1wcIYartB L5rA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=7xwrhO4iBS4sgRuV+OIJi3IazgVsa8mx/hdYC27C9d8=; b=U1dkc1963l1iMWKE2N+yIq6nRIDJawnmJDdg6YnMBtjSQQ983KzHSH9E/mgOtNtysa Vny+7z4ely7rZqFvC7H8BUWPt5dgo1uxEtiNimIQ6VgWG0VBUrqKCkbSS9VlpZ79D1Gi 7c7XkUGZJ5bLk5ahRb1k2ubYS/N9zlF33k5hfCI1f2QLoA3coDeEDhh+dlJWoNbGfe8Q NafMTp2tyAk8xT3xFIUQmI6W2ColXdHCgc8liEQCOHYQuo/jHVllAxhbqroxoY4LwPLN jnibxVvttSLU0OJ1E7/x2y/lGTyEZVuo4BEjXUC8sy5NL61i+SUZuR2POsucEL5n4H2F /eAQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@oracle.com header.s=corp-2017-10-26 header.b=X46o+sxl; 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 n128si2507002pgn.752.2018.02.05.01.22.46; Mon, 05 Feb 2018 01:23:00 -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=X46o+sxl; 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 S1752720AbeBEJVF (ORCPT + 99 others); Mon, 5 Feb 2018 04:21:05 -0500 Received: from aserp2120.oracle.com ([141.146.126.78]:55566 "EHLO aserp2120.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752317AbeBEJUv (ORCPT ); Mon, 5 Feb 2018 04:20:51 -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 w159IKpK029159; Mon, 5 Feb 2018 09:20:20 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2017-10-26; bh=7xwrhO4iBS4sgRuV+OIJi3IazgVsa8mx/hdYC27C9d8=; b=X46o+sxluwKctNUa/HzEjm2q4JyscGewZCAWn0BRkJPMusDGDHzMA5ALsTm/jkpjmPxH Fw8ATPexRQ3bzgSNIefW0jgAyFvbNRj9wOLDMy0VL3sPodlAPKah+pCxxvmx8yfaIpX4 aQyP9pxdwisI6Lre65A5c39qQndafaVLxceTd4bIa9MucFcsqFH20pamQCBTfMBaXEjv ZWoi7geEkbQEBUkuM4ki9u7LmAKok3QB3/0TDbF1wuhDqvTdPEfvn2wj6TERPWmY1Daz C9lnBqqJ0/vEwxr09HnafggWuIXO+6PBA9akvExz9I3DO4b5IjyNcXkihE2NwxQ/9Spk eQ== Received: from userv0021.oracle.com (userv0021.oracle.com [156.151.31.71]) by aserp2120.oracle.com with ESMTP id 2fxjmw0f1e-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 05 Feb 2018 09:20:20 +0000 Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by userv0021.oracle.com (8.14.4/8.14.4) with ESMTP id w159KJ24028032 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 5 Feb 2018 09:20:19 GMT Received: from abhmp0013.oracle.com (abhmp0013.oracle.com [141.146.116.19]) by userv0121.oracle.com (8.14.4/8.13.8) with ESMTP id w159KJ89016914; Mon, 5 Feb 2018 09:20:19 GMT Received: from will-ThinkCentre-M910s.cn.oracle.com (/10.182.70.254) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Mon, 05 Feb 2018 01:20:19 -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 V2 2/6] nvme-pci: fix the freeze and quiesce for shutdown and reset case Date: Mon, 5 Feb 2018 17:20:11 +0800 Message-Id: <1517822415-11710-3-git-send-email-jianchao.w.wang@oracle.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1517822415-11710-1-git-send-email-jianchao.w.wang@oracle.com> References: <1517822415-11710-1-git-send-email-jianchao.w.wang@oracle.com> X-Proofpoint-Virus-Version: vendor=nai engine=5900 definitions=8795 signatures=668662 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 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-1802050117 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently, request queue will be frozen and quiesced for both reset and shutdown case. This will trigger ioq requests in RECONNECTING state which should be avoided to prepare for following patch. Just freeze request queue for shutdown case and drain all the resudual entered requests after controller has been shutdown. Signed-off-by: Jianchao Wang --- drivers/nvme/host/pci.c | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c index 00cffed..a7fa397 100644 --- a/drivers/nvme/host/pci.c +++ b/drivers/nvme/host/pci.c @@ -2172,21 +2172,23 @@ static void nvme_dev_disable(struct nvme_dev *dev, bool shutdown) if (pci_is_enabled(pdev)) { u32 csts = readl(dev->bar + NVME_REG_CSTS); - if (dev->ctrl.state == NVME_CTRL_LIVE || - dev->ctrl.state == NVME_CTRL_RESETTING) - nvme_start_freeze(&dev->ctrl); dead = !!((csts & NVME_CSTS_CFS) || !(csts & NVME_CSTS_RDY) || pdev->error_state != pci_channel_io_normal); } - /* - * Give the controller a chance to complete all entered requests if - * doing a safe shutdown. - */ - if (!dead) { - if (shutdown) + /* Just freeze the queue for shutdown case */ + if (shutdown) { + if (dev->ctrl.state == NVME_CTRL_LIVE || + dev->ctrl.state == NVME_CTRL_RESETTING) + nvme_start_freeze(&dev->ctrl); + /* + * Give the controller a chance to complete all + * entered requests if doing a safe shutdown. + */ + if (!dead) nvme_wait_freeze_timeout(&dev->ctrl, NVME_IO_TIMEOUT); } + nvme_stop_queues(&dev->ctrl); if (!dead) { @@ -2210,12 +2212,15 @@ static void nvme_dev_disable(struct nvme_dev *dev, bool shutdown) blk_mq_tagset_busy_iter(&dev->admin_tagset, nvme_cancel_request, &dev->ctrl); /* - * The driver will not be starting up queues again if shutting down so - * must flush all entered requests to their failed completion to avoid - * deadlocking blk-mq hot-cpu notifier. + * For shutdown case, controller will not be setup again soon. If any + * residual requests here, the controller must have go wrong. Drain and + * fail all the residual entered IO requests. */ - if (shutdown) + if (shutdown) { nvme_start_queues(&dev->ctrl); + nvme_wait_freeze(&dev->ctrl); + nvme_stop_queues(&dev->ctrl); + } mutex_unlock(&dev->shutdown_lock); } @@ -2349,12 +2354,11 @@ static void nvme_reset_work(struct work_struct *work) nvme_remove_namespaces(&dev->ctrl); new_state = NVME_CTRL_ADMIN_ONLY; } else { - nvme_start_queues(&dev->ctrl); - nvme_wait_freeze(&dev->ctrl); /* hit this only when allocate tagset fails */ if (nvme_dev_add(dev)) new_state = NVME_CTRL_ADMIN_ONLY; - nvme_unfreeze(&dev->ctrl); + if (was_suspend) + nvme_unfreeze(&dev->ctrl); } /* -- 2.7.4