+--- a/net/wireless/reg.c
++++ b/net/wireless/reg.c
+@@ -107,9 +107,6 @@ struct reg_beacon {
+ static void reg_todo(struct work_struct *work);
+ static DECLARE_WORK(reg_work, reg_todo);
+
+-static void reg_timeout_work(struct work_struct *work);
+-static DECLARE_DELAYED_WORK(reg_timeout, reg_timeout_work);
+-
+ /* We keep a static world regulatory domain in case of the absence of CRDA */
+ static const struct ieee80211_regdomain world_regdom = {
+ .n_reg_rules = 5,
+@@ -1334,9 +1331,6 @@ static void reg_set_request_processed(vo
+ need_more_processing = true;
+ spin_unlock(®_requests_lock);
+
+- if (last_request->initiator == NL80211_REGDOM_SET_BY_USER)
+- cancel_delayed_work_sync(®_timeout);
+-
+ if (need_more_processing)
+ schedule_work(®_work);
+ }
+@@ -1447,17 +1441,8 @@ static void reg_process_hint(struct regu
+ r = __regulatory_hint(wiphy, reg_request);
+ /* This is required so that the orig_* parameters are saved */
+ if (r == -EALREADY && wiphy &&
+- wiphy->flags & WIPHY_FLAG_STRICT_REGULATORY) {
++ wiphy->flags & WIPHY_FLAG_STRICT_REGULATORY)
+ wiphy_update_regulatory(wiphy, initiator);
+- return;
+- }
+-
+- /*
+- * We only time out user hints, given that they should be the only
+- * source of bogus requests.
+- */
+- if (reg_request->initiator == NL80211_REGDOM_SET_BY_USER)
+- schedule_delayed_work(®_timeout, msecs_to_jiffies(3142));
+ }
+
+ /*
+@@ -2185,13 +2170,6 @@ out:
+ mutex_unlock(®_mutex);
+ }
+
+-static void reg_timeout_work(struct work_struct *work)
+-{
+- REG_DBG_PRINT("Timeout while waiting for CRDA to reply, "
+- "restoring regulatory settings");
+- restore_regulatory_settings(true);
+-}
+-
+ int __init regulatory_init(void)
+ {
+ int err = 0;
+@@ -2245,7 +2223,6 @@ void /* __init_or_exit */ regulatory_exi
+ struct reg_beacon *reg_beacon, *btmp;
+
+ cancel_work_sync(®_work);
+- cancel_delayed_work_sync(®_timeout);
+
+ mutex_lock(&cfg80211_mutex);
+ mutex_lock(®_mutex);