Re: [PATCH] firmware loader: don't cancel _nowait requests when helper is not yet available

From: Rafael J. Wysocki
Date: Sun Mar 18 2012 - 07:57:07 EST


On Sunday, March 18, 2012, Stephen Boyd wrote:
> On 3/16/2012 10:51 PM, Linus Torvalds wrote:
> > On Fri, Mar 16, 2012 at 7:47 PM, Stephen Boyd <sboyd@xxxxxxxxxxxxxx> wrote:
> >> - if (WARN_ON(usermodehelper_is_disabled())) {
> >> + if (is_sleep_task()) {
> >> dev_err(device, "firmware: %s will not be loaded\n", name);
> > Stop these idiotic games already!
> >
> > It's very simple: you cannot load firmware while the system is not
> > readt. Your moronic "let's change the test to something else" is
> > entirely and utterly misguided and totally misses the point.
> >
> > It's not about sleeping, and it's not about anything even *remotely*
> > about that. Stop the idiocy already.
> >
> > How hard is it to understand? How many times do people have to tell you?
> >
> > That warning is very much valid during bootup, and that warning has
> > been *seen* during bootup. For example, try to compile in most
> > wireless drivers as non-modular, and that warning *has* to trigger.
>
> Ok. I like where nowait() is going in the other part of the thread but
> I'm still confused about when request_firmware() is correct to use. It
> seems that the function is inherently racy with freezing. Does every
> user of request_firmware() need to synchronize with freezing?
>
> For example, if one CPU is in the middle of a driver probe that makes a
> request_firmware() call and another CPU is starting to suspend we will
> have a race between usermodehelpers being disabled and the
> request_firmware() call acquiring the usermodehelper rwsem. If the
> suspending CPU wins the race it will disable usermodehelpers and the
> request_firmware() call will return -EBUSY and warn.

Yes, it will.

Thanks,
Rafael
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/