linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Patrick Mochel <mochel@transmeta.com>
To: Alan Cox <alan@lxorguk.ukuu.org.uk>
Cc: Jeff Garzik <jgarzik@mandrakesoft.com>,
	Jeff Golds <jgolds@resilience.com>,
	linux-kernel@vger.kernel.org
Subject: Re: Problems with arch/i386/kernel/apm.c
Date: Tue, 12 Jun 2001 16:48:31 -0700 (PDT)	[thread overview]
Message-ID: <Pine.LNX.4.10.10106121639100.13607-100000@nobelium.transmeta.com> (raw)
In-Reply-To: <E159We4-0000Cc-00@the-village.bc.nu>


On Mon, 11 Jun 2001, Alan Cox wrote:

> > > needed.  What I am really desiring to know is if there are any devices
> > > that depend on the apm::send_event(APM_NORMAL_RESUME) happening while
> > > interrupts are disabled.
> > 
> > Good spotting...  If any devices depend on what you describe, I would
> > argue that their drivers should handle that not the core apm code...
> 
> The drivers can't handle it at the moment. I've been talking to many people
> about this all hitting this sort of driver problem.
> 
> I think the fix is to keep two classes of power management objects and do
> the following
> 
> 	Call each 'nonirq' suspend function
> 	(aborting if need be)
> 	cli()
> 	Call each irq blocked suspend function
> 	suspend

It shouldn't be necessary to keep two classes of PM objects; instead walk
the device tree twice on suspend.

The first one is an opportunity for the driver to save any device state; a
method to notify the driver that it's going to sleep (as some PPC people
requested); or to do what it needs to with interrupts enabled. 

This also gives the system a graceful way to abort the process should any
of the drivers complain that it absolutely cannot suspend (none of the
devices will actually be powered off at that point).

We then disable interrupts and walk the tree again, actually shutting off
devices. This way, no special cases are made, and no partitioning of the
power management objects is needed.

> resume:
> 	call each irq blocked resume function
> 	sti();
> 	call each nonirq resume

Is this really necessary? We should (note _should_) be able to enable
interrupts, then walk the device tree to resume everything. 

Linus confirmed this assumption, but it may turn out to not be the case.
If that is so, then it will be easy enough to do a two stage walk of the
tree, like in suspend - one to power on the device and reinitialize it,
the next to restore state and continue on once interrupts have been
enabled.


	-pat


  reply	other threads:[~2001-06-12 23:53 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-06-11 17:57 Problems with arch/i386/kernel/apm.c Jeff Golds
2001-06-11 18:11 ` Jeff Garzik
2001-06-11 18:42   ` Alan Cox
2001-06-12 23:48     ` Patrick Mochel [this message]
2001-06-14  8:18       ` Alan Cox
2001-06-11 19:37 ` John Fremlin

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=Pine.LNX.4.10.10106121639100.13607-100000@nobelium.transmeta.com \
    --to=mochel@transmeta.com \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=jgarzik@mandrakesoft.com \
    --cc=jgolds@resilience.com \
    --cc=linux-kernel@vger.kernel.org \
    /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).