Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 298604
b: refs/heads/master
c: fe2e39d
h: refs/heads/master
v: v3
  • Loading branch information
Rafael J. Wysocki committed Mar 28, 2012
1 parent 956e85e commit 320c2d0
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 23 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 9a4768d849d28a79566aa37de19b9852d2da8ec4
refs/heads/master: fe2e39d8782d885755139304d8dba0b3e5bfa878
11 changes: 5 additions & 6 deletions trunk/drivers/base/firmware_class.c
Original file line number Diff line number Diff line change
Expand Up @@ -533,12 +533,10 @@ static int _request_firmware(const struct firmware **firmware_p,
return 0;
}

read_lock_usermodehelper();

if (WARN_ON(usermodehelper_is_disabled())) {
retval = usermodehelper_read_trylock();
if (WARN_ON(retval)) {
dev_err(device, "firmware: %s will not be loaded\n", name);
retval = -EBUSY;
goto out;
goto out_nolock;
}

if (uevent)
Expand Down Expand Up @@ -573,8 +571,9 @@ static int _request_firmware(const struct firmware **firmware_p,
fw_destroy_instance(fw_priv);

out:
read_unlock_usermodehelper();
usermodehelper_read_unlock();

out_nolock:
if (retval) {
release_firmware(firmware);
*firmware_p = NULL;
Expand Down
5 changes: 2 additions & 3 deletions trunk/include/linux/kmod.h
Original file line number Diff line number Diff line change
Expand Up @@ -114,8 +114,7 @@ extern void usermodehelper_init(void);

extern int usermodehelper_disable(void);
extern void usermodehelper_enable(void);
extern bool usermodehelper_is_disabled(void);
extern void read_lock_usermodehelper(void);
extern void read_unlock_usermodehelper(void);
extern int usermodehelper_read_trylock(void);
extern void usermodehelper_read_unlock(void);

#endif /* __LINUX_KMOD_H__ */
24 changes: 11 additions & 13 deletions trunk/kernel/kmod.c
Original file line number Diff line number Diff line change
Expand Up @@ -339,17 +339,24 @@ static DECLARE_WAIT_QUEUE_HEAD(running_helpers_waitq);
*/
#define RUNNING_HELPERS_TIMEOUT (5 * HZ)

void read_lock_usermodehelper(void)
int usermodehelper_read_trylock(void)
{
int ret = 0;

down_read(&umhelper_sem);
if (usermodehelper_disabled) {
up_read(&umhelper_sem);
ret = -EAGAIN;
}
return ret;
}
EXPORT_SYMBOL_GPL(read_lock_usermodehelper);
EXPORT_SYMBOL_GPL(usermodehelper_read_trylock);

void read_unlock_usermodehelper(void)
void usermodehelper_read_unlock(void)
{
up_read(&umhelper_sem);
}
EXPORT_SYMBOL_GPL(read_unlock_usermodehelper);
EXPORT_SYMBOL_GPL(usermodehelper_read_unlock);

/**
* usermodehelper_disable - prevent new helpers from being started
Expand Down Expand Up @@ -390,15 +397,6 @@ void usermodehelper_enable(void)
up_write(&umhelper_sem);
}

/**
* usermodehelper_is_disabled - check if new helpers are allowed to be started
*/
bool usermodehelper_is_disabled(void)
{
return usermodehelper_disabled;
}
EXPORT_SYMBOL_GPL(usermodehelper_is_disabled);

static void helper_lock(void)
{
atomic_inc(&running_helpers);
Expand Down

0 comments on commit 320c2d0

Please sign in to comment.