--- /dev/null
+From 55fabefe3695241e6ccfa0cd4974f3fa497693dc Mon Sep 17 00:00:00 2001
+From: Thomas Pedersen <thomas@cozybit.com>
+Date: Fri, 5 Oct 2012 17:57:39 -0700
+Subject: mac80211: call drv_get_tsf() in sleepable context
+
+From: Thomas Pedersen <thomas@cozybit.com>
+
+commit 55fabefe3695241e6ccfa0cd4974f3fa497693dc upstream.
+
+The call to drv_get/set_tsf() was put on the workqueue to perform tsf
+adjustments since that function might sleep. However it ended up inside
+a spinlock, whose critical section must be atomic. Do tsf adjustment
+outside the spinlock instead, and get rid of a warning.
+
+Signed-off-by: Thomas Pedersen <thomas@cozybit.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ net/mac80211/mesh_sync.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+--- a/net/mac80211/mesh_sync.c
++++ b/net/mac80211/mesh_sync.c
+@@ -56,7 +56,6 @@ void mesh_sync_adjust_tbtt(struct ieee80
+ u64 tsfdelta;
+
+ spin_lock_bh(&ifmsh->sync_offset_lock);
+-
+ if (ifmsh->sync_offset_clockdrift_max < beacon_int_fraction) {
+ msync_dbg(sdata, "TBTT : max clockdrift=%lld; adjusting\n",
+ (long long) ifmsh->sync_offset_clockdrift_max);
+@@ -69,11 +68,11 @@ void mesh_sync_adjust_tbtt(struct ieee80
+ tsfdelta = -beacon_int_fraction;
+ ifmsh->sync_offset_clockdrift_max -= beacon_int_fraction;
+ }
++ spin_unlock_bh(&ifmsh->sync_offset_lock);
+
+ tsf = drv_get_tsf(local, sdata);
+ if (tsf != -1ULL)
+ drv_set_tsf(local, sdata, tsf + tsfdelta);
+- spin_unlock_bh(&ifmsh->sync_offset_lock);
+ }
+
+ static void mesh_sync_offset_rx_bcn_presp(struct ieee80211_sub_if_data *sdata,