All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christian Lamparter <chunkeey@googlemail.com>
To: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: "Srivatsa S. Bhat" <srivatsa.bhat@linux.vnet.ibm.com>,
	linux-kernel@vger.kernel.org, gregkh@linuxfoundation.org,
	alan@lxorguk.ukuu.org.uk,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Linux PM mailing list <linux-pm@vger.kernel.org>
Subject: Re: [RFC] firmware loader: retry _nowait requests when userhelper is not yet available
Date: Sat, 17 Mar 2012 00:35:47 +0100	[thread overview]
Message-ID: <201203170035.47756.chunkeey@googlemail.com> (raw)
In-Reply-To: <201203162357.10770.rjw@sisk.pl>

On Friday 16 March 2012 23:57:10 Rafael J. Wysocki wrote:
> On Friday, March 16, 2012, Christian Lamparter wrote:
> > On Friday 16 March 2012 23:19:53 Rafael J. Wysocki wrote:
> > > > On 03/04/2012 01:52 AM, Christian Lamparter wrote:
> > > > > During resume, the userhelper might not be available. However for
> > > > > drivers which use the request_firmware_nowait interface, this will
> > > > > only lead to a pointless WARNING and a device which no longer works
> > > > > after the resume [since it couldn't get the firmware, because the
> > > > > userhelper was not available to take the request].
> > > > > 
> > > > > In order to solve this "chicken or egg" dilemma, the code now
> > > > > retries _nowait requests at one second intervals until the
> > > > > "loading_timeout" time is up.
> > > 
> > > BTW, I wonder what comments on this patch were posted?
> > Only Alan Cox was kind enough to drop me a few words.
> > 
> > Why? Do you think it is actually sane from a specific POV?
> > [Don't tell me you do :D !]
> 
> I don't think it's really wrong.
Of course, I've tested both patches [the RFC and the other one].
The RFC might not be "really wrong" but the concept of busy
msleeping strikes me as a bit insane. [Maybe, that's because I
write drivers and I hate it when IO needs msleeps... brrr]
 
> I agree that the WARN_ON() isn't really useful in the request_firmware_nowait()
> case, because the user of that doesn't really know when exactly the firmware is
> going to be requested, so it can't really do anything about the warning.
> 
> Moreover, failures of request_firmware_nowait() just because it happens to
> race with system suspend (or something of that kind), just because of "bad"
> timing, aren't really useful either.
> 
If it's just about "waiting until the firmware can be loaded" then why not go
with the "easy approach in the [PATCH] don't cancel...". This just queues the
request in the _nowait case. And once the userspace helper is running, it will
pick up all backlogged firmware requests [of course, only the ones that have
not been timeouted yet] and life goes on!

Anyway, I know that I don't really have a say in what will be accepted.
So, it's all up to you guys! But I'll happily test any patches.

> So, I think it makes sense for it to wait until the firmware can be loaded.
> 
> I'd do that a bit differently, though, for example like in the appended patch
> (untested).
Just one comment. [see below] 

And now, I'm off to bed.

Good night,
	Chr

> ---
>  drivers/base/firmware_class.c |   31 +++++++++++++++++++++++++++----
>  1 file changed, 27 insertions(+), 4 deletions(-)


> Index: linux/drivers/base/firmware_class.c
> ===================================================================
> --- linux.orig/drivers/base/firmware_class.c
> +++ linux/drivers/base/firmware_class.c
> @@ -20,6 +20,7 @@
>  #include <linux/highmem.h>
>  #include <linux/firmware.h>
>  #include <linux/slab.h>
> +#include <linux/delay.h>
>  
>  #define to_dev(obj) container_of(obj, struct device, kobj)
>  
> @@ -535,10 +536,31 @@ static int _request_firmware(const struc
>  
>  	read_lock_usermodehelper();
>  
> -	if (WARN_ON(usermodehelper_is_disabled())) {
> +	if (nowait) {
> +		int limit = loading_timeout * MSEC_PER_SEC;
> +		int timeout = 10;  /* in msec */
> +
> +		while (usermodehelper_is_disabled()) {
> +			read_unlock_usermodehelper();
> +
> +			msleep(timeout);
timeout is 10 ms, right?

so this might apply:
Documentation/timers/timers-howto.txt
	- Why not msleep for (1ms - 20ms)?
		Explained originally here:
			http://lkml.org/lkml/2007/8/3/250
		msleep(1~20) may not do what the caller intends, and
		will often sleep longer (~20 ms actual sleep for any
		value given in the 1~20ms range). In many cases this
		is not the desired behavior.

Of course, that's of little importance.

  reply	other threads:[~2012-03-16 23:35 UTC|newest]

Thread overview: 111+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-03-03 20:22 [RFC] firmware loader: retry _nowait requests when userhelper is not yet available Christian Lamparter
2012-03-03 23:57 ` Alan Cox
2012-03-04  1:50   ` Christian Lamparter
2012-03-05 20:12 ` Srivatsa S. Bhat
2012-03-09 22:30   ` [PATCH] firmware loader: don't cancel _nowait requests when helper " Christian Lamparter
2012-03-09 23:36     ` Greg KH
2012-03-10  0:52       ` Christian Lamparter
2012-03-11 11:56       ` Kay Sievers
2012-03-13  9:37         ` Saravana Kannan
2012-03-13  9:43         ` Saravana Kannan
2012-03-13 20:14           ` Rafael J. Wysocki
2012-03-14 19:21             ` Stephen Boyd
2012-03-14 23:04               ` Rafael J. Wysocki
2012-03-14 23:13                 ` Rafael J. Wysocki
2012-03-14 23:17                   ` Stephen Boyd
2012-03-14 23:34                     ` Rafael J. Wysocki
2012-03-14 23:38                       ` Stephen Boyd
2012-03-15  0:11                         ` Rafael J. Wysocki
2012-03-15 19:50                           ` [PATCH] firmware_class: Move request_firmware_nowait() to workqueues Stephen Boyd
2012-03-15 20:07                             ` Christian Lamparter
2012-03-15 20:12                               ` Stephen Boyd
2012-03-15 22:31                                 ` Rafael J. Wysocki
2012-03-16  1:39                                   ` Stephen Boyd
2012-03-16 20:19                                     ` Rafael J. Wysocki
2012-03-16 20:26                                       ` Stephen Boyd
2012-03-16 21:45                                         ` Rafael J. Wysocki
2012-03-16 22:18                                           ` Christian Lamparter
2012-03-16 22:35                                             ` Rafael J. Wysocki
2012-03-17  2:47                           ` [PATCH] firmware loader: don't cancel _nowait requests when helper is not yet available Stephen Boyd
2012-03-17  5:51                             ` Linus Torvalds
2012-03-17 20:06                               ` Rafael J. Wysocki
2012-03-18  8:26                               ` Stephen Boyd
2012-03-18 12:01                                 ` Rafael J. Wysocki
2012-03-19  6:32                                   ` Stephen Boyd
2012-03-19 11:24                                     ` Rafael J. Wysocki
2012-03-19 23:00                                       ` Rafael J. Wysocki
2012-03-25 22:00                                         ` [PATCH 0/6] firmware_class: Fix problems with usermodehelper test Rafael J. Wysocki
2012-03-25 22:01                                           ` [PATCH 1/6] firmware_class: Rework usermodehelper check Rafael J. Wysocki
2012-03-25 22:01                                           ` [PATCH 2/6] firmware_class: Split _request_firmware() into three functions Rafael J. Wysocki
2012-03-26 18:15                                             ` Stephen Boyd
2012-03-26 18:21                                               ` Stephen Boyd
2012-03-26 20:12                                                 ` Rafael J. Wysocki
2012-03-26 20:31                                                   ` Stephen Boyd
2012-03-26 20:36                                               ` Rafael J. Wysocki
2012-03-27 21:35                                                 ` Stephen Boyd
2012-03-27 21:51                                                   ` Rafael J. Wysocki
2012-03-25 22:02                                           ` [PATCH 3/6] firmware_class: Do not warn that system is not ready from async loads Rafael J. Wysocki
2012-03-25 22:03                                           ` [PATCH 4/6] PM / Hibernate: Disable usermode helpers right before freezing tasks Rafael J. Wysocki
2012-03-25 22:03                                           ` [PATCH 5/6] PM / Sleep: Move disabling of usermode helpers to the freezer Rafael J. Wysocki
2012-03-25 22:04                                           ` [PATCH 6/6] PM / Sleep: Mitigate race between the freezer and request_firmware() Rafael J. Wysocki
2012-03-26 18:16                                             ` Stephen Boyd
2012-03-26 20:06                                               ` Rafael J. Wysocki
2012-03-27 21:25                                                 ` Stephen Boyd
2012-03-27 21:37                                                   ` Rafael J. Wysocki
2012-03-26 18:42                                           ` [PATCH 0/6] firmware_class: Fix problems with usermodehelper test Greg KH
2012-03-26 20:37                                             ` Rafael J. Wysocki
2012-03-27 21:28                                           ` [PATCH 1/2] firmware_class: Reorganize fw_create_instance() Stephen Boyd
2012-03-27 21:47                                             ` Rafael J. Wysocki
2012-03-27 21:49                                               ` Greg KH
2012-03-27 21:56                                                 ` Rafael J. Wysocki
2012-03-27 21:28                                           ` [PATCH 2/2] firmware_class: Move request_firmware_nowait() to workqueues Stephen Boyd
2012-03-27 21:49                                             ` Rafael J. Wysocki
2012-03-27 22:01                                             ` Tejun Heo
2012-03-27 22:21                                               ` Rafael J. Wysocki
2012-03-27 22:48                                                 ` Tejun Heo
2012-03-27 22:55                                                   ` Rafael J. Wysocki
2012-03-27 23:02                                                     ` Stephen Boyd
2012-03-27 23:05                                                     ` Stephen Boyd
2012-03-28 21:19                                           ` [PATCH v2 0/8] firmware_class: Fix problems with usermodehelper test Rafael J. Wysocki
2012-03-28 21:20                                             ` [PATCH v2 1/8] firmware_class: Rework usermodehelper check Rafael J. Wysocki
2012-03-28 21:21                                             ` [PATCH v2 2/8] firmware_class: Split _request_firmware() into three functions, v2 Rafael J. Wysocki
2012-03-28 21:22                                             ` [PATCH v3 3/8] firmware_class: Do not warn that system is not ready from async loads Rafael J. Wysocki
2012-03-28 21:23                                             ` [PATCH v2 4/8] PM / Hibernate: Disable usermode helpers right before freezing tasks Rafael J. Wysocki
2012-03-28 21:23                                             ` [PATCH v2 5/8] PM / Sleep: Move disabling of usermode helpers to the freezer Rafael J. Wysocki
2012-03-28 21:24                                             ` [PATCH v2 6/8] PM / Sleep: Mitigate race between the freezer and request_firmware() Rafael J. Wysocki
2012-03-28 21:25                                             ` [PATCH v2 7/8] firmware_class: Reorganize fw_create_instance() Rafael J. Wysocki
2012-03-28 21:26                                             ` [PATCH v2 8/8] firmware_class: Move request_firmware_nowait() to workqueues Rafael J. Wysocki
2012-03-14 23:19                 ` [PATCH] firmware loader: don't cancel _nowait requests when helper is not yet available Rafael J. Wysocki
2012-03-13 19:42         ` Rafael J. Wysocki
2012-03-13 23:25           ` Kay Sievers
2012-03-14  0:10             ` Rafael J. Wysocki
2012-03-14  0:14               ` Kay Sievers
2012-03-14  0:54                 ` Linus Torvalds
2012-03-14  1:43                   ` Kay Sievers
2012-03-14  1:51                     ` Linus Torvalds
2012-03-14  1:55                       ` Kay Sievers
2012-03-14  2:00                         ` Kay Sievers
2012-03-14  2:21                         ` Linus Torvalds
2012-03-14 15:07               ` Srivatsa S. Bhat
2012-03-14 22:54                 ` Rafael J. Wysocki
2012-03-16  7:14                   ` Srivatsa S. Bhat
2012-03-16 20:23                     ` Rafael J. Wysocki
2012-03-16 21:14                       ` Christian Lamparter
2012-03-16 21:19                         ` Linus Torvalds
2012-03-19  7:06                         ` Srivatsa S. Bhat
2012-03-16 22:19   ` [RFC] firmware loader: retry _nowait requests when userhelper " Rafael J. Wysocki
2012-03-16 22:25     ` Christian Lamparter
2012-03-16 22:57       ` Rafael J. Wysocki
2012-03-16 23:35         ` Christian Lamparter [this message]
2012-03-16 23:37         ` Linus Torvalds
2012-03-17  0:23           ` Rafael J. Wysocki
2012-03-17  0:33             ` Linus Torvalds
2012-03-18  0:29               ` Rafael J. Wysocki
2012-03-18  2:21                 ` Linus Torvalds
2012-03-18 12:21                   ` Rafael J. Wysocki
2012-03-18 12:43                 ` Christian Lamparter
2012-03-18 23:15                   ` [PATCH 0/3] firmware_class: Fix problem with async requests (was: Re: [RFC] firmware loader: retry ...) Rafael J. Wysocki
2012-03-18 23:17                     ` [PATCH 1/3] firmware_class: Rework usermodehelper check Rafael J. Wysocki
2012-03-18 23:18                     ` [PATCH 2/3] firmware_class: Split _request_firmware() into three functions Rafael J. Wysocki
2012-03-18 23:21                     ` [PATCH 3/3] firmware_class: Do not warn that system is not ready for async loads Rafael J. Wysocki
2012-03-19 12:41           ` [RFC] firmware loader: retry _nowait requests when userhelper is not yet available James Courtier-Dutton

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=201203170035.47756.chunkeey@googlemail.com \
    --to=chunkeey@googlemail.com \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=rjw@sisk.pl \
    --cc=srivatsa.bhat@linux.vnet.ibm.com \
    --cc=torvalds@linux-foundation.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.