Received: by 2002:a17:90a:9307:0:0:0:0 with SMTP id p7csp3965975pjo; Tue, 3 Mar 2020 10:13:03 -0800 (PST) X-Google-Smtp-Source: ADFU+vsYldMt4J1m8uSfV80rG3+M2axA+Gc2TnldtkhtTVl/4i67DJfx7PlVmz/AABc/J2QQfJ3B X-Received: by 2002:a9d:2c6a:: with SMTP id f97mr4044214otb.254.1583259182993; Tue, 03 Mar 2020 10:13:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1583259182; cv=none; d=google.com; s=arc-20160816; b=HPI6F//zLMS1jT5vqwziFsvX0c6tGDra4Uvr9qIE4cWk+jFCx0uOMKopKQ56wrNydP VbjCuqm2PNTYANoYygXImal78XKl6fgcLj9xuC53qVrvQ5qBG03TuCUc+BcNs/4YA3mb J5gqyVAPgAAQE75CWo6ZqOHQHOqz4Bg1CyD0LuCkxIaPO8RIrfBBzM71GvHtHAVABA/p svKvqWsi8+XNi/JgFmlmpGh1Q/BjNKInaSln84KVd5Mn2GxWiHM3FfcleONCue4KekgY 3Xjzmishbx+Xfx6j3UwIyMpQbTGOck1V6t5y3tXsUZZrjucs9vo1D6NgyZLiV+LIi45Q wenQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=o49Ftb1NzNF4SVBgiIe4WHkKWlOFMyHqT16L5roJ9is=; b=aWPLV4Opm43e/dAwR1oamg/3VWp114tlfIQAMGLJlnQUz3zkV5Nvv6/89N+R+tJDE1 fQ8hp4D3gLGsvaorfSitOdxvvyjgzjmi3R3mYsw+xw5dmTteY9JhITZ+rzqgJfuzV3eR hTu7JRiH38rUF6EtNDdzWesYECCwBOadXT0X8bCTZtCRmDuI/vVlKoEWsoAfL3A1knDp JdHFCeWxR5v8CuxokiJHwK4CIGUBSYJ+wtj48IulGaiDCLdY9QkU9Kv769s1mZXU7yaD +O3sZQDZ43nvvDWBXKG9pOawMw/DnQFr9WCpmAIUvqFj5XwUn3iNv7zolLuZMg+xBdxC udMw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=0kn5d5Nr; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t5si3950100otc.315.2020.03.03.10.12.50; Tue, 03 Mar 2020 10:13:02 -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=@kernel.org header.s=default header.b=0kn5d5Nr; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731682AbgCCRsu (ORCPT + 99 others); Tue, 3 Mar 2020 12:48:50 -0500 Received: from mail.kernel.org ([198.145.29.99]:56000 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731672AbgCCRsr (ORCPT ); Tue, 3 Mar 2020 12:48:47 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 1685320870; Tue, 3 Mar 2020 17:48:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1583257726; bh=h8NmjxNAA6sNUld5Zi/eWJX1DH9dYR8b7OV6seT5V/U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=0kn5d5Nre4rWm3MdZKjpsaDN4m5yPiw0hZopWVufet61NcbXzPjK4gRg5taxEnm4L EWXvIM/4xwACn2XKecxjHr/f3xklSqPVEDcnjP1y0ISt8Mw3iD/i4A6t3W8KZ3/VDN 288qvSaDHCol60wT1Ka5CXE/BCjYWarkULfXiPCY= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Sagi Grimberg , Christoph Hellwig , Keith Busch , Jens Axboe , Sasha Levin Subject: [PATCH 5.5 080/176] nvme/pci: move cqe check after device shutdown Date: Tue, 3 Mar 2020 18:42:24 +0100 Message-Id: <20200303174313.900188561@linuxfoundation.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200303174304.593872177@linuxfoundation.org> References: <20200303174304.593872177@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Keith Busch [ Upstream commit fa46c6fb5d61b1f17b06d7c6ef75478b576304c7 ] Many users have reported nvme triggered irq_startup() warnings during shutdown. The driver uses the nvme queue's irq to synchronize scanning for completions, and enabling an interrupt affined to only offline CPUs triggers the alarming warning. Move the final CQE check to after disabling the device and all registered interrupts have been torn down so that we do not have any IRQ to synchronize. Link: https://bugzilla.kernel.org/show_bug.cgi?id=206509 Reviewed-by: Sagi Grimberg Reviewed-by: Christoph Hellwig Signed-off-by: Keith Busch Signed-off-by: Jens Axboe Signed-off-by: Sasha Levin --- drivers/nvme/host/pci.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c index da392b50f73e7..9c80f9f081496 100644 --- a/drivers/nvme/host/pci.c +++ b/drivers/nvme/host/pci.c @@ -1401,6 +1401,23 @@ static void nvme_disable_admin_queue(struct nvme_dev *dev, bool shutdown) nvme_poll_irqdisable(nvmeq, -1); } +/* + * Called only on a device that has been disabled and after all other threads + * that can check this device's completion queues have synced. This is the + * last chance for the driver to see a natural completion before + * nvme_cancel_request() terminates all incomplete requests. + */ +static void nvme_reap_pending_cqes(struct nvme_dev *dev) +{ + u16 start, end; + int i; + + for (i = dev->ctrl.queue_count - 1; i > 0; i--) { + nvme_process_cq(&dev->queues[i], &start, &end, -1); + nvme_complete_cqes(&dev->queues[i], start, end); + } +} + static int nvme_cmb_qdepth(struct nvme_dev *dev, int nr_io_queues, int entry_size) { @@ -2235,11 +2252,6 @@ static bool __nvme_disable_io_queues(struct nvme_dev *dev, u8 opcode) if (timeout == 0) return false; - /* handle any remaining CQEs */ - if (opcode == nvme_admin_delete_cq && - !test_bit(NVMEQ_DELETE_ERROR, &nvmeq->flags)) - nvme_poll_irqdisable(nvmeq, -1); - sent--; if (nr_queues) goto retry; @@ -2428,6 +2440,7 @@ static void nvme_dev_disable(struct nvme_dev *dev, bool shutdown) nvme_suspend_io_queues(dev); nvme_suspend_queue(&dev->queues[0]); nvme_pci_disable(dev); + nvme_reap_pending_cqes(dev); blk_mq_tagset_busy_iter(&dev->tagset, nvme_cancel_request, &dev->ctrl); blk_mq_tagset_busy_iter(&dev->admin_tagset, nvme_cancel_request, &dev->ctrl); -- 2.20.1