cfg80211: Process all pending regulatory requests/hints
authorBen <ben.rosenfeld@intel.com>
Thu, 12 Mar 2015 13:37:34 +0000 (09:37 -0400)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 17 Mar 2015 10:02:42 +0000 (11:02 +0100)
It is possible that there are several regulatory requests
pending, but the processing of the last one does not call
CRDA, and thus the other requests are not handled.

Fix this by rescheduling the work until all requests have
been processed.

Signed-off-by: Ben Rosenfeld <ben.rosenfeld@intel.com>
Signed-off-by: Ilan Peer <ilan.peer@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/wireless/reg.c

index d8671036c264ff287f1f0a8a12e6ecf577c7143d..8c6cf52b9f1d92ab62f44961ad47372b38715abb 100644 (file)
@@ -2159,6 +2159,13 @@ static void reg_process_pending_hints(void)
        }
 
        reg_process_hint(reg_request);
+
+       lr = get_last_request();
+
+       spin_lock(&reg_requests_lock);
+       if (!list_empty(&reg_requests_list) && lr && lr->processed)
+               schedule_work(&reg_work);
+       spin_unlock(&reg_requests_lock);
 }
 
 /* Processes beacon hints -- this has nothing to do with country IEs */