* [PATCH] PCI/sysfs: Protect driver's D3cold preference from user space
@ 2023-09-18 12:48 Lukas Wunner
2023-09-18 13:07 ` Mika Westerberg
` (2 more replies)
0 siblings, 3 replies; 11+ messages in thread
From: Lukas Wunner @ 2023-09-18 12:48 UTC (permalink / raw)
To: Bjorn Helgaas, Mika Westerberg
Cc: Rafael J . Wysocki, linux-pci, Mario Limonciello
struct pci_dev contains two flags which govern whether the device may
suspend to D3cold:
* no_d3cold provides an opt-out for drivers (e.g. if a device is known
to not wake from D3cold)
* d3cold_allowed provides an opt-out for user space (default is true,
user space may set to false)
Since commit 9d26d3a8f1b0 ("PCI: Put PCIe ports into D3 during suspend"),
the user space setting overwrites the driver setting. Essentially user
space is trusted to know better than the driver whether D3cold is
working.
That feels unsafe and wrong. Assume that the change was introduced
inadvertently and do not overwrite no_d3cold when d3cold_allowed is
modified. Instead, consider d3cold_allowed in addition to no_d3cold
when choosing a suspend state for the device.
That way, user space may opt out of D3cold if the driver hasn't, but it
may no longer force an opt in if the driver has opted out.
Fixes: 9d26d3a8f1b0 ("PCI: Put PCIe ports into D3 during suspend")
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Cc: stable@vger.kernel.org # v4.8+
Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
---
drivers/pci/pci-acpi.c | 2 +-
drivers/pci/pci-sysfs.c | 5 +----
2 files changed, 2 insertions(+), 5 deletions(-)
diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c
index 7aa1c20..2f5eddf 100644
--- a/drivers/pci/pci-acpi.c
+++ b/drivers/pci/pci-acpi.c
@@ -911,7 +911,7 @@ pci_power_t acpi_pci_choose_state(struct pci_dev *pdev)
{
int acpi_state, d_max;
- if (pdev->no_d3cold)
+ if (pdev->no_d3cold || !pdev->d3cold_allowed)
d_max = ACPI_STATE_D3_HOT;
else
d_max = ACPI_STATE_D3_COLD;
diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
index ba38fc4..e18ccd2 100644
--- a/drivers/pci/pci-sysfs.c
+++ b/drivers/pci/pci-sysfs.c
@@ -530,10 +530,7 @@ static ssize_t d3cold_allowed_store(struct device *dev,
return -EINVAL;
pdev->d3cold_allowed = !!val;
- if (pdev->d3cold_allowed)
- pci_d3cold_enable(pdev);
- else
- pci_d3cold_disable(pdev);
+ pci_bridge_d3_update(pdev);
pm_runtime_resume(dev);
--
2.39.2
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH] PCI/sysfs: Protect driver's D3cold preference from user space
2023-09-18 12:48 [PATCH] PCI/sysfs: Protect driver's D3cold preference from user space Lukas Wunner
@ 2023-09-18 13:07 ` Mika Westerberg
2023-09-18 13:14 ` Mario Limonciello
2023-09-28 22:36 ` Bjorn Helgaas
2023-09-29 22:48 ` Bjorn Helgaas
2 siblings, 1 reply; 11+ messages in thread
From: Mika Westerberg @ 2023-09-18 13:07 UTC (permalink / raw)
To: Lukas Wunner
Cc: Bjorn Helgaas, Rafael J . Wysocki, linux-pci, Mario Limonciello
Hi Lukas,
On Mon, Sep 18, 2023 at 02:48:01PM +0200, Lukas Wunner wrote:
> struct pci_dev contains two flags which govern whether the device may
> suspend to D3cold:
>
> * no_d3cold provides an opt-out for drivers (e.g. if a device is known
> to not wake from D3cold)
>
> * d3cold_allowed provides an opt-out for user space (default is true,
> user space may set to false)
>
> Since commit 9d26d3a8f1b0 ("PCI: Put PCIe ports into D3 during suspend"),
> the user space setting overwrites the driver setting. Essentially user
> space is trusted to know better than the driver whether D3cold is
> working.
>
> That feels unsafe and wrong. Assume that the change was introduced
> inadvertently and do not overwrite no_d3cold when d3cold_allowed is
> modified. Instead, consider d3cold_allowed in addition to no_d3cold
> when choosing a suspend state for the device.
>
> That way, user space may opt out of D3cold if the driver hasn't, but it
> may no longer force an opt in if the driver has opted out.
Makes sense. I just wonder should the sysfs write fail from userspace
perspective if the driver has opted out and userspace tries to force it?
Or it does that already?
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] PCI/sysfs: Protect driver's D3cold preference from user space
2023-09-18 13:07 ` Mika Westerberg
@ 2023-09-18 13:14 ` Mario Limonciello
2023-09-18 13:24 ` Lukas Wunner
0 siblings, 1 reply; 11+ messages in thread
From: Mario Limonciello @ 2023-09-18 13:14 UTC (permalink / raw)
To: Mika Westerberg, Lukas Wunner
Cc: Bjorn Helgaas, Rafael J . Wysocki, linux-pci
On 9/18/2023 08:07, Mika Westerberg wrote:
> Hi Lukas,
>
> On Mon, Sep 18, 2023 at 02:48:01PM +0200, Lukas Wunner wrote:
>> struct pci_dev contains two flags which govern whether the device may
>> suspend to D3cold:
>>
>> * no_d3cold provides an opt-out for drivers (e.g. if a device is known
>> to not wake from D3cold)
>>
>> * d3cold_allowed provides an opt-out for user space (default is true,
>> user space may set to false)
>>
>> Since commit 9d26d3a8f1b0 ("PCI: Put PCIe ports into D3 during suspend"),
>> the user space setting overwrites the driver setting. Essentially user
>> space is trusted to know better than the driver whether D3cold is
>> working.
>>
>> That feels unsafe and wrong. Assume that the change was introduced
>> inadvertently and do not overwrite no_d3cold when d3cold_allowed is
>> modified. Instead, consider d3cold_allowed in addition to no_d3cold
>> when choosing a suspend state for the device.
>>
>> That way, user space may opt out of D3cold if the driver hasn't, but it
>> may no longer force an opt in if the driver has opted out.
>
> Makes sense. I just wonder should the sysfs write fail from userspace
> perspective if the driver has opted out and userspace tries to force it?
> Or it does that already?
What's the history behind why userspace is allowed to opt a device out
of D3cold in the first place?
It feels like it should have been a debugging only thing to me.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] PCI/sysfs: Protect driver's D3cold preference from user space
2023-09-18 13:14 ` Mario Limonciello
@ 2023-09-18 13:24 ` Lukas Wunner
2023-09-18 13:28 ` Mario Limonciello
0 siblings, 1 reply; 11+ messages in thread
From: Lukas Wunner @ 2023-09-18 13:24 UTC (permalink / raw)
To: Mario Limonciello
Cc: Mika Westerberg, Bjorn Helgaas, Rafael J . Wysocki, linux-pci
On Mon, Sep 18, 2023 at 08:14:21AM -0500, Mario Limonciello wrote:
> On 9/18/2023 08:07, Mika Westerberg wrote:
> > On Mon, Sep 18, 2023 at 02:48:01PM +0200, Lukas Wunner wrote:
> > > struct pci_dev contains two flags which govern whether the device may
> > > suspend to D3cold:
> > >
> > > * no_d3cold provides an opt-out for drivers (e.g. if a device is known
> > > to not wake from D3cold)
> > >
> > > * d3cold_allowed provides an opt-out for user space (default is true,
> > > user space may set to false)
> > >
> > > Since commit 9d26d3a8f1b0 ("PCI: Put PCIe ports into D3 during suspend"),
> > > the user space setting overwrites the driver setting. Essentially user
> > > space is trusted to know better than the driver whether D3cold is
> > > working.
> > >
> > > That feels unsafe and wrong. Assume that the change was introduced
> > > inadvertently and do not overwrite no_d3cold when d3cold_allowed is
> > > modified. Instead, consider d3cold_allowed in addition to no_d3cold
> > > when choosing a suspend state for the device.
> > >
> > > That way, user space may opt out of D3cold if the driver hasn't, but it
> > > may no longer force an opt in if the driver has opted out.
> >
> > Makes sense. I just wonder should the sysfs write fail from userspace
> > perspective if the driver has opted out and userspace tries to force it?
> > Or it does that already?
>
> What's the history behind why userspace is allowed to opt a device out of
> D3cold in the first place?
>
> It feels like it should have been a debugging only thing to me.
That's a fair question.
Apparently the default for d3cold_allowed was originally "false"
and user space could opt in to D3cold. Then commit 4f9c1397e2e8
("PCI/PM: Enable D3/D3cold by default for most devices") changed
the default to "true". That was 11 years ago.
I agree that today this should all work automatically and a
user space option to disable D3cold on a per-device basis only
really makes sense as a debugging aid, hence belongs in debugfs.
Thanks,
Lukas
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] PCI/sysfs: Protect driver's D3cold preference from user space
2023-09-18 13:24 ` Lukas Wunner
@ 2023-09-18 13:28 ` Mario Limonciello
2023-09-18 14:26 ` Lukas Wunner
0 siblings, 1 reply; 11+ messages in thread
From: Mario Limonciello @ 2023-09-18 13:28 UTC (permalink / raw)
To: Lukas Wunner
Cc: Mika Westerberg, Bjorn Helgaas, Rafael J . Wysocki, linux-pci
On 9/18/2023 08:24, Lukas Wunner wrote:
> On Mon, Sep 18, 2023 at 08:14:21AM -0500, Mario Limonciello wrote:
>> On 9/18/2023 08:07, Mika Westerberg wrote:
>>> On Mon, Sep 18, 2023 at 02:48:01PM +0200, Lukas Wunner wrote:
>>>> struct pci_dev contains two flags which govern whether the device may
>>>> suspend to D3cold:
>>>>
>>>> * no_d3cold provides an opt-out for drivers (e.g. if a device is known
>>>> to not wake from D3cold)
>>>>
>>>> * d3cold_allowed provides an opt-out for user space (default is true,
>>>> user space may set to false)
>>>>
>>>> Since commit 9d26d3a8f1b0 ("PCI: Put PCIe ports into D3 during suspend"),
>>>> the user space setting overwrites the driver setting. Essentially user
>>>> space is trusted to know better than the driver whether D3cold is
>>>> working.
>>>>
>>>> That feels unsafe and wrong. Assume that the change was introduced
>>>> inadvertently and do not overwrite no_d3cold when d3cold_allowed is
>>>> modified. Instead, consider d3cold_allowed in addition to no_d3cold
>>>> when choosing a suspend state for the device.
>>>>
>>>> That way, user space may opt out of D3cold if the driver hasn't, but it
>>>> may no longer force an opt in if the driver has opted out.
>>>
>>> Makes sense. I just wonder should the sysfs write fail from userspace
>>> perspective if the driver has opted out and userspace tries to force it?
>>> Or it does that already?
>>
>> What's the history behind why userspace is allowed to opt a device out of
>> D3cold in the first place?
>>
>> It feels like it should have been a debugging only thing to me.
>
> That's a fair question.
>
> Apparently the default for d3cold_allowed was originally "false"
> and user space could opt in to D3cold. Then commit 4f9c1397e2e8
> ("PCI/PM: Enable D3/D3cold by default for most devices") changed
> the default to "true". That was 11 years ago.
>
> I agree that today this should all work automatically and a
> user space option to disable D3cold on a per-device basis only
> really makes sense as a debugging aid, hence belongs in debugfs.
>
Thanks. Then perhaps as part of moving it to debugfs it makes sense to
simplify the logic.
IE also drop the d3cold_allowed member from struct pci_dev and instead
make the debugfs item reflect the "no_d3cold" member.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] PCI/sysfs: Protect driver's D3cold preference from user space
2023-09-18 13:28 ` Mario Limonciello
@ 2023-09-18 14:26 ` Lukas Wunner
2023-09-18 14:52 ` Mario Limonciello
0 siblings, 1 reply; 11+ messages in thread
From: Lukas Wunner @ 2023-09-18 14:26 UTC (permalink / raw)
To: Mario Limonciello
Cc: Mika Westerberg, Bjorn Helgaas, Rafael J . Wysocki, linux-pci
On Mon, Sep 18, 2023 at 08:28:51AM -0500, Mario Limonciello wrote:
> On 9/18/2023 08:24, Lukas Wunner wrote:
> > On Mon, Sep 18, 2023 at 08:14:21AM -0500, Mario Limonciello wrote:
> > > What's the history behind why userspace is allowed to opt a device out of
> > > D3cold in the first place?
> > >
> > > It feels like it should have been a debugging only thing to me.
> >
> > That's a fair question.
> >
> > Apparently the default for d3cold_allowed was originally "false"
> > and user space could opt in to D3cold. Then commit 4f9c1397e2e8
> > ("PCI/PM: Enable D3/D3cold by default for most devices") changed
> > the default to "true". That was 11 years ago.
> >
> > I agree that today this should all work automatically and a
> > user space option to disable D3cold on a per-device basis only
> > really makes sense as a debugging aid, hence belongs in debugfs.
> >
>
> Thanks. Then perhaps as part of moving it to debugfs it makes sense to
> simplify the logic.
d3cold_allowed is documented in Documentation/ABI/testing/sysfs-bus-pci,
so it's user space ABI which we're not allowed to break. We'd have to
declare it deprecated, emit a warning when it's used and slowly phase
it out over the years.
Until then, the $SUBJECT_PATCH probably still makes sense to reinstate
the behavior we had until 2016...
Thanks,
Lukas
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] PCI/sysfs: Protect driver's D3cold preference from user space
2023-09-18 14:26 ` Lukas Wunner
@ 2023-09-18 14:52 ` Mario Limonciello
0 siblings, 0 replies; 11+ messages in thread
From: Mario Limonciello @ 2023-09-18 14:52 UTC (permalink / raw)
To: Lukas Wunner
Cc: Mika Westerberg, Bjorn Helgaas, Rafael J . Wysocki, linux-pci
On 9/18/2023 09:26, Lukas Wunner wrote:
> On Mon, Sep 18, 2023 at 08:28:51AM -0500, Mario Limonciello wrote:
>> On 9/18/2023 08:24, Lukas Wunner wrote:
>>> On Mon, Sep 18, 2023 at 08:14:21AM -0500, Mario Limonciello wrote:
>>>> What's the history behind why userspace is allowed to opt a device out of
>>>> D3cold in the first place?
>>>>
>>>> It feels like it should have been a debugging only thing to me.
>>>
>>> That's a fair question.
>>>
>>> Apparently the default for d3cold_allowed was originally "false"
>>> and user space could opt in to D3cold. Then commit 4f9c1397e2e8
>>> ("PCI/PM: Enable D3/D3cold by default for most devices") changed
>>> the default to "true". That was 11 years ago.
>>>
>>> I agree that today this should all work automatically and a
>>> user space option to disable D3cold on a per-device basis only
>>> really makes sense as a debugging aid, hence belongs in debugfs.
>>>
>>
>> Thanks. Then perhaps as part of moving it to debugfs it makes sense to
>> simplify the logic.
>
> d3cold_allowed is documented in Documentation/ABI/testing/sysfs-bus-pci,
> so it's user space ABI which we're not allowed to break. We'd have to
> declare it deprecated, emit a warning when it's used and slowly phase
> it out over the years.
What about as part of deprecating it to make it always return -EINVAL no
matter the input? The ABI isn't broken, but it allows for the optimization.
>
> Until then, the $SUBJECT_PATCH probably still makes sense to reinstate
> the behavior we had until 2016...
>
> Thanks,
>
> Lukas
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] PCI/sysfs: Protect driver's D3cold preference from user space
2023-09-18 12:48 [PATCH] PCI/sysfs: Protect driver's D3cold preference from user space Lukas Wunner
2023-09-18 13:07 ` Mika Westerberg
@ 2023-09-28 22:36 ` Bjorn Helgaas
2023-09-29 4:44 ` Mika Westerberg
2023-09-29 22:48 ` Bjorn Helgaas
2 siblings, 1 reply; 11+ messages in thread
From: Bjorn Helgaas @ 2023-09-28 22:36 UTC (permalink / raw)
To: Lukas Wunner
Cc: Mika Westerberg, Rafael J . Wysocki, linux-pci, Mario Limonciello
On Mon, Sep 18, 2023 at 02:48:01PM +0200, Lukas Wunner wrote:
> struct pci_dev contains two flags which govern whether the device may
> suspend to D3cold:
>
> * no_d3cold provides an opt-out for drivers (e.g. if a device is known
> to not wake from D3cold)
>
> * d3cold_allowed provides an opt-out for user space (default is true,
> user space may set to false)
>
> Since commit 9d26d3a8f1b0 ("PCI: Put PCIe ports into D3 during suspend"),
> the user space setting overwrites the driver setting. Essentially user
> space is trusted to know better than the driver whether D3cold is
> working.
>
> That feels unsafe and wrong. Assume that the change was introduced
> inadvertently and do not overwrite no_d3cold when d3cold_allowed is
> modified. Instead, consider d3cold_allowed in addition to no_d3cold
> when choosing a suspend state for the device.
>
> That way, user space may opt out of D3cold if the driver hasn't, but it
> may no longer force an opt in if the driver has opted out.
>
> Fixes: 9d26d3a8f1b0 ("PCI: Put PCIe ports into D3 during suspend")
> Signed-off-by: Lukas Wunner <lukas@wunner.de>
> Cc: stable@vger.kernel.org # v4.8+
> Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
Mika and Mario, you both commented on this, but I *think* you were
both OK with it as-is for now? If so, can you give a Reviewed-by?
I don't want to go ahead if you have any concerns.
Since we're touching this area, is there anything we can do to clarify
the comments?
unsigned int no_d3cold:1; /* D3cold is forbidden */
unsigned int bridge_d3:1; /* Allow D3 for bridge */
unsigned int d3cold_allowed:1; /* D3cold is allowed by user */
These all have to do with D3, but:
- For no_d3cold, "D3cold is forbidden" doesn't capture the notion
that "driver knows the device doesn't wake from D3cold"
- It's not clear whether "bridge_d3" applies to D3hot, D3cold, or
both.
- The computation of "bridge_d3" is ... complicated. It depends on
all the device/platform behavior assumptions in
pci_bridge_d3_possible(). And *also* (I think) the user-space
"d3cold_allowed" knob, via pci_dev_check_d3cold() in
pci_bridge_d3_update().
So it's kind of a mix of hardware characteristics and
administrative controls.
Any comment updates could be a separate patch so as not to complicate
this one.
> @@ -911,7 +911,7 @@ pci_power_t acpi_pci_choose_state(struct pci_dev *pdev)
> {
> int acpi_state, d_max;
>
> - if (pdev->no_d3cold)
> + if (pdev->no_d3cold || !pdev->d3cold_allowed)
Haha, looks good. Too bad the senses are opposite ("no_d3cold" and
"!d3cold_allowed"), but that's for another day.
> d_max = ACPI_STATE_D3_HOT;
> else
> d_max = ACPI_STATE_D3_COLD;
> diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
> index ba38fc4..e18ccd2 100644
> --- a/drivers/pci/pci-sysfs.c
> +++ b/drivers/pci/pci-sysfs.c
> @@ -530,10 +530,7 @@ static ssize_t d3cold_allowed_store(struct device *dev,
> return -EINVAL;
>
> pdev->d3cold_allowed = !!val;
> - if (pdev->d3cold_allowed)
> - pci_d3cold_enable(pdev);
> - else
> - pci_d3cold_disable(pdev);
> + pci_bridge_d3_update(pdev);
This is great. D3 is still a tangle, but this is a significant
improvement.
> pm_runtime_resume(dev);
Bjorn
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] PCI/sysfs: Protect driver's D3cold preference from user space
2023-09-28 22:36 ` Bjorn Helgaas
@ 2023-09-29 4:44 ` Mika Westerberg
2023-09-29 19:03 ` Limonciello, Mario
0 siblings, 1 reply; 11+ messages in thread
From: Mika Westerberg @ 2023-09-29 4:44 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: Lukas Wunner, Rafael J . Wysocki, linux-pci, Mario Limonciello
On Thu, Sep 28, 2023 at 05:36:30PM -0500, Bjorn Helgaas wrote:
> On Mon, Sep 18, 2023 at 02:48:01PM +0200, Lukas Wunner wrote:
> > struct pci_dev contains two flags which govern whether the device may
> > suspend to D3cold:
> >
> > * no_d3cold provides an opt-out for drivers (e.g. if a device is known
> > to not wake from D3cold)
> >
> > * d3cold_allowed provides an opt-out for user space (default is true,
> > user space may set to false)
> >
> > Since commit 9d26d3a8f1b0 ("PCI: Put PCIe ports into D3 during suspend"),
> > the user space setting overwrites the driver setting. Essentially user
> > space is trusted to know better than the driver whether D3cold is
> > working.
> >
> > That feels unsafe and wrong. Assume that the change was introduced
> > inadvertently and do not overwrite no_d3cold when d3cold_allowed is
> > modified. Instead, consider d3cold_allowed in addition to no_d3cold
> > when choosing a suspend state for the device.
> >
> > That way, user space may opt out of D3cold if the driver hasn't, but it
> > may no longer force an opt in if the driver has opted out.
> >
> > Fixes: 9d26d3a8f1b0 ("PCI: Put PCIe ports into D3 during suspend")
> > Signed-off-by: Lukas Wunner <lukas@wunner.de>
> > Cc: stable@vger.kernel.org # v4.8+
> > Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
>
> Mika and Mario, you both commented on this, but I *think* you were
> both OK with it as-is for now? If so, can you give a Reviewed-by?
> I don't want to go ahead if you have any concerns.
No concerns from me,
Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
^ permalink raw reply [flat|nested] 11+ messages in thread
* RE: [PATCH] PCI/sysfs: Protect driver's D3cold preference from user space
2023-09-29 4:44 ` Mika Westerberg
@ 2023-09-29 19:03 ` Limonciello, Mario
0 siblings, 0 replies; 11+ messages in thread
From: Limonciello, Mario @ 2023-09-29 19:03 UTC (permalink / raw)
To: Mika Westerberg, Bjorn Helgaas
Cc: Lukas Wunner, Rafael J . Wysocki, linux-pci@vger.kernel.org
[Public]
> On Thu, Sep 28, 2023 at 05:36:30PM -0500, Bjorn Helgaas wrote:
> > On Mon, Sep 18, 2023 at 02:48:01PM +0200, Lukas Wunner wrote:
> > > struct pci_dev contains two flags which govern whether the device may
> > > suspend to D3cold:
> > >
> > > * no_d3cold provides an opt-out for drivers (e.g. if a device is known
> > > to not wake from D3cold)
> > >
> > > * d3cold_allowed provides an opt-out for user space (default is true,
> > > user space may set to false)
> > >
> > > Since commit 9d26d3a8f1b0 ("PCI: Put PCIe ports into D3 during
> suspend"),
> > > the user space setting overwrites the driver setting. Essentially user
> > > space is trusted to know better than the driver whether D3cold is
> > > working.
> > >
> > > That feels unsafe and wrong. Assume that the change was introduced
> > > inadvertently and do not overwrite no_d3cold when d3cold_allowed is
> > > modified. Instead, consider d3cold_allowed in addition to no_d3cold
> > > when choosing a suspend state for the device.
> > >
> > > That way, user space may opt out of D3cold if the driver hasn't, but it
> > > may no longer force an opt in if the driver has opted out.
> > >
> > > Fixes: 9d26d3a8f1b0 ("PCI: Put PCIe ports into D3 during suspend")
> > > Signed-off-by: Lukas Wunner <lukas@wunner.de>
> > > Cc: stable@vger.kernel.org # v4.8+
> > > Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
> >
> > Mika and Mario, you both commented on this, but I *think* you were
> > both OK with it as-is for now? If so, can you give a Reviewed-by?
> > I don't want to go ahead if you have any concerns.
>
> No concerns from me,
>
> Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
It is a step in the right direction. I do think a later enhancement to
fail the write from sysfs (to be ABI compatible but "deprecate it") and
internal optimization as a result is a good idea though.
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] PCI/sysfs: Protect driver's D3cold preference from user space
2023-09-18 12:48 [PATCH] PCI/sysfs: Protect driver's D3cold preference from user space Lukas Wunner
2023-09-18 13:07 ` Mika Westerberg
2023-09-28 22:36 ` Bjorn Helgaas
@ 2023-09-29 22:48 ` Bjorn Helgaas
2 siblings, 0 replies; 11+ messages in thread
From: Bjorn Helgaas @ 2023-09-29 22:48 UTC (permalink / raw)
To: Lukas Wunner
Cc: Mika Westerberg, Rafael J . Wysocki, linux-pci, Mario Limonciello
On Mon, Sep 18, 2023 at 02:48:01PM +0200, Lukas Wunner wrote:
> struct pci_dev contains two flags which govern whether the device may
> suspend to D3cold:
>
> * no_d3cold provides an opt-out for drivers (e.g. if a device is known
> to not wake from D3cold)
>
> * d3cold_allowed provides an opt-out for user space (default is true,
> user space may set to false)
>
> Since commit 9d26d3a8f1b0 ("PCI: Put PCIe ports into D3 during suspend"),
> the user space setting overwrites the driver setting. Essentially user
> space is trusted to know better than the driver whether D3cold is
> working.
>
> That feels unsafe and wrong. Assume that the change was introduced
> inadvertently and do not overwrite no_d3cold when d3cold_allowed is
> modified. Instead, consider d3cold_allowed in addition to no_d3cold
> when choosing a suspend state for the device.
>
> That way, user space may opt out of D3cold if the driver hasn't, but it
> may no longer force an opt in if the driver has opted out.
>
> Fixes: 9d26d3a8f1b0 ("PCI: Put PCIe ports into D3 during suspend")
> Signed-off-by: Lukas Wunner <lukas@wunner.de>
> Cc: stable@vger.kernel.org # v4.8+
> Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
Applied with Reviewed-by from Mika and Mario to pci/pm for v6.7,
thanks!
> ---
> drivers/pci/pci-acpi.c | 2 +-
> drivers/pci/pci-sysfs.c | 5 +----
> 2 files changed, 2 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c
> index 7aa1c20..2f5eddf 100644
> --- a/drivers/pci/pci-acpi.c
> +++ b/drivers/pci/pci-acpi.c
> @@ -911,7 +911,7 @@ pci_power_t acpi_pci_choose_state(struct pci_dev *pdev)
> {
> int acpi_state, d_max;
>
> - if (pdev->no_d3cold)
> + if (pdev->no_d3cold || !pdev->d3cold_allowed)
> d_max = ACPI_STATE_D3_HOT;
> else
> d_max = ACPI_STATE_D3_COLD;
> diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
> index ba38fc4..e18ccd2 100644
> --- a/drivers/pci/pci-sysfs.c
> +++ b/drivers/pci/pci-sysfs.c
> @@ -530,10 +530,7 @@ static ssize_t d3cold_allowed_store(struct device *dev,
> return -EINVAL;
>
> pdev->d3cold_allowed = !!val;
> - if (pdev->d3cold_allowed)
> - pci_d3cold_enable(pdev);
> - else
> - pci_d3cold_disable(pdev);
> + pci_bridge_d3_update(pdev);
>
> pm_runtime_resume(dev);
>
> --
> 2.39.2
>
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2023-09-29 22:48 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-09-18 12:48 [PATCH] PCI/sysfs: Protect driver's D3cold preference from user space Lukas Wunner
2023-09-18 13:07 ` Mika Westerberg
2023-09-18 13:14 ` Mario Limonciello
2023-09-18 13:24 ` Lukas Wunner
2023-09-18 13:28 ` Mario Limonciello
2023-09-18 14:26 ` Lukas Wunner
2023-09-18 14:52 ` Mario Limonciello
2023-09-28 22:36 ` Bjorn Helgaas
2023-09-29 4:44 ` Mika Westerberg
2023-09-29 19:03 ` Limonciello, Mario
2023-09-29 22:48 ` Bjorn Helgaas
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).