Message ID | 1420112563-3981-1-git-send-email-arik@wizery.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Johannes Berg |
Headers | show |
On Thu, 2015-01-01 at 13:42 +0200, Arik Nemtsov wrote: > A self-managed device will sometimes need to set its regdomain synchronously. > Notably it should be set before usermode has a chance to query it. Expose > a new API to accomplish this which requires the RTNL. > + ret = regulatory_set_wiphy_regd(wiphy, rd); > + if (ret) > + return ret; It seems to me you should refactor that and avoid scheduling the work struct when you're going to run the necessary work below by hand. johannes -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Tue, Jan 6, 2015 at 12:54 PM, Johannes Berg <johannes@sipsolutions.net> wrote: > On Thu, 2015-01-01 at 13:42 +0200, Arik Nemtsov wrote: >> A self-managed device will sometimes need to set its regdomain synchronously. >> Notably it should be set before usermode has a chance to query it. Expose >> a new API to accomplish this which requires the RTNL. > >> + ret = regulatory_set_wiphy_regd(wiphy, rd); >> + if (ret) >> + return ret; > > It seems to me you should refactor that and avoid scheduling the work > struct when you're going to run the necessary work below by hand. Sounds good. Arik -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index bd672ea..cb0bba2 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h @@ -3827,6 +3827,20 @@ int regulatory_set_wiphy_regd(struct wiphy *wiphy, struct ieee80211_regdomain *rd); /** + * regulatory_set_wiphy_regd_sync_rtnl - set regdom for self-managed drivers + * @wiphy: the wireless device we want to process the regulatory domain on + * @rd: the regulatory domain information to use for this wiphy + * + * This functions requires the RTNL to be held and applies the new regdomain + * synchronously to this wiphy. For more details see + * regulatory_set_wiphy_regd(). + * + * Return: 0 on success. -EINVAL, -EPERM + */ +int regulatory_set_wiphy_regd_sync_rtnl(struct wiphy *wiphy, + struct ieee80211_regdomain *rd); + +/** * wiphy_apply_custom_regulatory - apply a custom driver regulatory domain * @wiphy: the wireless device we want to process the regulatory domain on * @regd: the custom regulatory domain to use for this wiphy diff --git a/net/wireless/reg.c b/net/wireless/reg.c index 9a5411c..9b5662f 100644 --- a/net/wireless/reg.c +++ b/net/wireless/reg.c @@ -2928,6 +2928,23 @@ int regulatory_set_wiphy_regd(struct wiphy *wiphy, } EXPORT_SYMBOL(regulatory_set_wiphy_regd); +int regulatory_set_wiphy_regd_sync_rtnl(struct wiphy *wiphy, + struct ieee80211_regdomain *rd) +{ + int ret; + + ASSERT_RTNL(); + + ret = regulatory_set_wiphy_regd(wiphy, rd); + if (ret) + return ret; + + /* process the request immediately */ + reg_process_self_managed_hints(); + return 0; +} +EXPORT_SYMBOL(regulatory_set_wiphy_regd_sync_rtnl); + void wiphy_regulatory_register(struct wiphy *wiphy) { struct regulatory_request *lr;