Received: by 2002:ab2:6203:0:b0:1f5:f2ab:c469 with SMTP id o3csp237442lqt; Thu, 18 Apr 2024 13:35:41 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCWsvP8ApVqdQUgo+74CXQQTAS9dWSazwNpmM+aPACjWsJX91VboFSGLCFag947LxOlBTNybQedI3IU25IQx0CqlckrDweSDREG6OnpyCg== X-Google-Smtp-Source: AGHT+IG4PzxRL/9dJYrySLSroLDlZogtKTB0rNXUqC9WZtvAmiuBWFJ6U8nDtOmgUuMbCAwiDmQt X-Received: by 2002:a05:6214:5c7:b0:69b:2664:cda2 with SMTP id t7-20020a05621405c700b0069b2664cda2mr156468qvz.8.1713472540943; Thu, 18 Apr 2024 13:35:40 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1713472540; cv=pass; d=google.com; s=arc-20160816; b=TlEKLV7XNZ1H8k3+okLtxjrUN/zhEtxoUdwE73HAA6UXTIsJl1vIt1pSwiR0+QUR7M 8tdzP5ML4YgYnPPPEYCcs6t19hFY314pzdxMSk1O5FtQrOEf3i2WYQ3X06OQFzTPon/G FktCKdX+L0H40gB/AEUiArsTehLW1KlAlpXcLAoLkhvfzIAHz1XkdO0r/Yj3SBdnmHxQ fpyYnuuw+gl5tYlOusVWpGd7NaGu4Oinq3ik+uHVcD07FsWPabaD+NyJ8gt3G0R8xd99 +4xzqwgAyhGixprSq4yc+AOL7Qg7bwYID968iUZUArjhOIs3vYLi6snVH8ksB5G0Og5n +bdQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=in-reply-to:content-disposition:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:message-id:subject:cc:to:from :date:dkim-signature; bh=de3+dHvWukTq+foTWR9kJNhz2ENgsX4tjRNUOESHt2A=; fh=VYMqH73F9+b1ed1IW20V9u72cA7OxqzpYRBF5w7FWqw=; b=Yyl0QyoaySWq2hY98wMpG4VzLGKzgq8JZp7Zdn9qcJQn6ju0hRjmm68cY3oaNNGHw7 ReXPSamvcuHX6fj80EGUHsfukW/SvL+hZ8kqhUHxnhlXJfNST/XA0xvZ7zZWwvBIBtbh 2k2W63ckXA5D4lwEyZDVjJh5CPcXzt0sGsHPvNe19y0kTgkP9eL2rvfxzoHbqmipPgUO mY3laLatv382g64kCb3621pBGmugKGuc4DV8IL1r07Ne073+YsPAkDhG6O33TlMCVN3r 6Ptztt6isfD9QPlt1ca5XyiIhbXkyY8zs0RpTqzLTV1KicJmg/0DBZ4k1RMBs+/cw4fm QKZQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=lqMh5SX8; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-150748-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-150748-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id q12-20020a05621419ec00b006993a4735d5si2343576qvc.187.2024.04.18.13.35.40 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Apr 2024 13:35:40 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-150748-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=lqMh5SX8; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-150748-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-150748-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id A74481C21BFA for ; Thu, 18 Apr 2024 20:35:40 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id BEB7719066B; Thu, 18 Apr 2024 20:35:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="lqMh5SX8" Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E4A462F30; Thu, 18 Apr 2024 20:35:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713472534; cv=none; b=I0mRYmGB0yWujApE1L5az0gTUTfIQCaGS4SYJBJFFRP4Jpr4be6IuMQwGMjI4Fupkdk5JNYgQz0rxTfGQdjDypNhgFdrU40axf1IwMurzXh943jmWlQFiQ362o8T51RBJoutK0eaRv2Q6Thxtd86MDE9EJVxr/THvbLgFmsBC70= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713472534; c=relaxed/simple; bh=/k8CBxtFFxCCrPyB0ZQkRVXX+qR7tZDSRdyejPSOIGs=; h=Date:From:To:Cc:Subject:Message-ID:MIME-Version:Content-Type: Content-Disposition:In-Reply-To; b=M+ELGr6ALsN4FQ7hYJnl9iA6nX1WwR0YtBYuvsx2th6DOL/OKRy56gvVV8PABOjhsProXJD74Vcej+TfL/Z9x597G2T2/4JlvVoYaxkAmnPc/oY7pvnmxXZNmtXxQnaHWiNQmdEOUZQdNDd796p3g7YOU03mR8VD9z+7jI/IDAM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=lqMh5SX8; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 22406C113CC; Thu, 18 Apr 2024 20:35:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1713472533; bh=/k8CBxtFFxCCrPyB0ZQkRVXX+qR7tZDSRdyejPSOIGs=; h=Date:From:To:Cc:Subject:In-Reply-To:From; b=lqMh5SX89qQB4n0qiw+izwaIkIAQ9m5dPQcveLPH9gV04HsYTxKOqyV8WjIy8YPDm BjMiHFMgSW1lLjFpuhr5b/MKyBGNWBuqzUxQDvHB8FONBTMR1Mx9rd/qZtH2C/QJHh T1WQQnf/Fl3i57nr5m7v09tpEhCH5clUGCA+23zY/B/8P4w5LxBpU6NQPtUA59FhB3 4p8O4tUN8AyPthpZOn5UtZ1MbfKcLlxLGSAnRTQ1B7E3NCabGXoeS32keleyGYfETw brXTPMqtDcxieiwey+Qu8NTZlP8WR+aLwPLPYKRTrsiSdgRgDS1+v7eTDwHkRrB5/M HQZsTmxFMiBgQ== Date: Thu, 18 Apr 2024 15:35:31 -0500 From: Bjorn Helgaas To: Kai-Heng Feng Cc: bhelgaas@google.com, mahesh@linux.ibm.com, oohall@gmail.com, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, bagasdotme@gmail.com, regressions@lists.linux.dev, linux-nvme@lists.infradead.org, kch@nvidia.com, hch@lst.de, gloriouseggroll@gmail.com, kbusch@kernel.org, sagi@grimberg.me, hare@suse.de Subject: Re: [PATCH v8 2/3] PCI/AER: Disable AER service on suspend Message-ID: <20240418203531.GA251408@bhelgaas> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240416043225.1462548-2-kai.heng.feng@canonical.com> On Tue, Apr 16, 2024 at 12:32:24PM +0800, Kai-Heng Feng wrote: > When the power rail gets cut off, the hardware can create some electric > noise on the link that triggers AER. If IRQ is shared between AER with > PME, such AER noise will cause a spurious wakeup on system suspend. > > When the power rail gets back, the firmware of the device resets itself > and can create unexpected behavior like sending PTM messages. For this > case, the driver will always be too late to toggle off features should > be disabled. > > As Per PCIe Base Spec 5.0, section 5.2, titled "Link State Power > Management", TLP and DLLP transmission are disabled for a Link in L2/L3 > Ready (D3hot), L2 (D3cold with aux power) and L3 (D3cold) states. So if > the power will be turned off during suspend process, disable AER service > and re-enable it during the resume process. This should not affect the > basic functionality. > > Link: https://bugzilla.kernel.org/show_bug.cgi?id=209149 > Link: https://bugzilla.kernel.org/show_bug.cgi?id=216295 > Link: https://bugzilla.kernel.org/show_bug.cgi?id=218090 > Signed-off-by: Kai-Heng Feng Thanks for reviving this series. I tried follow the history about this, but there are at least two series that were very similar and I can't put it all together. > --- > v8: > - Add more bug reports. > > v7: > - Wording > - Disable AER completely (again) if power will be turned off > > v6: > v5: > - Wording. > > v4: > v3: > - No change. > > v2: > - Only disable AER IRQ. > - No more check on PME IRQ#. > - Use helper. > > drivers/pci/pcie/aer.c | 25 +++++++++++++++++++++++++ > 1 file changed, 25 insertions(+) > > diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c > index ac6293c24976..bea7818c2d1b 100644 > --- a/drivers/pci/pcie/aer.c > +++ b/drivers/pci/pcie/aer.c > @@ -28,6 +28,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -1497,6 +1498,28 @@ static int aer_probe(struct pcie_device *dev) > return 0; > } > > +static int aer_suspend(struct pcie_device *dev) > +{ > + struct aer_rpc *rpc = get_service_data(dev); > + struct pci_dev *pdev = rpc->rpd; > + > + if (pci_ancestor_pr3_present(pdev) || pm_suspend_via_firmware()) > + aer_disable_rootport(rpc); Why do we check pci_ancestor_pr3_present(pdev) and pm_suspend_via_firmware()? I'm getting pretty convinced that we need to disable AER interrupts on suspend in general. I think it will be better if we do that consistently on all platforms, not special cases based on details of how we suspend. Also, why do we use aer_disable_rootport() instead of just aer_disable_irq()? I think it's the interrupt that causes issues on suspend. I see that there *were* some versions that used aer_disable_irq(), but I can't find the reason it changed. > + > + return 0; > +} > + > +static int aer_resume(struct pcie_device *dev) > +{ > + struct aer_rpc *rpc = get_service_data(dev); > + struct pci_dev *pdev = rpc->rpd; > + > + if (pci_ancestor_pr3_present(pdev) || pm_resume_via_firmware()) > + aer_enable_rootport(rpc); > + > + return 0; > +} > + > /** > * aer_root_reset - reset Root Port hierarchy, RCEC, or RCiEP > * @dev: pointer to Root Port, RCEC, or RCiEP > @@ -1561,6 +1584,8 @@ static struct pcie_port_service_driver aerdriver = { > .service = PCIE_PORT_SERVICE_AER, > > .probe = aer_probe, > + .suspend = aer_suspend, > + .resume = aer_resume, > .remove = aer_remove, > }; > > -- > 2.34.1 >