public inbox for linux-acpi@vger.kernel.org
 help / color / mirror / Atom feed
From: David Brownell <david-b@pacbell.net>
To: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: Shaohua Li <shaohua.li@intel.com>,
	pm list <linux-pm@lists.linux-foundation.org>,
	Alan Stern <stern@rowland.harvard.edu>,
	Pavel Machek <pavel@ucw.cz>,
	linux acpi <linux-acpi@vger.kernel.org>,
	Len Brown <len.brown@intel.com>,
	Johannes Berg <johannes@sipsolutions.net>,
	Igor Stoppa <igor.stoppa@nokia.com>,
	Paul Mackerras <paulus@samba.org>,
	Russell King <rmk@arm.linux.org.uk>,
	Nigel Cunningham <nigel@nigel.suspend2.net>
Subject: Re: [RFC][PATCH -mm 2/9] ACPI: Add acpi_pm_device_sleep_state helper routine
Date: Mon, 2 Jul 2007 10:24:57 -0700	[thread overview]
Message-ID: <200707021024.58693.david-b@pacbell.net> (raw)
In-Reply-To: <200707021017.01295.rjw@sisk.pl>

On Monday 02 July 2007, Rafael J. Wysocki wrote:
> On Monday, 2 July 2007 07:49, David Brownell wrote:

> > Also, recall that this was originally PCI-specific.  A generalized
> > approach would return a range of states, not a single state that
> > embeds a particular policy that may not be universally appropriate...
> 
> Via pointers and the return value equal to 0 on success?

It could as easily be one pointer:  "int minmax[2]".
Then min == minmax[0] and max == minmax[1], and the
ACPI calls could write the caller's data directly.

But in general, yes -- pointer, not single return value.


> > The logic was that PCI devices can all support PCI_D0 and PCI_D3.
> > For non-PCI devices we can't actually know that.  So "min" should
> > probably default to ACPI_STATE_D0.  If this returns a range, then
> > such issues can stay out of this code.
> 
> The ACPI spec says that all devices must support D0 and D3.

ISTR that it actually says they must "recognize" D3.  That's
not the same as actually implementing a software controllable
power-off state ... and not the same as imposing a "use the
biggest numbered D-state" policy at this level.


> > > +	/*
> > > +	 * If _PRW says we can wake from the upcoming system state, the _SxD
> > > +	 * value can wake ... and we'll assume a wakeup-aware driver.  If _SxW
> > > +	 * methods exist (ACPI 3.x), they give the lowest power D-state that
> > > +	 * can also wake the system.  _S0W can be valid.
> > > +	 */
> > > +	if (acpi_target_sleep_state == ACPI_STATE_S0 ||
> > > +	    (dev->wakeup.state.enabled &&
> > 
> > This used device_may_wakeup() before.  That ACPI flag is not a
> > direct analogue ... without looking again at the issues, I'd
> > say the right solution is to phase out the ACPI-only flags in
> > new code.
> 
> Hm, I'm not sure.  This is an ACPI routine after all ...

It's in the Linux kernel, talking about Linux devices.
Some of them have ACPI support; many don't.  (Like the
USB device nodes, and anything else layered on top of
mainboard devices.)


> > Maybe just expect the caller to pass the results 
> > of device_may_wakeup() in ... or update the signature to accept
> > a "struct device", and fetch the handle from there.  (That'd
> > be a better match for most callers, I'd think...)
> 
> In that case it would be nicer to pass 'struct acpi_device *' rahter than
> 'struct device *', IMO.

I'll disagree.  Outside of the ACPI code, virtually nothing
has any reason to see an "acpi_device" ... but virtually
everything has reason to see a "device".  Even ACPI code
can rely on there being a "device" inside "acpi_device"!


This touches on a different problem.  The ACPI device tree
is parallel to the "real" tree.  In the cases there's a
one-to-one correspondence, there's no confusion; any
acpi_device corresponds to one "real" device, and vice
versa.  BUT ... there are cases where the correspondence
isn't one-to-one.  Those cases need to be addressed, by
moving towards a one-to-one correspondence.

Cases like PCI bridges can be easily dealt with now, given
some resequencing of init logic:  use the PNP node instead
of faking out a toplevel /sys/devices/pci0000:00 node.

But things like PS2 keyboard and mouse nodes are funkier.

- Dave

  reply	other threads:[~2007-07-02 17:25 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-06-30 20:57 [RFC][PATCH -mm 0/9] PM: Update global suspend and hibernation operations framework Rafael J. Wysocki
2007-06-30 20:58 ` [RFC][PATCH -mm 1/9] ACPI: Implement the set_target() callback from pm_ops Rafael J. Wysocki
2007-06-30 20:59 ` [RFC][PATCH -mm 2/9] ACPI: Add acpi_pm_device_sleep_state helper routine Rafael J. Wysocki
2007-07-02  5:49   ` David Brownell
2007-07-02  8:17     ` Rafael J. Wysocki
2007-07-02 17:24       ` David Brownell [this message]
2007-07-02 20:15         ` Rafael J. Wysocki
2007-07-03 13:58           ` Rafael J. Wysocki
2007-06-30 21:01 ` [RFC][PATCH -mm 3/9] PM: Move definition of struct pm_ops to suspend.h Rafael J. Wysocki
2007-06-30 23:04   ` Pavel Machek
2007-06-30 21:03 ` [RFC][PATCH -mm 4/9] PM: Rename struct pm_ops and related things Rafael J. Wysocki
2007-06-30 23:04   ` Pavel Machek
2007-06-30 21:07 ` [RFC][PATCH -mm 5/9] PM: Rework struct platform_suspend_ops Rafael J. Wysocki
2007-06-30 21:08 ` [RFC][PATCH -mm 6/9] PM: Fix compilation of suspend code if CONFIG_PM is unset Rafael J. Wysocki
2007-06-30 21:09 ` [RFC][PATCH -mm 7/9] PM: Make suspend_ops static Rafael J. Wysocki
2007-06-30 23:06   ` Pavel Machek
2007-06-30 21:10 ` [RFC][PATCH -mm 8/9] PM: Rework struct hibernation_ops Rafael J. Wysocki
2007-06-30 21:11 ` [RFC][PATCH -mm 9/9] PM: Rename hibernation_ops to platform_hibernation_ops Rafael J. Wysocki
2007-06-30 23:06   ` Pavel Machek
2007-06-30 23:22 ` [RFC][PATCH -mm 0/9] PM: Update global suspend and hibernation operations framework Russell King
2007-07-01 10:01   ` Rafael J. Wysocki
2007-07-02  4:28 ` David Brownell
2007-07-02 14:28   ` Rafael J. Wysocki
2007-07-02 14:36     ` Russell King
2007-07-02 20:17       ` Rafael J. Wysocki
2007-07-11 10:53 ` Pavel Machek
2007-07-11 11:16   ` Rafael J. Wysocki
2007-07-11 20:04     ` Russell King

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=200707021024.58693.david-b@pacbell.net \
    --to=david-b@pacbell.net \
    --cc=igor.stoppa@nokia.com \
    --cc=johannes@sipsolutions.net \
    --cc=len.brown@intel.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-pm@lists.linux-foundation.org \
    --cc=nigel@nigel.suspend2.net \
    --cc=paulus@samba.org \
    --cc=pavel@ucw.cz \
    --cc=rjw@sisk.pl \
    --cc=rmk@arm.linux.org.uk \
    --cc=shaohua.li@intel.com \
    --cc=stern@rowland.harvard.edu \
    /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