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: Sander Eikelenboom <linux@eikelenboom.it> Signed-off-by: Luis R. Rodriguez <mcgrof@do-not-panic.com> [rename function] Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
b8ff416bc9
commit
255e25b0e5
1 changed files with 8 additions and 6 deletions
|
@ -240,19 +240,21 @@ static char user_alpha2[2];
|
|||
module_param(ieee80211_regdom, charp, 0444);
|
||||
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)
|
||||
kfree_rcu(lr, rcu_head);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue