From: Peter Wu <lekensteyn@gmail.com>
To: Lv Zheng <lv.zheng@intel.com>
Cc: Len Brown <len.brown@intel.com>,
Rafael J Wysocki <rafael.j.wysocki@intel.com>,
linux-acpi@vger.kernel.org
Subject: Re: [PATCH] ACPI / PM: Add check preventing transitioning to non-D0 state from D3.
Date: Wed, 30 Jan 2013 18:53:46 +0100 [thread overview]
Message-ID: <4595012.aPT9n2OZdk@al> (raw)
In-Reply-To: <e4ec829902580af84cddbba6e98ef54b33052b85.1352953283.git.lv.zheng@intel.com>
Hi Lv Zheng,
I encounter a regression with your patch (Linux 3.8-rc5). On my Nvidia Optimus
laptop, I use the bbswitch[1] kernel module to trigger a _PS3 ACPI method call
to turn the video card off.
After this patch, I got the following in my kernel log:
pci 0000:01:00.0: Refused to change power state, currently in D0
ACPI: Cannot transition to non-D0 state from D3
bbswitch: Succesfully loaded. Discrete card 0000:01:00.0 is on
The expected output would be "Discrete card 0000:01:00.0 is off". Printing the
contents of (acpi_device) device->power.state shows FF (ACPI_STATE_UNKNOWN).
Should this condition be excluded from your check or is my hacky module
outdated?
I currently workaround this issue by checking for ACPI_STATE_UNKNOWN. If that
is the value, I assume on (overwrite device->power.state with ACPI_STATE_D0).
Then I call pci_set_power_state(pci_dev, PCI_D3cold).
Regards,
Peter
[1]: https://github.com/Bumblebee-Project/bbswitch
On Thursday 15 November 2012 12:25:01 Lv Zheng wrote:
> No power transitioning from D3 state to a non-D0 state is allowed.
> This patch also cleans up device power updating code in the
> acpi_device_set_power() as it should already been updated in the
> acpi_power_transition().
>
> Signed-off-by: Lv Zheng <lv.zheng@intel.com>
> ---
> drivers/acpi/bus.c | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
> index 07a20ee..12c1b51 100644
> --- a/drivers/acpi/bus.c
> +++ b/drivers/acpi/bus.c
> @@ -293,6 +293,12 @@ int acpi_device_set_power(struct acpi_device *device,
> int state) " state than parent\n");
> return -ENODEV;
> }
> + if (device->parent->power.state >= ACPI_STATE_D3_HOT &&
> + state != ACPI_STATE_D0) {
> + printk(KERN_WARNING PREFIX
> + "Cannot transition to non-D0 state from D3\n");
> + return -ENODEV;
> + }
>
> /* For D3cold we should execute _PS3, not _PS4. */
> if (state == ACPI_STATE_D3_COLD)
> @@ -341,7 +347,6 @@ int acpi_device_set_power(struct acpi_device *device,
> int state) "Device [%s] failed to transition to %s\n",
> device->pnp.bus_id, state_string(state));
> else {
> - device->power.state = state;
> ACPI_DEBUG_PRINT((ACPI_DB_INFO,
> "Device [%s] transitioned to %s\n",
> device->pnp.bus_id, state_string(state)));
next prev parent reply other threads:[~2013-01-30 17:53 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-15 4:25 [PATCH] ACPI / PM: Add check preventing transitioning to non-D0 state from D3 Lv Zheng
2012-11-16 1:49 ` Rafael J. Wysocki
2012-11-19 2:31 ` Zheng, Lv
2013-01-30 17:53 ` Peter Wu [this message]
2013-01-30 21:55 ` Rafael J. Wysocki
2013-01-30 23:27 ` Rafael J. Wysocki
2013-01-31 0:58 ` Rafael J. Wysocki
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=4595012.aPT9n2OZdk@al \
--to=lekensteyn@gmail.com \
--cc=len.brown@intel.com \
--cc=linux-acpi@vger.kernel.org \
--cc=lv.zheng@intel.com \
--cc=rafael.j.wysocki@intel.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.