All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: Stephen Boyd <sboyd@codeaurora.org>
Cc: Saravana Kannan <skannan@codeaurora.org>,
	Kay Sievers <kay.sievers@vrfy.org>,
	Greg KH <gregkh@linuxfoundation.org>,
	Christian Lamparter <chunkeey@googlemail.com>,
	linux-kernel@vger.kernel.org,
	"Srivatsa S. Bhat" <srivatsa.bhat@linux.vnet.ibm.com>,
	alan@lxorguk.ukuu.org.uk,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Linux PM mailing list <linux-pm@vger.kernel.org>
Subject: Re: [PATCH] firmware loader: don't cancel _nowait requests when helper is not yet available
Date: Thu, 15 Mar 2012 00:34:08 +0100	[thread overview]
Message-ID: <201203150034.08863.rjw@sisk.pl> (raw)
In-Reply-To: <4F612706.4060407@codeaurora.org>

On Thursday, March 15, 2012, Stephen Boyd wrote:
> On 03/14/12 16:13, Rafael J. Wysocki wrote:
> > On Thursday, March 15, 2012, Rafael J. Wysocki wrote:
> >> On Wednesday, March 14, 2012, Stephen Boyd wrote:
> >>> On 03/13/12 13:14, Rafael J. Wysocki wrote:
> >>>> All of those use cases are in fact of the "wait for user space to be thawed
> >>>> and then load the firmware" type, which I believe may be handled without
> >>>> changing that code.
> >>>>
> >>>> Why don't you make your kthread freezable, for one example?
> >>>>
> >>>> Why don't you use a freezable workqueue instead?
> >>>>
> >>> If we put it on the freezable workqueue or make it a freezable thread
> >>> will it work?
> >> That depends on what exactly you want to achieve, which isn't entirely clear
> >> to me at this point.
> >>
> >>> In my scenario a wakeup interrupt comes in that wakes us up from
> >>> suspend. Within that wakeup handler a work item is scheduled to the
> >>> freezable workqueue. That work item then calls request_firmware().
> >> That should work.
> >>
> >>> It looks like we call schedule() after thawing the workqueues and tasks
> >>> so the work item could run before usermodehelpers are enabled and then
> >>> request_firmware() would fail. Do we need something like this (ignore
> >>> the fact that we call usermodhelper_enable() twice)?
> >>>
> >>> diff --git a/kernel/power/process.c b/kernel/power/process.c
> >>> index 7e42645..61bfa95 100644
> >>> --- a/kernel/power/process.c
> >>> +++ b/kernel/power/process.c
> >>> @@ -187,6 +187,7 @@ void thaw_processes(void)
> >>>         } while_each_thread(g, p);
> >>>         read_unlock(&tasklist_lock);
> >>>  
> >>> +       usermodehelper_enable();
> >> That would be a reasonable change.
> >>
> >>>         schedule();
> >>>         printk("done.\n");
> >>>  }
> >>>
> >>>
> >>> Is there a reason we disable usermodehelpers if
> >>> CONFIG_SUSPEND_FREEZER=n?
> >> Not really, but CONFIG_SUSPEND_FREEZER=n can only work reliably in a
> >> very limited set of cases, so I don't think it's even worth making the
> >> general code depend on it.
> >>
> >> I'd actually prefer to remove CONFIG_SUSPEND_FREEZER altogether,
> >> because it's not very useful nowadays (probably isn't useful at all).
> >>
> >>> Should we do this instead so that
> >>> usermodehelpers are only disabled if we freeze userspace? Also what is
> >>> that schedule() call in thaw_kernel_threads() for? It looks like we'll
> >>> call schedule between kernel thread thawing and userspace thawing.
> >> Which is OK, I think.
> > Moreover, thaw_kernel_threads() is _only_ called by (a) freeze_kernel_threads()
> > on error and (b) user-space hibernate interface in kernel/power/user.c
> > (and please read the comment in there describing what it's there for, which
> > also explains why the schedule() call in there is necessary).
> 
> Exactly. So in case (a) when the error occurs we'll have this call flow:
> 
> usermodehelpers_disable()
> suspend_freeze_processes()
>     freeze_processes()
>     freeze_kernel_threads()
>         try_to_freeze_tasks() <-- returns error
>         thaw_kernel_threads()
>             schedule()
>     thaw_processes()
> usermodehelpers_enable()
> 
> Shouldn't we schedule only after we thaw all processes (not just tasks)?
> Otherwise we may run a kernel thread before userspace is thawed?

Yes, we may, but that isn't wrong, is it?

Only a few kernel threads are freezable, so definitely kernel threads
can run while user space is frozen.

Thanks,
Rafael

  reply	other threads:[~2012-03-14 23:30 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 [this message]
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
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=201203150034.08863.rjw@sisk.pl \
    --to=rjw@sisk.pl \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=chunkeey@googlemail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=kay.sievers@vrfy.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=sboyd@codeaurora.org \
    --cc=skannan@codeaurora.org \
    --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.