Commit 255e25b0 authored by Luis R. Rodriguez's avatar Luis R. Rodriguez Committed by Johannes Berg

cfg80211: allow reprocessing of pending requests

In certain situations we want to trigger reprocessing
of the last regulatory hint. One situation in which
this makes sense is the case where the cfg80211 was
built-in to the kernel, CFG80211_INTERNAL_REGDB was not
enabled and the CRDA binary is on a partition not availble
during early boot. In such a case we want to be able to
re-process the same request at some other point.

When we are asked to re-process the same request we need
to be careful to not kfree it, addresses that.
Reported-by: default avatarSander Eikelenboom <linux@eikelenboom.it>
Signed-off-by: default avatarLuis R. Rodriguez <mcgrof@do-not-panic.com>
[rename function]
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent b8ff416b
...@@ -240,19 +240,21 @@ static char user_alpha2[2]; ...@@ -240,19 +240,21 @@ static char user_alpha2[2];
module_param(ieee80211_regdom, charp, 0444); module_param(ieee80211_regdom, charp, 0444);
MODULE_PARM_DESC(ieee80211_regdom, "IEEE 802.11 regulatory domain code"); MODULE_PARM_DESC(ieee80211_regdom, "IEEE 802.11 regulatory domain code");
static void reg_kfree_last_request(void) static void reg_free_request(struct regulatory_request *lr)
{ {
struct regulatory_request *lr;
lr = get_last_request();
if (lr != &core_request_world && lr) if (lr != &core_request_world && lr)
kfree_rcu(lr, rcu_head); kfree_rcu(lr, rcu_head);
} }
static void reg_update_last_request(struct regulatory_request *request) static void reg_update_last_request(struct regulatory_request *request)
{ {
reg_kfree_last_request(); struct regulatory_request *lr;
lr = get_last_request();
if (lr == request)
return;
reg_free_request(lr);
rcu_assign_pointer(last_request, request); rcu_assign_pointer(last_request, request);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment