aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorRafael J. Wysocki <rjw@sisk.pl>2012-03-28 17:30:02 -0400
committerRafael J. Wysocki <rjw@sisk.pl>2012-03-28 17:30:02 -0400
commit9b78c1da60b3c62ccdd1509f0902ad19ceaf776b (patch)
tree1e662bb29f04c2b875207d907db917476ddce60b /include
parent811fa4004485dec8977176bf605a5b0508ee206c (diff)
firmware_class: Do not warn that system is not ready from async loads
If firmware is requested asynchronously, by calling request_firmware_nowait(), there is no reason to fail the request (and warn the user) when the system is (presumably temporarily) unready to handle it (because user space is not available yet or frozen). For this reason, introduce an alternative routine for read-locking umhelper_sem, usermodehelper_read_lock_wait(), that will wait for usermodehelper_disabled to be unset (possibly with a timeout) and make request_firmware_work_func() use it instead of usermodehelper_read_trylock(). Accordingly, modify request_firmware() so that it uses usermodehelper_read_trylock() to acquire umhelper_sem and remove the code related to that lock from _request_firmware(). Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: stable@vger.kernel.org
Diffstat (limited to 'include')
-rw-r--r--include/linux/kmod.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/include/linux/kmod.h b/include/linux/kmod.h
index 97d22c3e08b1..b087377ae2c4 100644
--- a/include/linux/kmod.h
+++ b/include/linux/kmod.h
@@ -115,6 +115,7 @@ extern void usermodehelper_init(void);
115extern int usermodehelper_disable(void); 115extern int usermodehelper_disable(void);
116extern void usermodehelper_enable(void); 116extern void usermodehelper_enable(void);
117extern int usermodehelper_read_trylock(void); 117extern int usermodehelper_read_trylock(void);
118extern long usermodehelper_read_lock_wait(long timeout);
118extern void usermodehelper_read_unlock(void); 119extern void usermodehelper_read_unlock(void);
119 120
120#endif /* __LINUX_KMOD_H__ */ 121#endif /* __LINUX_KMOD_H__ */