From: "Rafael J. Wysocki" <rafael@kernel.org>
To: Kai-Heng Feng <kai.heng.feng@canonical.com>
Cc: Mario Limonciello <Mario.Limonciello@dell.com>,
Keith Busch <kbusch@kernel.org>, Christoph Hellwig <hch@lst.de>,
Jens Axboe <axboe@fb.com>, Sagi Grimberg <sagi@grimberg.me>,
"Rafael J. Wysocki" <rafael@kernel.org>,
Linux PM <linux-pm@vger.kernel.org>,
Rafael Wysocki <rafael.j.wysocki@intel.com>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
linux-nvme <linux-nvme@lists.infradead.org>,
Keith Busch <keith.busch@intel.com>
Subject: Re: [PATCH] nvme-pci: Use non-operational power state instead of D3 on Suspend-to-Idle
Date: Fri, 10 May 2019 10:23:11 +0200 [thread overview]
Message-ID: <CAJZ5v0jAcX-Q2twygKoKvmx2H6tneHWimmH+c2GsYitHK5-knw@mail.gmail.com> (raw)
In-Reply-To: <BC5EB1D0-8718-48B3-ACAB-F7E5571D821D@canonical.com>
On Fri, May 10, 2019 at 8:08 AM Kai-Heng Feng
<kai.heng.feng@canonical.com> wrote:
>
> at 06:19, <Mario.Limonciello@dell.com> <Mario.Limonciello@dell.com> wrote:
>
> >> -----Original Message-----
> >> From: Keith Busch <kbusch@kernel.org>
> >> Sent: Thursday, May 9, 2019 4:54 PM
> >> To: Limonciello, Mario
> >> Cc: kai.heng.feng@canonical.com; hch@lst.de; axboe@fb.com;
> >> sagi@grimberg.me; rafael@kernel.org; linux-pm@vger.kernel.org;
> >> rafael.j.wysocki@intel.com; linux-kernel@vger.kernel.org; linux-
> >> nvme@lists.infradead.org; keith.busch@intel.com
> >> Subject: Re: [PATCH] nvme-pci: Use non-operational power state instead
> >> of D3 on
> >> Suspend-to-Idle
> >>
> >>
> >> [EXTERNAL EMAIL]
> >>
> >> On Thu, May 09, 2019 at 09:37:58PM +0000, Mario.Limonciello@dell.com
> >> wrote:
> >>>> +int nvme_set_power(struct nvme_ctrl *ctrl, unsigned npss)
> >>>> +{
> >>>> + int ret;
> >>>> +
> >>>> + mutex_lock(&ctrl->scan_lock);
> >>>> + nvme_start_freeze(ctrl);
> >>>> + nvme_wait_freeze(ctrl);
> >>>> + ret = nvme_set_features(ctrl, NVME_FEAT_POWER_MGMT, npss, NULL, 0,
> >>>> + NULL);
> >>>> + nvme_unfreeze(ctrl);
> >>>> + mutex_unlock(&ctrl->scan_lock);
> >>>> +
> >>>> + return ret;
> >>>> +}
> >>>> +EXPORT_SYMBOL_GPL(nvme_set_power);
> >>>
> >>> I believe without memory barriers at the end disks with HMB this will
> >>> still kernel panic (Such as Toshiba BG3).
> >>
> >> Well, the mutex has an implied memory barrier, but your HMB explanation
> >> doesn't make much sense to me anyway. The "mb()" in this thread's original
> >> patch is a CPU memory barrier, and the CPU had better not be accessing
> >> HMB memory. Is there something else going on here?
> >
> > Kai Heng will need to speak up a bit in his time zone as he has this disk
> > on hand,
> > but what I recall from our discussion was that DMA operation MemRd after
> > resume was the source of the hang.
>
> Yes, that’ what I was told by the NVMe vendor, so all I know is to impose a
> memory barrier.
> If mb() shouldn’t be used here, what’s the correct variant to use in this
> context?
>
> >
> >>> This still allows D3 which we found at least failed to go into deepest
> >>> state and
> >> blocked
> >>> platform s0ix for the following SSDs (maybe others):
> >>> Hynix PC601
> >>> LiteOn CL1
> >>
> >> We usually write features to spec first, then quirk non-compliant
> >> devices after.
> >
> > NVME spec doesn't talk about a relationship between SetFeatures w/
> > NVME_FEAT_POWER_MGMGT and D3 support, nor order of events.
> >
> > This is why we opened a dialog with storage vendors, including
> > contrasting the behavior
> > of Microsoft Windows inbox NVME driver and Intel's Windows RST driver.
> >
> > Those two I mention that come to mind immediately because they were most
> > recently
> > tested to fail. Our discussion with storage vendors overwhelmingly
> > requested
> > that we don't use D3 under S2I because their current firmware
> > architecture won't
> > support it.
> >
> > For example one vendor told us with current implementation that receiving
> > D3hot
> > after NVME shutdown will prevent being able to enter L1.2. D3hot entry
> > was supported
> > by an IRQ handler that isn't serviced in NVME shutdown state.
> >
> > Another vendor told us that with current implementation it's impossible
> > to transition
> > to PS4 (at least via APST) while L1.2 D3hot is active.
>
> I tested the patch from Keith and it has two issues just as simply skipping
> nvme_dev_disable():
> 1) It consumes more power in S2I
> 2) System freeze after resume
Well, the Keith's patch doesn't prevent pci_pm_suspend_noirq() from
asking for D3 and both of the symptoms above may be consequences of
that in principle.
next prev parent reply other threads:[~2019-05-10 8:24 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-08 18:59 [PATCH] nvme-pci: Use non-operational power state instead of D3 on Suspend-to-Idle Kai-Heng Feng
2019-05-08 19:15 ` Chaitanya Kulkarni
2019-05-08 19:16 ` Keith Busch
2019-05-08 19:30 ` Kai-Heng Feng
2019-05-08 19:38 ` Mario.Limonciello
2019-05-08 19:51 ` Christoph Hellwig
2019-05-08 20:28 ` Mario.Limonciello
2019-05-09 6:12 ` Christoph Hellwig
2019-05-09 6:48 ` Kai-Heng Feng
2019-05-09 6:52 ` Christoph Hellwig
2019-05-09 9:19 ` Rafael J. Wysocki
2019-05-09 9:25 ` Christoph Hellwig
2019-05-09 20:48 ` Rafael J. Wysocki
2019-05-09 9:07 ` Rafael J. Wysocki
2019-05-09 9:42 ` Kai-Heng Feng
2019-05-09 9:56 ` Christoph Hellwig
2019-05-09 10:28 ` Kai-Heng Feng
2019-05-09 10:31 ` Christoph Hellwig
2019-05-09 11:59 ` Kai-Heng Feng
2019-05-09 18:57 ` Mario.Limonciello
2019-05-09 19:28 ` Keith Busch
2019-05-09 20:54 ` Rafael J. Wysocki
2019-05-09 21:16 ` Keith Busch
2019-05-09 21:39 ` Rafael J. Wysocki
2019-05-09 21:37 ` Mario.Limonciello
2019-05-09 21:54 ` Keith Busch
2019-05-09 22:19 ` Mario.Limonciello
2019-05-10 6:05 ` Kai-Heng Feng
2019-05-10 8:23 ` Rafael J. Wysocki [this message]
2019-05-10 13:52 ` Keith Busch
2019-05-10 15:15 ` Kai Heng Feng
2019-05-10 15:36 ` Keith Busch
2019-05-10 14:02 ` Keith Busch
2019-05-10 15:18 ` Kai Heng Feng
2019-05-10 15:49 ` hch
2019-05-10 5:30 ` Christoph Hellwig
2019-05-10 13:51 ` Keith Busch
2019-05-09 16:20 ` Keith Busch
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAJZ5v0jAcX-Q2twygKoKvmx2H6tneHWimmH+c2GsYitHK5-knw@mail.gmail.com \
--to=rafael@kernel.org \
--cc=Mario.Limonciello@dell.com \
--cc=axboe@fb.com \
--cc=hch@lst.de \
--cc=kai.heng.feng@canonical.com \
--cc=kbusch@kernel.org \
--cc=keith.busch@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=linux-pm@vger.kernel.org \
--cc=rafael.j.wysocki@intel.com \
--cc=sagi@grimberg.me \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).