From: Oliver Neukum <oliver@neukum.org>
To: ranty@debian.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 00:22:29 +0200 [thread overview]
Message-ID: <200305170022.29824.oliver@neukum.org> (raw)
In-Reply-To: <20030516183152.GB18732@ranty.ddts.net>
> > 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 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?
> 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.
> > > At least usb's probe() can sleep, but that is a good point. How about:
> > >
> > > int request_firmware_nowait (
> > > const char *name, const char *device, void *context,
> > > void (*cont)(const struct firmware *fw, void context)
> > > );
> > >
> > > Then you can call request_firmware_nowait providing an appropriate
> > > 'cont' callback and 'context' pointer. Then when your callback gets
> > > called with the firmware you finish device setup.
> >
> > In this form unworkable. Removing a module could kill the machine.
> > That scheme requires that drivers formally register and unregister
> > with fwfs and provide module pointers.
> > An awful lot of overhead.
>
> 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.
> > > > You cannot kill a part of the kernel if a script fails to perform
> > > > correctly for some reason.
> > >
> > > Good point. Since it is easily solvable by hand:
> > >
> > > echo 1 > /sysfs/class/firmware/dev_name/loading
> > > echo 0 > /sysfs/class/firmware/dev_name/loading
> > >
> > > I thought that it was OK. (I'll do the timeout)
> >
> > No, it isn't. These writes must require CAP_HARDWARE, thus
> > is no good.
>
> I'll do the timeout anyway, and make it configurable just in case.
>
> > > > Even worse, you cannot detect the script terminating abnormally in
> > > > that design.
> > >
> > > Well, the device model doesn't provide that information :(
> > >
> > > It would be great if it did.
> > >
> > > 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. But you cannot make device discovery
wait for user space.
You'd have to rewrite the probe method of all drivers that need
firmware.
Regards
Oliver
next prev parent reply other threads:[~2003-05-16 22:09 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-05-15 20:03 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 [this message]
2003-05-17 0:59 ` Manuel Estrada Sainz
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
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
[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
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=200305170022.29824.oliver@neukum.org \
--to=oliver@neukum.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=proski@gnu.org \
--cc=ranty@debian.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
all inboxes | Powered by JetHome®