From: Manuel Estrada Sainz <ranty@debian.org>
To: Oliver Neukum <oliver@neukum.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
Simon Kelley <simon@thekelleys.org.uk>,
Alan Cox <alan@lxorguk.ukuu.org.uk>,
"Downing, Thomas" <Thomas.Downing@ipc.com>,
Greg KH <greg@kroah.com>,
jt@hpl.hp.com, Pavel Roskin <proski@gnu.org>
Subject: Re: request_firmware() hotplug interface, third round.
Date: Sat, 17 May 2003 02:59:10 +0200 [thread overview]
Message-ID: <20030517005910.GA3808@ranty.ddts.net> (raw)
In-Reply-To: <200305170022.29824.oliver@neukum.org>
On Sat, May 17, 2003 at 12:22:29AM +0200, Oliver Neukum wrote:
>
> > > How and what is the benefit? If you go low on battery you have to
> > > suspend, there's no choice. This means that you have to have it in RAM
> > > always.
> >
> > If the device losses the firmware upon suspend, the driver will have to
> > reinitialize it as if it just got plugged, which somehow makes all
> > devices hotplugable.
>
> So all firmware has to be permanently in RAM anyway?
If you really can't access the filesystem on wakeup, you could pull the
required firmware into ram upon suspend and remove it after wakeup.
Then while the system is running it will not use kernel memory.
> > If the driver uses request_firmware(), it doesn't need to handle any
> > special case, just initialize as usual and it will get the firmware
> > when it needs it.
>
> How or precisely, how do you know that it gets it when it needs
> it? Are you planning to have a gray area where the kernel generates
> a special user space before everything else gets woken?
For this I proposed fwfs (a kernel friendly filesystem on top of
ramfs), but it didn't get a good acceptance. And after reading Greg's
recent post initramfs should be able to fill that gap.
> > If the device is needed to access the filesystem, some kind of
> > persistence will be needed, so the required firmware is already in
> > kernel space. But the driver doesn't need to care, it will just ask for
> > the firmware as usual.
> >
> > Which brings me to another issue, the same device can be required to
> > access the filesystem or not:
> > - In a diskless client, it is the network card
> > - In a live-cd it is the cdrom drive
> > - In a multi disk system just one of them will be holding
> > required firmware.
> > So you can not decide at coding time, the latest at compile time, and
> > ideally at runtime (which is what I am trying to do).
>
> How? You cannot page out memory during resumption.
> You must not cause any access to disk during resumption.
You will have to make sure that the firmware is copied into RAM before
suspension, either via fwfs, initramfs or whatever persistence method
gets implemented.
> > OK, how about:
> >
> > int request_firmware_nowait (
> > struct module *module,
> > const char *name, const char *device, void *context,
> > void (*cont)(const struct firmware *fw, void context)
> > );
> >
> > request_firmware code will try_module_get/module_put as needed.
> >
> > Would that fix the issue?
>
> No, still no good. It means that you get a memory leak if you unload
> a driver before firmware is provided. You need the ability to explicitely
> cancel a request for firmware.
The driver will not unload if request_firmware_nowait() has called
try_module_get() on it.
But the device could get disconnected and in that case the firmware
load should be canceled. I'll add request_firmware_cancel().
> > > > Would a patch to wait for hotplug termination and provide termination
> > > > status be accepted?
> > >
> > > No, you must not wait for user space.
> >
> > And to get notified when userspace is done?
>
> Not with that interface.
> You'd need drivers to register both with their subsystem and
> a firmware subsystem.
Why?, the current interface already provides termination notification.
> But you cannot make device discovery wait for user space.
Why not?
And anyway, request_firmware_nowait() could be used if that is an
issue.
> You'd have to rewrite the probe method of all drivers that need
> firmware.
Keep in mind that the "firmware in a header" method is not allowed
any more. Drivers needing firmware will have to get their probe method
modified to get the firmware from userspace anyway.
Using request_firmware() if they can sleep (USB probe callbacks can
sleep) is trivial, and using request_firmware_nowait() if they can't
sleep is just a matter of splitting probe in two pieces.
So, what alternative are you proposing to get the firmware?
If your proposal is just keeping the firmware in a header so you just
have it there all the time, you should discuss it with Alan, Greg,
Jeff, et all, not me.
Thanks
Manuel
--
--- Manuel Estrada Sainz <ranty@debian.org>
<ranty@bigfoot.com>
<ranty@users.sourceforge.net>
------------------------ <manuel.estrada@hispalinux.es> -------------------
Let us have the serenity to accept the things we cannot change, courage to
change the things we can, and wisdom to know the difference.
next prev parent reply other threads:[~2003-05-17 0:46 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-05-15 20:03 request_firmware() hotplug interface, third round Manuel Estrada Sainz
2003-05-16 8:07 ` Oliver Neukum
2003-05-16 9:56 ` Manuel Estrada Sainz
2003-05-16 15:53 ` Oliver Neukum
2003-05-16 18:31 ` Manuel Estrada Sainz
2003-05-16 22:22 ` Oliver Neukum
2003-05-17 0:59 ` Manuel Estrada Sainz [this message]
2003-05-17 4:00 ` Robert White
2003-05-17 13:23 ` Alan Cox
2003-05-17 14:57 ` Manuel Estrada Sainz
2003-05-16 18:49 ` Jean Tourrilhes
2003-05-16 22:24 ` Oliver Neukum
2003-05-16 23:21 ` Greg KH
2003-05-16 16:09 ` Alan Cox
2003-05-16 22:13 ` Oliver Neukum
2003-05-17 4:50 ` David Gibson
2003-05-17 7:02 ` Oliver Neukum
2003-05-17 8:21 ` David Gibson
[not found] ` <Pine.LNX.4.55.0305151623520.2885@marabou.research.att.com>
2003-05-16 9:27 ` Manuel Estrada Sainz
2003-05-16 22:39 ` Greg KH
2003-05-16 13:13 ` Ingo Oeser
2003-05-16 17:07 ` Manuel Estrada Sainz
2003-05-16 22:36 ` Greg KH
2003-05-16 23:37 ` Manuel Estrada Sainz
2003-05-16 23:59 ` Greg KH
2003-05-17 4:47 ` David Gibson
2003-05-17 8:54 ` Manuel Estrada Sainz
2003-05-16 23:55 ` Oliver Neukum
2003-05-17 0:03 ` Greg KH
2003-05-17 2:42 ` Robert White
2003-05-17 4:44 ` David Gibson
2003-05-17 8:46 ` Manuel Estrada Sainz
2003-05-17 9:07 ` David Gibson
2003-05-17 9:50 ` Manuel Estrada Sainz
2003-05-17 10:30 ` Manuel Estrada Sainz
2003-05-20 5:21 ` David Gibson
2003-05-20 8:07 ` Manuel Estrada Sainz
2003-05-21 4:21 ` Greg KH
2003-05-21 7:06 ` Manuel Estrada Sainz
2003-05-17 10:51 ` Manuel Estrada Sainz
2003-05-17 13:21 ` Ingo Oeser
2003-05-17 15:15 ` Manuel Estrada Sainz
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=20030517005910.GA3808@ranty.ddts.net \
--to=ranty@debian.org \
--cc=Thomas.Downing@ipc.com \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=greg@kroah.com \
--cc=jt@hpl.hp.com \
--cc=linux-kernel@vger.kernel.org \
--cc=oliver@neukum.org \
--cc=proski@gnu.org \
--cc=simon@thekelleys.org.uk \
/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