提交 bcf4f99b 编写于 作者: L Luis R. Rodriguez 提交者: John W. Linville

cfg80211: propagate -ENOMEM during regulatory_init()

Calling kobject_uevent_env() can fail mainly due to out of
memory conditions. We do not want to continue during such
conditions so propagate that as well instead of letting
cfg80211 load as if everything is peachy.

Additionally lets clarify that when CRDA is not called during
cfg80211's initialization _and_ if the error is not an -ENOMEM
its because kobject_uevent_env() failed to call CRDA, not because
CRDA failed. For those who want to find out why we also let you
do so by enabling the kernel config CONFIG_CFG80211_REG_DEBUG --
you'll get an actual stack trace.

So for now we'll treat non -ENOMEM kobject_uevent_env() failures as
non fatal during cfg80211's initialization.

CC: Greg KH <greg@kroah.com>
Signed-off-by: NLuis R. Rodriguez <lrodriguez@atheros.com>
Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
上级 ba25c141
...@@ -1616,7 +1616,7 @@ void reg_device_remove(struct wiphy *wiphy) ...@@ -1616,7 +1616,7 @@ void reg_device_remove(struct wiphy *wiphy)
int regulatory_init(void) int regulatory_init(void)
{ {
int err; int err = 0;
reg_pdev = platform_device_register_simple("regulatory", 0, NULL, 0); reg_pdev = platform_device_register_simple("regulatory", 0, NULL, 0);
if (IS_ERR(reg_pdev)) if (IS_ERR(reg_pdev))
...@@ -1637,12 +1637,24 @@ int regulatory_init(void) ...@@ -1637,12 +1637,24 @@ int regulatory_init(void)
cfg80211_regdomain = cfg80211_world_regdom; cfg80211_regdomain = cfg80211_world_regdom;
err = regulatory_hint_core("00"); err = regulatory_hint_core("00");
#endif
if (err) { if (err) {
printk(KERN_ERR "cfg80211: calling CRDA failed - " if (err == -ENOMEM)
"unable to update world regulatory domain, " return err;
"using static definition\n"); /*
} * N.B. kobject_uevent_env() can fail mainly for when we're out
* memory which is handled and propagated appropriately above
* but it can also fail during a netlink_broadcast() or during
* early boot for call_usermodehelper(). For now treat these
* errors as non-fatal.
*/
printk(KERN_ERR "cfg80211: kobject_uevent_env() was unable "
"to call CRDA during init");
#ifdef CONFIG_CFG80211_REG_DEBUG
/* We want to find out exactly why when debugging */
WARN_ON(err);
#endif #endif
}
return 0; return 0;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册