From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Alan Cox <alan@lxorguk.ukuu.org.uk>
Cc: Linus Torvalds <torvalds@transmeta.com>,
<linux-kernel@vger.kernel.org>, Patrick Mochel <mochel@osdl.org>,
Jonathan Lundell <jlundell@pobox.com>
Subject: Re: [RFC] New Driver Model for 2.5
Date: Wed, 24 Oct 2001 02:26:02 +0200 [thread overview]
Message-ID: <20011024002602.3310@smtp.wanadoo.fr> (raw)
In-Reply-To: <E15w8Z6-00010E-00@the-village.bc.nu>
In-Reply-To: <E15w8Z6-00010E-00@the-village.bc.nu>
>> Some driver already handle queues. In the case of network driver, just
>> stop your network queue and stop accepting incoming packets. If your
>> driver is too simple to have queues, a simple semaphore on entry points
>> can often be enough. You shouldn't deadlock as you are not supposed to
>> re-enter a sleeping driver in step 2.
>
>Stop accepting new requests is not simple. To complete existing requests you
>might need an arbitary other module to complete a new request you submit
>as part of your shutdown.
That mean you have an ordering dependency, the driver you rely
upon must be stopped after you. That's the point of having a
tree here. Patrick and Linus feel the bus tree is enough to handle
that dependency, which might well be the case for 99% of drivers.
I have a couple of cases where that's not completely true on pmacs,
but nothing that can't worked around simply I beleive.
If you feel more drivers will be affected, then we will probably
need to separate the power-tree from the device-tree and provide
some hooks so that ordering can be tweaked.
All this assumes you don't have circular dependencies of course ;)
I see a lot of cases where this "block IOs" is easily dealt with
in the drivers I maintain on pmac, that might not be that easy on
other archs, I can't tell.
Basically, simple drivers can just use a semaphore. I do that for
our sound driver for example, I block any app doing an ioctl while
the driver is sleeping. (This happens late enough in the sleep
process so that userland using /dev/apm_bios already got
notified and acked the suspend, letting properly written apps to
have stopped themselves already).
Drivers using a request queue usually already have a way to mark
themselves busy (they use that to decide if they have to kick
the HW or not when getting a new request). In cases where a mid-layer
enters the scene, like SCSI, that wants to do timeouts, then well...
we can let it timeout (just stop processing requests), or we can
have the midlayer go to sleep as well :) That later solution
may cause some interesting ordering issues however...
Network drivers can stop their queue or just drop packets... I'd
like if they waited for packets received from the network stack
before the callback is called are waited to be sent. Those packets
may contain the request to a server to send a wake-on-lan magic
packet to your machine ;) For now, I just block the output
queue and flush the rings on pmac, but I also dont support WOL yet.
For fbdevs, I simply switch them to dummy functions when asleep.
This appear to work well. (Well, I do some additional state save
and PM, but all I do for "blocking IOs" is to drop them...)
Any printk done after they are suspended isn't displayed, but that's
not a real issue.
So yes, "blocking IOs" can actually mean "dropping new IOs",
that depends very much on the driver.
For USB, for example, we can consider that when a device driver
(not a controller driver) suspend has been done, any URB it submits
can just be dropped (returned immediately with an error). We don't
need blocking here neither. Of course, that means we have the
framework to call devices' suspend/resume callbacks when the
controller is about to go to sleep.
There might be other examples. I agree it's not a 2 lines fix
per driver, but that's the better I could imagine so far to have
something reliable.
If you have other ideas, please share.
Ben.
next prev parent reply other threads:[~2001-10-24 0:26 UTC|newest]
Thread overview: 120+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-10-19 23:33 [RFC] New Driver Model for 2.5 Benjamin Herrenschmidt
2001-10-20 0:09 ` Linus Torvalds
2001-10-20 9:28 ` Benjamin Herrenschmidt
2001-10-21 17:09 ` Pavel Machek
2001-10-23 0:19 ` Patrick Mochel
2001-10-23 0:31 ` Alan Cox
2001-10-23 0:29 ` Patrick Mochel
2001-10-23 7:53 ` Alan Cox
2001-10-23 15:10 ` Jonathan Lundell
2001-10-23 15:49 ` Alan Cox
2001-10-23 20:22 ` Benjamin Herrenschmidt
2001-10-23 20:54 ` Alan Cox
2001-10-24 0:26 ` Benjamin Herrenschmidt [this message]
2001-10-24 9:57 ` Alan Cox
2001-10-24 10:34 ` Benjamin Herrenschmidt
2001-10-24 10:54 ` Alan Cox
2001-10-24 13:04 ` Benjamin Herrenschmidt
2001-10-24 13:25 ` Alan Cox
2001-10-24 16:19 ` Linus Torvalds
2001-10-24 16:36 ` Michael H. Warfield
2001-10-24 16:45 ` Linus Torvalds
2001-10-24 22:48 ` Alan Cox
2001-10-24 16:15 ` Linus Torvalds
2001-10-24 16:46 ` Xavier Bestel
2001-10-24 16:54 ` Patrick Mochel
2001-10-24 16:55 ` Linus Torvalds
2001-10-24 22:45 ` Alan Cox
2001-10-24 17:33 ` Benjamin Herrenschmidt
2001-10-24 22:41 ` Alan Cox
2001-10-24 22:41 ` Linus Torvalds
2001-10-25 7:58 ` Benjamin Herrenschmidt
2001-10-25 12:22 ` Alan Cox
2001-10-25 14:57 ` Benjamin Herrenschmidt
2001-10-25 8:03 ` Benjamin Herrenschmidt
2001-10-25 8:09 ` Benjamin Herrenschmidt
2001-10-25 12:20 ` Alan Cox
2001-10-25 21:47 ` Pavel Machek
2001-10-24 22:50 ` Alan Cox
2001-10-25 4:14 ` Linus Torvalds
2001-10-25 12:42 ` Alan Cox
2001-10-25 21:52 ` Xavier Bestel
2001-10-25 23:53 ` Benjamin Herrenschmidt
2001-10-25 23:53 ` Alan Cox
2001-10-26 11:35 ` Helge Hafting
2001-10-26 12:38 ` Alan Cox
2001-10-25 8:27 ` Rob Turk
2001-10-25 10:01 ` Benjamin Herrenschmidt
2001-10-25 10:02 ` Helge Hafting
2001-10-25 14:20 ` Victor Yodaiken
2001-10-25 14:44 ` Jeff Garzik
2001-10-25 14:45 ` Jeff Garzik
2001-10-25 15:22 ` Rob Turk
2001-10-25 15:44 ` Jonathan Lundell
2001-10-25 16:26 ` David Lang
2001-10-25 21:59 ` Pavel Machek
2001-10-25 21:32 ` Rob Turk
2001-10-24 17:01 ` Mike Anderson
2001-10-25 9:02 ` Eric W. Biederman
2001-10-25 9:29 ` Linus Torvalds
2001-10-25 9:47 ` Benjamin Herrenschmidt
2001-10-25 10:11 ` Eric W. Biederman
2001-10-25 10:59 ` Linus Torvalds
2001-10-24 15:18 ` Jonathan Lundell
2001-10-24 15:41 ` Linus Torvalds
2001-10-24 15:59 ` Alan Cox
2001-10-24 15:56 ` Linus Torvalds
2001-10-23 9:44 ` Pavel Machek
2001-10-23 11:03 ` Benjamin Herrenschmidt
2001-10-23 11:49 ` Benjamin Herrenschmidt
2001-10-23 10:54 ` Benjamin Herrenschmidt
-- strict thread matches above, loose matches on Subject: below --
2001-10-24 17:56 Grover, Andrew
2001-10-24 18:45 ` Benjamin Herrenschmidt
2001-10-19 21:43 Grover, Andrew
2001-10-19 17:01 Kevin Easton
2001-10-19 18:40 ` Patrick Mochel
2001-10-17 23:52 Patrick Mochel
2001-10-18 6:23 ` Jeff Garzik
2001-10-18 12:13 ` Benjamin Herrenschmidt
2001-10-18 16:19 ` Patrick Mochel
2001-10-18 17:38 ` Tim Jansen
2001-10-18 22:06 ` Benjamin Herrenschmidt
2001-10-19 17:09 ` Kai Henningsen
2001-10-18 22:10 ` Kai Henningsen
2001-10-19 18:26 ` Patrick Mochel
2001-10-19 19:02 ` Tim Jansen
2001-10-19 19:21 ` Mike Fedyk
2001-10-19 20:07 ` Tim Jansen
2001-10-19 20:24 ` Mike Fedyk
2001-10-19 22:25 ` Tim Jansen
2001-10-20 13:47 ` Kai Henningsen
2001-10-20 1:41 ` john slee
2001-10-20 13:52 ` Kai Henningsen
2001-10-22 11:02 ` Padraig Brady
2001-10-27 11:01 ` Kai Henningsen
2001-10-19 7:57 ` Henning P. Schmiedehausen
2001-10-19 8:09 ` Jeff Garzik
2001-10-19 8:31 ` Keith Owens
2001-10-19 8:43 ` Jeff Garzik
2001-10-19 18:50 ` Tim Jansen
2001-10-19 15:21 ` Taral
2001-10-19 23:30 ` Benjamin Herrenschmidt
2001-10-19 23:54 ` Benjamin Herrenschmidt
2001-10-18 15:17 ` Patrick Mochel
2001-10-18 16:08 ` Taral
2001-10-18 16:52 ` Jonathan Lundell
2001-10-18 17:38 ` Patrick Mochel
2001-10-18 17:41 ` Patrick Mochel
2001-10-18 18:28 ` Jonathan Lundell
2001-10-18 19:49 ` Patrick Mochel
2001-10-18 20:40 ` Jeff Garzik
2001-10-18 21:32 ` John Alvord
2001-10-18 22:23 ` Benjamin Herrenschmidt
2001-10-18 22:26 ` Jeff Garzik
2001-10-18 22:18 ` Benjamin Herrenschmidt
2001-10-18 23:30 ` Patrick Mochel
2001-10-18 23:44 ` Benjamin Herrenschmidt
2001-10-18 23:52 ` Jeff Garzik
[not found] ` <3BCF3941.D4B79FE1@mandrakesoft.com>
2001-10-19 17:12 ` Jonathan Lundell
2001-10-18 17:05 ` Jonathan Corbet
2001-10-18 17:33 ` Patrick Mochel
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=20011024002602.3310@smtp.wanadoo.fr \
--to=benh@kernel.crashing.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=jlundell@pobox.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mochel@osdl.org \
--cc=torvalds@transmeta.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox