lkml.org 
[lkml]   [2011]   [May]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [RFC][PATCH] PM: Print a warning if firmware is requested when tasks are frozen
    On Tue, May 03, 2011 at 12:44:51AM +0200, Rafael J. Wysocki wrote:
    > From: Rafael J. Wysocki <rjw@sisk.pl>
    >
    > Some drivers erroneously use request_firmware() from their ->resume()
    > (or ->thaw(), or ->restore()) callbacks, which is not going to work
    > unless the firmware has been built in. This causes system resume to
    > stall until the firmware-loading timeout expires, which makes users
    > think that the resume has failed and reboot their machines
    > unnecessarily. For this reason, make _request_firmware() print a
    > warning when it has been called when tasks are frozen and it's
    > impossible to start any new usermode helpers.
    >
    > Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
    > ---
    > drivers/base/firmware_class.c | 3 +++
    > include/linux/kmod.h | 1 +
    > kernel/kmod.c | 8 ++++++++
    > 3 files changed, 12 insertions(+)
    >
    > Index: linux-2.6/include/linux/kmod.h
    > ===================================================================
    > --- linux-2.6.orig/include/linux/kmod.h
    > +++ linux-2.6/include/linux/kmod.h
    > @@ -113,5 +113,6 @@ extern void usermodehelper_init(void);
    >
    > extern int usermodehelper_disable(void);
    > extern void usermodehelper_enable(void);
    > +extern bool usermodehelper_is_disabled(void);
    >
    > #endif /* __LINUX_KMOD_H__ */
    > Index: linux-2.6/kernel/kmod.c
    > ===================================================================
    > --- linux-2.6.orig/kernel/kmod.c
    > +++ linux-2.6/kernel/kmod.c
    > @@ -301,6 +301,14 @@ void usermodehelper_enable(void)
    > usermodehelper_disabled = 0;
    > }
    >
    > +/**
    > + * usermodehelper_is_disabled - check if new helpers are allowed to be started
    > + */
    > +bool usermodehelper_is_disabled(void)
    > +{
    > + return usermodehelper_disabled;
    > +}
    > +
    > static void helper_lock(void)
    > {
    > atomic_inc(&running_helpers);
    > Index: linux-2.6/drivers/base/firmware_class.c
    > ===================================================================
    > --- linux-2.6.orig/drivers/base/firmware_class.c
    > +++ linux-2.6/drivers/base/firmware_class.c
    > @@ -521,6 +521,9 @@ static int _request_firmware(const struc
    > if (!firmware_p)
    > return -EINVAL;
    >
    > + if (WARN_ON(usermodehelper_is_disabled()))
    > + return -EBUSY;

    But you can safely call this function with nowait set, and this warning
    should not be triggered, right?

    thanks,

    greg k-h


    \
     
     \ /
      Last update: 2011-05-03 01:17    [W:0.022 / U:0.400 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site